diff --git a/.gitignore b/.gitignore
index f6f295c..a2bee49 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,9 @@ email_password.txt
__pycache__
glove.twitter.27B.*
numberbatch-en-17.04b.*
+bae_docker.sh
+password.txt
docker-command-smile.sh
docker-command-bae.sh
-test_orca
\ No newline at end of file
+test_orca
+checkpoint-17315-epoch-5
\ No newline at end of file
diff --git a/batch/batch_classification_predict.py b/batch/batch_classification_predict.py
deleted file mode 100644
index bf0df20..0000000
--- a/batch/batch_classification_predict.py
+++ /dev/null
@@ -1,159 +0,0 @@
-import csv
-import os
-from os.path import join, dirname
-import pickle
-import numpy as np
-from plotly.offline import plot
-import plotly.graph_objs as go
-from collections import Counter
-import json
-import writeToS3 as s3
-import argparse
-import deleteDir as d
-import notification as n
-
-class Classification:
-
- def __init__(self, awsPath, localSavePath, filename):
-
- self.localSavePath = localSavePath
- self.awsPath = awsPath
- self.filename = filename
-
- def predict(self):
-
- # load classification model
- pkl_model = os.path.join(self.localSavePath,'classification_pipeline.pickle')
- with open(pkl_model,'rb') as f:
- text_clf = pickle.load(f)
-
- # load text set
- data = []
- try:
- with open(self.localSavePath + 'UNLABELED_' + self.filename + '.csv','r',encoding='utf-8') as f:
- reader = list(csv.reader(f))
- for row in reader[1:]:
- try:
- data.extend(row)
- except Exception as e:
- pass
- except:
- with open(self.localSavePath + 'UNLABELED_' + self.filename + '.csv','r',encoding='ISO-8859-1') as f:
- reader = list(csv.reader(f))
- for row in reader[1:]:
- try:
- data.extend(row)
- except Exception as e:
- pass
-
- # predict using trained model
- self.predicted = text_clf.predict(data)
-
- # save result
- fname = 'PREDICTED_' + self.filename + '.csv'
- try:
- with open(self.localSavePath + fname,'w',newline="",encoding='utf-8') as f:
- writer = csv.writer(f)
- writer.writerow(['text','category'])
- for i in range(len(data)):
- try:
- writer.writerow([data[i],self.predicted[i]])
- except:
- pass
- except:
- with open(self.localSavePath + fname,'w',newline="",encoding='ISO-8859-1') as f:
- writer = csv.writer(f)
- writer.writerow(['text','category'])
- for i in range(len(data)):
- try:
- writer.writerow([data[i],self.predicted[i]])
- except:
- pass
- s3.upload(self.localSavePath, self.awsPath, fname)
- return s3.generate_downloads(self.awsPath, fname)
-
-
- def plot(self):
- y_pred_dict = Counter(self.predicted)
- labels = []
- values = []
- for i in y_pred_dict.keys():
- labels.append("class: " + str(i))
- values.append(y_pred_dict[i])
- trace = go.Pie(labels=labels, values = values, textinfo='label')
- div_comp = plot([trace], output_type='div',image='png',auto_open=False, image_filename='plot_img')
-
- fname_div_comp = 'div_comp.html'
- with open(self.localSavePath + fname_div_comp,"w") as f:
- f.write(div_comp)
- s3.upload(self.localSavePath, self.awsPath, fname_div_comp)
- return s3.generate_downloads(self.awsPath, fname_div_comp)
-
-
-
-if __name__ == '__main__':
-
- output = dict()
-
- parser = argparse.ArgumentParser(description="processing...")
- parser.add_argument('--remoteReadPath', required=True)
- parser.add_argument('--uuid',required=True)
- parser.add_argument('--s3FolderName',required=True)
- parser.add_argument('--email',required=True)
- args = parser.parse_args()
-
- uid = args.uuid
- awsPath = args.s3FolderName + '/ML/classification/' + uid +'/'
- localSavePath = '/tmp/' + args.s3FolderName + '/ML/classification/' + uid + '/'
- if not os.path.exists(localSavePath):
- os.makedirs(localSavePath)
- if not os.path.exists(localSavePath):
- os.makedirs(localSavePath)
-
- # download config to local folder
- fname_config = 'config.json'
- if s3.checkExist(awsPath, fname_config):
- s3.downloadToDisk(fname_config, localSavePath, awsPath)
- with open(localSavePath + fname_config, "r") as fp:
- data = json.load(fp)
- for key in vars(args).keys():
- if key not in data.keys():
- data[key] = vars(args)[key]
- with open(localSavePath + fname_config,"w") as f:
- json.dump(data,f)
- s3.upload(localSavePath, awsPath, fname_config)
- output['config'] = s3.generate_downloads(awsPath, fname_config)
- output['uuid'] = uid
-
- else:
- raise ValueError('This session ID is invalid!')
- exit()
-
-
- # download unlabeled data to local folder
- filename = args.remoteReadPath.split('/')[-2]
- fname_unlabeled = 'UNLABELED_' + filename +'.csv'
- if s3.checkExist(awsPath, fname_unlabeled):
- s3.downloadToDisk(fname_unlabeled, localSavePath, awsPath)
- else:
- raise ValueError('You\'re requesting ' + fname_unlabeled + ' file, and it\'s not found in your remote directory!\
- It is likely that you have not yet performed step 1 -- split the dataset into training and predicting set, or you have provided the wrong sessionID.')
- exit()
-
- #download pickle model to local folder
- fname_pickle = 'classification_pipeline.pickle'
- if s3.checkExist(awsPath, fname_pickle):
- s3.downloadToDisk(fname_pickle, localSavePath, awsPath)
- else:
- raise ValueError('You\'re requesting ' + fname_pickle + ' file, and it\'s not found in your remote directory! \
- It is likely that you have not yet performed step 2 -- model training, or you have provided the wrong sessionID.')
- exit()
-
-
- classification = Classification(awsPath, localSavePath, filename)
- output['predict'] = classification.predict()
- output['div'] = classification.plot()
-
- d.deletedir('/tmp')
- n.notification(args.email,case=3,filename=awsPath)
-
diff --git a/batch/batch_classification_split.py b/batch/batch_classification_split.py
deleted file mode 100644
index e650405..0000000
--- a/batch/batch_classification_split.py
+++ /dev/null
@@ -1,177 +0,0 @@
-import csv
-import pandas
-import random
-import uuid
-import os
-from plotly.offline import plot
-import plotly.graph_objs as go
-from os.path import join, dirname
-import json
-import re
-import writeToS3 as s3
-import deleteDir as d
-import notification as n
-import argparse
-
-class Classification:
-
- def __init__(self,awsPath, localSavePath, localReadPath, remoteReadPath):
-
- self.localSavePath = localSavePath
- self.awsPath = awsPath
-
- # download remote socialmedia data into a temp folder
- # load it into csv
- filename = remoteReadPath.split('/')[-2] + '.csv'
- self.filename = filename # save it so split function can reuse this name
- s3.downloadToDisk(filename=filename,localpath=localReadPath, remotepath=remoteReadPath)
-
- Array = []
- try:
- with open(localReadPath + filename,'r',encoding='utf-8') as f:
- reader = csv.reader(f)
- for row in reader:
- try:
- Array.append(row)
- except Exception as e:
- pass
- except:
- with open(localReadPath + filename,'r',encoding='ISO-8859-1') as f:
- reader = csv.reader(f)
- for row in reader:
- try:
- Array.append(row)
- except Exception as e:
- pass
-
- df = pandas.DataFrame(Array[1:], columns=Array[0])
-
- # remoteReadPath always follows format of sessionID/folderID/datasetName/
- # example: local/GraphQL/twitter-Tweet/trump/ => ['local','GraphQL', 'twitter-Tweet','trump','']
- source = remoteReadPath.split('/')[2]
-
- if (source == 'twitter-Tweet') and ('text' in Array[0]):
- self.corpus = list(set(df[df['text']!='']['text'].dropna().astype('str').tolist()))
- elif (source == 'twitter-Stream') and ('_source.text' in Array[0]):
- self.corpus = list(set(df[df['_source.text']!='']['_source.text'].dropna().astype('str').tolist()))
-
- # find the unique content in crimson hexagon
- elif (source=='crimson-Hexagon') and ('contents' in Array[0]):
- self.corpus = list(set(df[df['contents'] != '']['contents'].dropna().astype('str').tolist()))
-
- # find the unique title in reddit posts
- elif (source=='reddit-Search' or source=='reddit-Post') and 'title' in Array[0]:
- self.corpus = list(set(df[df['title']!='']['title'].dropna().astype('str').tolist()))
- elif source =='reddit-Historical-Post' and '_source.title' in Array[0]:
- self.corpus = list(set(df[df['_source.title']!='']['_source.title'].dropna().astype('str').tolist()))
-
- # find the unique body in reddit comments
- elif (source == 'reddit-Comment' or source == 'reddit-Historical-Comment') and 'body' in Array[0]:
- self.corpus = list(set(df[df['body']!='']['body'].dropna().astype('str').tolist()))
-
- # TODO: switch reddit comment to elasticsearch endpoint
- # elif source == 'reddit-Historical-Comment' and '_source.body' in Array[0]:
- # self.corpus = list(set(df[df['_source.body']!='']['_source.body'].dropna().astype('str').tolist()))
-
- # strip http in the corpus
- self.corpus = [ re.sub(r"http\S+","",text) for text in self.corpus]
-
- def split(self,ratio):
- training_set = list(random.sample(self.corpus, int(len(self.corpus)*ratio/100)))
- testing_set = [item for item in self.corpus if item not in training_set]
-
- # plot a pie chart of the split
- labels = ['training set data points','unlabeled data points']
- values = [len(training_set), len(testing_set)]
- trace = go.Pie(labels=labels, values = values, textinfo='value')
- div_split = plot([trace], output_type='div',image='png',auto_open=False, image_filename='plot_img')
- fname_div_split = 'div_split.html'
- with open(self.localSavePath + fname_div_split,"w") as f:
- f.write(div_split)
- s3.upload(self.localSavePath, self.awsPath, fname_div_split)
- div_url = s3.generate_downloads(self.awsPath, fname_div_split)
-
- fname1 = 'TRAINING_' + self.filename
- try:
- with open(self.localSavePath + fname1,'w',newline="",encoding='utf-8') as f:
- writer = csv.writer(f)
- writer.writerow(['text','category'])
- for row in training_set:
- try:
- writer.writerow([row])
- except UnicodeDecodeError:
- pass
- except:
- with open(self.localSavePath + fname1,'w',newline="",encoding='ISO-8859-1') as f:
- writer = csv.writer(f)
- writer.writerow(['text','category'])
- for row in training_set:
- try:
- writer.writerow([row])
- except UnicodeDecodeError:
- pass
- s3.upload(self.localSavePath, self.awsPath, fname1)
- training_url = s3.generate_downloads(self.awsPath, fname1)
-
-
-
- fname2 = 'UNLABELED_' + self.filename
- try:
- with open(self.localSavePath + fname2,'w',newline="",encoding='utf-8') as f:
- writer = csv.writer(f)
- writer.writerow(['text'])
- for row in testing_set:
- try:
- writer.writerow([row])
- except UnicodeDecodeError:
- pass
- except:
- with open(self.localSavePath + fname2,'w',newline="",encoding='ISO-8859-1') as f:
- writer = csv.writer(f)
- writer.writerow(['text'])
- for row in testing_set:
- try:
- writer.writerow([row])
- except UnicodeDecodeError:
- pass
- s3.upload(self.localSavePath, self.awsPath, fname2)
- unlabeled_url = s3.generate_downloads(self.awsPath, fname2)
-
-
- return {'div': div_url, 'training':training_url, 'testing': unlabeled_url}
-
-
-if __name__ == '__main__':
-
- output = dict()
-
- parser = argparse.ArgumentParser(description="processing...")
- parser.add_argument('--remoteReadPath', required=True)
- parser.add_argument('--ratio',required=True)
- parser.add_argument('--s3FolderName',required=True)
- parser.add_argument('--email',required=True)
- args = parser.parse_args()
-
- # arranging the paths
- uid = str(uuid.uuid4())
- awsPath = args.s3FolderName + '/ML/classification/' + uid +'/'
- localSavePath = '/tmp/' + args.s3FolderName + '/ML/classification/' + uid + '/'
- localReadPath = '/tmp/' + args.s3FolderName + '/' + uid + '/'
- if not os.path.exists(localSavePath):
- os.makedirs(localSavePath)
- if not os.path.exists(localReadPath):
- os.makedirs(localReadPath)
-
- fname = 'config.json'
- with open(localSavePath + fname,"w") as f:
- json.dump(vars(args),f)
- s3.upload(localSavePath, awsPath, fname)
- output['config'] = s3.generate_downloads(awsPath, fname)
- output['uuid'] = uid
-
- classification = Classification(awsPath, localSavePath, localReadPath, args.remoteReadPath)
- output.update(classification.split(int(args.ratio)))
-
- d.deletedir('/tmp')
- n.notification(args.email,case=3,filename=awsPath)
-
diff --git a/batch/batch_classification_train.py b/batch/batch_classification_train.py
deleted file mode 100644
index cd288dd..0000000
--- a/batch/batch_classification_train.py
+++ /dev/null
@@ -1,328 +0,0 @@
-import csv
-import os
-from sklearn.pipeline import Pipeline
-from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
-from sklearn.naive_bayes import MultinomialNB
-from sklearn.linear_model import Perceptron
-from sklearn.linear_model import SGDClassifier
-from sklearn.ensemble import RandomForestClassifier
-from sklearn.neighbors import KNeighborsClassifier
-from sklearn.linear_model import PassiveAggressiveClassifier
-from sklearn import metrics
-from sklearn.metrics import roc_curve, auc
-from sklearn.preprocessing import label_binarize
-from sklearn.model_selection import cross_val_predict
-from sklearn.model_selection import cross_val_score
-from scipy import interp
-from itertools import cycle
-import pickle
-import numpy as np
-from plotly.offline import plot
-import plotly.graph_objs as go
-import json
-import writeToS3 as s3
-import deleteDir as d
-import notification as n
-import argparse
-
-
-
-class Classification:
-
- def __init__(self, awsPath, localSavePath, localReadPath, remoteReadPath,filename):
-
- self.localSavePath = localSavePath
- self.awsPath = awsPath
-
- # download remote socialmedia data into a temp folder
- # load it into csv
- s3.downloadToDisk(filename=filename,localpath=localReadPath, remotepath=remoteReadPath)
-
- Array = []
- try:
- with open(localReadPath + filename,'r',encoding="utf-8") as f:
- reader = csv.reader(f)
- for row in reader:
- try:
- Array.append(row)
- except Exception as e:
- pass
- except:
- with open(localReadPath + filename,'r',encoding="ISO-8859-1") as f:
- reader = csv.reader(f)
- for row in reader:
- try:
- Array.append(row)
- except Exception as e:
- pass
-
- self.data = []
- self.target = []
- for a in Array[1:]:
- if len(a) == 2:
- self.data.append(a[0])
- self.target.append(a[1])
-
-
- def classify(self, model):
-
- if model == 'NaiveBayes':
- text_clf = Pipeline([('vect', CountVectorizer(stop_words='english')),
- ('tfidf', TfidfTransformer()),
- ('clf',MultinomialNB())])
- # 10 fold cross validation
- self.predicted = cross_val_predict(text_clf, self.data, self.target, cv=10)
- # fit the model
- text_clf.fit(self.data, self.target)
- y_score = text_clf.predict_proba(self.data)
- elif model == 'Perceptron':
- text_clf = Pipeline([('vect', CountVectorizer(stop_words='english')),
- ('tfidf', TfidfTransformer()),
- ('clf',Perceptron())])
- # 10 fold cross validation
- self.predicted = cross_val_predict(text_clf, self.data, self.target, cv=10)
- # fit the model
- text_clf.fit(self.data, self.target)
- y_score = text_clf.decision_function(self.data)
- elif model == 'SGD':
- text_clf = Pipeline([('vect', CountVectorizer(stop_words='english')),
- ('tfidf', TfidfTransformer()),
- ('clf',SGDClassifier())])
- # 10 fold cross validation
- self.predicted = cross_val_predict(text_clf, self.data, self.target, cv=10)
- # fit the model
- text_clf.fit(self.data, self.target)
- y_score = text_clf.decision_function(self.data)
- elif model == 'RandomForest':
- text_clf = Pipeline([('vect', CountVectorizer(stop_words='english')),
- ('tfidf', TfidfTransformer()),
- ('clf',RandomForestClassifier(n_estimators=100))])
- # 10 fold cross validation
- self.predicted = cross_val_predict(text_clf, self.data, self.target, cv=10)
- # fit the model
- text_clf.fit(self.data, self.target)
- y_score = text_clf.predict_proba(self.data)
- elif model == 'KNN':
- text_clf = Pipeline([('vect', CountVectorizer(stop_words='english')),
- ('tfidf', TfidfTransformer()),
- ('clf',KNeighborsClassifier(n_neighbors=10))])
- # 10 fold cross validation
- self.predicted = cross_val_predict(text_clf, self.data, self.target, cv=10)
- # fit the model
- text_clf.fit(self.data, self.target)
- y_score = text_clf.predict_proba(self.data)
- elif model == 'passiveAggressive':
- text_clf = Pipeline([('vect', CountVectorizer(stop_words='english')),
- ('tfidf', TfidfTransformer()),
- ('clf',PassiveAggressiveClassifier(n_iter=50))])
- # 10 fold cross validation
- self.predicted = cross_val_predict(text_clf, self.data, self.target, cv=10)
- # fit the model
- text_clf.fit(self.data, self.target)
- y_score = text_clf.decision_function(self.data)
-
- # get 10 fold cross validation accuracy score
- fold_scores = cross_val_score(text_clf, self.data, self.target, cv=10)
- fname_folds = 'accuracy_score.csv'
- with open(self.localSavePath + fname_folds,'w',newline="") as f:
- writer = csv.writer(f)
- writer.writerow(['fold_1','fold_2','fold_3','fold_4','fold_5',
- 'fold_6','fold_7','fold_8','fold_9','fold_10'])
- writer.writerow([ '%.4f' % elem for elem in fold_scores ])
- s3.upload(self.localSavePath, self.awsPath, fname_folds)
- accuracy_url = s3.generate_downloads(self.awsPath, fname_folds)
-
- # pickle the Pipeline for future use
- fname_pickle = 'classification_pipeline.pickle'
- with open(self.localSavePath + fname_pickle,'wb') as f:
- pickle.dump(text_clf,f)
- s3.upload(self.localSavePath, self.awsPath, fname_pickle)
- pickle_url = s3.generate_downloads(self.awsPath, fname_pickle)
-
- # plotting the roc curve
- self.labels = text_clf.classes_
- y = label_binarize(self.target,classes = self.labels)
-
-
- # binary class
- if len(self.labels) <= 2:
- if model == 'Perceptron' or model == 'SGD' or model == 'passiveAggressive':
- fpr, tpr, _ = roc_curve(y[:, 0], y_score)
- else:
- y = []
- for label in self.target:
- item = []
- for i in range(len(text_clf.classes_)):
- if label == text_clf.classes_[i]:
- item.append(1)
- else:
- item.append(0)
- y.append(item)
- y = np.array(y)
- fpr, tpr, _ = roc_curve(y.ravel(), y_score.ravel())
-
- roc_auc = auc(fpr, tpr)
- trace = go.Scatter(
- x = fpr,
- y = tpr,
- name = 'ROC curve (area =' + str(roc_auc) + ' )',
- line = dict(color=('deeppink'), width = 4)
- )
- data = [trace]
-
- # multiclasses
- else:
- fpr = {}
- tpr = {}
- roc_auc = {}
- for i in range(len(self.labels)):
- fpr[self.labels[i]], tpr[self.labels[i]], _ = roc_curve(y[:, i], y_score[:, i])
- roc_auc[self.labels[i]] = auc(fpr[self.labels[i]], tpr[self.labels[i]])
-
- # Compute micro-average ROC curve and ROC area
- fpr["micro"], tpr["micro"], _ = roc_curve(y.ravel(), y_score.ravel())
- roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])
-
- # First aggregate all false positive rates
- all_fpr = np.unique(np.concatenate([fpr[self.labels[i]] for i in range(len(self.labels))]))
-
- # Then interpolate all ROC curves at this points
- mean_tpr = np.zeros_like(all_fpr)
- for i in range(len(self.labels)):
- mean_tpr += interp(all_fpr, fpr[self.labels[i]], tpr[self.labels[i]])
-
- # Finally average it and compute AUC
- mean_tpr /= len(self.labels)
-
- fpr["macro"] = all_fpr
- tpr["macro"] = mean_tpr
- roc_auc["macro"] = auc(fpr["macro"], tpr["macro"])
-
- # plotting
- trace0 = go.Scatter(
- x = fpr['micro'],
- y = tpr['micro'],
- name = 'micro-average ROC curve (area =' + str(roc_auc["micro"]) + ' )',
- line = dict(color=('deeppink'), width = 4)
- )
- trace1 = go.Scatter(
- x = fpr['macro'],
- y = tpr['macro'],
- name = 'macro-average ROC curve (area =' + str(roc_auc["macro"]) + ' )',
- line = dict(
- color = ('navy'),
- width = 4,)
- )
- data = [trace0, trace1]
- colors = cycle(['aqua', 'darkorange', 'cornflowerblue'])
- for i, color in zip(range(len(self.labels)), colors):
- trace = go.Scatter(
- x = fpr[self.labels[i]],
- y = tpr[self.labels[i]],
- name = 'ROC curve of class {0} (area = {1:0.2f})'.format(self.labels[i], roc_auc[self.labels[i]]),
- line = dict(
- color = (color),
- width = 4,
- dash = 'dash')
- )
- data.append(trace)
-
-
- layout = dict(title = model + ' model ROC curve',
- xaxis = dict(title = 'False Positive Rate'),
- yaxis = dict(title = 'True Positive Rate'),
- )
-
- fig = dict(data=data, layout=layout)
- div = plot(fig, output_type='div',image='png',auto_open=False, image_filename='plot_img')
-
- # print the graph file
- fname_div ='div.html'
- with open(self.localSavePath + fname_div,'w') as f:
- f.write(div)
- s3.upload(self.localSavePath, self.awsPath, fname_div)
- div_url = s3.generate_downloads(self.awsPath, fname_div)
-
- return {'accuracy':accuracy_url, 'pickle':pickle_url, 'div':div_url }
-
-
-
- def metrics(self):
- report = np.array(metrics.precision_recall_fscore_support(self.target,self.predicted,labels=self.labels)).T
- avg_report = list(metrics.precision_recall_fscore_support(self.target,self.predicted,average='weighted'))
- avg_report.insert(0,'AVG')
-
- # save metrics report
- fname_metrics = 'classification_report.csv'
- with open(self.localSavePath + fname_metrics,'w',newline="") as f:
- writer = csv.writer(f)
- writer.writerow(['label','precision','recall','f1-score','support'])
- for i in range(len(report)):
- writer.writerow([self.labels[i],
- round(report[i][0],4),
- round(report[i][1],4),
- round(report[i][2],4),
- round(report[i][3],4)])
- writer.writerow(avg_report)
- s3.upload(self.localSavePath, self.awsPath, fname_metrics)
- return {'metrics': s3.generate_downloads(self.awsPath, fname_metrics)}
-
-
-
-
-if __name__ == '__main__':
-
- output = dict()
-
- parser = argparse.ArgumentParser(description="processing...")
- parser.add_argument('--remoteReadPath', required=True)
- parser.add_argument('--model',required=True)
- parser.add_argument('--uuid',required=True)
- parser.add_argument('--labeledFilename',required=True)
- parser.add_argument('--s3FolderName',required=True)
- parser.add_argument('--email',required=True)
- args = parser.parse_args()
-
- # arranging the paths
- uid = args.uuid
-
- # check if this awsPath exist!!! if not exist, exit with error
- awsPath = args.s3FolderName + '/ML/classification/' + uid +'/'
-
- localSavePath = '/tmp/' + args.s3FolderName + '/ML/classification/' + uid + '/'
- localReadPath = '/tmp/' + args.s3FolderName + '/'
- if not os.path.exists(localSavePath):
- os.makedirs(localSavePath)
- if not os.path.exists(localReadPath):
- os.makedirs(localReadPath)
-
- fname_config = 'config.json'
- if s3.checkExist(awsPath, fname_config):
- s3.downloadToDisk(fname_config, localSavePath, awsPath)
- with open(localSavePath + fname_config, "r") as fp:
- data = json.load(fp)
- for key in vars(args).keys():
- if key not in data.keys():
- data[key] = vars(args)[key]
- with open(localSavePath + fname_config,"w") as f:
- json.dump(data,f)
- s3.upload(localSavePath, awsPath, fname_config)
- output['config'] = s3.generate_downloads(awsPath, fname_config)
- output['uuid'] = uid
-
- else:
- raise ValueError('This session ID is invalid!')
- exit()
-
-
- # download the labeled data from s3 to tmp
- classification = Classification(awsPath, localSavePath, localReadPath, args.remoteReadPath,args.labeledFilename)
-
- output.update(classification.classify(args.model))
- output.update(classification.metrics())
-
- d.deletedir('/tmp')
- n.notification(args.email,case=3,filename=awsPath)
-
-
-
diff --git a/batch/batch_network_analysis/batch_function.py b/batch/batch_network_analysis/batch_function.py
index 63ba1ea..04493dc 100644
--- a/batch/batch_network_analysis/batch_function.py
+++ b/batch/batch_network_analysis/batch_function.py
@@ -1,4 +1,4 @@
-import dataset
+from dataset import Dataset
import argparse
from notification import notification
from algorithm import algorithm
@@ -26,17 +26,43 @@
params = vars(parser.parse_args())
+ if 'HOST_IP' in params.keys():
+ HOST_IP = params['HOST_IP']
+ params.pop('HOST_IP', None)
+ else:
+ HOST_IP = None
+
+ if 'AWS_ACCESSKEY' in params.keys():
+ AWS_ACCESSKEY = params['AWS_ACCESSKEY']
+ params.pop('AWS_ACCESSKEY', None)
+ else:
+ AWS_ACCESSKEY = None
+
+ if 'AWS_ACCESSKEYSECRET' in params.keys():
+ AWS_ACCESSKEYSECRET = params['AWS_ACCESSKEYSECRET']
+ params.pop('AWS_ACCESSKEYSECRET', None)
+ else:
+ AWS_ACCESSKEYSECRET = None
+
+ if 'BUCKET_NAME' in params.keys():
+ BUCKET_NAME = params['BUCKET_NAME']
+ params.pop('BUCKET_NAME', None)
+ else:
+ BUCKET_NAME = None
+
+ d = Dataset(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
# arranging the paths
- path = dataset.organize_path_lambda(params)
+ path = d.organize_path_lambda(params)
# save the config file
- urls['config'] = dataset.save_remote_output(path['localSavePath'],
+ urls['config'] = d.save_remote_output(path['localSavePath'],
path['remoteSavePath'],
'config',
params)
# prepare input dataset
- df = dataset.get_remote_input(path['remoteReadPath'],
+ df = d.get_remote_input(path['remoteReadPath'],
path['filename'],
path['localReadPath'])
@@ -46,7 +72,7 @@
# upload object to s3 bucket and return the url
for key, value in output.items():
if key != 'uid':
- urls[key] = dataset.save_remote_output(path['localSavePath'],
+ urls[key] = d.save_remote_output(path['localSavePath'],
path['remoteSavePath'],
key,
value)
diff --git a/batch/batch_network_analysis/dataset.py b/batch/batch_network_analysis/dataset.py
index c1bb7b5..23cf0a6 100644
--- a/batch/batch_network_analysis/dataset.py
+++ b/batch/batch_network_analysis/dataset.py
@@ -4,145 +4,150 @@
import pickle
import pandas as pd
import types
-import writeToS3 as s3
-
-
-def organize_path_lambda(event):
- """
- parse the lambda handler parameter event to construct necessary paths for reading and storing data
- :param event: aws lambda parameters from handler
- :return: path dictionary
- """
- # arranging the paths
- localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
- localSavePath = os.path.join('/tmp',
- event['s3FolderName'] + event['resultPath'],
- event['uid'])
- remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
- event['uid'])
- if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
- remoteReadPath = remoteSavePath
- filename = event['labeledFilename']
- else:
- remoteReadPath = event['remoteReadPath']
- filename = remoteReadPath.split('/')[-2] + '.csv'
-
- if not os.path.exists(localSavePath):
- os.makedirs(localSavePath)
- if not os.path.exists(localReadPath):
- os.makedirs(localReadPath)
-
- path = {
- 'remoteReadPath': remoteReadPath,
- 'localReadPath': localReadPath,
- 'localSavePath': localSavePath,
- 'remoteSavePath': remoteSavePath,
- 'filename': filename
- }
-
- return path
-
-
-def get_remote_input(remoteReadPath, filename, localReadPath):
- """
- download input file from s3 bucket to a local location, and then load
- it to a pandas dataframe
- :param remoteReadPath: remote path in s3 to store the data
- :param localReadPath: local location to store the data, usually in /tmp
- :return: df: dataframe that contains the complete input file
- """
- s3.downloadToDisk(filename, localReadPath, remoteReadPath)
-
- # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
- # Array = 2D nested list holding column and row data
- Array = []
- try:
- with open(os.path.join(localReadPath, filename), 'r',
- encoding='utf-8', errors="ignore") as f:
- reader = csv.reader(f)
- try:
- for row in reader:
- Array.append(row)
- except Exception as e:
- print(e)
- except Exception:
- with open(os.path.join(localReadPath, filename), 'r',
- encoding='ISO-8859-1', errors="ignore") as f:
- reader = csv.reader(f)
- try:
- for row in reader:
- Array.append(row)
- except Exception as e:
- print(e)
-
- # load to pandas dataframe
- df = pd.DataFrame(Array[1:], columns=Array[0])
-
- return df
-
-
-def save_remote_output(localSavePath, remoteSavePath, fname, output_data):
- """
- save output in memory first to local file, then upload to remote S3 bucket
- :param localSavePath: local saved file
- :param remoteSavePath: remote save file path
- :param fname: filename
- :param output_data: the actual data
- :return: url of the file saved in S3 bucket
- """
-
- # json
- if isinstance(output_data, dict):
- fname += '.json'
- with open(os.path.join(localSavePath, fname), 'w') as f:
- json.dump(output_data, f)
-
- # dataframe to csv
- elif isinstance(output_data, pd.DataFrame):
- fname += '.csv'
- output_data.to_csv(fname, encoding='utf-8')
-
- # string to html
- elif isinstance(output_data, str):
- fname += '.html'
- with open(os.path.join(localSavePath, fname), 'w') as f:
- f.write(output_data)
-
- # list(list) to csv
- elif isinstance(output_data, list) \
- and (isinstance(output_data[0], list) or isinstance(output_data[0],
- tuple)):
- fname += '.csv'
- with open(os.path.join(localSavePath, fname), 'w', newline='',
- encoding='utf-8') as f:
- writer = csv.writer(f)
- for row in output_data:
+from writeToS3 import WriteToS3
+
+
+class Dataset:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+ self.s3 = WriteToS3(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
+ def organize_path_lambda(self, event):
+ """
+ parse the lambda handler parameter event to construct necessary paths for reading and storing data
+ :param event: aws lambda parameters from handler
+ :return: path dictionary
+ """
+ # arranging the paths
+ localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
+ localSavePath = os.path.join('/tmp',
+ event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
+ remoteReadPath = remoteSavePath
+ filename = event['labeledFilename']
+ else:
+ remoteReadPath = event['remoteReadPath']
+ filename = remoteReadPath.split('/')[-2] + '.csv'
+
+ if not os.path.exists(localSavePath):
+ os.makedirs(localSavePath)
+ if not os.path.exists(localReadPath):
+ os.makedirs(localReadPath)
+
+ path = {
+ 'remoteReadPath': remoteReadPath,
+ 'localReadPath': localReadPath,
+ 'localSavePath': localSavePath,
+ 'remoteSavePath': remoteSavePath,
+ 'filename': filename
+ }
+
+ return path
+
+
+ def get_remote_input(self, remoteReadPath, filename, localReadPath):
+ """
+ download input file from s3 bucket to a local location, and then load
+ it to a pandas dataframe
+ :param remoteReadPath: remote path in s3 to store the data
+ :param localReadPath: local location to store the data, usually in /tmp
+ :return: df: dataframe that contains the complete input file
+ """
+ self.s3.downloadToDisk(filename, localReadPath, remoteReadPath)
+
+ # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
+ # Array = 2D nested list holding column and row data
+ Array = []
+ try:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='utf-8', errors="ignore") as f:
+ reader = csv.reader(f)
try:
- writer.writerow(row)
- except UnicodeEncodeError as e:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
print(e)
-
- # special case
- elif isinstance(output_data, types.GeneratorType):
- if fname == 'gephi':
- fname += '.gml'
- elif fname == 'pajek':
- fname += '.net'
+ except Exception:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='ISO-8859-1', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+
+ # load to pandas dataframe
+ df = pd.DataFrame(Array[1:], columns=Array[0])
+
+ return df
+
+
+ def save_remote_output(self, localSavePath, remoteSavePath, fname, output_data):
+ """
+ save output in memory first to local file, then upload to remote S3 bucket
+ :param localSavePath: local saved file
+ :param remoteSavePath: remote save file path
+ :param fname: filename
+ :param output_data: the actual data
+ :return: url of the file saved in S3 bucket
+ """
+
+ # json
+ if isinstance(output_data, dict):
+ fname += '.json'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ json.dump(output_data, f)
+
+ # dataframe to csv
+ elif isinstance(output_data, pd.DataFrame):
+ fname += '.csv'
+ output_data.to_csv(fname, encoding='utf-8')
+
+ # string to html
+ elif isinstance(output_data, str):
+ fname += '.html'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ f.write(output_data)
+
+ # list(list) to csv
+ elif isinstance(output_data, list) \
+ and (isinstance(output_data[0], list) or isinstance(output_data[0],
+ tuple)):
+ fname += '.csv'
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ writer = csv.writer(f)
+ for row in output_data:
+ try:
+ writer.writerow(row)
+ except UnicodeEncodeError as e:
+ print(e)
+
+ # special case
+ elif isinstance(output_data, types.GeneratorType):
+ if fname == 'gephi':
+ fname += '.gml'
+ elif fname == 'pajek':
+ fname += '.net'
+ else:
+ fname += '.unknown'
+
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ for line in output_data:
+ f.write(line + '\n')
+
+ # else pickle the object
else:
- fname += '.unknown'
-
- with open(os.path.join(localSavePath, fname), 'w', newline='',
- encoding='utf-8') as f:
- for line in output_data:
- f.write(line + '\n')
-
- # else pickle the object
- else:
- fname += '.pickle'
- with open(os.path.join(localSavePath, fname), 'wb') as f:
- pickle.dump(output_data, f)
-
- s3.upload(localSavePath, remoteSavePath, fname)
- url = s3.generate_downloads(remoteSavePath, fname)
-
- return url
+ fname += '.pickle'
+ with open(os.path.join(localSavePath, fname), 'wb') as f:
+ pickle.dump(output_data, f)
+
+ self.s3.upload(localSavePath, remoteSavePath, fname)
+ url = self.s3.generate_downloads(remoteSavePath, fname)
+
+ return url
diff --git a/batch/batch_network_analysis/writeToS3.py b/batch/batch_network_analysis/writeToS3.py
index 75b1999..51dbf78 100644
--- a/batch/batch_network_analysis/writeToS3.py
+++ b/batch/batch_network_analysis/writeToS3.py
@@ -1,72 +1,83 @@
-import boto3
-import os
import mimetypes
+import os
-client = boto3.client('s3')
-bucket_name = 'macroscope-smile'
-
-def upload(localpath, remotepath, filename):
- content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
- print(filename, content_type)
- if content_type == None:
- extra_args = {'ContentType':'application/octet-stream'}
- else:
- extra_args = {'ContentType':content_type}
-
- client.upload_file(os.path.join(localpath, filename),
- bucket_name,
- os.path.join(remotepath, filename),
- ExtraArgs=extra_args)
-
-
-def createDirectory(DirectoryName):
- client.put_object(Bucket=bucket_name, Key=DirectoryName)
-
-
-def generate_downloads(remotepath, filename):
- url = client.generate_presigned_url(
- ClientMethod='get_object',
- Params={
- 'Bucket': bucket_name,
- 'Key': os.path.join(remotepath, filename)
- },
- ExpiresIn=604800 # one week
- )
-
- return url
-
-
-def downloadToDisk(filename, localpath, remotepath):
- with open(os.path.join(localpath, filename), 'wb') as f:
- client.download_fileobj(bucket_name,
- os.path.join(remotepath, filename), f)
-
-
-def getObject(remoteKey):
- obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
-
-
-def putObject(body, remoteKey):
- # bytes or seekable file-like object
- obj = client.put_object(Bucket=bucket_name,
- Body=body, Key=remoteKey)
- print(obj['Body'].read())
-
-def listDir(remoteClass):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=remoteClass,
- Delimiter='/')
- foldernames = []
- for o in objects.get('CommonPrefixes'):
- foldernames.append(o.get('Prefix'))
-
- # only return the list of foldernames
- return foldernames
-
-
-def listFiles(foldernames):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=foldernames)
-
- # return rich information about the files
- return objects.get('Contents')
+import boto3
+from botocore.client import Config
+
+
+class WriteToS3:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+
+ # local minio s3
+ if HOST_IP and AWS_ACCESSKEY and AWS_ACCESSKEYSECRET and BUCKET_NAME:
+ self.client = boto3.client('s3', endpoint_url='http://' + HOST_IP + ':9000',
+ aws_access_key_id=AWS_ACCESSKEY,
+ aws_secret_access_key=AWS_ACCESSKEYSECRET,
+ config=Config(signature_version='s3v4'))
+ self.bucket_name = BUCKET_NAME
+
+ # remote aws s3
+ else:
+ self.client = boto3.client('s3')
+ self.bucket_name = 'macroscope-smile'
+
+ def upload(self, localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath, filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType': 'application/octet-stream'}
+ else:
+ extra_args = {'ContentType': content_type}
+
+ self.client.upload_file(os.path.join(localpath, filename),
+ self.bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+ def createDirectory(self, DirectoryName):
+ self.client.put_object(Bucket=self.bucket_name, Key=DirectoryName)
+
+ def generate_downloads(self, remotepath, filename):
+ url = self.client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': self.bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+ def downloadToDisk(self, filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ self.client.download_fileobj(self.bucket_name,
+ os.path.join(remotepath, filename), f)
+
+ def getObject(self, remoteKey):
+ obj = self.client.get_object(Bucket=self.bucket_name, Key=remoteKey)
+
+ def putObject(self, body, remoteKey):
+ # bytes or seekable file-like object
+ obj = self.client.put_object(Bucket=self.bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+ def listDir(self, remoteClass):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+ def listFiles(self, foldernames):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/batch/batch_pipeline/batch_function.py b/batch/batch_pipeline/batch_function.py
index 4337f90..04493dc 100644
--- a/batch/batch_pipeline/batch_function.py
+++ b/batch/batch_pipeline/batch_function.py
@@ -1,8 +1,7 @@
-import dataset
+from dataset import Dataset
import argparse
from notification import notification
from algorithm import algorithm
-from algorithm import StemmedCountVectorizer
if __name__ == '__main__':
@@ -27,17 +26,43 @@
params = vars(parser.parse_args())
+ if 'HOST_IP' in params.keys():
+ HOST_IP = params['HOST_IP']
+ params.pop('HOST_IP', None)
+ else:
+ HOST_IP = None
+
+ if 'AWS_ACCESSKEY' in params.keys():
+ AWS_ACCESSKEY = params['AWS_ACCESSKEY']
+ params.pop('AWS_ACCESSKEY', None)
+ else:
+ AWS_ACCESSKEY = None
+
+ if 'AWS_ACCESSKEYSECRET' in params.keys():
+ AWS_ACCESSKEYSECRET = params['AWS_ACCESSKEYSECRET']
+ params.pop('AWS_ACCESSKEYSECRET', None)
+ else:
+ AWS_ACCESSKEYSECRET = None
+
+ if 'BUCKET_NAME' in params.keys():
+ BUCKET_NAME = params['BUCKET_NAME']
+ params.pop('BUCKET_NAME', None)
+ else:
+ BUCKET_NAME = None
+
+ d = Dataset(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
# arranging the paths
- path = dataset.organize_path_lambda(params)
+ path = d.organize_path_lambda(params)
# save the config file
- urls['config'] = dataset.save_remote_output(path['localSavePath'],
+ urls['config'] = d.save_remote_output(path['localSavePath'],
path['remoteSavePath'],
'config',
params)
# prepare input dataset
- df = dataset.get_remote_input(path['remoteReadPath'],
+ df = d.get_remote_input(path['remoteReadPath'],
path['filename'],
path['localReadPath'])
@@ -47,7 +72,7 @@
# upload object to s3 bucket and return the url
for key, value in output.items():
if key != 'uid':
- urls[key] = dataset.save_remote_output(path['localSavePath'],
+ urls[key] = d.save_remote_output(path['localSavePath'],
path['remoteSavePath'],
key,
value)
diff --git a/batch/batch_pipeline/dataset.py b/batch/batch_pipeline/dataset.py
index c1bb7b5..f9728b5 100644
--- a/batch/batch_pipeline/dataset.py
+++ b/batch/batch_pipeline/dataset.py
@@ -4,145 +4,150 @@
import pickle
import pandas as pd
import types
-import writeToS3 as s3
-
-
-def organize_path_lambda(event):
- """
- parse the lambda handler parameter event to construct necessary paths for reading and storing data
- :param event: aws lambda parameters from handler
- :return: path dictionary
- """
- # arranging the paths
- localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
- localSavePath = os.path.join('/tmp',
- event['s3FolderName'] + event['resultPath'],
- event['uid'])
- remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
- event['uid'])
- if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
- remoteReadPath = remoteSavePath
- filename = event['labeledFilename']
- else:
- remoteReadPath = event['remoteReadPath']
- filename = remoteReadPath.split('/')[-2] + '.csv'
-
- if not os.path.exists(localSavePath):
- os.makedirs(localSavePath)
- if not os.path.exists(localReadPath):
- os.makedirs(localReadPath)
-
- path = {
- 'remoteReadPath': remoteReadPath,
- 'localReadPath': localReadPath,
- 'localSavePath': localSavePath,
- 'remoteSavePath': remoteSavePath,
- 'filename': filename
- }
-
- return path
-
-
-def get_remote_input(remoteReadPath, filename, localReadPath):
- """
- download input file from s3 bucket to a local location, and then load
- it to a pandas dataframe
- :param remoteReadPath: remote path in s3 to store the data
- :param localReadPath: local location to store the data, usually in /tmp
- :return: df: dataframe that contains the complete input file
- """
- s3.downloadToDisk(filename, localReadPath, remoteReadPath)
-
- # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
- # Array = 2D nested list holding column and row data
- Array = []
- try:
- with open(os.path.join(localReadPath, filename), 'r',
- encoding='utf-8', errors="ignore") as f:
- reader = csv.reader(f)
- try:
- for row in reader:
- Array.append(row)
- except Exception as e:
- print(e)
- except Exception:
- with open(os.path.join(localReadPath, filename), 'r',
- encoding='ISO-8859-1', errors="ignore") as f:
- reader = csv.reader(f)
- try:
- for row in reader:
- Array.append(row)
- except Exception as e:
- print(e)
-
- # load to pandas dataframe
- df = pd.DataFrame(Array[1:], columns=Array[0])
-
- return df
-
-
-def save_remote_output(localSavePath, remoteSavePath, fname, output_data):
- """
- save output in memory first to local file, then upload to remote S3 bucket
- :param localSavePath: local saved file
- :param remoteSavePath: remote save file path
- :param fname: filename
- :param output_data: the actual data
- :return: url of the file saved in S3 bucket
- """
-
- # json
- if isinstance(output_data, dict):
- fname += '.json'
- with open(os.path.join(localSavePath, fname), 'w') as f:
- json.dump(output_data, f)
-
- # dataframe to csv
- elif isinstance(output_data, pd.DataFrame):
- fname += '.csv'
- output_data.to_csv(fname, encoding='utf-8')
-
- # string to html
- elif isinstance(output_data, str):
- fname += '.html'
- with open(os.path.join(localSavePath, fname), 'w') as f:
- f.write(output_data)
-
- # list(list) to csv
- elif isinstance(output_data, list) \
- and (isinstance(output_data[0], list) or isinstance(output_data[0],
- tuple)):
- fname += '.csv'
- with open(os.path.join(localSavePath, fname), 'w', newline='',
- encoding='utf-8') as f:
- writer = csv.writer(f)
- for row in output_data:
+from writeToS3 import WriteToS3
+
+
+class Dataset:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+ self.s3 = WriteToS3(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
+ def organize_path_lambda(self, event):
+ """
+ parse the lambda handler parameter event to construct necessary paths for reading and storing data
+ :param event: aws lambda parameters from handler
+ :return: path dictionary
+ """
+ # arranging the paths
+ localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
+ localSavePath = os.path.join('/tmp',
+ event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
+ remoteReadPath = remoteSavePath
+ filename = event['labeledFilename']
+ else:
+ remoteReadPath = event['remoteReadPath']
+ filename = remoteReadPath.split('/')[-2] + '.csv'
+
+ if not os.path.exists(localSavePath):
+ os.makedirs(localSavePath)
+ if not os.path.exists(localReadPath):
+ os.makedirs(localReadPath)
+
+ path = {
+ 'remoteReadPath': remoteReadPath,
+ 'localReadPath': localReadPath,
+ 'localSavePath': localSavePath,
+ 'remoteSavePath': remoteSavePath,
+ 'filename': filename
+ }
+
+ return path
+
+
+ def get_remote_input(self, remoteReadPath, filename, localReadPath):
+ """
+ download input file from s3 bucket to a local location, and then load
+ it to a pandas dataframe
+ :param remoteReadPath: remote path in s3 to store the data
+ :param localReadPath: local location to store the data, usually in /tmp
+ :return: df: dataframe that contains the complete input file
+ """
+ self.s3.downloadToDisk(filename, localReadPath, remoteReadPath)
+
+ # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
+ # Array = 2D nested list holding column and row data
+ Array = []
+ try:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='utf-8', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+ except Exception:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='ISO-8859-1', errors="ignore") as f:
+ reader = csv.reader(f)
try:
- writer.writerow(row)
- except UnicodeEncodeError as e:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
print(e)
- # special case
- elif isinstance(output_data, types.GeneratorType):
- if fname == 'gephi':
- fname += '.gml'
- elif fname == 'pajek':
- fname += '.net'
+ # load to pandas dataframe
+ df = pd.DataFrame(Array[1:], columns=Array[0])
+
+ return df
+
+
+ def save_remote_output(self, localSavePath, remoteSavePath, fname, output_data):
+ """
+ save output in memory first to local file, then upload to remote S3 bucket
+ :param localSavePath: local saved file
+ :param remoteSavePath: remote save file path
+ :param fname: filename
+ :param output_data: the actual data
+ :return: url of the file saved in S3 bucket
+ """
+
+ # json
+ if isinstance(output_data, dict):
+ fname += '.json'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ json.dump(output_data, f)
+
+ # dataframe to csv
+ elif isinstance(output_data, pd.DataFrame):
+ fname += '.csv'
+ output_data.to_csv(fname, encoding='utf-8')
+
+ # string to html
+ elif isinstance(output_data, str):
+ fname += '.html'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ f.write(output_data)
+
+ # list(list) to csv
+ elif isinstance(output_data, list) \
+ and (isinstance(output_data[0], list) or isinstance(output_data[0],
+ tuple)):
+ fname += '.csv'
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ writer = csv.writer(f)
+ for row in output_data:
+ try:
+ writer.writerow(row)
+ except UnicodeEncodeError as e:
+ print(e)
+
+ # special case
+ elif isinstance(output_data, types.GeneratorType):
+ if fname == 'gephi':
+ fname += '.gml'
+ elif fname == 'pajek':
+ fname += '.net'
+ else:
+ fname += '.unknown'
+
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ for line in output_data:
+ f.write(line + '\n')
+
+ # else pickle the object
else:
- fname += '.unknown'
-
- with open(os.path.join(localSavePath, fname), 'w', newline='',
- encoding='utf-8') as f:
- for line in output_data:
- f.write(line + '\n')
-
- # else pickle the object
- else:
- fname += '.pickle'
- with open(os.path.join(localSavePath, fname), 'wb') as f:
- pickle.dump(output_data, f)
+ fname += '.pickle'
+ with open(os.path.join(localSavePath, fname), 'wb') as f:
+ pickle.dump(output_data, f)
- s3.upload(localSavePath, remoteSavePath, fname)
- url = s3.generate_downloads(remoteSavePath, fname)
+ self.s3.upload(localSavePath, remoteSavePath, fname)
+ url = self.s3.generate_downloads(remoteSavePath, fname)
- return url
+ return url
diff --git a/batch/batch_pipeline/writeToS3.py b/batch/batch_pipeline/writeToS3.py
index 75b1999..51dbf78 100644
--- a/batch/batch_pipeline/writeToS3.py
+++ b/batch/batch_pipeline/writeToS3.py
@@ -1,72 +1,83 @@
-import boto3
-import os
import mimetypes
+import os
-client = boto3.client('s3')
-bucket_name = 'macroscope-smile'
-
-def upload(localpath, remotepath, filename):
- content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
- print(filename, content_type)
- if content_type == None:
- extra_args = {'ContentType':'application/octet-stream'}
- else:
- extra_args = {'ContentType':content_type}
-
- client.upload_file(os.path.join(localpath, filename),
- bucket_name,
- os.path.join(remotepath, filename),
- ExtraArgs=extra_args)
-
-
-def createDirectory(DirectoryName):
- client.put_object(Bucket=bucket_name, Key=DirectoryName)
-
-
-def generate_downloads(remotepath, filename):
- url = client.generate_presigned_url(
- ClientMethod='get_object',
- Params={
- 'Bucket': bucket_name,
- 'Key': os.path.join(remotepath, filename)
- },
- ExpiresIn=604800 # one week
- )
-
- return url
-
-
-def downloadToDisk(filename, localpath, remotepath):
- with open(os.path.join(localpath, filename), 'wb') as f:
- client.download_fileobj(bucket_name,
- os.path.join(remotepath, filename), f)
-
-
-def getObject(remoteKey):
- obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
-
-
-def putObject(body, remoteKey):
- # bytes or seekable file-like object
- obj = client.put_object(Bucket=bucket_name,
- Body=body, Key=remoteKey)
- print(obj['Body'].read())
-
-def listDir(remoteClass):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=remoteClass,
- Delimiter='/')
- foldernames = []
- for o in objects.get('CommonPrefixes'):
- foldernames.append(o.get('Prefix'))
-
- # only return the list of foldernames
- return foldernames
-
-
-def listFiles(foldernames):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=foldernames)
-
- # return rich information about the files
- return objects.get('Contents')
+import boto3
+from botocore.client import Config
+
+
+class WriteToS3:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+
+ # local minio s3
+ if HOST_IP and AWS_ACCESSKEY and AWS_ACCESSKEYSECRET and BUCKET_NAME:
+ self.client = boto3.client('s3', endpoint_url='http://' + HOST_IP + ':9000',
+ aws_access_key_id=AWS_ACCESSKEY,
+ aws_secret_access_key=AWS_ACCESSKEYSECRET,
+ config=Config(signature_version='s3v4'))
+ self.bucket_name = BUCKET_NAME
+
+ # remote aws s3
+ else:
+ self.client = boto3.client('s3')
+ self.bucket_name = 'macroscope-smile'
+
+ def upload(self, localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath, filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType': 'application/octet-stream'}
+ else:
+ extra_args = {'ContentType': content_type}
+
+ self.client.upload_file(os.path.join(localpath, filename),
+ self.bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+ def createDirectory(self, DirectoryName):
+ self.client.put_object(Bucket=self.bucket_name, Key=DirectoryName)
+
+ def generate_downloads(self, remotepath, filename):
+ url = self.client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': self.bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+ def downloadToDisk(self, filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ self.client.download_fileobj(self.bucket_name,
+ os.path.join(remotepath, filename), f)
+
+ def getObject(self, remoteKey):
+ obj = self.client.get_object(Bucket=self.bucket_name, Key=remoteKey)
+
+ def putObject(self, body, remoteKey):
+ # bytes or seekable file-like object
+ obj = self.client.put_object(Bucket=self.bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+ def listDir(self, remoteClass):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+ def listFiles(self, foldernames):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/batch/batch_preprocessing/batch_function.py b/batch/batch_preprocessing/batch_function.py
index 63ba1ea..04493dc 100644
--- a/batch/batch_preprocessing/batch_function.py
+++ b/batch/batch_preprocessing/batch_function.py
@@ -1,4 +1,4 @@
-import dataset
+from dataset import Dataset
import argparse
from notification import notification
from algorithm import algorithm
@@ -26,17 +26,43 @@
params = vars(parser.parse_args())
+ if 'HOST_IP' in params.keys():
+ HOST_IP = params['HOST_IP']
+ params.pop('HOST_IP', None)
+ else:
+ HOST_IP = None
+
+ if 'AWS_ACCESSKEY' in params.keys():
+ AWS_ACCESSKEY = params['AWS_ACCESSKEY']
+ params.pop('AWS_ACCESSKEY', None)
+ else:
+ AWS_ACCESSKEY = None
+
+ if 'AWS_ACCESSKEYSECRET' in params.keys():
+ AWS_ACCESSKEYSECRET = params['AWS_ACCESSKEYSECRET']
+ params.pop('AWS_ACCESSKEYSECRET', None)
+ else:
+ AWS_ACCESSKEYSECRET = None
+
+ if 'BUCKET_NAME' in params.keys():
+ BUCKET_NAME = params['BUCKET_NAME']
+ params.pop('BUCKET_NAME', None)
+ else:
+ BUCKET_NAME = None
+
+ d = Dataset(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
# arranging the paths
- path = dataset.organize_path_lambda(params)
+ path = d.organize_path_lambda(params)
# save the config file
- urls['config'] = dataset.save_remote_output(path['localSavePath'],
+ urls['config'] = d.save_remote_output(path['localSavePath'],
path['remoteSavePath'],
'config',
params)
# prepare input dataset
- df = dataset.get_remote_input(path['remoteReadPath'],
+ df = d.get_remote_input(path['remoteReadPath'],
path['filename'],
path['localReadPath'])
@@ -46,7 +72,7 @@
# upload object to s3 bucket and return the url
for key, value in output.items():
if key != 'uid':
- urls[key] = dataset.save_remote_output(path['localSavePath'],
+ urls[key] = d.save_remote_output(path['localSavePath'],
path['remoteSavePath'],
key,
value)
diff --git a/batch/batch_preprocessing/dataset.py b/batch/batch_preprocessing/dataset.py
index c1bb7b5..f9728b5 100644
--- a/batch/batch_preprocessing/dataset.py
+++ b/batch/batch_preprocessing/dataset.py
@@ -4,145 +4,150 @@
import pickle
import pandas as pd
import types
-import writeToS3 as s3
-
-
-def organize_path_lambda(event):
- """
- parse the lambda handler parameter event to construct necessary paths for reading and storing data
- :param event: aws lambda parameters from handler
- :return: path dictionary
- """
- # arranging the paths
- localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
- localSavePath = os.path.join('/tmp',
- event['s3FolderName'] + event['resultPath'],
- event['uid'])
- remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
- event['uid'])
- if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
- remoteReadPath = remoteSavePath
- filename = event['labeledFilename']
- else:
- remoteReadPath = event['remoteReadPath']
- filename = remoteReadPath.split('/')[-2] + '.csv'
-
- if not os.path.exists(localSavePath):
- os.makedirs(localSavePath)
- if not os.path.exists(localReadPath):
- os.makedirs(localReadPath)
-
- path = {
- 'remoteReadPath': remoteReadPath,
- 'localReadPath': localReadPath,
- 'localSavePath': localSavePath,
- 'remoteSavePath': remoteSavePath,
- 'filename': filename
- }
-
- return path
-
-
-def get_remote_input(remoteReadPath, filename, localReadPath):
- """
- download input file from s3 bucket to a local location, and then load
- it to a pandas dataframe
- :param remoteReadPath: remote path in s3 to store the data
- :param localReadPath: local location to store the data, usually in /tmp
- :return: df: dataframe that contains the complete input file
- """
- s3.downloadToDisk(filename, localReadPath, remoteReadPath)
-
- # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
- # Array = 2D nested list holding column and row data
- Array = []
- try:
- with open(os.path.join(localReadPath, filename), 'r',
- encoding='utf-8', errors="ignore") as f:
- reader = csv.reader(f)
- try:
- for row in reader:
- Array.append(row)
- except Exception as e:
- print(e)
- except Exception:
- with open(os.path.join(localReadPath, filename), 'r',
- encoding='ISO-8859-1', errors="ignore") as f:
- reader = csv.reader(f)
- try:
- for row in reader:
- Array.append(row)
- except Exception as e:
- print(e)
-
- # load to pandas dataframe
- df = pd.DataFrame(Array[1:], columns=Array[0])
-
- return df
-
-
-def save_remote_output(localSavePath, remoteSavePath, fname, output_data):
- """
- save output in memory first to local file, then upload to remote S3 bucket
- :param localSavePath: local saved file
- :param remoteSavePath: remote save file path
- :param fname: filename
- :param output_data: the actual data
- :return: url of the file saved in S3 bucket
- """
-
- # json
- if isinstance(output_data, dict):
- fname += '.json'
- with open(os.path.join(localSavePath, fname), 'w') as f:
- json.dump(output_data, f)
-
- # dataframe to csv
- elif isinstance(output_data, pd.DataFrame):
- fname += '.csv'
- output_data.to_csv(fname, encoding='utf-8')
-
- # string to html
- elif isinstance(output_data, str):
- fname += '.html'
- with open(os.path.join(localSavePath, fname), 'w') as f:
- f.write(output_data)
-
- # list(list) to csv
- elif isinstance(output_data, list) \
- and (isinstance(output_data[0], list) or isinstance(output_data[0],
- tuple)):
- fname += '.csv'
- with open(os.path.join(localSavePath, fname), 'w', newline='',
- encoding='utf-8') as f:
- writer = csv.writer(f)
- for row in output_data:
+from writeToS3 import WriteToS3
+
+
+class Dataset:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+ self.s3 = WriteToS3(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
+ def organize_path_lambda(self, event):
+ """
+ parse the lambda handler parameter event to construct necessary paths for reading and storing data
+ :param event: aws lambda parameters from handler
+ :return: path dictionary
+ """
+ # arranging the paths
+ localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
+ localSavePath = os.path.join('/tmp',
+ event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
+ remoteReadPath = remoteSavePath
+ filename = event['labeledFilename']
+ else:
+ remoteReadPath = event['remoteReadPath']
+ filename = remoteReadPath.split('/')[-2] + '.csv'
+
+ if not os.path.exists(localSavePath):
+ os.makedirs(localSavePath)
+ if not os.path.exists(localReadPath):
+ os.makedirs(localReadPath)
+
+ path = {
+ 'remoteReadPath': remoteReadPath,
+ 'localReadPath': localReadPath,
+ 'localSavePath': localSavePath,
+ 'remoteSavePath': remoteSavePath,
+ 'filename': filename
+ }
+
+ return path
+
+
+ def get_remote_input(self, remoteReadPath, filename, localReadPath):
+ """
+ download input file from s3 bucket to a local location, and then load
+ it to a pandas dataframe
+ :param remoteReadPath: remote path in s3 to store the data
+ :param localReadPath: local location to store the data, usually in /tmp
+ :return: df: dataframe that contains the complete input file
+ """
+ self.s3.downloadToDisk(filename, localReadPath, remoteReadPath)
+
+ # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
+ # Array = 2D nested list holding column and row data
+ Array = []
+ try:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='utf-8', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+ except Exception:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='ISO-8859-1', errors="ignore") as f:
+ reader = csv.reader(f)
try:
- writer.writerow(row)
- except UnicodeEncodeError as e:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
print(e)
- # special case
- elif isinstance(output_data, types.GeneratorType):
- if fname == 'gephi':
- fname += '.gml'
- elif fname == 'pajek':
- fname += '.net'
+ # load to pandas dataframe
+ df = pd.DataFrame(Array[1:], columns=Array[0])
+
+ return df
+
+
+ def save_remote_output(self, localSavePath, remoteSavePath, fname, output_data):
+ """
+ save output in memory first to local file, then upload to remote S3 bucket
+ :param localSavePath: local saved file
+ :param remoteSavePath: remote save file path
+ :param fname: filename
+ :param output_data: the actual data
+ :return: url of the file saved in S3 bucket
+ """
+
+ # json
+ if isinstance(output_data, dict):
+ fname += '.json'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ json.dump(output_data, f)
+
+ # dataframe to csv
+ elif isinstance(output_data, pd.DataFrame):
+ fname += '.csv'
+ output_data.to_csv(fname, encoding='utf-8')
+
+ # string to html
+ elif isinstance(output_data, str):
+ fname += '.html'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ f.write(output_data)
+
+ # list(list) to csv
+ elif isinstance(output_data, list) \
+ and (isinstance(output_data[0], list) or isinstance(output_data[0],
+ tuple)):
+ fname += '.csv'
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ writer = csv.writer(f)
+ for row in output_data:
+ try:
+ writer.writerow(row)
+ except UnicodeEncodeError as e:
+ print(e)
+
+ # special case
+ elif isinstance(output_data, types.GeneratorType):
+ if fname == 'gephi':
+ fname += '.gml'
+ elif fname == 'pajek':
+ fname += '.net'
+ else:
+ fname += '.unknown'
+
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ for line in output_data:
+ f.write(line + '\n')
+
+ # else pickle the object
else:
- fname += '.unknown'
-
- with open(os.path.join(localSavePath, fname), 'w', newline='',
- encoding='utf-8') as f:
- for line in output_data:
- f.write(line + '\n')
-
- # else pickle the object
- else:
- fname += '.pickle'
- with open(os.path.join(localSavePath, fname), 'wb') as f:
- pickle.dump(output_data, f)
+ fname += '.pickle'
+ with open(os.path.join(localSavePath, fname), 'wb') as f:
+ pickle.dump(output_data, f)
- s3.upload(localSavePath, remoteSavePath, fname)
- url = s3.generate_downloads(remoteSavePath, fname)
+ self.s3.upload(localSavePath, remoteSavePath, fname)
+ url = self.s3.generate_downloads(remoteSavePath, fname)
- return url
+ return url
diff --git a/batch/batch_preprocessing/writeToS3.py b/batch/batch_preprocessing/writeToS3.py
index 75b1999..51dbf78 100644
--- a/batch/batch_preprocessing/writeToS3.py
+++ b/batch/batch_preprocessing/writeToS3.py
@@ -1,72 +1,83 @@
-import boto3
-import os
import mimetypes
+import os
-client = boto3.client('s3')
-bucket_name = 'macroscope-smile'
-
-def upload(localpath, remotepath, filename):
- content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
- print(filename, content_type)
- if content_type == None:
- extra_args = {'ContentType':'application/octet-stream'}
- else:
- extra_args = {'ContentType':content_type}
-
- client.upload_file(os.path.join(localpath, filename),
- bucket_name,
- os.path.join(remotepath, filename),
- ExtraArgs=extra_args)
-
-
-def createDirectory(DirectoryName):
- client.put_object(Bucket=bucket_name, Key=DirectoryName)
-
-
-def generate_downloads(remotepath, filename):
- url = client.generate_presigned_url(
- ClientMethod='get_object',
- Params={
- 'Bucket': bucket_name,
- 'Key': os.path.join(remotepath, filename)
- },
- ExpiresIn=604800 # one week
- )
-
- return url
-
-
-def downloadToDisk(filename, localpath, remotepath):
- with open(os.path.join(localpath, filename), 'wb') as f:
- client.download_fileobj(bucket_name,
- os.path.join(remotepath, filename), f)
-
-
-def getObject(remoteKey):
- obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
-
-
-def putObject(body, remoteKey):
- # bytes or seekable file-like object
- obj = client.put_object(Bucket=bucket_name,
- Body=body, Key=remoteKey)
- print(obj['Body'].read())
-
-def listDir(remoteClass):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=remoteClass,
- Delimiter='/')
- foldernames = []
- for o in objects.get('CommonPrefixes'):
- foldernames.append(o.get('Prefix'))
-
- # only return the list of foldernames
- return foldernames
-
-
-def listFiles(foldernames):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=foldernames)
-
- # return rich information about the files
- return objects.get('Contents')
+import boto3
+from botocore.client import Config
+
+
+class WriteToS3:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+
+ # local minio s3
+ if HOST_IP and AWS_ACCESSKEY and AWS_ACCESSKEYSECRET and BUCKET_NAME:
+ self.client = boto3.client('s3', endpoint_url='http://' + HOST_IP + ':9000',
+ aws_access_key_id=AWS_ACCESSKEY,
+ aws_secret_access_key=AWS_ACCESSKEYSECRET,
+ config=Config(signature_version='s3v4'))
+ self.bucket_name = BUCKET_NAME
+
+ # remote aws s3
+ else:
+ self.client = boto3.client('s3')
+ self.bucket_name = 'macroscope-smile'
+
+ def upload(self, localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath, filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType': 'application/octet-stream'}
+ else:
+ extra_args = {'ContentType': content_type}
+
+ self.client.upload_file(os.path.join(localpath, filename),
+ self.bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+ def createDirectory(self, DirectoryName):
+ self.client.put_object(Bucket=self.bucket_name, Key=DirectoryName)
+
+ def generate_downloads(self, remotepath, filename):
+ url = self.client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': self.bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+ def downloadToDisk(self, filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ self.client.download_fileobj(self.bucket_name,
+ os.path.join(remotepath, filename), f)
+
+ def getObject(self, remoteKey):
+ obj = self.client.get_object(Bucket=self.bucket_name, Key=remoteKey)
+
+ def putObject(self, body, remoteKey):
+ # bytes or seekable file-like object
+ obj = self.client.put_object(Bucket=self.bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+ def listDir(self, remoteClass):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+ def listFiles(self, foldernames):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/batch/batch_reddit_comment/RedditComment.py b/batch/batch_reddit_comment/RedditComment.py
new file mode 100644
index 0000000..8331bf0
--- /dev/null
+++ b/batch/batch_reddit_comment/RedditComment.py
@@ -0,0 +1,177 @@
+import argparse
+import csv
+import os
+import shutil
+import uuid
+import zipfile
+
+import notification as n
+import pandas as pd
+import praw
+from writeToS3 import WriteToS3
+
+
+def deletedir(dir):
+ shutil.rmtree(dir)
+
+
+def getFolderSize(folder):
+ total_size = os.path.getsize(folder)
+ for item in os.listdir(folder):
+ itempath = os.path.join(folder, item)
+ if os.path.isfile(itempath):
+ total_size += os.path.getsize(itempath)
+ elif os.path.isdir(itempath):
+ total_size += getFolderSize(itempath)
+ return total_size
+
+
+def zipdir(path, ziph):
+ # ziph is zipfile handle
+ for root, dirs, files in os.walk(path):
+ for file in files:
+ ziph.write(os.path.join(root, file), file)
+
+
+def bfs(submission, id, directory):
+ # expand comments
+ submission.comments.replace_more(limit=None)
+ comment_queue = submission.comments[:] # Seed with top-level
+ comments_no_order = [['author', 'body', 'created_utc', 'id', 'link_id',
+ 'parent_id', 'score', 'subreddit_display_name', 'subreddit_name_prefixed', 'subreddit_id']]
+ while comment_queue:
+ comment = comment_queue.pop(0)
+ comments_no_order.append([str(comment.author),
+ comment.body, comment.created_utc, comment.id, comment.link_id,
+ comment.parent_id, comment.score, comment.subreddit.display_name,
+ comment.subreddit_name_prefixed, comment.subreddit_id])
+ comment_queue.extend(comment.replies)
+
+ # save to csv
+ with open(os.path.join(directory, id + '.csv'), 'w', newline="", encoding='utf-8') as f:
+ writer = csv.writer(f, delimiter=',')
+ for c in comments_no_order:
+ try:
+ writer.writerow(c)
+ except:
+ print('encoding error')
+
+
+if __name__ == '__main__':
+
+ parser = argparse.ArgumentParser(description="Processing...")
+ parser.add_argument('--email', required=True)
+ parser.add_argument('--remoteReadPath', required=True)
+ parser.add_argument('--s3FolderName', required=True)
+ parser.add_argument('--sessionURL', required=True)
+
+ # user specified parameters
+ parsed, unknown = parser.parse_known_args()
+ for arg in unknown:
+ if arg.startswith("--"):
+ parser.add_argument(arg, required=False)
+
+ params = vars(parser.parse_args())
+
+ if 'HOST_IP' in params.keys():
+ HOST_IP = params['HOST_IP']
+ params.pop('HOST_IP', None)
+ else:
+ HOST_IP = None
+
+ if 'AWS_ACCESSKEY' in params.keys():
+ AWS_ACCESSKEY = params['AWS_ACCESSKEY']
+ params.pop('AWS_ACCESSKEY', None)
+ else:
+ AWS_ACCESSKEY = None
+
+ if 'AWS_ACCESSKEYSECRET' in params.keys():
+ AWS_ACCESSKEYSECRET = params['AWS_ACCESSKEYSECRET']
+ params.pop('AWS_ACCESSKEYSECRET', None)
+ else:
+ AWS_ACCESSKEYSECRET = None
+
+ if 'BUCKET_NAME' in params.keys():
+ BUCKET_NAME = params['BUCKET_NAME']
+ params.pop('BUCKET_NAME', None)
+ else:
+ BUCKET_NAME = None
+
+ uid = str(uuid.uuid4())
+ temp_dir = os.path.join('/tmp', params['s3FolderName'], uid)
+ if not os.path.exists(temp_dir):
+ os.makedirs(temp_dir)
+
+ # configure output directory
+ # save it in download/temp/xxx-xxxxxxxxxxxxx-xxxxx/aww-comments
+
+ file = params['remoteReadPath'].split('/')[-2]
+ fname_zip = file + '.zip'
+ comments_folder = os.path.join(temp_dir, file + '-comments')
+ if not os.path.exists(comments_folder):
+ os.makedirs(comments_folder)
+
+ s3 = WriteToS3(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
+ s3.downloadToDisk(filename=file + '.csv', localpath=temp_dir, remotepath=params['remoteReadPath'])
+ Array = []
+ try:
+ with open(os.path.join(temp_dir, file + '.csv'), 'r', encoding='utf-8') as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ pass
+
+ except:
+ with open(os.path.join(temp_dir, file + '.csv'), 'r', encoding="ISO-8859-1") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ pass
+
+ df = pd.DataFrame(Array[1:], columns=Array[0])
+ headers = df.columns.values.tolist()
+ if 'permalink' in headers and 'id' in headers:
+ urls = df['permalink'].dropna().astype('str').tolist()
+ ids = df['id'].dropna().astype('str').tolist()
+ elif '_source.permalink' in headers and '_source.id' in headers:
+ urls = df['_source.permalink'].dropna().astype('str').tolist()
+ ids = df['_source.id'].dropna().astype('str').tolist()
+ else:
+ deletedir('/tmp')
+ n.notification(params['email'], case=0, filename='', links='', sessionURL=params['sessionURL'])
+ raise ValueError('The Reddit post collection provided does not have permalink and/or id in it.')
+
+ # praw construct submission
+ # here need to subtitute reddit client id and reddit client secret in the container with real token
+ reddit = praw.Reddit(user_agent='Comment Extraction (by /u/USERNAME)',
+ client_id=os.environ['REDDIT_CLIENT_ID'], client_secret=os.environ['REDDIT_CLIENT_SECRET'])
+
+ # loop through the id and store their comments
+ for url, id in zip(urls, ids):
+ url = "https://www.reddit.com" + url
+ try:
+ submission = reddit.submission(url=url)
+ bfs(submission, id, comments_folder)
+ except:
+ print("The url " + url + " is not valid.")
+
+ # success and send email notification
+ # zip goes here
+ zipf = zipfile.ZipFile(os.path.join(temp_dir, fname_zip), 'w')
+ zipdir(comments_folder, zipf)
+ zipf.close()
+
+ # upload this zip to the s3 corresponding folder
+ s3.upload(temp_dir, params['remoteReadPath'], fname_zip)
+ url = s3.generate_downloads(params['remoteReadPath'], fname_zip)
+
+ # delete the files
+ deletedir('/tmp')
+
+ # send out email notification
+ n.notification(params['email'], case=2, filename=params['remoteReadPath'], links=url, sessionURL=params['sessionURL'])
diff --git a/batch/batch_reddit_comment/dockerfile b/batch/batch_reddit_comment/dockerfile
new file mode 100644
index 0000000..1417079
--- /dev/null
+++ b/batch/batch_reddit_comment/dockerfile
@@ -0,0 +1,16 @@
+FROM ubuntu:18.04
+
+RUN apt-get -qq -y update && apt-get -qq -y install cron
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+# copy paste python scripts
+COPY . ./
+
+# install dependency libraries
+RUN apt-get update
+RUN apt-get -y install python3-pip
+
+# install dependency libraries and download required data
+RUN pip3 install -r requirement.txt
\ No newline at end of file
diff --git a/image_crawler/notification.py b/batch/batch_reddit_comment/notification.py
similarity index 100%
rename from image_crawler/notification.py
rename to batch/batch_reddit_comment/notification.py
diff --git a/batch/batch_reddit_comment/requirement.txt b/batch/batch_reddit_comment/requirement.txt
new file mode 100644
index 0000000..4ec9e6e
--- /dev/null
+++ b/batch/batch_reddit_comment/requirement.txt
@@ -0,0 +1,4 @@
+requests==2.21.0
+pandas==0.24.1
+boto3==1.6.11
+praw>=6.5.1
\ No newline at end of file
diff --git a/batch/batch_reddit_comment/writeToS3.py b/batch/batch_reddit_comment/writeToS3.py
new file mode 100644
index 0000000..51dbf78
--- /dev/null
+++ b/batch/batch_reddit_comment/writeToS3.py
@@ -0,0 +1,83 @@
+import mimetypes
+import os
+
+import boto3
+from botocore.client import Config
+
+
+class WriteToS3:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+
+ # local minio s3
+ if HOST_IP and AWS_ACCESSKEY and AWS_ACCESSKEYSECRET and BUCKET_NAME:
+ self.client = boto3.client('s3', endpoint_url='http://' + HOST_IP + ':9000',
+ aws_access_key_id=AWS_ACCESSKEY,
+ aws_secret_access_key=AWS_ACCESSKEYSECRET,
+ config=Config(signature_version='s3v4'))
+ self.bucket_name = BUCKET_NAME
+
+ # remote aws s3
+ else:
+ self.client = boto3.client('s3')
+ self.bucket_name = 'macroscope-smile'
+
+ def upload(self, localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath, filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType': 'application/octet-stream'}
+ else:
+ extra_args = {'ContentType': content_type}
+
+ self.client.upload_file(os.path.join(localpath, filename),
+ self.bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+ def createDirectory(self, DirectoryName):
+ self.client.put_object(Bucket=self.bucket_name, Key=DirectoryName)
+
+ def generate_downloads(self, remotepath, filename):
+ url = self.client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': self.bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+ def downloadToDisk(self, filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ self.client.download_fileobj(self.bucket_name,
+ os.path.join(remotepath, filename), f)
+
+ def getObject(self, remoteKey):
+ obj = self.client.get_object(Bucket=self.bucket_name, Key=remoteKey)
+
+ def putObject(self, body, remoteKey):
+ # bytes or seekable file-like object
+ obj = self.client.put_object(Bucket=self.bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+ def listDir(self, remoteClass):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+ def listFiles(self, foldernames):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/batch/batch_sentiment_analysis/batch_function.py b/batch/batch_sentiment_analysis/batch_function.py
index 63ba1ea..04493dc 100644
--- a/batch/batch_sentiment_analysis/batch_function.py
+++ b/batch/batch_sentiment_analysis/batch_function.py
@@ -1,4 +1,4 @@
-import dataset
+from dataset import Dataset
import argparse
from notification import notification
from algorithm import algorithm
@@ -26,17 +26,43 @@
params = vars(parser.parse_args())
+ if 'HOST_IP' in params.keys():
+ HOST_IP = params['HOST_IP']
+ params.pop('HOST_IP', None)
+ else:
+ HOST_IP = None
+
+ if 'AWS_ACCESSKEY' in params.keys():
+ AWS_ACCESSKEY = params['AWS_ACCESSKEY']
+ params.pop('AWS_ACCESSKEY', None)
+ else:
+ AWS_ACCESSKEY = None
+
+ if 'AWS_ACCESSKEYSECRET' in params.keys():
+ AWS_ACCESSKEYSECRET = params['AWS_ACCESSKEYSECRET']
+ params.pop('AWS_ACCESSKEYSECRET', None)
+ else:
+ AWS_ACCESSKEYSECRET = None
+
+ if 'BUCKET_NAME' in params.keys():
+ BUCKET_NAME = params['BUCKET_NAME']
+ params.pop('BUCKET_NAME', None)
+ else:
+ BUCKET_NAME = None
+
+ d = Dataset(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
# arranging the paths
- path = dataset.organize_path_lambda(params)
+ path = d.organize_path_lambda(params)
# save the config file
- urls['config'] = dataset.save_remote_output(path['localSavePath'],
+ urls['config'] = d.save_remote_output(path['localSavePath'],
path['remoteSavePath'],
'config',
params)
# prepare input dataset
- df = dataset.get_remote_input(path['remoteReadPath'],
+ df = d.get_remote_input(path['remoteReadPath'],
path['filename'],
path['localReadPath'])
@@ -46,7 +72,7 @@
# upload object to s3 bucket and return the url
for key, value in output.items():
if key != 'uid':
- urls[key] = dataset.save_remote_output(path['localSavePath'],
+ urls[key] = d.save_remote_output(path['localSavePath'],
path['remoteSavePath'],
key,
value)
diff --git a/batch/batch_sentiment_analysis/dataset.py b/batch/batch_sentiment_analysis/dataset.py
index c1bb7b5..f9728b5 100644
--- a/batch/batch_sentiment_analysis/dataset.py
+++ b/batch/batch_sentiment_analysis/dataset.py
@@ -4,145 +4,150 @@
import pickle
import pandas as pd
import types
-import writeToS3 as s3
-
-
-def organize_path_lambda(event):
- """
- parse the lambda handler parameter event to construct necessary paths for reading and storing data
- :param event: aws lambda parameters from handler
- :return: path dictionary
- """
- # arranging the paths
- localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
- localSavePath = os.path.join('/tmp',
- event['s3FolderName'] + event['resultPath'],
- event['uid'])
- remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
- event['uid'])
- if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
- remoteReadPath = remoteSavePath
- filename = event['labeledFilename']
- else:
- remoteReadPath = event['remoteReadPath']
- filename = remoteReadPath.split('/')[-2] + '.csv'
-
- if not os.path.exists(localSavePath):
- os.makedirs(localSavePath)
- if not os.path.exists(localReadPath):
- os.makedirs(localReadPath)
-
- path = {
- 'remoteReadPath': remoteReadPath,
- 'localReadPath': localReadPath,
- 'localSavePath': localSavePath,
- 'remoteSavePath': remoteSavePath,
- 'filename': filename
- }
-
- return path
-
-
-def get_remote_input(remoteReadPath, filename, localReadPath):
- """
- download input file from s3 bucket to a local location, and then load
- it to a pandas dataframe
- :param remoteReadPath: remote path in s3 to store the data
- :param localReadPath: local location to store the data, usually in /tmp
- :return: df: dataframe that contains the complete input file
- """
- s3.downloadToDisk(filename, localReadPath, remoteReadPath)
-
- # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
- # Array = 2D nested list holding column and row data
- Array = []
- try:
- with open(os.path.join(localReadPath, filename), 'r',
- encoding='utf-8', errors="ignore") as f:
- reader = csv.reader(f)
- try:
- for row in reader:
- Array.append(row)
- except Exception as e:
- print(e)
- except Exception:
- with open(os.path.join(localReadPath, filename), 'r',
- encoding='ISO-8859-1', errors="ignore") as f:
- reader = csv.reader(f)
- try:
- for row in reader:
- Array.append(row)
- except Exception as e:
- print(e)
-
- # load to pandas dataframe
- df = pd.DataFrame(Array[1:], columns=Array[0])
-
- return df
-
-
-def save_remote_output(localSavePath, remoteSavePath, fname, output_data):
- """
- save output in memory first to local file, then upload to remote S3 bucket
- :param localSavePath: local saved file
- :param remoteSavePath: remote save file path
- :param fname: filename
- :param output_data: the actual data
- :return: url of the file saved in S3 bucket
- """
-
- # json
- if isinstance(output_data, dict):
- fname += '.json'
- with open(os.path.join(localSavePath, fname), 'w') as f:
- json.dump(output_data, f)
-
- # dataframe to csv
- elif isinstance(output_data, pd.DataFrame):
- fname += '.csv'
- output_data.to_csv(fname, encoding='utf-8')
-
- # string to html
- elif isinstance(output_data, str):
- fname += '.html'
- with open(os.path.join(localSavePath, fname), 'w') as f:
- f.write(output_data)
-
- # list(list) to csv
- elif isinstance(output_data, list) \
- and (isinstance(output_data[0], list) or isinstance(output_data[0],
- tuple)):
- fname += '.csv'
- with open(os.path.join(localSavePath, fname), 'w', newline='',
- encoding='utf-8') as f:
- writer = csv.writer(f)
- for row in output_data:
+from writeToS3 import WriteToS3
+
+
+class Dataset:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+ self.s3 = WriteToS3(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
+ def organize_path_lambda(self, event):
+ """
+ parse the lambda handler parameter event to construct necessary paths for reading and storing data
+ :param event: aws lambda parameters from handler
+ :return: path dictionary
+ """
+ # arranging the paths
+ localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
+ localSavePath = os.path.join('/tmp',
+ event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
+ remoteReadPath = remoteSavePath
+ filename = event['labeledFilename']
+ else:
+ remoteReadPath = event['remoteReadPath']
+ filename = remoteReadPath.split('/')[-2] + '.csv'
+
+ if not os.path.exists(localSavePath):
+ os.makedirs(localSavePath)
+ if not os.path.exists(localReadPath):
+ os.makedirs(localReadPath)
+
+ path = {
+ 'remoteReadPath': remoteReadPath,
+ 'localReadPath': localReadPath,
+ 'localSavePath': localSavePath,
+ 'remoteSavePath': remoteSavePath,
+ 'filename': filename
+ }
+
+ return path
+
+
+ def get_remote_input(self, remoteReadPath, filename, localReadPath):
+ """
+ download input file from s3 bucket to a local location, and then load
+ it to a pandas dataframe
+ :param remoteReadPath: remote path in s3 to store the data
+ :param localReadPath: local location to store the data, usually in /tmp
+ :return: df: dataframe that contains the complete input file
+ """
+ self.s3.downloadToDisk(filename, localReadPath, remoteReadPath)
+
+ # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
+ # Array = 2D nested list holding column and row data
+ Array = []
+ try:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='utf-8', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+ except Exception:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='ISO-8859-1', errors="ignore") as f:
+ reader = csv.reader(f)
try:
- writer.writerow(row)
- except UnicodeEncodeError as e:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
print(e)
- # special case
- elif isinstance(output_data, types.GeneratorType):
- if fname == 'gephi':
- fname += '.gml'
- elif fname == 'pajek':
- fname += '.net'
+ # load to pandas dataframe
+ df = pd.DataFrame(Array[1:], columns=Array[0])
+
+ return df
+
+
+ def save_remote_output(self, localSavePath, remoteSavePath, fname, output_data):
+ """
+ save output in memory first to local file, then upload to remote S3 bucket
+ :param localSavePath: local saved file
+ :param remoteSavePath: remote save file path
+ :param fname: filename
+ :param output_data: the actual data
+ :return: url of the file saved in S3 bucket
+ """
+
+ # json
+ if isinstance(output_data, dict):
+ fname += '.json'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ json.dump(output_data, f)
+
+ # dataframe to csv
+ elif isinstance(output_data, pd.DataFrame):
+ fname += '.csv'
+ output_data.to_csv(fname, encoding='utf-8')
+
+ # string to html
+ elif isinstance(output_data, str):
+ fname += '.html'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ f.write(output_data)
+
+ # list(list) to csv
+ elif isinstance(output_data, list) \
+ and (isinstance(output_data[0], list) or isinstance(output_data[0],
+ tuple)):
+ fname += '.csv'
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ writer = csv.writer(f)
+ for row in output_data:
+ try:
+ writer.writerow(row)
+ except UnicodeEncodeError as e:
+ print(e)
+
+ # special case
+ elif isinstance(output_data, types.GeneratorType):
+ if fname == 'gephi':
+ fname += '.gml'
+ elif fname == 'pajek':
+ fname += '.net'
+ else:
+ fname += '.unknown'
+
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ for line in output_data:
+ f.write(line + '\n')
+
+ # else pickle the object
else:
- fname += '.unknown'
-
- with open(os.path.join(localSavePath, fname), 'w', newline='',
- encoding='utf-8') as f:
- for line in output_data:
- f.write(line + '\n')
-
- # else pickle the object
- else:
- fname += '.pickle'
- with open(os.path.join(localSavePath, fname), 'wb') as f:
- pickle.dump(output_data, f)
+ fname += '.pickle'
+ with open(os.path.join(localSavePath, fname), 'wb') as f:
+ pickle.dump(output_data, f)
- s3.upload(localSavePath, remoteSavePath, fname)
- url = s3.generate_downloads(remoteSavePath, fname)
+ self.s3.upload(localSavePath, remoteSavePath, fname)
+ url = self.s3.generate_downloads(remoteSavePath, fname)
- return url
+ return url
diff --git a/batch/batch_sentiment_analysis/dockerfile b/batch/batch_sentiment_analysis/dockerfile
index ab50d03..3dd6487 100644
--- a/batch/batch_sentiment_analysis/dockerfile
+++ b/batch/batch_sentiment_analysis/dockerfile
@@ -12,4 +12,5 @@ RUN apt-get -y install python3-pip
# install dependency libraries and download required data
RUN pip3 install -r requirement.txt
-RUN python3 -m nltk.downloader -d /usr/local/share/nltk_data punkt vader_lexicon sentiwordnet
\ No newline at end of file
+RUN python3 -m nltk.downloader -d /usr/local/share/nltk_data stopwords wordnet punkt averaged_perceptron_tagger \
+vader_lexicon sentiwordnet
\ No newline at end of file
diff --git a/batch/batch_sentiment_analysis/writeToS3.py b/batch/batch_sentiment_analysis/writeToS3.py
index 75b1999..51dbf78 100644
--- a/batch/batch_sentiment_analysis/writeToS3.py
+++ b/batch/batch_sentiment_analysis/writeToS3.py
@@ -1,72 +1,83 @@
-import boto3
-import os
import mimetypes
+import os
-client = boto3.client('s3')
-bucket_name = 'macroscope-smile'
-
-def upload(localpath, remotepath, filename):
- content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
- print(filename, content_type)
- if content_type == None:
- extra_args = {'ContentType':'application/octet-stream'}
- else:
- extra_args = {'ContentType':content_type}
-
- client.upload_file(os.path.join(localpath, filename),
- bucket_name,
- os.path.join(remotepath, filename),
- ExtraArgs=extra_args)
-
-
-def createDirectory(DirectoryName):
- client.put_object(Bucket=bucket_name, Key=DirectoryName)
-
-
-def generate_downloads(remotepath, filename):
- url = client.generate_presigned_url(
- ClientMethod='get_object',
- Params={
- 'Bucket': bucket_name,
- 'Key': os.path.join(remotepath, filename)
- },
- ExpiresIn=604800 # one week
- )
-
- return url
-
-
-def downloadToDisk(filename, localpath, remotepath):
- with open(os.path.join(localpath, filename), 'wb') as f:
- client.download_fileobj(bucket_name,
- os.path.join(remotepath, filename), f)
-
-
-def getObject(remoteKey):
- obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
-
-
-def putObject(body, remoteKey):
- # bytes or seekable file-like object
- obj = client.put_object(Bucket=bucket_name,
- Body=body, Key=remoteKey)
- print(obj['Body'].read())
-
-def listDir(remoteClass):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=remoteClass,
- Delimiter='/')
- foldernames = []
- for o in objects.get('CommonPrefixes'):
- foldernames.append(o.get('Prefix'))
-
- # only return the list of foldernames
- return foldernames
-
-
-def listFiles(foldernames):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=foldernames)
-
- # return rich information about the files
- return objects.get('Contents')
+import boto3
+from botocore.client import Config
+
+
+class WriteToS3:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+
+ # local minio s3
+ if HOST_IP and AWS_ACCESSKEY and AWS_ACCESSKEYSECRET and BUCKET_NAME:
+ self.client = boto3.client('s3', endpoint_url='http://' + HOST_IP + ':9000',
+ aws_access_key_id=AWS_ACCESSKEY,
+ aws_secret_access_key=AWS_ACCESSKEYSECRET,
+ config=Config(signature_version='s3v4'))
+ self.bucket_name = BUCKET_NAME
+
+ # remote aws s3
+ else:
+ self.client = boto3.client('s3')
+ self.bucket_name = 'macroscope-smile'
+
+ def upload(self, localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath, filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType': 'application/octet-stream'}
+ else:
+ extra_args = {'ContentType': content_type}
+
+ self.client.upload_file(os.path.join(localpath, filename),
+ self.bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+ def createDirectory(self, DirectoryName):
+ self.client.put_object(Bucket=self.bucket_name, Key=DirectoryName)
+
+ def generate_downloads(self, remotepath, filename):
+ url = self.client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': self.bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+ def downloadToDisk(self, filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ self.client.download_fileobj(self.bucket_name,
+ os.path.join(remotepath, filename), f)
+
+ def getObject(self, remoteKey):
+ obj = self.client.get_object(Bucket=self.bucket_name, Key=remoteKey)
+
+ def putObject(self, body, remoteKey):
+ # bytes or seekable file-like object
+ obj = self.client.put_object(Bucket=self.bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+ def listDir(self, remoteClass):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+ def listFiles(self, foldernames):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/batch/batch_topic_modeling/batch_function.py b/batch/batch_topic_modeling/batch_function.py
index 63ba1ea..04493dc 100644
--- a/batch/batch_topic_modeling/batch_function.py
+++ b/batch/batch_topic_modeling/batch_function.py
@@ -1,4 +1,4 @@
-import dataset
+from dataset import Dataset
import argparse
from notification import notification
from algorithm import algorithm
@@ -26,17 +26,43 @@
params = vars(parser.parse_args())
+ if 'HOST_IP' in params.keys():
+ HOST_IP = params['HOST_IP']
+ params.pop('HOST_IP', None)
+ else:
+ HOST_IP = None
+
+ if 'AWS_ACCESSKEY' in params.keys():
+ AWS_ACCESSKEY = params['AWS_ACCESSKEY']
+ params.pop('AWS_ACCESSKEY', None)
+ else:
+ AWS_ACCESSKEY = None
+
+ if 'AWS_ACCESSKEYSECRET' in params.keys():
+ AWS_ACCESSKEYSECRET = params['AWS_ACCESSKEYSECRET']
+ params.pop('AWS_ACCESSKEYSECRET', None)
+ else:
+ AWS_ACCESSKEYSECRET = None
+
+ if 'BUCKET_NAME' in params.keys():
+ BUCKET_NAME = params['BUCKET_NAME']
+ params.pop('BUCKET_NAME', None)
+ else:
+ BUCKET_NAME = None
+
+ d = Dataset(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
# arranging the paths
- path = dataset.organize_path_lambda(params)
+ path = d.organize_path_lambda(params)
# save the config file
- urls['config'] = dataset.save_remote_output(path['localSavePath'],
+ urls['config'] = d.save_remote_output(path['localSavePath'],
path['remoteSavePath'],
'config',
params)
# prepare input dataset
- df = dataset.get_remote_input(path['remoteReadPath'],
+ df = d.get_remote_input(path['remoteReadPath'],
path['filename'],
path['localReadPath'])
@@ -46,7 +72,7 @@
# upload object to s3 bucket and return the url
for key, value in output.items():
if key != 'uid':
- urls[key] = dataset.save_remote_output(path['localSavePath'],
+ urls[key] = d.save_remote_output(path['localSavePath'],
path['remoteSavePath'],
key,
value)
diff --git a/batch/batch_topic_modeling/dataset.py b/batch/batch_topic_modeling/dataset.py
index c1bb7b5..f9728b5 100644
--- a/batch/batch_topic_modeling/dataset.py
+++ b/batch/batch_topic_modeling/dataset.py
@@ -4,145 +4,150 @@
import pickle
import pandas as pd
import types
-import writeToS3 as s3
-
-
-def organize_path_lambda(event):
- """
- parse the lambda handler parameter event to construct necessary paths for reading and storing data
- :param event: aws lambda parameters from handler
- :return: path dictionary
- """
- # arranging the paths
- localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
- localSavePath = os.path.join('/tmp',
- event['s3FolderName'] + event['resultPath'],
- event['uid'])
- remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
- event['uid'])
- if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
- remoteReadPath = remoteSavePath
- filename = event['labeledFilename']
- else:
- remoteReadPath = event['remoteReadPath']
- filename = remoteReadPath.split('/')[-2] + '.csv'
-
- if not os.path.exists(localSavePath):
- os.makedirs(localSavePath)
- if not os.path.exists(localReadPath):
- os.makedirs(localReadPath)
-
- path = {
- 'remoteReadPath': remoteReadPath,
- 'localReadPath': localReadPath,
- 'localSavePath': localSavePath,
- 'remoteSavePath': remoteSavePath,
- 'filename': filename
- }
-
- return path
-
-
-def get_remote_input(remoteReadPath, filename, localReadPath):
- """
- download input file from s3 bucket to a local location, and then load
- it to a pandas dataframe
- :param remoteReadPath: remote path in s3 to store the data
- :param localReadPath: local location to store the data, usually in /tmp
- :return: df: dataframe that contains the complete input file
- """
- s3.downloadToDisk(filename, localReadPath, remoteReadPath)
-
- # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
- # Array = 2D nested list holding column and row data
- Array = []
- try:
- with open(os.path.join(localReadPath, filename), 'r',
- encoding='utf-8', errors="ignore") as f:
- reader = csv.reader(f)
- try:
- for row in reader:
- Array.append(row)
- except Exception as e:
- print(e)
- except Exception:
- with open(os.path.join(localReadPath, filename), 'r',
- encoding='ISO-8859-1', errors="ignore") as f:
- reader = csv.reader(f)
- try:
- for row in reader:
- Array.append(row)
- except Exception as e:
- print(e)
-
- # load to pandas dataframe
- df = pd.DataFrame(Array[1:], columns=Array[0])
-
- return df
-
-
-def save_remote_output(localSavePath, remoteSavePath, fname, output_data):
- """
- save output in memory first to local file, then upload to remote S3 bucket
- :param localSavePath: local saved file
- :param remoteSavePath: remote save file path
- :param fname: filename
- :param output_data: the actual data
- :return: url of the file saved in S3 bucket
- """
-
- # json
- if isinstance(output_data, dict):
- fname += '.json'
- with open(os.path.join(localSavePath, fname), 'w') as f:
- json.dump(output_data, f)
-
- # dataframe to csv
- elif isinstance(output_data, pd.DataFrame):
- fname += '.csv'
- output_data.to_csv(fname, encoding='utf-8')
-
- # string to html
- elif isinstance(output_data, str):
- fname += '.html'
- with open(os.path.join(localSavePath, fname), 'w') as f:
- f.write(output_data)
-
- # list(list) to csv
- elif isinstance(output_data, list) \
- and (isinstance(output_data[0], list) or isinstance(output_data[0],
- tuple)):
- fname += '.csv'
- with open(os.path.join(localSavePath, fname), 'w', newline='',
- encoding='utf-8') as f:
- writer = csv.writer(f)
- for row in output_data:
+from writeToS3 import WriteToS3
+
+
+class Dataset:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+ self.s3 = WriteToS3(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
+ def organize_path_lambda(self, event):
+ """
+ parse the lambda handler parameter event to construct necessary paths for reading and storing data
+ :param event: aws lambda parameters from handler
+ :return: path dictionary
+ """
+ # arranging the paths
+ localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
+ localSavePath = os.path.join('/tmp',
+ event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
+ remoteReadPath = remoteSavePath
+ filename = event['labeledFilename']
+ else:
+ remoteReadPath = event['remoteReadPath']
+ filename = remoteReadPath.split('/')[-2] + '.csv'
+
+ if not os.path.exists(localSavePath):
+ os.makedirs(localSavePath)
+ if not os.path.exists(localReadPath):
+ os.makedirs(localReadPath)
+
+ path = {
+ 'remoteReadPath': remoteReadPath,
+ 'localReadPath': localReadPath,
+ 'localSavePath': localSavePath,
+ 'remoteSavePath': remoteSavePath,
+ 'filename': filename
+ }
+
+ return path
+
+
+ def get_remote_input(self, remoteReadPath, filename, localReadPath):
+ """
+ download input file from s3 bucket to a local location, and then load
+ it to a pandas dataframe
+ :param remoteReadPath: remote path in s3 to store the data
+ :param localReadPath: local location to store the data, usually in /tmp
+ :return: df: dataframe that contains the complete input file
+ """
+ self.s3.downloadToDisk(filename, localReadPath, remoteReadPath)
+
+ # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
+ # Array = 2D nested list holding column and row data
+ Array = []
+ try:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='utf-8', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+ except Exception:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='ISO-8859-1', errors="ignore") as f:
+ reader = csv.reader(f)
try:
- writer.writerow(row)
- except UnicodeEncodeError as e:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
print(e)
- # special case
- elif isinstance(output_data, types.GeneratorType):
- if fname == 'gephi':
- fname += '.gml'
- elif fname == 'pajek':
- fname += '.net'
+ # load to pandas dataframe
+ df = pd.DataFrame(Array[1:], columns=Array[0])
+
+ return df
+
+
+ def save_remote_output(self, localSavePath, remoteSavePath, fname, output_data):
+ """
+ save output in memory first to local file, then upload to remote S3 bucket
+ :param localSavePath: local saved file
+ :param remoteSavePath: remote save file path
+ :param fname: filename
+ :param output_data: the actual data
+ :return: url of the file saved in S3 bucket
+ """
+
+ # json
+ if isinstance(output_data, dict):
+ fname += '.json'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ json.dump(output_data, f)
+
+ # dataframe to csv
+ elif isinstance(output_data, pd.DataFrame):
+ fname += '.csv'
+ output_data.to_csv(fname, encoding='utf-8')
+
+ # string to html
+ elif isinstance(output_data, str):
+ fname += '.html'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ f.write(output_data)
+
+ # list(list) to csv
+ elif isinstance(output_data, list) \
+ and (isinstance(output_data[0], list) or isinstance(output_data[0],
+ tuple)):
+ fname += '.csv'
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ writer = csv.writer(f)
+ for row in output_data:
+ try:
+ writer.writerow(row)
+ except UnicodeEncodeError as e:
+ print(e)
+
+ # special case
+ elif isinstance(output_data, types.GeneratorType):
+ if fname == 'gephi':
+ fname += '.gml'
+ elif fname == 'pajek':
+ fname += '.net'
+ else:
+ fname += '.unknown'
+
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ for line in output_data:
+ f.write(line + '\n')
+
+ # else pickle the object
else:
- fname += '.unknown'
-
- with open(os.path.join(localSavePath, fname), 'w', newline='',
- encoding='utf-8') as f:
- for line in output_data:
- f.write(line + '\n')
-
- # else pickle the object
- else:
- fname += '.pickle'
- with open(os.path.join(localSavePath, fname), 'wb') as f:
- pickle.dump(output_data, f)
+ fname += '.pickle'
+ with open(os.path.join(localSavePath, fname), 'wb') as f:
+ pickle.dump(output_data, f)
- s3.upload(localSavePath, remoteSavePath, fname)
- url = s3.generate_downloads(remoteSavePath, fname)
+ self.s3.upload(localSavePath, remoteSavePath, fname)
+ url = self.s3.generate_downloads(remoteSavePath, fname)
- return url
+ return url
diff --git a/batch/batch_topic_modeling/writeToS3.py b/batch/batch_topic_modeling/writeToS3.py
index 75b1999..51dbf78 100644
--- a/batch/batch_topic_modeling/writeToS3.py
+++ b/batch/batch_topic_modeling/writeToS3.py
@@ -1,72 +1,83 @@
-import boto3
-import os
import mimetypes
+import os
-client = boto3.client('s3')
-bucket_name = 'macroscope-smile'
-
-def upload(localpath, remotepath, filename):
- content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
- print(filename, content_type)
- if content_type == None:
- extra_args = {'ContentType':'application/octet-stream'}
- else:
- extra_args = {'ContentType':content_type}
-
- client.upload_file(os.path.join(localpath, filename),
- bucket_name,
- os.path.join(remotepath, filename),
- ExtraArgs=extra_args)
-
-
-def createDirectory(DirectoryName):
- client.put_object(Bucket=bucket_name, Key=DirectoryName)
-
-
-def generate_downloads(remotepath, filename):
- url = client.generate_presigned_url(
- ClientMethod='get_object',
- Params={
- 'Bucket': bucket_name,
- 'Key': os.path.join(remotepath, filename)
- },
- ExpiresIn=604800 # one week
- )
-
- return url
-
-
-def downloadToDisk(filename, localpath, remotepath):
- with open(os.path.join(localpath, filename), 'wb') as f:
- client.download_fileobj(bucket_name,
- os.path.join(remotepath, filename), f)
-
-
-def getObject(remoteKey):
- obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
-
-
-def putObject(body, remoteKey):
- # bytes or seekable file-like object
- obj = client.put_object(Bucket=bucket_name,
- Body=body, Key=remoteKey)
- print(obj['Body'].read())
-
-def listDir(remoteClass):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=remoteClass,
- Delimiter='/')
- foldernames = []
- for o in objects.get('CommonPrefixes'):
- foldernames.append(o.get('Prefix'))
-
- # only return the list of foldernames
- return foldernames
-
-
-def listFiles(foldernames):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=foldernames)
-
- # return rich information about the files
- return objects.get('Contents')
+import boto3
+from botocore.client import Config
+
+
+class WriteToS3:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+
+ # local minio s3
+ if HOST_IP and AWS_ACCESSKEY and AWS_ACCESSKEYSECRET and BUCKET_NAME:
+ self.client = boto3.client('s3', endpoint_url='http://' + HOST_IP + ':9000',
+ aws_access_key_id=AWS_ACCESSKEY,
+ aws_secret_access_key=AWS_ACCESSKEYSECRET,
+ config=Config(signature_version='s3v4'))
+ self.bucket_name = BUCKET_NAME
+
+ # remote aws s3
+ else:
+ self.client = boto3.client('s3')
+ self.bucket_name = 'macroscope-smile'
+
+ def upload(self, localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath, filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType': 'application/octet-stream'}
+ else:
+ extra_args = {'ContentType': content_type}
+
+ self.client.upload_file(os.path.join(localpath, filename),
+ self.bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+ def createDirectory(self, DirectoryName):
+ self.client.put_object(Bucket=self.bucket_name, Key=DirectoryName)
+
+ def generate_downloads(self, remotepath, filename):
+ url = self.client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': self.bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+ def downloadToDisk(self, filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ self.client.download_fileobj(self.bucket_name,
+ os.path.join(remotepath, filename), f)
+
+ def getObject(self, remoteKey):
+ obj = self.client.get_object(Bucket=self.bucket_name, Key=remoteKey)
+
+ def putObject(self, body, remoteKey):
+ # bytes or seekable file-like object
+ obj = self.client.put_object(Bucket=self.bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+ def listDir(self, remoteClass):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+ def listFiles(self, foldernames):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/batch/batch_twitter_ner/batch_function.py b/batch/batch_twitter_ner/batch_function.py
index 63ba1ea..04493dc 100644
--- a/batch/batch_twitter_ner/batch_function.py
+++ b/batch/batch_twitter_ner/batch_function.py
@@ -1,4 +1,4 @@
-import dataset
+from dataset import Dataset
import argparse
from notification import notification
from algorithm import algorithm
@@ -26,17 +26,43 @@
params = vars(parser.parse_args())
+ if 'HOST_IP' in params.keys():
+ HOST_IP = params['HOST_IP']
+ params.pop('HOST_IP', None)
+ else:
+ HOST_IP = None
+
+ if 'AWS_ACCESSKEY' in params.keys():
+ AWS_ACCESSKEY = params['AWS_ACCESSKEY']
+ params.pop('AWS_ACCESSKEY', None)
+ else:
+ AWS_ACCESSKEY = None
+
+ if 'AWS_ACCESSKEYSECRET' in params.keys():
+ AWS_ACCESSKEYSECRET = params['AWS_ACCESSKEYSECRET']
+ params.pop('AWS_ACCESSKEYSECRET', None)
+ else:
+ AWS_ACCESSKEYSECRET = None
+
+ if 'BUCKET_NAME' in params.keys():
+ BUCKET_NAME = params['BUCKET_NAME']
+ params.pop('BUCKET_NAME', None)
+ else:
+ BUCKET_NAME = None
+
+ d = Dataset(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
# arranging the paths
- path = dataset.organize_path_lambda(params)
+ path = d.organize_path_lambda(params)
# save the config file
- urls['config'] = dataset.save_remote_output(path['localSavePath'],
+ urls['config'] = d.save_remote_output(path['localSavePath'],
path['remoteSavePath'],
'config',
params)
# prepare input dataset
- df = dataset.get_remote_input(path['remoteReadPath'],
+ df = d.get_remote_input(path['remoteReadPath'],
path['filename'],
path['localReadPath'])
@@ -46,7 +72,7 @@
# upload object to s3 bucket and return the url
for key, value in output.items():
if key != 'uid':
- urls[key] = dataset.save_remote_output(path['localSavePath'],
+ urls[key] = d.save_remote_output(path['localSavePath'],
path['remoteSavePath'],
key,
value)
diff --git a/batch/batch_twitter_ner/dataset.py b/batch/batch_twitter_ner/dataset.py
index c1bb7b5..5476234 100644
--- a/batch/batch_twitter_ner/dataset.py
+++ b/batch/batch_twitter_ner/dataset.py
@@ -4,145 +4,149 @@
import pickle
import pandas as pd
import types
-import writeToS3 as s3
-
-
-def organize_path_lambda(event):
- """
- parse the lambda handler parameter event to construct necessary paths for reading and storing data
- :param event: aws lambda parameters from handler
- :return: path dictionary
- """
- # arranging the paths
- localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
- localSavePath = os.path.join('/tmp',
- event['s3FolderName'] + event['resultPath'],
- event['uid'])
- remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
- event['uid'])
- if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
- remoteReadPath = remoteSavePath
- filename = event['labeledFilename']
- else:
- remoteReadPath = event['remoteReadPath']
- filename = remoteReadPath.split('/')[-2] + '.csv'
-
- if not os.path.exists(localSavePath):
- os.makedirs(localSavePath)
- if not os.path.exists(localReadPath):
- os.makedirs(localReadPath)
-
- path = {
- 'remoteReadPath': remoteReadPath,
- 'localReadPath': localReadPath,
- 'localSavePath': localSavePath,
- 'remoteSavePath': remoteSavePath,
- 'filename': filename
- }
-
- return path
-
-
-def get_remote_input(remoteReadPath, filename, localReadPath):
- """
- download input file from s3 bucket to a local location, and then load
- it to a pandas dataframe
- :param remoteReadPath: remote path in s3 to store the data
- :param localReadPath: local location to store the data, usually in /tmp
- :return: df: dataframe that contains the complete input file
- """
- s3.downloadToDisk(filename, localReadPath, remoteReadPath)
-
- # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
- # Array = 2D nested list holding column and row data
- Array = []
- try:
- with open(os.path.join(localReadPath, filename), 'r',
- encoding='utf-8', errors="ignore") as f:
- reader = csv.reader(f)
- try:
- for row in reader:
- Array.append(row)
- except Exception as e:
- print(e)
- except Exception:
- with open(os.path.join(localReadPath, filename), 'r',
- encoding='ISO-8859-1', errors="ignore") as f:
- reader = csv.reader(f)
- try:
- for row in reader:
- Array.append(row)
- except Exception as e:
- print(e)
-
- # load to pandas dataframe
- df = pd.DataFrame(Array[1:], columns=Array[0])
-
- return df
-
-
-def save_remote_output(localSavePath, remoteSavePath, fname, output_data):
- """
- save output in memory first to local file, then upload to remote S3 bucket
- :param localSavePath: local saved file
- :param remoteSavePath: remote save file path
- :param fname: filename
- :param output_data: the actual data
- :return: url of the file saved in S3 bucket
- """
-
- # json
- if isinstance(output_data, dict):
- fname += '.json'
- with open(os.path.join(localSavePath, fname), 'w') as f:
- json.dump(output_data, f)
-
- # dataframe to csv
- elif isinstance(output_data, pd.DataFrame):
- fname += '.csv'
- output_data.to_csv(fname, encoding='utf-8')
-
- # string to html
- elif isinstance(output_data, str):
- fname += '.html'
- with open(os.path.join(localSavePath, fname), 'w') as f:
- f.write(output_data)
-
- # list(list) to csv
- elif isinstance(output_data, list) \
- and (isinstance(output_data[0], list) or isinstance(output_data[0],
- tuple)):
- fname += '.csv'
- with open(os.path.join(localSavePath, fname), 'w', newline='',
- encoding='utf-8') as f:
- writer = csv.writer(f)
- for row in output_data:
+from writeToS3 import WriteToS3
+
+class Dataset:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+ self.s3 = WriteToS3(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
+ def organize_path_lambda(self, event):
+ """
+ parse the lambda handler parameter event to construct necessary paths for reading and storing data
+ :param event: aws lambda parameters from handler
+ :return: path dictionary
+ """
+ # arranging the paths
+ localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
+ localSavePath = os.path.join('/tmp',
+ event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
+ remoteReadPath = remoteSavePath
+ filename = event['labeledFilename']
+ else:
+ remoteReadPath = event['remoteReadPath']
+ filename = remoteReadPath.split('/')[-2] + '.csv'
+
+ if not os.path.exists(localSavePath):
+ os.makedirs(localSavePath)
+ if not os.path.exists(localReadPath):
+ os.makedirs(localReadPath)
+
+ path = {
+ 'remoteReadPath': remoteReadPath,
+ 'localReadPath': localReadPath,
+ 'localSavePath': localSavePath,
+ 'remoteSavePath': remoteSavePath,
+ 'filename': filename
+ }
+
+ return path
+
+
+ def get_remote_input(self, remoteReadPath, filename, localReadPath):
+ """
+ download input file from s3 bucket to a local location, and then load
+ it to a pandas dataframe
+ :param remoteReadPath: remote path in s3 to store the data
+ :param localReadPath: local location to store the data, usually in /tmp
+ :return: df: dataframe that contains the complete input file
+ """
+ self.s3.downloadToDisk(filename, localReadPath, remoteReadPath)
+
+ # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
+ # Array = 2D nested list holding column and row data
+ Array = []
+ try:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='utf-8', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+ except Exception:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='ISO-8859-1', errors="ignore") as f:
+ reader = csv.reader(f)
try:
- writer.writerow(row)
- except UnicodeEncodeError as e:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
print(e)
- # special case
- elif isinstance(output_data, types.GeneratorType):
- if fname == 'gephi':
- fname += '.gml'
- elif fname == 'pajek':
- fname += '.net'
+ # load to pandas dataframe
+ df = pd.DataFrame(Array[1:], columns=Array[0])
+
+ return df
+
+
+ def save_remote_output(self, localSavePath, remoteSavePath, fname, output_data):
+ """
+ save output in memory first to local file, then upload to remote S3 bucket
+ :param localSavePath: local saved file
+ :param remoteSavePath: remote save file path
+ :param fname: filename
+ :param output_data: the actual data
+ :return: url of the file saved in S3 bucket
+ """
+
+ # json
+ if isinstance(output_data, dict):
+ fname += '.json'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ json.dump(output_data, f)
+
+ # dataframe to csv
+ elif isinstance(output_data, pd.DataFrame):
+ fname += '.csv'
+ output_data.to_csv(fname, encoding='utf-8')
+
+ # string to html
+ elif isinstance(output_data, str):
+ fname += '.html'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ f.write(output_data)
+
+ # list(list) to csv
+ elif isinstance(output_data, list) \
+ and (isinstance(output_data[0], list) or isinstance(output_data[0],
+ tuple)):
+ fname += '.csv'
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ writer = csv.writer(f)
+ for row in output_data:
+ try:
+ writer.writerow(row)
+ except UnicodeEncodeError as e:
+ print(e)
+
+ # special case
+ elif isinstance(output_data, types.GeneratorType):
+ if fname == 'gephi':
+ fname += '.gml'
+ elif fname == 'pajek':
+ fname += '.net'
+ else:
+ fname += '.unknown'
+
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ for line in output_data:
+ f.write(line + '\n')
+
+ # else pickle the object
else:
- fname += '.unknown'
-
- with open(os.path.join(localSavePath, fname), 'w', newline='',
- encoding='utf-8') as f:
- for line in output_data:
- f.write(line + '\n')
-
- # else pickle the object
- else:
- fname += '.pickle'
- with open(os.path.join(localSavePath, fname), 'wb') as f:
- pickle.dump(output_data, f)
+ fname += '.pickle'
+ with open(os.path.join(localSavePath, fname), 'wb') as f:
+ pickle.dump(output_data, f)
- s3.upload(localSavePath, remoteSavePath, fname)
- url = s3.generate_downloads(remoteSavePath, fname)
+ self.s3.upload(localSavePath, remoteSavePath, fname)
+ url = self.s3.generate_downloads(remoteSavePath, fname)
- return url
+ return url
diff --git a/batch/batch_twitter_ner/models.py b/batch/batch_twitter_ner/models.py
index 412b3ee..3a60d40 100644
--- a/batch/batch_twitter_ner/models.py
+++ b/batch/batch_twitter_ner/models.py
@@ -1,45 +1,36 @@
from __future__ import (absolute_import, division,
print_function, unicode_literals)
+
from builtins import *
-from io import open
import matplotlib
matplotlib.use("Agg")
import numpy as np
-import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
+
sns.set_context("poster")
sns.set_style("ticks")
-from itertools import chain
-
-from sklearn.metrics import make_scorer
-
import sklearn_crfsuite
-from sklearn_crfsuite import scorers
from sklearn_crfsuite import metrics
-import regex as re
-from collections import namedtuple, defaultdict, Counter, OrderedDict
-from IPython.display import display
-from joblib import load, dump, Parallel, delayed
+from collections import Counter
-import os, string, sys
import time, datetime
-import subprocess
from utils import *
+
class CRFModel(object):
- def __init__(self, labels= None, skip_label="O", **kwargs):
+ def __init__(self, labels=None, skip_label="O", **kwargs):
self.labels = labels
self.skip_label = skip_label
self.model = crf = sklearn_crfsuite.CRF(**kwargs)
-
+
def fit(self, X_train, y_train):
start = time.time()
self.model.fit(X_train, y_train)
@@ -47,82 +38,78 @@ def fit(self, X_train, y_train):
process_time = end - start
print("Model fitting took: %s" % datetime.timedelta(seconds=process_time))
self._gen_labels()
-
+
def _gen_labels(self):
self.labels = list(self.model.classes_)
self.labels.remove(self.skip_label)
# group B and I results
self.labels = sorted(
- self.labels,
+ self.labels,
key=lambda name: (name[1:], name[0])
)
self.boundary_labels = set([k[0] for k in self.labels]) - set([self.skip_label])
self.category_labels = set([k[2:] for k in self.labels if k != self.skip_label])
- self.possible_labels = ["%s-%s" % (k1,k) for k in self.category_labels
- for k1 in self.boundary_labels] + [self.skip_label]
+ self.possible_labels = ["%s-%s" % (k1, k) for k in self.category_labels
+ for k1 in self.boundary_labels] + [self.skip_label]
-
def predict(self, X_test):
y_pred = self.model.predict(X_test)
return y_pred
-
+
def evaluate(self, y_true, y_pred):
- print("Training accuracy: ", metrics.flat_f1_score(y_true, y_pred,
- average='weighted', labels=self.labels))
+ print("Training accuracy: ", metrics.flat_f1_score(y_true, y_pred,
+ average='weighted', labels=self.labels))
report = metrics.flat_classification_report(
y_true, y_pred, labels=self.labels, digits=3
)
return classification_report_to_df(report)
-
-
+
def print_transitions(self, top_n=25):
trans_features = Counter(self.model.transition_features_).most_common(top_n)
print("Top %s likely transitions:" % top_n)
for (label_from, label_to), weight in trans_features:
print("%-6s -> %-7s %0.6f" % (label_from, label_to, weight))
-
+
def print_state_features(self, top_n=10):
state_features = Counter(self.model.state_features_).most_common(top_n)
for (attr, label), weight in state_features:
- print("%0.6f %-8s %s" % (weight, label, attr))
-
+ print("%0.6f %-8s %s" % (weight, label, attr))
+
def show_transition_matrix(self):
transition_matrix = np.zeros((len(self.possible_labels), len(self.possible_labels)))
for k in self.possible_labels:
for k1 in self.possible_labels:
- if (k,k1) in self.model.transition_features_:
- i,j = self.possible_labels.index(k), self.possible_labels.index(k1)
- transition_matrix[i,j] = self.model.transition_features_[(k,k1)]
+ if (k, k1) in self.model.transition_features_:
+ i, j = self.possible_labels.index(k), self.possible_labels.index(k1)
+ transition_matrix[i, j] = self.model.transition_features_[(k, k1)]
with plt.rc_context(rc={'xtick.labelsize': 10, 'ytick.labelsize': 10,
'font.size': 10,
- 'figure.figsize': (10,8)}):
+ 'figure.figsize': (10, 8)}):
ax = sns.heatmap(data=transition_matrix,
- xticklabels=self.possible_labels, yticklabels=self.possible_labels,
- cmap="RdGy")
+ xticklabels=self.possible_labels, yticklabels=self.possible_labels,
+ cmap="RdGy")
return ax
def plot_cm(self, y_test, y_pred, axis=1):
labels = self.labels + [self.skip_label]
- labels_s = dict((k,i) for i,k in enumerate(labels))
+ labels_s = dict((k, i) for i, k in enumerate(labels))
cm = np.zeros((len(labels), len(labels)))
- for i,j in zip(sum(y_test, []), sum(y_pred, [])):
+ for i, j in zip(sum(y_test, []), sum(y_pred, [])):
i = labels_s[i]
j = labels_s[j]
- cm[i,j] += 1
+ cm[i, j] += 1
with plt.rc_context(rc={'xtick.labelsize': 12, 'ytick.labelsize': 12,
- 'figure.figsize': (16,14)}):
- ax = sns.heatmap(cm * 100/ cm.sum(axis=axis, keepdims=True),
- #cmap=sns.cubehelix_palette(n_colors=100, rot=-.4, as_cmap=True),
- cmap="Greys",
- xticklabels=labels,
- yticklabels=labels)
+ 'figure.figsize': (16, 14)}):
+ ax = sns.heatmap(cm * 100 / cm.sum(axis=axis, keepdims=True),
+ # cmap=sns.cubehelix_palette(n_colors=100, rot=-.4, as_cmap=True),
+ cmap="Greys",
+ xticklabels=labels,
+ yticklabels=labels)
plt.ylabel("True labels")
plt.xlabel("Predicted labels")
title = "Precision Plot"
- if axis== 0:
+ if axis == 0:
title = "Recall Plot"
plt.title(title)
return ax, cm
-
-
diff --git a/batch/batch_twitter_ner/writeToS3.py b/batch/batch_twitter_ner/writeToS3.py
index 75b1999..51dbf78 100644
--- a/batch/batch_twitter_ner/writeToS3.py
+++ b/batch/batch_twitter_ner/writeToS3.py
@@ -1,72 +1,83 @@
-import boto3
-import os
import mimetypes
+import os
-client = boto3.client('s3')
-bucket_name = 'macroscope-smile'
-
-def upload(localpath, remotepath, filename):
- content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
- print(filename, content_type)
- if content_type == None:
- extra_args = {'ContentType':'application/octet-stream'}
- else:
- extra_args = {'ContentType':content_type}
-
- client.upload_file(os.path.join(localpath, filename),
- bucket_name,
- os.path.join(remotepath, filename),
- ExtraArgs=extra_args)
-
-
-def createDirectory(DirectoryName):
- client.put_object(Bucket=bucket_name, Key=DirectoryName)
-
-
-def generate_downloads(remotepath, filename):
- url = client.generate_presigned_url(
- ClientMethod='get_object',
- Params={
- 'Bucket': bucket_name,
- 'Key': os.path.join(remotepath, filename)
- },
- ExpiresIn=604800 # one week
- )
-
- return url
-
-
-def downloadToDisk(filename, localpath, remotepath):
- with open(os.path.join(localpath, filename), 'wb') as f:
- client.download_fileobj(bucket_name,
- os.path.join(remotepath, filename), f)
-
-
-def getObject(remoteKey):
- obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
-
-
-def putObject(body, remoteKey):
- # bytes or seekable file-like object
- obj = client.put_object(Bucket=bucket_name,
- Body=body, Key=remoteKey)
- print(obj['Body'].read())
-
-def listDir(remoteClass):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=remoteClass,
- Delimiter='/')
- foldernames = []
- for o in objects.get('CommonPrefixes'):
- foldernames.append(o.get('Prefix'))
-
- # only return the list of foldernames
- return foldernames
-
-
-def listFiles(foldernames):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=foldernames)
-
- # return rich information about the files
- return objects.get('Contents')
+import boto3
+from botocore.client import Config
+
+
+class WriteToS3:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+
+ # local minio s3
+ if HOST_IP and AWS_ACCESSKEY and AWS_ACCESSKEYSECRET and BUCKET_NAME:
+ self.client = boto3.client('s3', endpoint_url='http://' + HOST_IP + ':9000',
+ aws_access_key_id=AWS_ACCESSKEY,
+ aws_secret_access_key=AWS_ACCESSKEYSECRET,
+ config=Config(signature_version='s3v4'))
+ self.bucket_name = BUCKET_NAME
+
+ # remote aws s3
+ else:
+ self.client = boto3.client('s3')
+ self.bucket_name = 'macroscope-smile'
+
+ def upload(self, localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath, filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType': 'application/octet-stream'}
+ else:
+ extra_args = {'ContentType': content_type}
+
+ self.client.upload_file(os.path.join(localpath, filename),
+ self.bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+ def createDirectory(self, DirectoryName):
+ self.client.put_object(Bucket=self.bucket_name, Key=DirectoryName)
+
+ def generate_downloads(self, remotepath, filename):
+ url = self.client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': self.bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+ def downloadToDisk(self, filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ self.client.download_fileobj(self.bucket_name,
+ os.path.join(remotepath, filename), f)
+
+ def getObject(self, remoteKey):
+ obj = self.client.get_object(Bucket=self.bucket_name, Key=remoteKey)
+
+ def putObject(self, body, remoteKey):
+ # bytes or seekable file-like object
+ obj = self.client.put_object(Bucket=self.bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+ def listDir(self, remoteClass):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+ def listFiles(self, foldernames):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/batch/image_crawler/batch_function.py b/batch/image_crawler/batch_function.py
new file mode 100644
index 0000000..cb52f7c
--- /dev/null
+++ b/batch/image_crawler/batch_function.py
@@ -0,0 +1,88 @@
+from dataset import Dataset
+import argparse
+from notification import notification
+from image_crawler import image_crawler as ic
+
+if __name__ == '__main__':
+
+ # entrance to invoke Batch
+ urls = {}
+
+ # default parameters
+ parser = argparse.ArgumentParser(description="processing...")
+ parser.add_argument('--remoteReadPath', required=True)
+ parser.add_argument('--email', required=True)
+ parser.add_argument('--sessionURL', required=True)
+
+ # user specified parameters
+ parsed, unknown = parser.parse_known_args()
+ for arg in unknown:
+ if arg.startswith("--"):
+ parser.add_argument(arg, required=False)
+
+
+ params = vars(parser.parse_args())
+
+ if 'HOST_IP' in params.keys():
+ HOST_IP = params['HOST_IP']
+ params.pop('HOST_IP', None)
+ else:
+ HOST_IP = None
+
+ if 'AWS_ACCESSKEY' in params.keys():
+ AWS_ACCESSKEY = params['AWS_ACCESSKEY']
+ params.pop('AWS_ACCESSKEY', None)
+ else:
+ AWS_ACCESSKEY = None
+
+ if 'AWS_ACCESSKEYSECRET' in params.keys():
+ AWS_ACCESSKEYSECRET = params['AWS_ACCESSKEYSECRET']
+ params.pop('AWS_ACCESSKEYSECRET', None)
+ else:
+ AWS_ACCESSKEYSECRET = None
+
+ if 'BUCKET_NAME' in params.keys():
+ BUCKET_NAME = params['BUCKET_NAME']
+ params.pop('BUCKET_NAME', None)
+ else:
+ BUCKET_NAME = None
+
+ d = Dataset(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
+ # arranging the paths
+ path = d.organize_path_lambda(params)
+
+ # prepare input dataset
+ df = d.get_remote_input(path['remoteReadPath'],
+ path['filename'],
+ path['localReadPath'])
+
+ img_urls = []
+ source = path['remoteReadPath'].split('/')[-3]
+ if source == "reddit-Search" or source == "reddit-Post" \
+ or source == "crimson-Hexagon" or source == "reddit-Historical-Post"\
+ and 'url' in list(df.columns):
+ img_urls = df['url'].dropna().tolist()
+
+ elif source == "twitter-Tweet" or source == "twitter-Timeline" \
+ and 'entities.media.media_url' in list(df.columns):
+ img_urls = df['entities.media.media_url'].dropna().tolist()
+
+ elif source == 'flickr-Photo' and 'size.source' in list(df.columns):
+ img_urls = df['size.source'].dropna().tolist()
+
+ else:
+ raise ValueError("This data source does not support image collection!")
+
+ urls = {}
+ for img_url in img_urls:
+ if ic.is_image(img_url):
+ filename, binary = ic.crawler(img_url)
+ d.save_local_output(path['localSavePath'], filename, binary)
+ urls['images.zip'] = d.save_remote_output(
+ path['localSavePath'], path['remoteSavePath'], 'images.zip')
+
+ # push notification email
+ notification(toaddr=params['email'], case=3,
+ filename=path['remoteSavePath'],
+ links=urls, sessionURL=params['sessionURL'])
diff --git a/image_crawler/command.txt b/batch/image_crawler/command.txt
similarity index 100%
rename from image_crawler/command.txt
rename to batch/image_crawler/command.txt
diff --git a/batch/image_crawler/dataset.py b/batch/image_crawler/dataset.py
new file mode 100644
index 0000000..5ae90ac
--- /dev/null
+++ b/batch/image_crawler/dataset.py
@@ -0,0 +1,110 @@
+import csv
+import os
+import pandas as pd
+import zipfile
+from writeToS3 import WriteToS3
+
+class Dataset:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+ self.s3 = WriteToS3(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
+ def organize_path_lambda(self, event):
+ """
+ parse the lambda handler parameter event to construct necessary paths for reading and storing data
+ :param event: aws lambda parameters from handler
+ :return: path dictionary
+ """
+ # arranging the paths
+ remoteReadPath = event['remoteReadPath']
+ localReadPath = os.path.join('/tmp', remoteReadPath)
+ localSavePath = os.path.join('/tmp', remoteReadPath)
+ remoteSavePath = os.path.join(remoteReadPath)
+ filename = remoteReadPath.split('/')[-2] + '.csv'
+
+ if not os.path.exists(localSavePath):
+ os.makedirs(localSavePath)
+ os.makedirs(os.path.join(localSavePath, 'img'))
+ if not os.path.exists(localReadPath):
+ os.makedirs(localReadPath)
+
+ path = {
+ 'remoteReadPath': remoteReadPath,
+ 'localReadPath': localReadPath,
+ 'localSavePath': localSavePath,
+ 'remoteSavePath': remoteSavePath,
+ 'filename': filename
+ }
+
+ return path
+
+
+ def get_remote_input(self, remoteReadPath, filename, localReadPath):
+ """
+ download input file from s3 bucket to a local location, and then load
+ it to a pandas dataframe
+ :param remoteReadPath: remote path in s3 to store the data
+ :param localReadPath: local location to store the data, usually in /tmp
+ :return: df: dataframe that contains the complete input file
+ """
+ self.s3.downloadToDisk(filename, localReadPath, remoteReadPath)
+
+ # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
+ # Array = 2D nested list holding column and row data
+ Array = []
+ try:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='utf-8') as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+ except Exception:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='ISO-8859-1') as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+
+ # load to pandas dataframe
+ df = pd.DataFrame(Array[1:], columns=Array[0])
+
+ return df
+
+
+ def save_local_output(self, localSavePath, fname, output_data):
+ with open(os.path.join(localSavePath, 'img', fname), 'wb') as f:
+ f.write(output_data)
+
+
+ def zipdir(self, path, ziph):
+ # ziph is zipfile handle
+ for root, dirs, files in os.walk(path):
+ for file in files:
+ print(file)
+ ziph.write(os.path.join(root, file), file)
+
+
+ def save_remote_output(self, localSavePath, remoteSavePath, fname):
+ """
+
+ :param localSavePath:
+ :param remoteSavePath:
+ :param fname:
+ :param output_data:
+ :return:
+ """
+ zipf = zipfile.ZipFile(os.path.join(localSavePath, fname), 'w',
+ zipfile.ZIP_DEFLATED)
+ self.zipdir(os.path.join(localSavePath,'img'), zipf)
+ zipf.close()
+
+ self.s3.upload(localSavePath, remoteSavePath, fname)
+ url = self.s3.generate_downloads(remoteSavePath, fname)
+
+ return url
diff --git a/image_crawler/dockerfile b/batch/image_crawler/dockerfile
similarity index 100%
rename from image_crawler/dockerfile
rename to batch/image_crawler/dockerfile
diff --git a/image_crawler/image_crawler.py b/batch/image_crawler/image_crawler.py
similarity index 100%
rename from image_crawler/image_crawler.py
rename to batch/image_crawler/image_crawler.py
diff --git a/batch/image_crawler/notification.py b/batch/image_crawler/notification.py
new file mode 100644
index 0000000..3374856
--- /dev/null
+++ b/batch/image_crawler/notification.py
@@ -0,0 +1,167 @@
+import smtplib
+from email.mime.multipart import MIMEMultipart
+from email.mime.text import MIMEText
+
+
+def notification(toaddr,case,filename,links,sessionURL):
+ # toaddr -- email address to send to
+ # text content to send
+ # subject
+ host = 'smtp.mail.us-east-1.awsapps.com'
+ port = '465'
+ fromaddr = 'smile@socialmediamacroscope.awsapps.com'
+
+
+ # map the fpath component to History panel names
+ # local/NLP/sentiment/xxxxxxxxxxxxxxxxxxxxxxxx/ => [local,nlp,sentiment,xxxx,space]
+ # [local, GraphQL, reddit-post, aww, space]
+ # 0 1 2 3
+ if filename != '':
+ fpath = filename.split('/')
+
+ if fpath[1] == 'GraphQL':
+ fpath[1] == 'Social Media Data'
+ elif fpath[1] == 'NLP':
+ fpath[1] = 'Nature Language Processing'
+ elif fpath[1] == 'ML':
+ fpath[1] = 'Machine Learning ML'
+ elif fpath[1] == 'NW':
+ fpath[1] = 'Network Visualization and Analysis'
+
+ if fpath[2] == 'reddit-Post':
+ fpath[2] = 'Subreddit Posts Title'
+ elif fpath[2] == 'reddit-Historical-Post':
+ fpath[2] = 'Reddit Historical Post'
+ elif fpath[2] == 'reddit-Search':
+ fpath[2] = 'Reddit Search Posts Title'
+ elif fpath[2] == 'sentiment':
+ fpath[2] = 'Sentiment Analysis'
+ elif fpath[2] == 'preprocessing':
+ fpath[2] = 'NLP Preprocessing'
+ elif fpath[2] == 'networkx':
+ fpath[2] = 'Python NetworkX'
+ elif fpath[2] == 'classification':
+ fpath[2] = 'Text Classification'
+
+
+ if case == 0 or case == 'comment-fail':
+ html = """
+
+
+
+
+
Dear user (session ID: """ + fpath[0] + """),
+
Your Reddit Comment collection has been terminated.
+
We are using the id and permalink from your Reddit Submission dataset
+ to collect comments and replies. It is most likely you have provide an incomplete Reddit Submission dataset missing these two fields.
+
Please try to reproduce the Reddit Submission with id and permalink, or switch to another dataset.
+
Go to your session...
+
+
Best Regards,
+
Social Media Macroscope - SMILE
+
+
+
+ """
+ subject = 'Your Reddit Comment collection has failed...'
+ elif case == 1 or case == 'comment-terminate':
+ html = """
+
+
+
+
Dear user (session ID: """ + fpath[0] + """),
+
Your Reddit Comment collection is exceeding 400 Megabyte, and is terminated due to lack of disk space.
+
+ - You have requested comments and replies for the Reddit Submission (Post):""" + fpath[3] + """. The partial comments we manage to collect and save will be compressed for you in an .zip file named """ + fpath[3] + """-comments.zip (click)
+ - In order to download this file, you need to first locate the original submission in the HISTORY page in SMILE.
+ Go to your session...
+
+ - Go to History
+ - --> under """ + fpath[1] + """
+ - --> click """ + fpath[2] + """
+ - --> then find """ + fpath[3] + """
+ - --> click VIEW
+ - --> in the Overview table under the downloadables column, you will find these comments in a zip file.
+
+
+
+ """
+ subject = 'Your Reddit Comment collection has been terminated...'
+ elif case == 2 or case == 'comment-success':
+ html = """
+
+
+
+
Dear user (session ID: """ + fpath[0] + """),
+
Your Reddit Comment collection is ready for you!
+
+ - You have requested comments and replies for the Reddit Submission (Post):""" + fpath[3] + """. It will be compressed for you in an .zip file named """+ fpath[3] +"""-comments.zip
+ - In order to download this file, you need to first locate the original submission in the HISTORY page in SMILE.
+ Go to your session...
+
+ - Go to History
+ - --> under """ + fpath[1] +"""
+ - --> click """ + fpath[2] + """
+ - --> then find """ + fpath[3] + """
+ - --> click VIEW
+ - --> in the Overview table under the downloadables column, you will find these comments in a zip file.
+
+
+
+
Best Regards,
+
Social Media Macroscope - SMILE
+
+
+ """
+ subject = 'Your Reddit Comment collection is completed!'
+ elif case == 3 or case == 'analytics-success':
+ list_html = ''
+ for key in links.keys():
+ list_html += '' + key + ''
+
+ html = """
+
+
+
+
Dear user (session ID: """ + fpath[0] + """),
+
Your """ + fpath[2] + """ results are ready for you! (job ID: """ + fpath[3] + """)
+
+ - You can view the visualization and download the results at HISTORY page in SMILE.
+ Go to your session...
+
+ - Go to History
+ - --> under """ + fpath[1] + """ tab
+ - --> click """ + fpath[2] + """
+ - --> then find """ + fpath[3] + """
+ - --> click view
+
+
+ - You can also click the link below to download part of the results:
+
+
+
+
+
Best Regards,
+
Social Media Macroscope - SMILE
+
+
+ """
+ subject = 'Your ' + fpath[2] + ' computation is completed!'
+
+ with open('email_password.txt') as f:
+ password = f.readlines()[0]
+
+ msg = MIMEMultipart('alternative')
+ msg['Subject'] = subject
+ msg['From'] = fromaddr
+ msg['To'] = toaddr
+ msg.attach(MIMEText(html, 'html'))
+
+ server = smtplib.SMTP_SSL(host, port)
+ server.login(fromaddr,password)
+ server.sendmail(fromaddr, toaddr, msg.as_string())
+ server.quit()
diff --git a/image_crawler/requirement.txt b/batch/image_crawler/requirement.txt
similarity index 100%
rename from image_crawler/requirement.txt
rename to batch/image_crawler/requirement.txt
diff --git a/batch/image_crawler/writeToS3.py b/batch/image_crawler/writeToS3.py
new file mode 100644
index 0000000..51dbf78
--- /dev/null
+++ b/batch/image_crawler/writeToS3.py
@@ -0,0 +1,83 @@
+import mimetypes
+import os
+
+import boto3
+from botocore.client import Config
+
+
+class WriteToS3:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+
+ # local minio s3
+ if HOST_IP and AWS_ACCESSKEY and AWS_ACCESSKEYSECRET and BUCKET_NAME:
+ self.client = boto3.client('s3', endpoint_url='http://' + HOST_IP + ':9000',
+ aws_access_key_id=AWS_ACCESSKEY,
+ aws_secret_access_key=AWS_ACCESSKEYSECRET,
+ config=Config(signature_version='s3v4'))
+ self.bucket_name = BUCKET_NAME
+
+ # remote aws s3
+ else:
+ self.client = boto3.client('s3')
+ self.bucket_name = 'macroscope-smile'
+
+ def upload(self, localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath, filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType': 'application/octet-stream'}
+ else:
+ extra_args = {'ContentType': content_type}
+
+ self.client.upload_file(os.path.join(localpath, filename),
+ self.bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+ def createDirectory(self, DirectoryName):
+ self.client.put_object(Bucket=self.bucket_name, Key=DirectoryName)
+
+ def generate_downloads(self, remotepath, filename):
+ url = self.client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': self.bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+ def downloadToDisk(self, filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ self.client.download_fileobj(self.bucket_name,
+ os.path.join(remotepath, filename), f)
+
+ def getObject(self, remoteKey):
+ obj = self.client.get_object(Bucket=self.bucket_name, Key=remoteKey)
+
+ def putObject(self, body, remoteKey):
+ # bytes or seekable file-like object
+ obj = self.client.put_object(Bucket=self.bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+ def listDir(self, remoteClass):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+ def listFiles(self, foldernames):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/batch/smile_autophrase/dockerfile b/batch/smile_autophrase/dockerfile
index 91a0afd..e63fe4d 100644
--- a/batch/smile_autophrase/dockerfile
+++ b/batch/smile_autophrase/dockerfile
@@ -1,7 +1,7 @@
FROM ubuntu:18.04
# git clone autophrase algorithm
-RUN apt-get -y update
+RUN apt-get update
RUN apt-get -y install git
RUN cd / && git clone https://github.com/IllinoisSocialMediaMacroscope/SMILE-AutoPhrase.git AutoPhrase
diff --git a/image_crawler/writeToS3.py b/image_crawler/writeToS3.py
deleted file mode 100644
index 9feb1c8..0000000
--- a/image_crawler/writeToS3.py
+++ /dev/null
@@ -1,73 +0,0 @@
-import boto3
-import os
-import mimetypes
-
-client = boto3.client('s3')
-bucket_name = 'macroscope-smile'
-
-def upload(localpath, remotepath, filename):
- content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
- print(filename, content_type)
- if content_type == None:
- extra_args = {'ContentType':'application/octet-stream'}
- else:
- extra_args = {'ContentType':content_type}
-
- extra_args['StorageClass'] = 'STANDARD_IA'
- client.upload_file(os.path.join(localpath, filename),
- bucket_name,
- os.path.join(remotepath, filename),
- ExtraArgs=extra_args)
-
-
-def createDirectory(DirectoryName):
- client.put_object(Bucket=bucket_name, Key=DirectoryName)
-
-
-def generate_downloads(remotepath, filename):
- url = client.generate_presigned_url(
- ClientMethod='get_object',
- Params={
- 'Bucket': bucket_name,
- 'Key': os.path.join(remotepath, filename)
- },
- ExpiresIn=604800 # one week
- )
-
- return url
-
-
-def downloadToDisk(filename, localpath, remotepath):
- with open(os.path.join(localpath, filename), 'wb') as f:
- client.download_fileobj(bucket_name,
- os.path.join(remotepath, filename), f)
-
-
-def getObject(remoteKey):
- obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
-
-
-def putObject(body, remoteKey):
- # bytes or seekable file-like object
- obj = client.put_object(Bucket=bucket_name,
- Body=body, Key=remoteKey)
- print(obj['Body'].read())
-
-def listDir(remoteClass):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=remoteClass,
- Delimiter='/')
- foldernames = []
- for o in objects.get('CommonPrefixes'):
- foldernames.append(o.get('Prefix'))
-
- # only return the list of foldernames
- return foldernames
-
-
-def listFiles(foldernames):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=foldernames)
-
- # return rich information about the files
- return objects.get('Contents')
diff --git a/lambda/lambda_classification_predict_dev/lambda_classification_predict.py b/lambda/lambda_classification_predict/lambda_classification_predict.py
similarity index 74%
rename from lambda/lambda_classification_predict_dev/lambda_classification_predict.py
rename to lambda/lambda_classification_predict/lambda_classification_predict.py
index 333e9a1..6eb5da9 100644
--- a/lambda/lambda_classification_predict_dev/lambda_classification_predict.py
+++ b/lambda/lambda_classification_predict/lambda_classification_predict.py
@@ -1,25 +1,21 @@
import csv
+import json
import os
-from os.path import join, dirname
-from sklearn.model_selection import train_test_split
-from sklearn.pipeline import Pipeline
-from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
-from sklearn.naive_bayes import MultinomialNB
-from sklearn import metrics
import pickle
-import numpy as np
-from plotly.offline import plot
-import plotly.graph_objs as go
from collections import Counter
-import json
-import writeToS3 as s3
+
+import plotly.graph_objs as go
+from plotly.offline import plot
+from writeToS3 import WriteToS3
+
class Classification:
- def __init__(self, awsPath, localSavePath):
+ def __init__(self, s3, awsPath, localSavePath):
self.localSavePath = localSavePath
self.awsPath = awsPath
+ self.s3 = s3
def predict(self):
@@ -74,8 +70,8 @@ def predict(self):
writer.writerow([data[i],self.predicted[i]])
except:
pass
- s3.upload(self.localSavePath, self.awsPath, fname)
- return s3.generate_downloads(self.awsPath, fname)
+ self.s3.upload(self.localSavePath, self.awsPath, fname)
+ return self.s3.generate_downloads(self.awsPath, fname)
def plot(self):
@@ -91,18 +87,42 @@ def plot(self):
fname_div_category = 'div_category.html'
with open(self.localSavePath + fname_div_category,"w") as f:
f.write(div_category)
- s3.upload(self.localSavePath, self.awsPath, fname_div_category)
- return s3.generate_downloads(self.awsPath, fname_div_category)
+ self.s3.upload(self.localSavePath, self.awsPath, fname_div_category)
+ return self.s3.generate_downloads(self.awsPath, fname_div_category)
-def lambda_handler(event,context):
-
+def lambda_handler(params,context):
+ if 'HOST_IP' in params.keys():
+ HOST_IP = params['HOST_IP']
+ params.pop('HOST_IP', None)
+ else:
+ HOST_IP = None
+
+ if 'AWS_ACCESSKEY' in params.keys():
+ AWS_ACCESSKEY = params['AWS_ACCESSKEY']
+ params.pop('AWS_ACCESSKEY', None)
+ else:
+ AWS_ACCESSKEY = None
+
+ if 'AWS_ACCESSKEYSECRET' in params.keys():
+ AWS_ACCESSKEYSECRET = params['AWS_ACCESSKEYSECRET']
+ params.pop('AWS_ACCESSKEYSECRET', None)
+ else:
+ AWS_ACCESSKEYSECRET = None
+
+ if 'BUCKET_NAME' in params.keys():
+ BUCKET_NAME = params['BUCKET_NAME']
+ params.pop('BUCKET_NAME', None)
+ else:
+ BUCKET_NAME = None
+
+ s3 = WriteToS3(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
output = dict()
- uid = event['uid']
- awsPath = event['s3FolderName'] + '/ML/classification/' + uid +'/'
- localSavePath = '/tmp/' + event['s3FolderName'] + '/ML/classification/' + uid + '/'
+ uid = params['uid']
+ awsPath = params['s3FolderName'] + '/ML/classification/' + uid +'/'
+ localSavePath = '/tmp/' + params['s3FolderName'] + '/ML/classification/' + uid + '/'
if not os.path.exists(localSavePath):
os.makedirs(localSavePath)
if not os.path.exists(localSavePath):
@@ -115,10 +135,10 @@ def lambda_handler(event,context):
with open(localSavePath + fname_config, "r") as fp:
data = json.load(fp)
for key in data.keys():
- if key not in event.keys():
- event[key] = data[key]
+ if key not in params.keys():
+ params[key] = data[key]
with open(localSavePath + fname_config,"w") as f:
- json.dump(event,f)
+ json.dump(params,f)
s3.upload(localSavePath, awsPath, fname_config)
output['config'] = s3.generate_downloads(awsPath, fname_config)
output['uid'] = uid
@@ -146,8 +166,7 @@ def lambda_handler(event,context):
It is likely that you have not yet performed step 2 -- model training, or you have provided the wrong sessionID.')
exit()
-
- classification = Classification(awsPath, localSavePath)
+ classification = Classification(s3, awsPath, localSavePath)
output['predicting'] = classification.predict()
output['div_category'] = classification.plot()
diff --git a/lambda/lambda_classification_predict/writeToS3.py b/lambda/lambda_classification_predict/writeToS3.py
new file mode 100644
index 0000000..51dbf78
--- /dev/null
+++ b/lambda/lambda_classification_predict/writeToS3.py
@@ -0,0 +1,83 @@
+import mimetypes
+import os
+
+import boto3
+from botocore.client import Config
+
+
+class WriteToS3:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+
+ # local minio s3
+ if HOST_IP and AWS_ACCESSKEY and AWS_ACCESSKEYSECRET and BUCKET_NAME:
+ self.client = boto3.client('s3', endpoint_url='http://' + HOST_IP + ':9000',
+ aws_access_key_id=AWS_ACCESSKEY,
+ aws_secret_access_key=AWS_ACCESSKEYSECRET,
+ config=Config(signature_version='s3v4'))
+ self.bucket_name = BUCKET_NAME
+
+ # remote aws s3
+ else:
+ self.client = boto3.client('s3')
+ self.bucket_name = 'macroscope-smile'
+
+ def upload(self, localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath, filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType': 'application/octet-stream'}
+ else:
+ extra_args = {'ContentType': content_type}
+
+ self.client.upload_file(os.path.join(localpath, filename),
+ self.bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+ def createDirectory(self, DirectoryName):
+ self.client.put_object(Bucket=self.bucket_name, Key=DirectoryName)
+
+ def generate_downloads(self, remotepath, filename):
+ url = self.client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': self.bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+ def downloadToDisk(self, filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ self.client.download_fileobj(self.bucket_name,
+ os.path.join(remotepath, filename), f)
+
+ def getObject(self, remoteKey):
+ obj = self.client.get_object(Bucket=self.bucket_name, Key=remoteKey)
+
+ def putObject(self, body, remoteKey):
+ # bytes or seekable file-like object
+ obj = self.client.put_object(Bucket=self.bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+ def listDir(self, remoteClass):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+ def listFiles(self, foldernames):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/lambda/lambda_classification_split/algorithm.py b/lambda/lambda_classification_split/algorithm.py
new file mode 100644
index 0000000..5771b7c
--- /dev/null
+++ b/lambda/lambda_classification_split/algorithm.py
@@ -0,0 +1,28 @@
+import plot
+from lambda_classification_split import Classification
+
+
+def algorithm(df, params):
+ """
+ wrapper function to put each individual algorithm inside
+ :param df: dataframe that contains all the input dataset
+ :param params: algorithm specific parameters
+ :return: a dictionary of { outputname: output content in memory }
+ """
+ output = {}
+
+ CF = Classification(df, params['column'])
+
+ output['uid'] = params['uid']
+
+ training_set, testing_set = CF.split(int(params['ratio']))
+ output['training'] = training_set
+ output['testing'] = testing_set
+
+ # plot
+ labels = ['training set data points', 'unlabeled data points']
+ values = [len(training_set), len(testing_set)]
+ output['div'] = plot.plot_pie_chart(labels, values,
+ title='breakdown of training vs testing size')
+
+ return output
diff --git a/lambda/lambda_classification_split/dataset.py b/lambda/lambda_classification_split/dataset.py
new file mode 100644
index 0000000..f9728b5
--- /dev/null
+++ b/lambda/lambda_classification_split/dataset.py
@@ -0,0 +1,153 @@
+import csv
+import os
+import json
+import pickle
+import pandas as pd
+import types
+from writeToS3 import WriteToS3
+
+
+class Dataset:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+ self.s3 = WriteToS3(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
+ def organize_path_lambda(self, event):
+ """
+ parse the lambda handler parameter event to construct necessary paths for reading and storing data
+ :param event: aws lambda parameters from handler
+ :return: path dictionary
+ """
+ # arranging the paths
+ localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
+ localSavePath = os.path.join('/tmp',
+ event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
+ remoteReadPath = remoteSavePath
+ filename = event['labeledFilename']
+ else:
+ remoteReadPath = event['remoteReadPath']
+ filename = remoteReadPath.split('/')[-2] + '.csv'
+
+ if not os.path.exists(localSavePath):
+ os.makedirs(localSavePath)
+ if not os.path.exists(localReadPath):
+ os.makedirs(localReadPath)
+
+ path = {
+ 'remoteReadPath': remoteReadPath,
+ 'localReadPath': localReadPath,
+ 'localSavePath': localSavePath,
+ 'remoteSavePath': remoteSavePath,
+ 'filename': filename
+ }
+
+ return path
+
+
+ def get_remote_input(self, remoteReadPath, filename, localReadPath):
+ """
+ download input file from s3 bucket to a local location, and then load
+ it to a pandas dataframe
+ :param remoteReadPath: remote path in s3 to store the data
+ :param localReadPath: local location to store the data, usually in /tmp
+ :return: df: dataframe that contains the complete input file
+ """
+ self.s3.downloadToDisk(filename, localReadPath, remoteReadPath)
+
+ # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
+ # Array = 2D nested list holding column and row data
+ Array = []
+ try:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='utf-8', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+ except Exception:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='ISO-8859-1', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+
+ # load to pandas dataframe
+ df = pd.DataFrame(Array[1:], columns=Array[0])
+
+ return df
+
+
+ def save_remote_output(self, localSavePath, remoteSavePath, fname, output_data):
+ """
+ save output in memory first to local file, then upload to remote S3 bucket
+ :param localSavePath: local saved file
+ :param remoteSavePath: remote save file path
+ :param fname: filename
+ :param output_data: the actual data
+ :return: url of the file saved in S3 bucket
+ """
+
+ # json
+ if isinstance(output_data, dict):
+ fname += '.json'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ json.dump(output_data, f)
+
+ # dataframe to csv
+ elif isinstance(output_data, pd.DataFrame):
+ fname += '.csv'
+ output_data.to_csv(fname, encoding='utf-8')
+
+ # string to html
+ elif isinstance(output_data, str):
+ fname += '.html'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ f.write(output_data)
+
+ # list(list) to csv
+ elif isinstance(output_data, list) \
+ and (isinstance(output_data[0], list) or isinstance(output_data[0],
+ tuple)):
+ fname += '.csv'
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ writer = csv.writer(f)
+ for row in output_data:
+ try:
+ writer.writerow(row)
+ except UnicodeEncodeError as e:
+ print(e)
+
+ # special case
+ elif isinstance(output_data, types.GeneratorType):
+ if fname == 'gephi':
+ fname += '.gml'
+ elif fname == 'pajek':
+ fname += '.net'
+ else:
+ fname += '.unknown'
+
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ for line in output_data:
+ f.write(line + '\n')
+
+ # else pickle the object
+ else:
+ fname += '.pickle'
+ with open(os.path.join(localSavePath, fname), 'wb') as f:
+ pickle.dump(output_data, f)
+
+ self.s3.upload(localSavePath, remoteSavePath, fname)
+ url = self.s3.generate_downloads(remoteSavePath, fname)
+
+ return url
diff --git a/lambda/lambda_classification_split_dev/lambda_classification_split.py b/lambda/lambda_classification_split/lambda_classification_split.py
similarity index 80%
rename from lambda/lambda_classification_split_dev/lambda_classification_split.py
rename to lambda/lambda_classification_split/lambda_classification_split.py
index 1b2e56f..6201a92 100644
--- a/lambda/lambda_classification_split_dev/lambda_classification_split.py
+++ b/lambda/lambda_classification_split/lambda_classification_split.py
@@ -1,13 +1,5 @@
-import csv
-import pandas
import random
-import os
-from plotly.offline import plot
-import plotly.graph_objs as go
-from os.path import join, dirname
-import json
import re
-import writeToS3 as s3
class Classification:
diff --git a/lambda/lambda_classification_split/lambda_function.py b/lambda/lambda_classification_split/lambda_function.py
new file mode 100644
index 0000000..94288d1
--- /dev/null
+++ b/lambda/lambda_classification_split/lambda_function.py
@@ -0,0 +1,63 @@
+from algorithm import algorithm
+from dataset import Dataset
+
+
+def lambda_handler(params, context):
+ '''
+ entrance to invoke AWS lambda,
+ variable params contains parameters passed in
+ '''
+ if 'HOST_IP' in params.keys():
+ HOST_IP = params['HOST_IP']
+ params.pop('HOST_IP', None)
+ else:
+ HOST_IP = None
+
+ if 'AWS_ACCESSKEY' in params.keys():
+ AWS_ACCESSKEY = params['AWS_ACCESSKEY']
+ params.pop('AWS_ACCESSKEY', None)
+ else:
+ AWS_ACCESSKEY = None
+
+ if 'AWS_ACCESSKEYSECRET' in params.keys():
+ AWS_ACCESSKEYSECRET = params['AWS_ACCESSKEYSECRET']
+ params.pop('AWS_ACCESSKEYSECRET', None)
+ else:
+ AWS_ACCESSKEYSECRET = None
+
+ if 'BUCKET_NAME' in params.keys():
+ BUCKET_NAME = params['BUCKET_NAME']
+ params.pop('BUCKET_NAME', None)
+ else:
+ BUCKET_NAME = None
+
+ d = Dataset(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+ urls = {}
+
+ # arranging the paths
+ path = d.organize_path_lambda(params)
+
+ # save the config file
+ urls['config'] = d.save_remote_output(path['localSavePath'],
+ path['remoteSavePath'],
+ 'config',
+ params)
+ # prepare input dataset
+ df = d.get_remote_input(path['remoteReadPath'],
+ path['filename'],
+ path['localReadPath'])
+
+ # execute the algorithm
+ output = algorithm(df, params)
+
+ # upload object to s3 bucket and return the url
+ for key, value in output.items():
+ if key != 'uid':
+ urls[key] = d.save_remote_output(path['localSavePath'],
+ path['remoteSavePath'],
+ key,
+ value)
+ else:
+ urls[key] = value
+
+ return urls
diff --git a/lambda/lambda_classification_split_dev/plot.py b/lambda/lambda_classification_split/plot.py
similarity index 100%
rename from lambda/lambda_classification_split_dev/plot.py
rename to lambda/lambda_classification_split/plot.py
diff --git a/lambda/lambda_classification_split_dev/requirement.txt b/lambda/lambda_classification_split/requirement.txt
similarity index 100%
rename from lambda/lambda_classification_split_dev/requirement.txt
rename to lambda/lambda_classification_split/requirement.txt
diff --git a/lambda/lambda_classification_split/writeToS3.py b/lambda/lambda_classification_split/writeToS3.py
new file mode 100644
index 0000000..51dbf78
--- /dev/null
+++ b/lambda/lambda_classification_split/writeToS3.py
@@ -0,0 +1,83 @@
+import mimetypes
+import os
+
+import boto3
+from botocore.client import Config
+
+
+class WriteToS3:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+
+ # local minio s3
+ if HOST_IP and AWS_ACCESSKEY and AWS_ACCESSKEYSECRET and BUCKET_NAME:
+ self.client = boto3.client('s3', endpoint_url='http://' + HOST_IP + ':9000',
+ aws_access_key_id=AWS_ACCESSKEY,
+ aws_secret_access_key=AWS_ACCESSKEYSECRET,
+ config=Config(signature_version='s3v4'))
+ self.bucket_name = BUCKET_NAME
+
+ # remote aws s3
+ else:
+ self.client = boto3.client('s3')
+ self.bucket_name = 'macroscope-smile'
+
+ def upload(self, localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath, filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType': 'application/octet-stream'}
+ else:
+ extra_args = {'ContentType': content_type}
+
+ self.client.upload_file(os.path.join(localpath, filename),
+ self.bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+ def createDirectory(self, DirectoryName):
+ self.client.put_object(Bucket=self.bucket_name, Key=DirectoryName)
+
+ def generate_downloads(self, remotepath, filename):
+ url = self.client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': self.bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+ def downloadToDisk(self, filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ self.client.download_fileobj(self.bucket_name,
+ os.path.join(remotepath, filename), f)
+
+ def getObject(self, remoteKey):
+ obj = self.client.get_object(Bucket=self.bucket_name, Key=remoteKey)
+
+ def putObject(self, body, remoteKey):
+ # bytes or seekable file-like object
+ obj = self.client.put_object(Bucket=self.bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+ def listDir(self, remoteClass):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+ def listFiles(self, foldernames):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/lambda/lambda_classification_split_dev/lambda_function.py b/lambda/lambda_classification_split_dev/lambda_function.py
deleted file mode 100644
index 84d8dd8..0000000
--- a/lambda/lambda_classification_split_dev/lambda_function.py
+++ /dev/null
@@ -1,65 +0,0 @@
-import dataset
-import plot
-from lambda_classification_split import Classification
-
-
-def algorithm(df, params):
- """
- wrapper function to put each individual algorithm inside
- :param df: dataframe that contains all the input dataset
- :param params: algorithm specific parameters
- :return: a dictionary of { outputname: output content in memory }
- """
- output = {}
-
- CF = Classification(df, params['column'])
-
- output['uid'] = params['uid']
-
- training_set, testing_set = CF.split(int(params['ratio']))
- output['training'] = training_set
- output['testing'] = testing_set
-
- # plot
- labels = ['training set data points', 'unlabeled data points']
- values = [len(training_set), len(testing_set)]
- output['div'] = plot.plot_pie_chart(labels, values,
- title='breakdown of training vs testing size')
-
- return output
-
-
-def lambda_handler(params, context):
- '''
- entrance to invoke AWS lambda,
- variable params contains parameters passed in
- '''
- urls = {}
-
- # arranging the paths
- path = dataset.organize_path_lambda(params)
-
- # save the config file
- urls['config'] = dataset.save_remote_output(path['localSavePath'],
- path['remoteSavePath'],
- 'config',
- params)
- # prepare input dataset
- df = dataset.get_remote_input(path['remoteReadPath'],
- path['filename'],
- path['localReadPath'])
-
- # execute the algorithm
- output = algorithm(df, params)
-
- # upload object to s3 bucket and return the url
- for key, value in output.items():
- if key != 'uid':
- urls[key] = dataset.save_remote_output(path['localSavePath'],
- path['remoteSavePath'],
- key,
- value)
- else:
- urls[key] = value
-
- return urls
diff --git a/lambda/lambda_classification_train/algorithm.py b/lambda/lambda_classification_train/algorithm.py
new file mode 100644
index 0000000..7571d8a
--- /dev/null
+++ b/lambda/lambda_classification_train/algorithm.py
@@ -0,0 +1,30 @@
+import plot
+from lambda_classification_train import Classification
+
+
+def algorithm(array, params):
+ """
+ wrapper function to put each individual algorithm inside
+ :param array: array that contains all the input dataset
+ :param params: algorithm specific parameters
+ :return: a dictionary of { outputname: output content in memory }
+ """
+
+ output = {}
+
+ CF = Classification(array)
+
+ output['uid'] = params['uid']
+
+ fold_scores, text_clf = CF.classify(params['model'])
+ output['accuracy'] = fold_scores
+ output['pipeline'] = text_clf
+
+ labels = text_clf.classes_
+ output['metrics'] = CF.calc_metrics(labels)
+
+ # plot
+ output['div_accuracy'] = plot.plot_bar_chart(fold_scores[0], fold_scores[1],
+ title='10 fold cross validation accuracy score')
+
+ return output
\ No newline at end of file
diff --git a/lambda/lambda_classification_train/dataset.py b/lambda/lambda_classification_train/dataset.py
new file mode 100644
index 0000000..8592c23
--- /dev/null
+++ b/lambda/lambda_classification_train/dataset.py
@@ -0,0 +1,147 @@
+import csv
+import os
+import json
+import pickle
+import types
+from writeToS3 import WriteToS3
+
+
+class Dataset:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+ self.s3 = WriteToS3(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
+ def organize_path_lambda(self, event):
+ """
+ parse the lambda handler parameter event to construct necessary paths for reading and storing data
+ :param event: aws lambda parameters from handler
+ :return: path dictionary
+ """
+ # arranging the paths
+ localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
+ localSavePath = os.path.join('/tmp',
+ event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
+ remoteReadPath = remoteSavePath
+ filename = event['labeledFilename']
+ else:
+ remoteReadPath = event['remoteReadPath']
+ filename = remoteReadPath.split('/')[-2] + '.csv'
+
+ if not os.path.exists(localSavePath):
+ os.makedirs(localSavePath)
+ if not os.path.exists(localReadPath):
+ os.makedirs(localReadPath)
+
+ path = {
+ 'remoteReadPath': remoteReadPath,
+ 'localReadPath': localReadPath,
+ 'localSavePath': localSavePath,
+ 'remoteSavePath': remoteSavePath,
+ 'filename': filename
+ }
+
+ return path
+
+ def get_remote_input(self, remoteReadPath, filename, localReadPath):
+ """
+ download input file from s3 bucket to a local location, and then load
+ it to a pandas dataframe
+ :param remoteReadPath: remote path in s3 to store the data
+ :param localReadPath: local location to store the data, usually in /tmp
+ :return: df: dataframe that contains the complete input file
+ """
+ self.s3.downloadToDisk(filename, localReadPath, remoteReadPath)
+
+ # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
+ # Array = 2D nested list holding column and row data
+ Array = []
+ try:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='utf-8', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+ except Exception:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='ISO-8859-1', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+
+ return Array
+
+
+ def save_remote_output(self, localSavePath, remoteSavePath, fname, output_data):
+ """
+ save output in memory first to local file, then upload to remote S3 bucket
+ :param localSavePath: local saved file
+ :param remoteSavePath: remote save file path
+ :param fname: filename
+ :param output_data: the actual data
+ :return: url of the file saved in S3 bucket
+ """
+
+ # json
+ if isinstance(output_data, dict):
+ fname += '.json'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ json.dump(output_data, f)
+
+ # # dataframe to csv
+ # elif isinstance(output_data, pd.DataFrame):
+ # fname += '.csv'
+ # output_data.to_csv(fname)
+
+ # string to html
+ elif isinstance(output_data, str):
+ fname += '.html'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ f.write(output_data)
+
+ # list(list) to csv
+ elif isinstance(output_data, list) \
+ and (isinstance(output_data[0], list) or isinstance(output_data[0],
+ tuple)):
+ fname += '.csv'
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ writer = csv.writer(f)
+ for row in output_data:
+ try:
+ writer.writerow(row)
+ except UnicodeEncodeError as e:
+ print(e)
+
+ # generator
+ elif isinstance(output_data, types.GeneratorType):
+ if fname == 'gephi':
+ fname += '.gml'
+ elif fname == 'pajek':
+ fname += '.net'
+ else:
+ fname += '.unknown'
+
+ with open(os.path.join(localSavePath, fname), 'w', newline='') as f:
+ for line in output_data:
+ f.write(line + '\n')
+
+ # else pickle the object
+ else:
+ fname += '.pickle'
+ with open(os.path.join(localSavePath, fname), 'wb') as f:
+ pickle.dump(output_data,f)
+
+ self.s3.upload(localSavePath, remoteSavePath, fname)
+ url = self.s3.generate_downloads(remoteSavePath, fname)
+
+ return url
diff --git a/lambda/lambda_classification_train_dev/lambda_classification_train.py b/lambda/lambda_classification_train/lambda_classification_train.py
similarity index 100%
rename from lambda/lambda_classification_train_dev/lambda_classification_train.py
rename to lambda/lambda_classification_train/lambda_classification_train.py
diff --git a/lambda/lambda_classification_train_dev/lambda_function.py b/lambda/lambda_classification_train/lambda_function.py
similarity index 54%
rename from lambda/lambda_classification_train_dev/lambda_function.py
rename to lambda/lambda_classification_train/lambda_function.py
index 6580d6e..6daaeb8 100644
--- a/lambda/lambda_classification_train_dev/lambda_function.py
+++ b/lambda/lambda_classification_train/lambda_function.py
@@ -1,34 +1,5 @@
-import dataset
-import plot
-from lambda_classification_train import Classification
-
-
-def algorithm(array, params):
- """
- wrapper function to put each individual algorithm inside
- :param array: array that contains all the input dataset
- :param params: algorithm specific parameters
- :return: a dictionary of { outputname: output content in memory }
- """
-
- output = {}
-
- CF = Classification(array)
-
- output['uid'] = params['uid']
-
- fold_scores, text_clf = CF.classify(params['model'])
- output['accuracy'] = fold_scores
- output['pipeline'] = text_clf
-
- labels = text_clf.classes_
- output['metrics'] = CF.calc_metrics(labels)
-
- # plot
- output['div_accuracy'] = plot.plot_bar_chart(fold_scores[0], fold_scores[1],
- title='10 fold cross validation accuracy score')
-
- return output
+from algorithm import algorithm
+from dataset import Dataset
def lambda_handler(params, context):
@@ -36,18 +7,43 @@ def lambda_handler(params, context):
entrance to invoke AWS lambda,
variable params contains parameters passed in
'''
+ if 'HOST_IP' in params.keys():
+ HOST_IP = params['HOST_IP']
+ params.pop('HOST_IP', None)
+ else:
+ HOST_IP = None
+
+ if 'AWS_ACCESSKEY' in params.keys():
+ AWS_ACCESSKEY = params['AWS_ACCESSKEY']
+ params.pop('AWS_ACCESSKEY', None)
+ else:
+ AWS_ACCESSKEY = None
+
+ if 'AWS_ACCESSKEYSECRET' in params.keys():
+ AWS_ACCESSKEYSECRET = params['AWS_ACCESSKEYSECRET']
+ params.pop('AWS_ACCESSKEYSECRET', None)
+ else:
+ AWS_ACCESSKEYSECRET = None
+
+ if 'BUCKET_NAME' in params.keys():
+ BUCKET_NAME = params['BUCKET_NAME']
+ params.pop('BUCKET_NAME', None)
+ else:
+ BUCKET_NAME = None
+
+ d = Dataset(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
urls = {}
# arranging the paths
- path = dataset.organize_path_lambda(params)
+ path = d.organize_path_lambda(params)
# save the config file
- urls['config'] = dataset.save_remote_output(path['localSavePath'],
+ urls['config'] = d.save_remote_output(path['localSavePath'],
path['remoteSavePath'],
'config',
params)
# prepare input dataset
- df = dataset.get_remote_input(path['remoteReadPath'],
+ df = d.get_remote_input(path['remoteReadPath'],
path['filename'],
path['localReadPath'])
@@ -57,7 +53,7 @@ def lambda_handler(params, context):
# upload object to s3 bucket and return the url
for key, value in output.items():
if key != 'uid':
- urls[key] = dataset.save_remote_output(path['localSavePath'],
+ urls[key] = d.save_remote_output(path['localSavePath'],
path['remoteSavePath'],
key,
value)
diff --git a/lambda/lambda_classification_train_dev/plot.py b/lambda/lambda_classification_train/plot.py
similarity index 100%
rename from lambda/lambda_classification_train_dev/plot.py
rename to lambda/lambda_classification_train/plot.py
diff --git a/lambda/lambda_classification_train_dev/requirement.txt b/lambda/lambda_classification_train/requirement.txt
similarity index 100%
rename from lambda/lambda_classification_train_dev/requirement.txt
rename to lambda/lambda_classification_train/requirement.txt
diff --git a/lambda/lambda_classification_train/writeToS3.py b/lambda/lambda_classification_train/writeToS3.py
new file mode 100644
index 0000000..51dbf78
--- /dev/null
+++ b/lambda/lambda_classification_train/writeToS3.py
@@ -0,0 +1,83 @@
+import mimetypes
+import os
+
+import boto3
+from botocore.client import Config
+
+
+class WriteToS3:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+
+ # local minio s3
+ if HOST_IP and AWS_ACCESSKEY and AWS_ACCESSKEYSECRET and BUCKET_NAME:
+ self.client = boto3.client('s3', endpoint_url='http://' + HOST_IP + ':9000',
+ aws_access_key_id=AWS_ACCESSKEY,
+ aws_secret_access_key=AWS_ACCESSKEYSECRET,
+ config=Config(signature_version='s3v4'))
+ self.bucket_name = BUCKET_NAME
+
+ # remote aws s3
+ else:
+ self.client = boto3.client('s3')
+ self.bucket_name = 'macroscope-smile'
+
+ def upload(self, localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath, filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType': 'application/octet-stream'}
+ else:
+ extra_args = {'ContentType': content_type}
+
+ self.client.upload_file(os.path.join(localpath, filename),
+ self.bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+ def createDirectory(self, DirectoryName):
+ self.client.put_object(Bucket=self.bucket_name, Key=DirectoryName)
+
+ def generate_downloads(self, remotepath, filename):
+ url = self.client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': self.bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+ def downloadToDisk(self, filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ self.client.download_fileobj(self.bucket_name,
+ os.path.join(remotepath, filename), f)
+
+ def getObject(self, remoteKey):
+ obj = self.client.get_object(Bucket=self.bucket_name, Key=remoteKey)
+
+ def putObject(self, body, remoteKey):
+ # bytes or seekable file-like object
+ obj = self.client.put_object(Bucket=self.bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+ def listDir(self, remoteClass):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+ def listFiles(self, foldernames):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/lambda/lambda_network_analysis_dev/algorithm.py b/lambda/lambda_network_analysis/algorithm.py
similarity index 98%
rename from lambda/lambda_network_analysis_dev/algorithm.py
rename to lambda/lambda_network_analysis/algorithm.py
index b16f6a7..54753ae 100644
--- a/lambda/lambda_network_analysis_dev/algorithm.py
+++ b/lambda/lambda_network_analysis/algorithm.py
@@ -1,6 +1,5 @@
import plot
from network_analysis import Network
-import pandas as pd
def algorithm(df, params):
diff --git a/lambda/lambda_network_analysis/dataset.py b/lambda/lambda_network_analysis/dataset.py
new file mode 100644
index 0000000..f9728b5
--- /dev/null
+++ b/lambda/lambda_network_analysis/dataset.py
@@ -0,0 +1,153 @@
+import csv
+import os
+import json
+import pickle
+import pandas as pd
+import types
+from writeToS3 import WriteToS3
+
+
+class Dataset:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+ self.s3 = WriteToS3(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
+ def organize_path_lambda(self, event):
+ """
+ parse the lambda handler parameter event to construct necessary paths for reading and storing data
+ :param event: aws lambda parameters from handler
+ :return: path dictionary
+ """
+ # arranging the paths
+ localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
+ localSavePath = os.path.join('/tmp',
+ event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
+ remoteReadPath = remoteSavePath
+ filename = event['labeledFilename']
+ else:
+ remoteReadPath = event['remoteReadPath']
+ filename = remoteReadPath.split('/')[-2] + '.csv'
+
+ if not os.path.exists(localSavePath):
+ os.makedirs(localSavePath)
+ if not os.path.exists(localReadPath):
+ os.makedirs(localReadPath)
+
+ path = {
+ 'remoteReadPath': remoteReadPath,
+ 'localReadPath': localReadPath,
+ 'localSavePath': localSavePath,
+ 'remoteSavePath': remoteSavePath,
+ 'filename': filename
+ }
+
+ return path
+
+
+ def get_remote_input(self, remoteReadPath, filename, localReadPath):
+ """
+ download input file from s3 bucket to a local location, and then load
+ it to a pandas dataframe
+ :param remoteReadPath: remote path in s3 to store the data
+ :param localReadPath: local location to store the data, usually in /tmp
+ :return: df: dataframe that contains the complete input file
+ """
+ self.s3.downloadToDisk(filename, localReadPath, remoteReadPath)
+
+ # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
+ # Array = 2D nested list holding column and row data
+ Array = []
+ try:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='utf-8', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+ except Exception:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='ISO-8859-1', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+
+ # load to pandas dataframe
+ df = pd.DataFrame(Array[1:], columns=Array[0])
+
+ return df
+
+
+ def save_remote_output(self, localSavePath, remoteSavePath, fname, output_data):
+ """
+ save output in memory first to local file, then upload to remote S3 bucket
+ :param localSavePath: local saved file
+ :param remoteSavePath: remote save file path
+ :param fname: filename
+ :param output_data: the actual data
+ :return: url of the file saved in S3 bucket
+ """
+
+ # json
+ if isinstance(output_data, dict):
+ fname += '.json'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ json.dump(output_data, f)
+
+ # dataframe to csv
+ elif isinstance(output_data, pd.DataFrame):
+ fname += '.csv'
+ output_data.to_csv(fname, encoding='utf-8')
+
+ # string to html
+ elif isinstance(output_data, str):
+ fname += '.html'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ f.write(output_data)
+
+ # list(list) to csv
+ elif isinstance(output_data, list) \
+ and (isinstance(output_data[0], list) or isinstance(output_data[0],
+ tuple)):
+ fname += '.csv'
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ writer = csv.writer(f)
+ for row in output_data:
+ try:
+ writer.writerow(row)
+ except UnicodeEncodeError as e:
+ print(e)
+
+ # special case
+ elif isinstance(output_data, types.GeneratorType):
+ if fname == 'gephi':
+ fname += '.gml'
+ elif fname == 'pajek':
+ fname += '.net'
+ else:
+ fname += '.unknown'
+
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ for line in output_data:
+ f.write(line + '\n')
+
+ # else pickle the object
+ else:
+ fname += '.pickle'
+ with open(os.path.join(localSavePath, fname), 'wb') as f:
+ pickle.dump(output_data, f)
+
+ self.s3.upload(localSavePath, remoteSavePath, fname)
+ url = self.s3.generate_downloads(remoteSavePath, fname)
+
+ return url
diff --git a/lambda/lambda_network_analysis/lambda_function.py b/lambda/lambda_network_analysis/lambda_function.py
new file mode 100644
index 0000000..9b0b3b4
--- /dev/null
+++ b/lambda/lambda_network_analysis/lambda_function.py
@@ -0,0 +1,63 @@
+from algorithm import algorithm
+from dataset import Dataset
+
+
+def lambda_handler(params, context):
+ '''
+ entrance to invoke AWS lambda,
+ variable params contains parameters passed in
+ '''
+ if 'HOST_IP' in params.keys():
+ HOST_IP = params['HOST_IP']
+ params.pop('HOST_IP', None)
+ else:
+ HOST_IP = None
+
+ if 'AWS_ACCESSKEY' in params.keys():
+ AWS_ACCESSKEY = params['AWS_ACCESSKEY']
+ params.pop('AWS_ACCESSKEY', None)
+ else:
+ AWS_ACCESSKEY = None
+
+ if 'AWS_ACCESSKEYSECRET' in params.keys():
+ AWS_ACCESSKEYSECRET = params['AWS_ACCESSKEYSECRET']
+ params.pop('AWS_ACCESSKEYSECRET', None)
+ else:
+ AWS_ACCESSKEYSECRET = None
+
+ if 'BUCKET_NAME' in params.keys():
+ BUCKET_NAME = params['BUCKET_NAME']
+ params.pop('BUCKET_NAME', None)
+ else:
+ BUCKET_NAME = None
+
+ d = Dataset(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+ urls = {}
+
+ # arranging the paths
+ path = d.organize_path_lambda(params)
+
+ # save the config file
+ urls['config'] = d.save_remote_output(path['localSavePath'],
+ path['remoteSavePath'],
+ 'config',
+ params)
+ # prepare input dataset
+ df = d.get_remote_input(path['remoteReadPath'],
+ path['filename'],
+ path['localReadPath'])
+
+ # execute the algorithm
+ output = algorithm(df, params)
+
+ # upload object to s3 bucket and return the url
+ for key, value in output.items():
+ if key != 'uid':
+ urls[key] = d.save_remote_output(path['localSavePath'],
+ path['remoteSavePath'],
+ key,
+ value)
+ else:
+ urls[key] = value
+
+ return urls
diff --git a/lambda/lambda_network_analysis_dev/network_analysis.py b/lambda/lambda_network_analysis/network_analysis.py
similarity index 100%
rename from lambda/lambda_network_analysis_dev/network_analysis.py
rename to lambda/lambda_network_analysis/network_analysis.py
diff --git a/lambda/lambda_network_analysis_dev/plot.py b/lambda/lambda_network_analysis/plot.py
similarity index 100%
rename from lambda/lambda_network_analysis_dev/plot.py
rename to lambda/lambda_network_analysis/plot.py
diff --git a/lambda/lambda_network_analysis_dev/requirement.txt b/lambda/lambda_network_analysis/requirement.txt
similarity index 100%
rename from lambda/lambda_network_analysis_dev/requirement.txt
rename to lambda/lambda_network_analysis/requirement.txt
diff --git a/lambda/lambda_network_analysis/writeToS3.py b/lambda/lambda_network_analysis/writeToS3.py
new file mode 100644
index 0000000..51dbf78
--- /dev/null
+++ b/lambda/lambda_network_analysis/writeToS3.py
@@ -0,0 +1,83 @@
+import mimetypes
+import os
+
+import boto3
+from botocore.client import Config
+
+
+class WriteToS3:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+
+ # local minio s3
+ if HOST_IP and AWS_ACCESSKEY and AWS_ACCESSKEYSECRET and BUCKET_NAME:
+ self.client = boto3.client('s3', endpoint_url='http://' + HOST_IP + ':9000',
+ aws_access_key_id=AWS_ACCESSKEY,
+ aws_secret_access_key=AWS_ACCESSKEYSECRET,
+ config=Config(signature_version='s3v4'))
+ self.bucket_name = BUCKET_NAME
+
+ # remote aws s3
+ else:
+ self.client = boto3.client('s3')
+ self.bucket_name = 'macroscope-smile'
+
+ def upload(self, localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath, filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType': 'application/octet-stream'}
+ else:
+ extra_args = {'ContentType': content_type}
+
+ self.client.upload_file(os.path.join(localpath, filename),
+ self.bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+ def createDirectory(self, DirectoryName):
+ self.client.put_object(Bucket=self.bucket_name, Key=DirectoryName)
+
+ def generate_downloads(self, remotepath, filename):
+ url = self.client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': self.bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+ def downloadToDisk(self, filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ self.client.download_fileobj(self.bucket_name,
+ os.path.join(remotepath, filename), f)
+
+ def getObject(self, remoteKey):
+ obj = self.client.get_object(Bucket=self.bucket_name, Key=remoteKey)
+
+ def putObject(self, body, remoteKey):
+ # bytes or seekable file-like object
+ obj = self.client.put_object(Bucket=self.bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+ def listDir(self, remoteClass):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+ def listFiles(self, foldernames):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/lambda/lambda_network_analysis_dev/writeToS3.py b/lambda/lambda_network_analysis_dev/writeToS3.py
deleted file mode 100644
index 75b1999..0000000
--- a/lambda/lambda_network_analysis_dev/writeToS3.py
+++ /dev/null
@@ -1,72 +0,0 @@
-import boto3
-import os
-import mimetypes
-
-client = boto3.client('s3')
-bucket_name = 'macroscope-smile'
-
-def upload(localpath, remotepath, filename):
- content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
- print(filename, content_type)
- if content_type == None:
- extra_args = {'ContentType':'application/octet-stream'}
- else:
- extra_args = {'ContentType':content_type}
-
- client.upload_file(os.path.join(localpath, filename),
- bucket_name,
- os.path.join(remotepath, filename),
- ExtraArgs=extra_args)
-
-
-def createDirectory(DirectoryName):
- client.put_object(Bucket=bucket_name, Key=DirectoryName)
-
-
-def generate_downloads(remotepath, filename):
- url = client.generate_presigned_url(
- ClientMethod='get_object',
- Params={
- 'Bucket': bucket_name,
- 'Key': os.path.join(remotepath, filename)
- },
- ExpiresIn=604800 # one week
- )
-
- return url
-
-
-def downloadToDisk(filename, localpath, remotepath):
- with open(os.path.join(localpath, filename), 'wb') as f:
- client.download_fileobj(bucket_name,
- os.path.join(remotepath, filename), f)
-
-
-def getObject(remoteKey):
- obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
-
-
-def putObject(body, remoteKey):
- # bytes or seekable file-like object
- obj = client.put_object(Bucket=bucket_name,
- Body=body, Key=remoteKey)
- print(obj['Body'].read())
-
-def listDir(remoteClass):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=remoteClass,
- Delimiter='/')
- foldernames = []
- for o in objects.get('CommonPrefixes'):
- foldernames.append(o.get('Prefix'))
-
- # only return the list of foldernames
- return foldernames
-
-
-def listFiles(foldernames):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=foldernames)
-
- # return rich information about the files
- return objects.get('Contents')
diff --git a/lambda/lambda_pipeline/dataset.py b/lambda/lambda_pipeline/dataset.py
index a9bc820..f9728b5 100644
--- a/lambda/lambda_pipeline/dataset.py
+++ b/lambda/lambda_pipeline/dataset.py
@@ -4,145 +4,150 @@
import pickle
import pandas as pd
import types
-import writeToS3 as s3
-
-
-def organize_path_lambda(event):
- """
- parse the lambda handler parameter event to construct necessary paths for reading and storing data
- :param event: aws lambda parameters from handler
- :return: path dictionary
- """
- # arranging the paths
- localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
- localSavePath = os.path.join('/tmp',
- event['s3FolderName'] + event['resultPath'],
- event['uid'])
- remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
- event['uid'])
- if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
- remoteReadPath = remoteSavePath
- filename = event['labeledFilename']
- else:
- remoteReadPath = event['remoteReadPath']
- filename = remoteReadPath.split('/')[-2] + '.csv'
-
- if not os.path.exists(localSavePath):
- os.makedirs(localSavePath)
- if not os.path.exists(localReadPath):
- os.makedirs(localReadPath)
-
- path = {
- 'remoteReadPath': remoteReadPath,
- 'localReadPath': localReadPath,
- 'localSavePath': localSavePath,
- 'remoteSavePath': remoteSavePath,
- 'filename': filename
- }
-
- return path
-
-
-def get_remote_input(remoteReadPath, filename, localReadPath):
- """
- download input file from s3 bucket to a local location, and then load
- it to a pandas dataframe
- :param remoteReadPath: remote path in s3 to store the data
- :param localReadPath: local location to store the data, usually in /tmp
- :return: df: dataframe that contains the complete input file
- """
- s3.downloadToDisk(filename, localReadPath, remoteReadPath)
-
- # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
- # Array = 2D nested list holding column and row data
- Array = []
- try:
- with open(os.path.join(localReadPath, filename), 'r',
- encoding='utf-8') as f:
- reader = csv.reader(f)
- try:
- for row in reader:
- Array.append(row)
- except Exception as e:
- print(e)
- except Exception:
- with open(os.path.join(localReadPath, filename), 'r',
- encoding='ISO-8859-1') as f:
- reader = csv.reader(f)
- try:
- for row in reader:
- Array.append(row)
- except Exception as e:
- print(e)
-
- # load to pandas dataframe
- df = pd.DataFrame(Array[1:], columns=Array[0])
-
- return df
-
-
-def save_remote_output(localSavePath, remoteSavePath, fname, output_data):
- """
- save output in memory first to local file, then upload to remote S3 bucket
- :param localSavePath: local saved file
- :param remoteSavePath: remote save file path
- :param fname: filename
- :param output_data: the actual data
- :return: url of the file saved in S3 bucket
- """
-
- # json
- if isinstance(output_data, dict):
- fname += '.json'
- with open(os.path.join(localSavePath, fname), 'w') as f:
- json.dump(output_data, f)
-
- # dataframe to csv
- elif isinstance(output_data, pd.DataFrame):
- fname += '.csv'
- output_data.to_csv(fname, encoding='utf-8')
-
- # string to html
- elif isinstance(output_data, str):
- fname += '.html'
- with open(os.path.join(localSavePath, fname), 'w') as f:
- f.write(output_data)
-
- # list(list) to csv
- elif isinstance(output_data, list) \
- and (isinstance(output_data[0], list) or isinstance(output_data[0],
- tuple)):
- fname += '.csv'
- with open(os.path.join(localSavePath, fname), 'w', newline='',
- encoding='utf-8') as f:
- writer = csv.writer(f)
- for row in output_data:
+from writeToS3 import WriteToS3
+
+
+class Dataset:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+ self.s3 = WriteToS3(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
+ def organize_path_lambda(self, event):
+ """
+ parse the lambda handler parameter event to construct necessary paths for reading and storing data
+ :param event: aws lambda parameters from handler
+ :return: path dictionary
+ """
+ # arranging the paths
+ localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
+ localSavePath = os.path.join('/tmp',
+ event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
+ remoteReadPath = remoteSavePath
+ filename = event['labeledFilename']
+ else:
+ remoteReadPath = event['remoteReadPath']
+ filename = remoteReadPath.split('/')[-2] + '.csv'
+
+ if not os.path.exists(localSavePath):
+ os.makedirs(localSavePath)
+ if not os.path.exists(localReadPath):
+ os.makedirs(localReadPath)
+
+ path = {
+ 'remoteReadPath': remoteReadPath,
+ 'localReadPath': localReadPath,
+ 'localSavePath': localSavePath,
+ 'remoteSavePath': remoteSavePath,
+ 'filename': filename
+ }
+
+ return path
+
+
+ def get_remote_input(self, remoteReadPath, filename, localReadPath):
+ """
+ download input file from s3 bucket to a local location, and then load
+ it to a pandas dataframe
+ :param remoteReadPath: remote path in s3 to store the data
+ :param localReadPath: local location to store the data, usually in /tmp
+ :return: df: dataframe that contains the complete input file
+ """
+ self.s3.downloadToDisk(filename, localReadPath, remoteReadPath)
+
+ # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
+ # Array = 2D nested list holding column and row data
+ Array = []
+ try:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='utf-8', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+ except Exception:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='ISO-8859-1', errors="ignore") as f:
+ reader = csv.reader(f)
try:
- writer.writerow(row)
- except UnicodeEncodeError as e:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
print(e)
- # special case
- elif isinstance(output_data, types.GeneratorType):
- if fname == 'gephi':
- fname += '.gml'
- elif fname == 'pajek':
- fname += '.net'
+ # load to pandas dataframe
+ df = pd.DataFrame(Array[1:], columns=Array[0])
+
+ return df
+
+
+ def save_remote_output(self, localSavePath, remoteSavePath, fname, output_data):
+ """
+ save output in memory first to local file, then upload to remote S3 bucket
+ :param localSavePath: local saved file
+ :param remoteSavePath: remote save file path
+ :param fname: filename
+ :param output_data: the actual data
+ :return: url of the file saved in S3 bucket
+ """
+
+ # json
+ if isinstance(output_data, dict):
+ fname += '.json'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ json.dump(output_data, f)
+
+ # dataframe to csv
+ elif isinstance(output_data, pd.DataFrame):
+ fname += '.csv'
+ output_data.to_csv(fname, encoding='utf-8')
+
+ # string to html
+ elif isinstance(output_data, str):
+ fname += '.html'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ f.write(output_data)
+
+ # list(list) to csv
+ elif isinstance(output_data, list) \
+ and (isinstance(output_data[0], list) or isinstance(output_data[0],
+ tuple)):
+ fname += '.csv'
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ writer = csv.writer(f)
+ for row in output_data:
+ try:
+ writer.writerow(row)
+ except UnicodeEncodeError as e:
+ print(e)
+
+ # special case
+ elif isinstance(output_data, types.GeneratorType):
+ if fname == 'gephi':
+ fname += '.gml'
+ elif fname == 'pajek':
+ fname += '.net'
+ else:
+ fname += '.unknown'
+
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ for line in output_data:
+ f.write(line + '\n')
+
+ # else pickle the object
else:
- fname += '.unknown'
-
- with open(os.path.join(localSavePath, fname), 'w', newline='',
- encoding='utf-8') as f:
- for line in output_data:
- f.write(line + '\n')
-
- # else pickle the object
- else:
- fname += '.pickle'
- with open(os.path.join(localSavePath, fname), 'wb') as f:
- pickle.dump(output_data, f)
+ fname += '.pickle'
+ with open(os.path.join(localSavePath, fname), 'wb') as f:
+ pickle.dump(output_data, f)
- s3.upload(localSavePath, remoteSavePath, fname)
- url = s3.generate_downloads(remoteSavePath, fname)
+ self.s3.upload(localSavePath, remoteSavePath, fname)
+ url = self.s3.generate_downloads(remoteSavePath, fname)
- return url
+ return url
diff --git a/lambda/lambda_pipeline/lambda_function.py b/lambda/lambda_pipeline/lambda_function.py
index 9c33389..865356b 100644
--- a/lambda/lambda_pipeline/lambda_function.py
+++ b/lambda/lambda_pipeline/lambda_function.py
@@ -1,5 +1,4 @@
-import dataset
-import plot
+from dataset import Dataset
from algorithm import algorithm
def lambda_handler(params, context):
@@ -9,17 +8,43 @@ def lambda_handler(params, context):
'''
urls = {}
+ if 'HOST_IP' in params.keys():
+ HOST_IP = params['HOST_IP']
+ params.pop('HOST_IP', None)
+ else:
+ HOST_IP = None
+
+ if 'AWS_ACCESSKEY' in params.keys():
+ AWS_ACCESSKEY = params['AWS_ACCESSKEY']
+ params.pop('AWS_ACCESSKEY', None)
+ else:
+ AWS_ACCESSKEY = None
+
+ if 'AWS_ACCESSKEYSECRET' in params.keys():
+ AWS_ACCESSKEYSECRET = params['AWS_ACCESSKEYSECRET']
+ params.pop('AWS_ACCESSKEYSECRET', None)
+ else:
+ AWS_ACCESSKEYSECRET = None
+
+ if 'BUCKET_NAME' in params.keys():
+ BUCKET_NAME = params['BUCKET_NAME']
+ params.pop('BUCKET_NAME', None)
+ else:
+ BUCKET_NAME = None
+
+ d = Dataset(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
# arranging the paths
- path = dataset.organize_path_lambda(params)
+ path = d.organize_path_lambda(params)
# save the config file
- urls['config'] = dataset.save_remote_output(path['localSavePath'],
+ urls['config'] = d.save_remote_output(path['localSavePath'],
path['remoteSavePath'],
'config',
params)
# prepare input dataset
- df = dataset.get_remote_input(path['remoteReadPath'],
+ df = d.get_remote_input(path['remoteReadPath'],
path['filename'],
path['localReadPath'])
@@ -30,7 +55,7 @@ def lambda_handler(params, context):
# upload object to s3 bucket and return the url
for key, value in output.items():
if key != 'uuid':
- urls[key] = dataset.save_remote_output(path['localSavePath'],
+ urls[key] = d.save_remote_output(path['localSavePath'],
path['remoteSavePath'],
key,
value)
diff --git a/lambda/lambda_pipeline/writeToS3.py b/lambda/lambda_pipeline/writeToS3.py
index 75b1999..51dbf78 100644
--- a/lambda/lambda_pipeline/writeToS3.py
+++ b/lambda/lambda_pipeline/writeToS3.py
@@ -1,72 +1,83 @@
-import boto3
-import os
import mimetypes
+import os
-client = boto3.client('s3')
-bucket_name = 'macroscope-smile'
-
-def upload(localpath, remotepath, filename):
- content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
- print(filename, content_type)
- if content_type == None:
- extra_args = {'ContentType':'application/octet-stream'}
- else:
- extra_args = {'ContentType':content_type}
-
- client.upload_file(os.path.join(localpath, filename),
- bucket_name,
- os.path.join(remotepath, filename),
- ExtraArgs=extra_args)
-
-
-def createDirectory(DirectoryName):
- client.put_object(Bucket=bucket_name, Key=DirectoryName)
-
-
-def generate_downloads(remotepath, filename):
- url = client.generate_presigned_url(
- ClientMethod='get_object',
- Params={
- 'Bucket': bucket_name,
- 'Key': os.path.join(remotepath, filename)
- },
- ExpiresIn=604800 # one week
- )
-
- return url
-
-
-def downloadToDisk(filename, localpath, remotepath):
- with open(os.path.join(localpath, filename), 'wb') as f:
- client.download_fileobj(bucket_name,
- os.path.join(remotepath, filename), f)
-
-
-def getObject(remoteKey):
- obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
-
-
-def putObject(body, remoteKey):
- # bytes or seekable file-like object
- obj = client.put_object(Bucket=bucket_name,
- Body=body, Key=remoteKey)
- print(obj['Body'].read())
-
-def listDir(remoteClass):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=remoteClass,
- Delimiter='/')
- foldernames = []
- for o in objects.get('CommonPrefixes'):
- foldernames.append(o.get('Prefix'))
-
- # only return the list of foldernames
- return foldernames
-
-
-def listFiles(foldernames):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=foldernames)
-
- # return rich information about the files
- return objects.get('Contents')
+import boto3
+from botocore.client import Config
+
+
+class WriteToS3:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+
+ # local minio s3
+ if HOST_IP and AWS_ACCESSKEY and AWS_ACCESSKEYSECRET and BUCKET_NAME:
+ self.client = boto3.client('s3', endpoint_url='http://' + HOST_IP + ':9000',
+ aws_access_key_id=AWS_ACCESSKEY,
+ aws_secret_access_key=AWS_ACCESSKEYSECRET,
+ config=Config(signature_version='s3v4'))
+ self.bucket_name = BUCKET_NAME
+
+ # remote aws s3
+ else:
+ self.client = boto3.client('s3')
+ self.bucket_name = 'macroscope-smile'
+
+ def upload(self, localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath, filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType': 'application/octet-stream'}
+ else:
+ extra_args = {'ContentType': content_type}
+
+ self.client.upload_file(os.path.join(localpath, filename),
+ self.bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+ def createDirectory(self, DirectoryName):
+ self.client.put_object(Bucket=self.bucket_name, Key=DirectoryName)
+
+ def generate_downloads(self, remotepath, filename):
+ url = self.client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': self.bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+ def downloadToDisk(self, filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ self.client.download_fileobj(self.bucket_name,
+ os.path.join(remotepath, filename), f)
+
+ def getObject(self, remoteKey):
+ obj = self.client.get_object(Bucket=self.bucket_name, Key=remoteKey)
+
+ def putObject(self, body, remoteKey):
+ # bytes or seekable file-like object
+ obj = self.client.put_object(Bucket=self.bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+ def listDir(self, remoteClass):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+ def listFiles(self, foldernames):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/lambda/lambda_preprocessing_dev/algorithm.py b/lambda/lambda_preprocessing/algorithm.py
similarity index 100%
rename from lambda/lambda_preprocessing_dev/algorithm.py
rename to lambda/lambda_preprocessing/algorithm.py
diff --git a/lambda/lambda_preprocessing/dataset.py b/lambda/lambda_preprocessing/dataset.py
new file mode 100644
index 0000000..f9728b5
--- /dev/null
+++ b/lambda/lambda_preprocessing/dataset.py
@@ -0,0 +1,153 @@
+import csv
+import os
+import json
+import pickle
+import pandas as pd
+import types
+from writeToS3 import WriteToS3
+
+
+class Dataset:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+ self.s3 = WriteToS3(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
+ def organize_path_lambda(self, event):
+ """
+ parse the lambda handler parameter event to construct necessary paths for reading and storing data
+ :param event: aws lambda parameters from handler
+ :return: path dictionary
+ """
+ # arranging the paths
+ localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
+ localSavePath = os.path.join('/tmp',
+ event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
+ remoteReadPath = remoteSavePath
+ filename = event['labeledFilename']
+ else:
+ remoteReadPath = event['remoteReadPath']
+ filename = remoteReadPath.split('/')[-2] + '.csv'
+
+ if not os.path.exists(localSavePath):
+ os.makedirs(localSavePath)
+ if not os.path.exists(localReadPath):
+ os.makedirs(localReadPath)
+
+ path = {
+ 'remoteReadPath': remoteReadPath,
+ 'localReadPath': localReadPath,
+ 'localSavePath': localSavePath,
+ 'remoteSavePath': remoteSavePath,
+ 'filename': filename
+ }
+
+ return path
+
+
+ def get_remote_input(self, remoteReadPath, filename, localReadPath):
+ """
+ download input file from s3 bucket to a local location, and then load
+ it to a pandas dataframe
+ :param remoteReadPath: remote path in s3 to store the data
+ :param localReadPath: local location to store the data, usually in /tmp
+ :return: df: dataframe that contains the complete input file
+ """
+ self.s3.downloadToDisk(filename, localReadPath, remoteReadPath)
+
+ # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
+ # Array = 2D nested list holding column and row data
+ Array = []
+ try:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='utf-8', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+ except Exception:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='ISO-8859-1', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+
+ # load to pandas dataframe
+ df = pd.DataFrame(Array[1:], columns=Array[0])
+
+ return df
+
+
+ def save_remote_output(self, localSavePath, remoteSavePath, fname, output_data):
+ """
+ save output in memory first to local file, then upload to remote S3 bucket
+ :param localSavePath: local saved file
+ :param remoteSavePath: remote save file path
+ :param fname: filename
+ :param output_data: the actual data
+ :return: url of the file saved in S3 bucket
+ """
+
+ # json
+ if isinstance(output_data, dict):
+ fname += '.json'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ json.dump(output_data, f)
+
+ # dataframe to csv
+ elif isinstance(output_data, pd.DataFrame):
+ fname += '.csv'
+ output_data.to_csv(fname, encoding='utf-8')
+
+ # string to html
+ elif isinstance(output_data, str):
+ fname += '.html'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ f.write(output_data)
+
+ # list(list) to csv
+ elif isinstance(output_data, list) \
+ and (isinstance(output_data[0], list) or isinstance(output_data[0],
+ tuple)):
+ fname += '.csv'
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ writer = csv.writer(f)
+ for row in output_data:
+ try:
+ writer.writerow(row)
+ except UnicodeEncodeError as e:
+ print(e)
+
+ # special case
+ elif isinstance(output_data, types.GeneratorType):
+ if fname == 'gephi':
+ fname += '.gml'
+ elif fname == 'pajek':
+ fname += '.net'
+ else:
+ fname += '.unknown'
+
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ for line in output_data:
+ f.write(line + '\n')
+
+ # else pickle the object
+ else:
+ fname += '.pickle'
+ with open(os.path.join(localSavePath, fname), 'wb') as f:
+ pickle.dump(output_data, f)
+
+ self.s3.upload(localSavePath, remoteSavePath, fname)
+ url = self.s3.generate_downloads(remoteSavePath, fname)
+
+ return url
diff --git a/lambda/lambda_preprocessing/lambda_function.py b/lambda/lambda_preprocessing/lambda_function.py
new file mode 100644
index 0000000..26ebae5
--- /dev/null
+++ b/lambda/lambda_preprocessing/lambda_function.py
@@ -0,0 +1,64 @@
+from algorithm import algorithm
+from dataset import Dataset
+
+
+def lambda_handler(params, context):
+ '''
+ entrance to invoke AWS lambda,
+ variable params contains parameters passed in
+ '''
+
+ if 'HOST_IP' in params.keys():
+ HOST_IP = params['HOST_IP']
+ params.pop('HOST_IP', None)
+ else:
+ HOST_IP = None
+
+ if 'AWS_ACCESSKEY' in params.keys():
+ AWS_ACCESSKEY = params['AWS_ACCESSKEY']
+ params.pop('AWS_ACCESSKEY', None)
+ else:
+ AWS_ACCESSKEY = None
+
+ if 'AWS_ACCESSKEYSECRET' in params.keys():
+ AWS_ACCESSKEYSECRET = params['AWS_ACCESSKEYSECRET']
+ params.pop('AWS_ACCESSKEYSECRET', None)
+ else:
+ AWS_ACCESSKEYSECRET = None
+
+ if 'BUCKET_NAME' in params.keys():
+ BUCKET_NAME = params['BUCKET_NAME']
+ params.pop('BUCKET_NAME', None)
+ else:
+ BUCKET_NAME = None
+
+ d = Dataset(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+ urls = {}
+
+ # arranging the paths
+ path = d.organize_path_lambda(params)
+
+ # save the config file
+ urls['config'] = d.save_remote_output(path['localSavePath'],
+ path['remoteSavePath'],
+ 'config',
+ params)
+ # prepare input dataset
+ df = d.get_remote_input(path['remoteReadPath'],
+ path['filename'],
+ path['localReadPath'])
+
+ # execute the algorithm
+ output = algorithm(df, params)
+
+ # upload object to s3 bucket and return the url
+ for key, value in output.items():
+ if key != 'uid':
+ urls[key] = d.save_remote_output(path['localSavePath'],
+ path['remoteSavePath'],
+ key,
+ value)
+ else:
+ urls[key] = value
+
+ return urls
diff --git a/lambda/lambda_preprocessing_dev/plot.py b/lambda/lambda_preprocessing/plot.py
similarity index 100%
rename from lambda/lambda_preprocessing_dev/plot.py
rename to lambda/lambda_preprocessing/plot.py
diff --git a/lambda/lambda_preprocessing_dev/preprocessing.py b/lambda/lambda_preprocessing/preprocessing.py
similarity index 100%
rename from lambda/lambda_preprocessing_dev/preprocessing.py
rename to lambda/lambda_preprocessing/preprocessing.py
diff --git a/lambda/lambda_preprocessing_dev/requirement.txt b/lambda/lambda_preprocessing/requirement.txt
similarity index 100%
rename from lambda/lambda_preprocessing_dev/requirement.txt
rename to lambda/lambda_preprocessing/requirement.txt
diff --git a/lambda/lambda_preprocessing_dev/stopwords_en.txt b/lambda/lambda_preprocessing/stopwords_en.txt
similarity index 100%
rename from lambda/lambda_preprocessing_dev/stopwords_en.txt
rename to lambda/lambda_preprocessing/stopwords_en.txt
diff --git a/lambda/lambda_preprocessing_dev/twitter-customized.txt b/lambda/lambda_preprocessing/twitter-customized.txt
similarity index 100%
rename from lambda/lambda_preprocessing_dev/twitter-customized.txt
rename to lambda/lambda_preprocessing/twitter-customized.txt
diff --git a/lambda/lambda_preprocessing/writeToS3.py b/lambda/lambda_preprocessing/writeToS3.py
new file mode 100644
index 0000000..51dbf78
--- /dev/null
+++ b/lambda/lambda_preprocessing/writeToS3.py
@@ -0,0 +1,83 @@
+import mimetypes
+import os
+
+import boto3
+from botocore.client import Config
+
+
+class WriteToS3:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+
+ # local minio s3
+ if HOST_IP and AWS_ACCESSKEY and AWS_ACCESSKEYSECRET and BUCKET_NAME:
+ self.client = boto3.client('s3', endpoint_url='http://' + HOST_IP + ':9000',
+ aws_access_key_id=AWS_ACCESSKEY,
+ aws_secret_access_key=AWS_ACCESSKEYSECRET,
+ config=Config(signature_version='s3v4'))
+ self.bucket_name = BUCKET_NAME
+
+ # remote aws s3
+ else:
+ self.client = boto3.client('s3')
+ self.bucket_name = 'macroscope-smile'
+
+ def upload(self, localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath, filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType': 'application/octet-stream'}
+ else:
+ extra_args = {'ContentType': content_type}
+
+ self.client.upload_file(os.path.join(localpath, filename),
+ self.bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+ def createDirectory(self, DirectoryName):
+ self.client.put_object(Bucket=self.bucket_name, Key=DirectoryName)
+
+ def generate_downloads(self, remotepath, filename):
+ url = self.client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': self.bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+ def downloadToDisk(self, filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ self.client.download_fileobj(self.bucket_name,
+ os.path.join(remotepath, filename), f)
+
+ def getObject(self, remoteKey):
+ obj = self.client.get_object(Bucket=self.bucket_name, Key=remoteKey)
+
+ def putObject(self, body, remoteKey):
+ # bytes or seekable file-like object
+ obj = self.client.put_object(Bucket=self.bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+ def listDir(self, remoteClass):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+ def listFiles(self, foldernames):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/lambda/lambda_preprocessing_dev/writeToS3.py b/lambda/lambda_preprocessing_dev/writeToS3.py
deleted file mode 100644
index 75b1999..0000000
--- a/lambda/lambda_preprocessing_dev/writeToS3.py
+++ /dev/null
@@ -1,72 +0,0 @@
-import boto3
-import os
-import mimetypes
-
-client = boto3.client('s3')
-bucket_name = 'macroscope-smile'
-
-def upload(localpath, remotepath, filename):
- content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
- print(filename, content_type)
- if content_type == None:
- extra_args = {'ContentType':'application/octet-stream'}
- else:
- extra_args = {'ContentType':content_type}
-
- client.upload_file(os.path.join(localpath, filename),
- bucket_name,
- os.path.join(remotepath, filename),
- ExtraArgs=extra_args)
-
-
-def createDirectory(DirectoryName):
- client.put_object(Bucket=bucket_name, Key=DirectoryName)
-
-
-def generate_downloads(remotepath, filename):
- url = client.generate_presigned_url(
- ClientMethod='get_object',
- Params={
- 'Bucket': bucket_name,
- 'Key': os.path.join(remotepath, filename)
- },
- ExpiresIn=604800 # one week
- )
-
- return url
-
-
-def downloadToDisk(filename, localpath, remotepath):
- with open(os.path.join(localpath, filename), 'wb') as f:
- client.download_fileobj(bucket_name,
- os.path.join(remotepath, filename), f)
-
-
-def getObject(remoteKey):
- obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
-
-
-def putObject(body, remoteKey):
- # bytes or seekable file-like object
- obj = client.put_object(Bucket=bucket_name,
- Body=body, Key=remoteKey)
- print(obj['Body'].read())
-
-def listDir(remoteClass):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=remoteClass,
- Delimiter='/')
- foldernames = []
- for o in objects.get('CommonPrefixes'):
- foldernames.append(o.get('Prefix'))
-
- # only return the list of foldernames
- return foldernames
-
-
-def listFiles(foldernames):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=foldernames)
-
- # return rich information about the files
- return objects.get('Contents')
diff --git a/lambda/lambda_sentiment_analysis_dev/algorithm.py b/lambda/lambda_sentiment_analysis/algorithm.py
similarity index 100%
rename from lambda/lambda_sentiment_analysis_dev/algorithm.py
rename to lambda/lambda_sentiment_analysis/algorithm.py
diff --git a/lambda/lambda_sentiment_analysis/dataset.py b/lambda/lambda_sentiment_analysis/dataset.py
new file mode 100644
index 0000000..f9728b5
--- /dev/null
+++ b/lambda/lambda_sentiment_analysis/dataset.py
@@ -0,0 +1,153 @@
+import csv
+import os
+import json
+import pickle
+import pandas as pd
+import types
+from writeToS3 import WriteToS3
+
+
+class Dataset:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+ self.s3 = WriteToS3(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+
+ def organize_path_lambda(self, event):
+ """
+ parse the lambda handler parameter event to construct necessary paths for reading and storing data
+ :param event: aws lambda parameters from handler
+ :return: path dictionary
+ """
+ # arranging the paths
+ localReadPath = os.path.join('/tmp', event['s3FolderName'], event['uid'])
+ localSavePath = os.path.join('/tmp',
+ event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ remoteSavePath = os.path.join(event['s3FolderName'] + event['resultPath'],
+ event['uid'])
+ if 'remoteReadPath' not in event.keys() or event['remoteReadPath'] == 'undefined':
+ remoteReadPath = remoteSavePath
+ filename = event['labeledFilename']
+ else:
+ remoteReadPath = event['remoteReadPath']
+ filename = remoteReadPath.split('/')[-2] + '.csv'
+
+ if not os.path.exists(localSavePath):
+ os.makedirs(localSavePath)
+ if not os.path.exists(localReadPath):
+ os.makedirs(localReadPath)
+
+ path = {
+ 'remoteReadPath': remoteReadPath,
+ 'localReadPath': localReadPath,
+ 'localSavePath': localSavePath,
+ 'remoteSavePath': remoteSavePath,
+ 'filename': filename
+ }
+
+ return path
+
+
+ def get_remote_input(self, remoteReadPath, filename, localReadPath):
+ """
+ download input file from s3 bucket to a local location, and then load
+ it to a pandas dataframe
+ :param remoteReadPath: remote path in s3 to store the data
+ :param localReadPath: local location to store the data, usually in /tmp
+ :return: df: dataframe that contains the complete input file
+ """
+ self.s3.downloadToDisk(filename, localReadPath, remoteReadPath)
+
+ # quick fix for decoding error, sometimes the data is coded in ISO-8859-1
+ # Array = 2D nested list holding column and row data
+ Array = []
+ try:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='utf-8', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+ except Exception:
+ with open(os.path.join(localReadPath, filename), 'r',
+ encoding='ISO-8859-1', errors="ignore") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ print(e)
+
+ # load to pandas dataframe
+ df = pd.DataFrame(Array[1:], columns=Array[0])
+
+ return df
+
+
+ def save_remote_output(self, localSavePath, remoteSavePath, fname, output_data):
+ """
+ save output in memory first to local file, then upload to remote S3 bucket
+ :param localSavePath: local saved file
+ :param remoteSavePath: remote save file path
+ :param fname: filename
+ :param output_data: the actual data
+ :return: url of the file saved in S3 bucket
+ """
+
+ # json
+ if isinstance(output_data, dict):
+ fname += '.json'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ json.dump(output_data, f)
+
+ # dataframe to csv
+ elif isinstance(output_data, pd.DataFrame):
+ fname += '.csv'
+ output_data.to_csv(fname, encoding='utf-8')
+
+ # string to html
+ elif isinstance(output_data, str):
+ fname += '.html'
+ with open(os.path.join(localSavePath, fname), 'w') as f:
+ f.write(output_data)
+
+ # list(list) to csv
+ elif isinstance(output_data, list) \
+ and (isinstance(output_data[0], list) or isinstance(output_data[0],
+ tuple)):
+ fname += '.csv'
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ writer = csv.writer(f)
+ for row in output_data:
+ try:
+ writer.writerow(row)
+ except UnicodeEncodeError as e:
+ print(e)
+
+ # special case
+ elif isinstance(output_data, types.GeneratorType):
+ if fname == 'gephi':
+ fname += '.gml'
+ elif fname == 'pajek':
+ fname += '.net'
+ else:
+ fname += '.unknown'
+
+ with open(os.path.join(localSavePath, fname), 'w', newline='',
+ encoding='utf-8') as f:
+ for line in output_data:
+ f.write(line + '\n')
+
+ # else pickle the object
+ else:
+ fname += '.pickle'
+ with open(os.path.join(localSavePath, fname), 'wb') as f:
+ pickle.dump(output_data, f)
+
+ self.s3.upload(localSavePath, remoteSavePath, fname)
+ url = self.s3.generate_downloads(remoteSavePath, fname)
+
+ return url
diff --git a/lambda/lambda_sentiment_analysis/lambda_function.py b/lambda/lambda_sentiment_analysis/lambda_function.py
new file mode 100644
index 0000000..c16bf96
--- /dev/null
+++ b/lambda/lambda_sentiment_analysis/lambda_function.py
@@ -0,0 +1,62 @@
+from algorithm import algorithm
+from dataset import Dataset
+
+
+def lambda_handler(params, context):
+ '''
+ entrance to invoke AWS lambda,
+ variable params contains parameters passed in
+ '''
+ if 'HOST_IP' in params.keys():
+ HOST_IP = params['HOST_IP']
+ params.pop('HOST_IP', None)
+ else:
+ HOST_IP = None
+
+ if 'AWS_ACCESSKEY' in params.keys():
+ AWS_ACCESSKEY = params['AWS_ACCESSKEY']
+ params.pop('AWS_ACCESSKEY', None)
+ else:
+ AWS_ACCESSKEY = None
+
+ if 'AWS_ACCESSKEYSECRET' in params.keys():
+ AWS_ACCESSKEYSECRET = params['AWS_ACCESSKEYSECRET']
+ params.pop('AWS_ACCESSKEYSECRET', None)
+ else:
+ AWS_ACCESSKEYSECRET = None
+
+ if 'BUCKET_NAME' in params.keys():
+ BUCKET_NAME = params['BUCKET_NAME']
+ params.pop('BUCKET_NAME', None)
+ else:
+ BUCKET_NAME = None
+
+ d = Dataset(HOST_IP, AWS_ACCESSKEY, AWS_ACCESSKEYSECRET, BUCKET_NAME)
+ urls = {}
+
+ # arranging the paths
+ path = d.organize_path_lambda(params)
+ # save the config file
+ urls['config'] = d.save_remote_output(path['localSavePath'],
+ path['remoteSavePath'],
+ 'config',
+ params)
+ # prepare input dataset
+ df = d.get_remote_input(path['remoteReadPath'],
+ path['filename'],
+ path['localReadPath'])
+
+ # execute the algorithm
+ output = algorithm(df, params)
+
+ # upload object to s3 bucket and return the url
+ for key, value in output.items():
+ if key != 'uid':
+ urls[key] = d.save_remote_output(path['localSavePath'],
+ path['remoteSavePath'],
+ key,
+ value)
+ else:
+ urls[key] = value
+
+ return urls
diff --git a/lambda/lambda_sentiment_analysis_dev/plot.py b/lambda/lambda_sentiment_analysis/plot.py
similarity index 100%
rename from lambda/lambda_sentiment_analysis_dev/plot.py
rename to lambda/lambda_sentiment_analysis/plot.py
diff --git a/lambda/lambda_sentiment_analysis_dev/requirement.txt b/lambda/lambda_sentiment_analysis/requirement.txt
similarity index 100%
rename from lambda/lambda_sentiment_analysis_dev/requirement.txt
rename to lambda/lambda_sentiment_analysis/requirement.txt
diff --git a/lambda/lambda_sentiment_analysis_dev/sentiment_analysis.py b/lambda/lambda_sentiment_analysis/sentiment_analysis.py
similarity index 100%
rename from lambda/lambda_sentiment_analysis_dev/sentiment_analysis.py
rename to lambda/lambda_sentiment_analysis/sentiment_analysis.py
diff --git a/lambda/lambda_sentiment_analysis/writeToS3.py b/lambda/lambda_sentiment_analysis/writeToS3.py
new file mode 100644
index 0000000..51dbf78
--- /dev/null
+++ b/lambda/lambda_sentiment_analysis/writeToS3.py
@@ -0,0 +1,83 @@
+import mimetypes
+import os
+
+import boto3
+from botocore.client import Config
+
+
+class WriteToS3:
+
+ def __init__(self, HOST_IP=None, AWS_ACCESSKEY=None, AWS_ACCESSKEYSECRET=None, BUCKET_NAME=None):
+
+ # local minio s3
+ if HOST_IP and AWS_ACCESSKEY and AWS_ACCESSKEYSECRET and BUCKET_NAME:
+ self.client = boto3.client('s3', endpoint_url='http://' + HOST_IP + ':9000',
+ aws_access_key_id=AWS_ACCESSKEY,
+ aws_secret_access_key=AWS_ACCESSKEYSECRET,
+ config=Config(signature_version='s3v4'))
+ self.bucket_name = BUCKET_NAME
+
+ # remote aws s3
+ else:
+ self.client = boto3.client('s3')
+ self.bucket_name = 'macroscope-smile'
+
+ def upload(self, localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath, filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType': 'application/octet-stream'}
+ else:
+ extra_args = {'ContentType': content_type}
+
+ self.client.upload_file(os.path.join(localpath, filename),
+ self.bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+ def createDirectory(self, DirectoryName):
+ self.client.put_object(Bucket=self.bucket_name, Key=DirectoryName)
+
+ def generate_downloads(self, remotepath, filename):
+ url = self.client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': self.bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+ def downloadToDisk(self, filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ self.client.download_fileobj(self.bucket_name,
+ os.path.join(remotepath, filename), f)
+
+ def getObject(self, remoteKey):
+ obj = self.client.get_object(Bucket=self.bucket_name, Key=remoteKey)
+
+ def putObject(self, body, remoteKey):
+ # bytes or seekable file-like object
+ obj = self.client.put_object(Bucket=self.bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+ def listDir(self, remoteClass):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+ def listFiles(self, foldernames):
+ objects = self.client.list_objects(Bucket=self.bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/lambda/lambda_sentiment_analysis_dev/writeToS3.py b/lambda/lambda_sentiment_analysis_dev/writeToS3.py
deleted file mode 100644
index 75b1999..0000000
--- a/lambda/lambda_sentiment_analysis_dev/writeToS3.py
+++ /dev/null
@@ -1,72 +0,0 @@
-import boto3
-import os
-import mimetypes
-
-client = boto3.client('s3')
-bucket_name = 'macroscope-smile'
-
-def upload(localpath, remotepath, filename):
- content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
- print(filename, content_type)
- if content_type == None:
- extra_args = {'ContentType':'application/octet-stream'}
- else:
- extra_args = {'ContentType':content_type}
-
- client.upload_file(os.path.join(localpath, filename),
- bucket_name,
- os.path.join(remotepath, filename),
- ExtraArgs=extra_args)
-
-
-def createDirectory(DirectoryName):
- client.put_object(Bucket=bucket_name, Key=DirectoryName)
-
-
-def generate_downloads(remotepath, filename):
- url = client.generate_presigned_url(
- ClientMethod='get_object',
- Params={
- 'Bucket': bucket_name,
- 'Key': os.path.join(remotepath, filename)
- },
- ExpiresIn=604800 # one week
- )
-
- return url
-
-
-def downloadToDisk(filename, localpath, remotepath):
- with open(os.path.join(localpath, filename), 'wb') as f:
- client.download_fileobj(bucket_name,
- os.path.join(remotepath, filename), f)
-
-
-def getObject(remoteKey):
- obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
-
-
-def putObject(body, remoteKey):
- # bytes or seekable file-like object
- obj = client.put_object(Bucket=bucket_name,
- Body=body, Key=remoteKey)
- print(obj['Body'].read())
-
-def listDir(remoteClass):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=remoteClass,
- Delimiter='/')
- foldernames = []
- for o in objects.get('CommonPrefixes'):
- foldernames.append(o.get('Prefix'))
-
- # only return the list of foldernames
- return foldernames
-
-
-def listFiles(foldernames):
- objects = client.list_objects(Bucket=bucket_name,
- Prefix=foldernames)
-
- # return rich information about the files
- return objects.get('Contents')
diff --git a/rabbitmq/autophrase/clear_cache.sh b/rabbitmq/autophrase/clear_cache.sh
new file mode 100644
index 0000000..640c2ac
--- /dev/null
+++ b/rabbitmq/autophrase/clear_cache.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+CACHEDIR=/tmp
+
+# delete file older than 4 hours
+find "$CACHEDIR" -maxdepth 1 -mindepth 1 -type d -mmin +240 -print0 |
+ while IFS= read -d '' -r dir; do
+ rm -rf "$dir"
+ done
\ No newline at end of file
diff --git a/rabbitmq/autophrase/clear_cache_cron b/rabbitmq/autophrase/clear_cache_cron
new file mode 100644
index 0000000..0510c51
--- /dev/null
+++ b/rabbitmq/autophrase/clear_cache_cron
@@ -0,0 +1 @@
+0 * * * * /bin/bash /scripts/clear_cache.sh
diff --git a/rabbitmq/autophrase/command.txt b/rabbitmq/autophrase/command.txt
new file mode 100644
index 0000000..82f9d93
--- /dev/null
+++ b/rabbitmq/autophrase/command.txt
@@ -0,0 +1 @@
+docker build -t socialmediamacroscope/autophrase:latest .
\ No newline at end of file
diff --git a/rabbitmq/autophrase/dockerfile b/rabbitmq/autophrase/dockerfile
new file mode 100644
index 0000000..7164d7b
--- /dev/null
+++ b/rabbitmq/autophrase/dockerfile
@@ -0,0 +1,25 @@
+FROM ubuntu:18.04
+
+# git clone autophrase algorithm
+RUN apt-get update
+RUN apt-get -y install git && apt-get -y install cron
+RUN cd / && git clone https://github.com/IllinoisSocialMediaMacroscope/SMILE-AutoPhrase.git AutoPhrase
+
+# overwrite
+WORKDIR /AutoPhrase
+COPY . ./
+
+# install dependency libraries
+RUN apt-get -y install g++
+RUN apt-get -y install openjdk-8-jdk
+RUN apt-get -y install curl
+RUN apt-get -y install python3-pip
+RUN pip3 install -r requirement.txt
+
+# switch work directory to be AutoPhrase
+RUN /bin/bash -c "source compile.sh"
+
+# cron job clean tmp folder
+RUN chmod u+x ./clear_cache.sh
+RUN chmod 0644 ./clear_cache_cron
+RUN crontab ./clear_cache_cron
diff --git a/rabbitmq/autophrase/notification.py b/rabbitmq/autophrase/notification.py
new file mode 100644
index 0000000..176e095
--- /dev/null
+++ b/rabbitmq/autophrase/notification.py
@@ -0,0 +1,170 @@
+import smtplib
+from email.mime.multipart import MIMEMultipart
+from email.mime.text import MIMEText
+import os
+
+
+def notification(toaddr,case,filename,links,sessionURL):
+ # toaddr -- email address to send to
+ # text content to send
+ # subject
+ host = os.environ.get('EMAIL_HOST')
+ port = os.environ.get('EMAIL_PORT')
+ fromaddr = os.environ.get('EMAIL_FROM_ADDRESS')
+ password = os.environ.get('EMAIL_PASSWORD')
+
+ if host is not None and host != "" and \
+ port is not None and port != "" and\
+ fromaddr is not None and fromaddr != "" and \
+ password is not None and password != "":
+ # map the fpath component to History panel names
+ # local/NLP/sentiment/xxxxxxxxxxxxxxxxxxxxxxxx/ => [local,nlp,sentiment,xxxx,space]
+ # [local, GraphQL, reddit-post, aww, space]
+ # 0 1 2 3
+ if filename != '':
+ fpath = filename.split('/')
+
+ if fpath[1] == 'GraphQL':
+ fpath[1] = 'Social Media Data'
+ elif fpath[1] == 'NLP':
+ fpath[1] = 'Nature Language Processing'
+ elif fpath[1] == 'ML':
+ fpath[1] = 'Machine Learning ML'
+ elif fpath[1] == 'NW':
+ fpath[1] = 'Network Visualization and Analysis'
+
+ if fpath[2] == 'reddit-Post':
+ fpath[2] = 'Subreddit Posts Title'
+ elif fpath[2] == 'reddit-Historical-Post':
+ fpath[2] = 'Reddit Historical Post'
+ elif fpath[2] == 'reddit-Search':
+ fpath[2] = 'Reddit Search Posts Title'
+ elif fpath[2] == 'sentiment':
+ fpath[2] = 'Sentiment Analysis'
+ elif fpath[2] == 'preprocessing':
+ fpath[2] = 'NLP Preprocessing'
+ elif fpath[2] == 'networkx':
+ fpath[2] = 'Python NetworkX'
+ elif fpath[2] == 'classification':
+ fpath[2] = 'Text Classification'
+
+ if case == 0 or case == 'comment-fail':
+ html = """
+
+
+
+
+
Dear user (session ID: """ + fpath[0] + """),
+
Your Reddit Comment collection has been terminated.
+
We are using the id and permalink from your Reddit Submission dataset
+ to collect comments and replies. It is most likely you have provide an incomplete Reddit Submission dataset missing these two fields.
+
Please try to reproduce the Reddit Submission with id and permalink, or switch to another dataset.
+
Go to your session...
+
+
Best Regards,
+
Social Media Macroscope - SMILE
+
+
+
+ """
+ subject = 'Your Reddit Comment collection has failed...'
+ elif case == 1 or case == 'comment-terminate':
+ html = """
+
+
+
+
Dear user (session ID: """ + fpath[0] + """),
+
Your Reddit Comment collection is exceeding 400 Megabyte, and is terminated due to lack of disk space.
+
+ - You have requested comments and replies for the Reddit Submission (Post):""" + fpath[3] + """. The partial comments we manage to collect and save will be compressed for you in an .zip file named """ + fpath[3] + """-comments.zip (click)
+ - In order to download this file, you need to first locate the original submission in the HISTORY page in SMILE.
+ Go to your session...
+
+ - Go to History
+ - --> under """ + fpath[1] + """
+ - --> click """ + fpath[2] + """
+ - --> then find """ + fpath[3] + """
+ - --> click VIEW
+ - --> in the Overview table under the downloadables column, you will find these comments in a zip file.
+
+
+
+ """
+ subject = 'Your Reddit Comment collection has been terminated...'
+ elif case == 2 or case == 'comment-success':
+ html = """
+
+
+
+
Dear user (session ID: """ + fpath[0] + """),
+
Your Reddit Comment collection is ready for you!
+
+ - You have requested comments and replies for the Reddit Submission (Post):""" + fpath[3] + """. It will be compressed for you in an .zip file named """+ fpath[3] +"""-comments.zip
+ - In order to download this file, you need to first locate the original submission in the HISTORY page in SMILE.
+ Go to your session...
+
+ - Go to History
+ - --> under """ + fpath[1] +"""
+ - --> click """ + fpath[2] + """
+ - --> then find """ + fpath[3] + """
+ - --> click VIEW
+ - --> in the Overview table under the downloadables column, you will find these comments in a zip file.
+
+
+
+
Best Regards,
+
Social Media Macroscope - SMILE
+
+
+ """
+ subject = 'Your Reddit Comment collection is completed!'
+ elif case == 3 or case == 'analytics-success':
+ list_html = ''
+ for key in links.keys():
+ list_html += '' + key + ''
+
+ html = """
+
+
+
+
Dear user (session ID: """ + fpath[0] + """),
+
Your """ + fpath[2] + """ results are ready for you! (job ID: """ + fpath[3] + """)
+
+ - You can view the visualization and download the results at HISTORY page in SMILE.
+ Go to your session...
+
+ - Go to History
+ - --> under """ + fpath[1] + """ tab
+ - --> click """ + fpath[2] + """
+ - --> then find """ + fpath[3] + """
+ - --> click view
+
+
+ - You can also click the link below to download part of the results:
+
+
+
+
+
Best Regards,
+
Social Media Macroscope - SMILE
+
+
+ """
+ subject = 'Your ' + fpath[2] + ' computation is completed!'
+
+ msg = MIMEMultipart('alternative')
+ msg['Subject'] = subject
+ msg['From'] = fromaddr
+ msg['To'] = toaddr
+ msg.attach(MIMEText(html, 'html'))
+
+ server = smtplib.SMTP_SSL(host, port)
+ server.login(fromaddr, password)
+ server.sendmail(fromaddr, toaddr, msg.as_string())
+ server.quit()
+ else:
+ print("Invalid Email host setting! Skip notification.")
diff --git a/rabbitmq/autophrase/postToAWSBatch.py b/rabbitmq/autophrase/postToAWSBatch.py
new file mode 100644
index 0000000..3f2b946
--- /dev/null
+++ b/rabbitmq/autophrase/postToAWSBatch.py
@@ -0,0 +1,23 @@
+import boto3
+import os
+
+client = boto3.client('batch', region_name="us-west-2", aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'])
+
+def invoke(jobDefinition, jobName, jobQueue, command):
+ command.extend(['--HOST_IP', os.environ['HOST_IP'],
+ '--AWS_ACCESSKEY', os.environ['AWS_ACCESSKEY'],
+ '--AWS_ACCESSKEYSECRET', os.environ['AWS_ACCESSKEYSECRET'],
+ '--BUCKET_NAME', os.environ['BUCKET_NAME']])
+ response = client.submit_job(
+ jobDefinition=jobDefinition,
+ jobName=jobName,
+ jobQueue=jobQueue,
+ containerOverrides={
+ 'vcpus': 2,
+ 'memory': 2048,
+ 'command': command
+ }
+ )
+
+ return response
\ No newline at end of file
diff --git a/rabbitmq/autophrase/rabbitmq_handler.py b/rabbitmq/autophrase/rabbitmq_handler.py
new file mode 100644
index 0000000..94f10d0
--- /dev/null
+++ b/rabbitmq/autophrase/rabbitmq_handler.py
@@ -0,0 +1,60 @@
+import json
+import os
+import traceback
+import pika
+import postToAWSBatch
+
+
+def rabbitmq_handler(ch, method, properties, body):
+ try:
+ # determine if it goes to aws, lambda, or batch
+ params = json.loads(body)
+
+ if params['platform'] == 'aws-lambda':
+ raise ValueError("Not applicable to this algorithm.")
+
+ elif params['platform'] == 'aws-batch':
+ postToAWSBatch.invoke(params['jobDefinition'],
+ params['jobName'],
+ params['jobQueue'],
+ params['command'])
+
+ elif params['platform'] == 'lambda':
+ raise ValueError("Not applicable to this algorithm.")
+
+ elif params['platform'] == 'batch':
+ os.system(' '.join(params['command']))
+
+ else:
+ raise ValueError(
+ 'Rabbitmq Message Not Recognizable. '
+ 'It has to specify what platform to run: aws-lambda, aws-batch, lambda or batch.')
+
+ except BaseException as e:
+
+ msg = {'ERROR':
+ {'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(msg))
+
+ return None
+
+
+if __name__ == '__main__':
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+
+ # pass the queue name in environment variable
+ queue = os.environ['QUEUE_NAME']
+
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=rabbitmq_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/autophrase/requirement.txt b/rabbitmq/autophrase/requirement.txt
new file mode 100644
index 0000000..a8cd271
--- /dev/null
+++ b/rabbitmq/autophrase/requirement.txt
@@ -0,0 +1,5 @@
+boto3>=1.6.11
+numpy==1.16.1
+pandas>=0.24.2
+plotly==2.7.0
+pika>=1.1.0
\ No newline at end of file
diff --git a/rabbitmq/bae_docker_push.sh b/rabbitmq/bae_docker_push.sh
new file mode 100644
index 0000000..97bfee8
--- /dev/null
+++ b/rabbitmq/bae_docker_push.sh
@@ -0,0 +1,9 @@
+docker push socialmediamacroscope/collect_timeline:latest
+docker push socialmediamacroscope/get_sim_score:latest
+docker push socialmediamacroscope/bae-server:latest
+docker push socialmediamacroscope/bulk_comparison:latest
+docker push socialmediamacroscope/get_personality:latest
+docker push socialmediamacroscope/utku_brand_personality:latest
+docker push socialmediamacroscope/botometer_check_bot:latest
+docker push socialmediamacroscope/check_screen_name:latest
+docker push socialmediamacroscope/screen_name_prompt:latest
\ No newline at end of file
diff --git a/rabbitmq/botometer_check_bot/botometer_check_bot.py b/rabbitmq/botometer_check_bot/botometer_check_bot.py
new file mode 100644
index 0000000..7bf7c1e
--- /dev/null
+++ b/rabbitmq/botometer_check_bot/botometer_check_bot.py
@@ -0,0 +1,46 @@
+import json
+import botometer
+import pika
+import traceback
+import os
+
+
+def botometer_check_bot_handler(ch, method, properties, body):
+
+ try:
+ event = json.loads(body)
+ twitter_app_auth = {
+ 'consumer_key': event['consumer_key'],
+ 'consumer_secret': event['consumer_secret'],
+ 'access_token': event['access_token'],
+ 'access_token_secret': event['access_token_secret'],
+ }
+ bom = botometer.Botometer(wait_on_ratelimit=False,
+ mashape_key=os.environ.get("RAPIDAPI_KEY"),
+ **twitter_app_auth)
+ result = bom.check_account(event['screen_name'])
+ except BaseException as e:
+ result = {'ERROR':
+ {'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(result))
+
+ return result
+
+
+if __name__ == '__main__':
+
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+ queue = "bae_botometer"
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=botometer_check_bot_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/botometer_check_bot/command.txt b/rabbitmq/botometer_check_bot/command.txt
new file mode 100644
index 0000000..0bb5764
--- /dev/null
+++ b/rabbitmq/botometer_check_bot/command.txt
@@ -0,0 +1,3 @@
+# command to build and run this container
+docker build -t botometer_check_bot:latest .
+docker run botometer_check_bot:latest
diff --git a/rabbitmq/botometer_check_bot/dockerfile b/rabbitmq/botometer_check_bot/dockerfile
new file mode 100644
index 0000000..3a23fb2
--- /dev/null
+++ b/rabbitmq/botometer_check_bot/dockerfile
@@ -0,0 +1,8 @@
+FROM python:3.7
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+COPY . ./
+
+RUN pip install --no-cache-dir -r requirement.txt
\ No newline at end of file
diff --git a/rabbitmq/botometer_check_bot/requirement.txt b/rabbitmq/botometer_check_bot/requirement.txt
new file mode 100644
index 0000000..9d82ca8
--- /dev/null
+++ b/rabbitmq/botometer_check_bot/requirement.txt
@@ -0,0 +1,4 @@
+pika>=1.1.0
+botometer==1.6
+tweepy==3.10.0
+requests==2.24.0
\ No newline at end of file
diff --git a/rabbitmq/bulk_comparison/bulk_comparison.py b/rabbitmq/bulk_comparison/bulk_comparison.py
new file mode 100644
index 0000000..5ba8bf6
--- /dev/null
+++ b/rabbitmq/bulk_comparison/bulk_comparison.py
@@ -0,0 +1,149 @@
+import json
+import os
+import numpy as np
+import pika
+import writeToS3 as s3
+import traceback
+
+
+def cos_sim(a, b):
+ dot_product = np.dot(a, b)
+ norm_a = np.linalg.norm(a)
+ norm_b = np.linalg.norm(b)
+ return dot_product / (norm_a * norm_b)
+
+
+def bulk_comparison_handler(ch, method, properties, body):
+ try:
+ event = json.loads(body)
+ localPath = os.path.join('/tmp', event['sessionID'])
+ if not os.path.exists(localPath):
+ os.makedirs(localPath)
+
+ # default algorithm to IBM-Watson to be compatible with old version
+ if 'algorithm' not in event.keys():
+ event['algorithm'] = 'IBM-Personality'
+
+ comparison_table = [[]]
+
+ # download and read personality scores
+ if event['algorithm'] == 'IBM-Personality':
+ comparison_table = [['screen_name', 'Personality_Openness',
+ 'Personality_Conscientiousness',
+ 'Personality_Extraversion',
+ 'Personality_Agreeableness',
+ 'Personality_Emotional_Range',
+ 'Needs_Challenge', 'Needs_Closeness',
+ 'Needs_Curiosity', 'Needs_Excitement',
+ 'Needs_Harmony',
+ 'Needs_Ideal', 'Needs_Liberty', 'Needs_Love',
+ 'Needs_Practicality', 'Needs_Self_Expression',
+ 'Needs_Stability', 'Needs_Structure',
+ 'Values_Conservation', 'Values_Openness',
+ 'Values_Hedonism', 'Values_Self_Enhancement',
+ 'Values_Self_Transcendence']]
+
+ for screen_name in event['screen_names']:
+ awsPath = os.path.join(event['sessionID'], screen_name)
+ try:
+ s3.downloadToDisk(screen_name + '_personality.json', localPath, awsPath)
+ except:
+ raise ValueError('Cannot find the personality in the remote storage!')
+
+ with open(os.path.join(localPath, screen_name + '_personality.json'), 'r') as f:
+ data = json.load(f)['personality']
+ user_info = [screen_name]
+ for p in data['personality']:
+ user_info.append(p['percentile'])
+ for p in data['needs']:
+ user_info.append(p['percentile'])
+ for p in data['values']:
+ user_info.append(p['percentile'])
+ comparison_table.append(user_info)
+
+ elif event['algorithm'] == 'TwitPersonality':
+ comparison_table = [['screen_name', 'Personality_Openness',
+ 'Personality_Conscientiousness',
+ 'Personality_Extraversion',
+ 'Personality_Agreeableness',
+ 'Personality_Emotional_Range']]
+
+ for screen_name in event['screen_names']:
+ awsPath = os.path.join(event['sessionID'], screen_name)
+ try:
+ s3.downloadToDisk(screen_name + '_twitPersonality.json', localPath, awsPath)
+ except:
+ raise ValueError('Cannot find the personality in the remote storage!')
+
+ with open(os.path.join(localPath, screen_name + '_twitPersonality.json'), 'r') as f:
+ data = json.load(f)['personality']
+ user_info = [screen_name]
+ for p in data['personality']:
+ user_info.append(p['percentile'])
+ comparison_table.append(user_info)
+
+ elif event['algorithm'] == 'Pamuksuz-Personality':
+ comparison_table = [['screen_name', 'sophistication',
+ 'excitement', 'sincerity',
+ 'competence', 'ruggedness'
+ ]]
+ for screen_name in event['screen_names']:
+ awsPath = os.path.join(event['sessionID'], screen_name)
+ try:
+ s3.downloadToDisk(screen_name + '_utku_personality_average.json', localPath, awsPath)
+ except:
+ raise ValueError('Cannot find the personality in the remote storage!')
+
+ with open(os.path.join(localPath, screen_name + '_utku_personality_average.json'), 'r') as f:
+ data = json.load(f)
+ comparison_table.append(
+ [screen_name, data['sophistication'], data['excitement'], data['sincerity'],
+ data['competence'], data['ruggedness']])
+
+ # computer correlations
+ event['screen_names'].insert(0, 'Correlation')
+ correlation_matrix = [event['screen_names']]
+ correlation_matrix_no_legends = []
+ for i in range(1, len(comparison_table)):
+ row = [comparison_table[i][0]]
+ row_no_legends = []
+
+ for j in range(1, len(comparison_table)):
+ vector_a = comparison_table[i][1:]
+ vector_b = comparison_table[j][1:]
+
+ row.append(cos_sim(vector_a, vector_b))
+ row_no_legends.append(cos_sim(vector_a, vector_b))
+
+ correlation_matrix.append(row)
+ correlation_matrix_no_legends.append(row_no_legends)
+
+ data = {'comparison_table': comparison_table,
+ 'correlation_matrix': correlation_matrix,
+ 'correlation_matrix_no_legends': correlation_matrix_no_legends}
+
+ except BaseException as e:
+ data = {'ERROR':
+ {'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(data))
+
+ return data
+
+
+if __name__ == '__main__':
+
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+ queue = "bae_bulk_comparison"
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=bulk_comparison_handler, auto_ack=True)
+ channel.start_consuming()
\ No newline at end of file
diff --git a/rabbitmq/bulk_comparison/command.txt b/rabbitmq/bulk_comparison/command.txt
new file mode 100644
index 0000000..6173a01
--- /dev/null
+++ b/rabbitmq/bulk_comparison/command.txt
@@ -0,0 +1,3 @@
+# command to build and run this container
+docker build -t bulk_comparison:latest .
+docker run bulk_comparison:latest
diff --git a/rabbitmq/bulk_comparison/dockerfile b/rabbitmq/bulk_comparison/dockerfile
new file mode 100644
index 0000000..3a23fb2
--- /dev/null
+++ b/rabbitmq/bulk_comparison/dockerfile
@@ -0,0 +1,8 @@
+FROM python:3.7
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+COPY . ./
+
+RUN pip install --no-cache-dir -r requirement.txt
\ No newline at end of file
diff --git a/rabbitmq/bulk_comparison/requirement.txt b/rabbitmq/bulk_comparison/requirement.txt
new file mode 100644
index 0000000..e4af943
--- /dev/null
+++ b/rabbitmq/bulk_comparison/requirement.txt
@@ -0,0 +1,3 @@
+pika>=1.1.0
+numpy>=1.16.4
+boto3>=1.10.9
\ No newline at end of file
diff --git a/lambda/bae_get_personality/writeToS3.py b/rabbitmq/bulk_comparison/writeToS3.py
similarity index 86%
rename from lambda/bae_get_personality/writeToS3.py
rename to rabbitmq/bulk_comparison/writeToS3.py
index 8f880fa..761907a 100644
--- a/lambda/bae_get_personality/writeToS3.py
+++ b/rabbitmq/bulk_comparison/writeToS3.py
@@ -1,10 +1,14 @@
import boto3
-import os
-import requests
import mimetypes
+import os
+from botocore.client import Config
+
+client = boto3.client('s3', endpoint_url='http://' + os.environ['HOST_IP'] + ':9000',
+ aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'],
+ config=Config(signature_version='s3v4'))
-client = boto3.client('s3')
-bucket_name = 'macroscope-bae'
+bucket_name = os.environ['BUCKET_NAME']
def upload(localpath, remotepath, filename):
content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
diff --git a/rabbitmq/check_screen_name/check_screen_name.py b/rabbitmq/check_screen_name/check_screen_name.py
new file mode 100644
index 0000000..fc5a571
--- /dev/null
+++ b/rabbitmq/check_screen_name/check_screen_name.py
@@ -0,0 +1,57 @@
+import json
+import os
+import pika
+import tweepy
+import traceback
+import writeToS3 as s3
+
+
+def check_screen_name_handler(ch, method, properties, body):
+ try:
+ event = json.loads(body)
+ auth = tweepy.OAuthHandler(event['consumer_key'], event['consumer_secret'])
+ auth.set_access_token(event['access_token'], event['access_token_secret'])
+ api = tweepy.API(auth)
+
+ try:
+ user = api.lookup_users(screen_names=[event['screen_name']])
+
+ awsPath = os.path.join(event['sessionID'], event['screen_name'])
+ localPath = os.path.join('/tmp', event['sessionID'], event['screen_name'])
+ if not os.path.exists(localPath):
+ os.makedirs(localPath)
+ with open(os.path.join(localPath, event['screen_name'] + "_account_info.json"), "w") as f:
+ json.dump(user[0]._json, f)
+ s3.upload(localPath, awsPath, event['screen_name'] + "_account_info.json")
+
+ msg = {'user_exist': True,
+ 'profile_img': user[0]._json['profile_image_url_https'],
+ 'statuses_count': user[0]._json['statuses_count']}
+ except tweepy.TweepError as error:
+ msg = {'user_exist': False, 'profile_img': None, 'statuses_count': None}
+
+ except BaseException as e:
+ msg = {'ERROR':
+ {
+ 'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(msg))
+
+ return msg
+
+
+if __name__ == '__main__':
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+ queue = "bae_check_screen_name"
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=check_screen_name_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/check_screen_name/command.txt b/rabbitmq/check_screen_name/command.txt
new file mode 100644
index 0000000..0e0aa9f
--- /dev/null
+++ b/rabbitmq/check_screen_name/command.txt
@@ -0,0 +1,3 @@
+# command to build and run this container
+docker build -t check_screen_name:latest .
+docker run check_screen_name:latest
diff --git a/rabbitmq/check_screen_name/dockerfile b/rabbitmq/check_screen_name/dockerfile
new file mode 100644
index 0000000..3a23fb2
--- /dev/null
+++ b/rabbitmq/check_screen_name/dockerfile
@@ -0,0 +1,8 @@
+FROM python:3.7
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+COPY . ./
+
+RUN pip install --no-cache-dir -r requirement.txt
\ No newline at end of file
diff --git a/rabbitmq/check_screen_name/requirement.txt b/rabbitmq/check_screen_name/requirement.txt
new file mode 100644
index 0000000..59a990b
--- /dev/null
+++ b/rabbitmq/check_screen_name/requirement.txt
@@ -0,0 +1,3 @@
+pika>=1.1.0
+boto3>=1.10.9
+tweepy>=3.8.0
\ No newline at end of file
diff --git a/lambda/lambda_classification_predict_dev/writeToS3.py b/rabbitmq/check_screen_name/writeToS3.py
similarity index 86%
rename from lambda/lambda_classification_predict_dev/writeToS3.py
rename to rabbitmq/check_screen_name/writeToS3.py
index e7a1afc..761907a 100644
--- a/lambda/lambda_classification_predict_dev/writeToS3.py
+++ b/rabbitmq/check_screen_name/writeToS3.py
@@ -1,10 +1,14 @@
import boto3
-import os
-import requests
import mimetypes
+import os
+from botocore.client import Config
+
+client = boto3.client('s3', endpoint_url='http://' + os.environ['HOST_IP'] + ':9000',
+ aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'],
+ config=Config(signature_version='s3v4'))
-client = boto3.client('s3')
-bucket_name = 'macroscope-smile'
+bucket_name = os.environ['BUCKET_NAME']
def upload(localpath, remotepath, filename):
content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
diff --git a/rabbitmq/classification_predict/clear_cache.sh b/rabbitmq/classification_predict/clear_cache.sh
new file mode 100644
index 0000000..640c2ac
--- /dev/null
+++ b/rabbitmq/classification_predict/clear_cache.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+CACHEDIR=/tmp
+
+# delete file older than 4 hours
+find "$CACHEDIR" -maxdepth 1 -mindepth 1 -type d -mmin +240 -print0 |
+ while IFS= read -d '' -r dir; do
+ rm -rf "$dir"
+ done
\ No newline at end of file
diff --git a/rabbitmq/classification_predict/clear_cache_cron b/rabbitmq/classification_predict/clear_cache_cron
new file mode 100644
index 0000000..0510c51
--- /dev/null
+++ b/rabbitmq/classification_predict/clear_cache_cron
@@ -0,0 +1 @@
+0 * * * * /bin/bash /scripts/clear_cache.sh
diff --git a/rabbitmq/classification_predict/command.txt b/rabbitmq/classification_predict/command.txt
new file mode 100644
index 0000000..57942c0
--- /dev/null
+++ b/rabbitmq/classification_predict/command.txt
@@ -0,0 +1,2 @@
+# command to build and run this container
+docker build -t socialmediamacroscope/classification_predict:latest .
\ No newline at end of file
diff --git a/rabbitmq/classification_predict/dockerfile b/rabbitmq/classification_predict/dockerfile
new file mode 100644
index 0000000..34ef036
--- /dev/null
+++ b/rabbitmq/classification_predict/dockerfile
@@ -0,0 +1,15 @@
+FROM python:3.7
+
+RUN apt-get -qq -y update && apt-get -qq -y install cron
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+COPY . ./
+
+RUN pip install --no-cache-dir -r requirement.txt
+
+# cron job clean tmp folder
+RUN chmod u+x ./clear_cache.sh
+RUN chmod 0644 ./clear_cache_cron
+RUN crontab ./clear_cache_cron
\ No newline at end of file
diff --git a/rabbitmq/classification_predict/lambda_classification_predict.py b/rabbitmq/classification_predict/lambda_classification_predict.py
new file mode 100755
index 0000000..98b074e
--- /dev/null
+++ b/rabbitmq/classification_predict/lambda_classification_predict.py
@@ -0,0 +1,88 @@
+import csv
+import os
+import sklearn
+import pickle
+from plotly.offline import plot
+import plotly.graph_objs as go
+from collections import Counter
+import writeToS3 as s3
+
+class Classification:
+
+ def __init__(self, awsPath, localSavePath):
+
+ self.localSavePath = localSavePath
+ self.awsPath = awsPath
+
+ def predict(self):
+
+ # load classification model
+ pkl_model = os.path.join(self.localSavePath,'pipeline.pickle')
+ with open(pkl_model,'rb') as f:
+ text_clf = pickle.load(f)
+
+ # load text set
+ data = []
+ try:
+ with open(self.localSavePath + 'testing.csv','r',encoding='utf-8',
+ errors="ignore") as f:
+ reader = list(csv.reader(f))
+ for row in reader[1:]:
+ try:
+ data.extend(row)
+ except Exception as e:
+ pass
+ except:
+ with open(self.localSavePath + 'testing.csv','r',encoding='ISO-8859-1',
+ errors="ignore") as f:
+ reader = list(csv.reader(f))
+ for row in reader[1:]:
+ try:
+ data.extend(row)
+ except Exception as e:
+ pass
+
+ # predict using trained model
+ self.predicted = text_clf.predict(data)
+
+ # save result
+ fname = 'predicting.csv'
+ try:
+ with open(self.localSavePath + fname,'w',newline="",encoding='utf-8',
+ errors="ignore") as f:
+ writer = csv.writer(f)
+ writer.writerow(['text','category'])
+ for i in range(len(data)):
+ try:
+ writer.writerow([data[i],self.predicted[i]])
+ except:
+ pass
+ except:
+ with open(self.localSavePath + fname,'w',newline="",encoding='ISO-8859-1',
+ errors="ignore") as f:
+ writer = csv.writer(f)
+ writer.writerow(['text','category'])
+ for i in range(len(data)):
+ try:
+ writer.writerow([data[i],self.predicted[i]])
+ except:
+ pass
+ s3.upload(self.localSavePath, self.awsPath, fname)
+ return s3.generate_downloads(self.awsPath, fname)
+
+
+ def plot(self):
+ y_pred_dict = Counter(self.predicted)
+ labels = []
+ values = []
+ for i in y_pred_dict.keys():
+ labels.append("class: " + str(i))
+ values.append(y_pred_dict[i])
+ trace = go.Pie(labels=labels, values = values, textinfo='label')
+ div_category = plot([trace], output_type='div',image='png',auto_open=False, image_filename='plot_img')
+
+ fname_div_category = 'div_category.html'
+ with open(self.localSavePath + fname_div_category,"w") as f:
+ f.write(div_category)
+ s3.upload(self.localSavePath, self.awsPath, fname_div_category)
+ return s3.generate_downloads(self.awsPath, fname_div_category)
diff --git a/rabbitmq/classification_predict/postToAWSLambda.py b/rabbitmq/classification_predict/postToAWSLambda.py
new file mode 100644
index 0000000..8a227e7
--- /dev/null
+++ b/rabbitmq/classification_predict/postToAWSLambda.py
@@ -0,0 +1,28 @@
+import json
+import boto3
+import os
+
+client = boto3.client('lambda', region_name="us-west-2", aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'])
+
+def invoke(function_name, args):
+
+ # pass information so remote lambda can access local s3 minio
+ args['HOST_IP'] = os.environ['HOST_IP']
+ args['AWS_ACCESSKEY'] = os.environ['AWS_ACCESSKEY']
+ args['AWS_ACCESSKEYSECRET'] = os.environ['AWS_ACCESSKEYSECRET']
+ args['BUCKET_NAME'] = os.environ['BUCKET_NAME']
+
+ response = client.invoke(
+ Payload=json.dumps(args),
+ FunctionName=function_name,
+ InvocationType='RequestResponse',
+ LogType='Tail',
+ )
+
+ if response['StatusCode'] == 200:
+ results = json.loads(response['Payload'].read().decode('utf-8'))
+ else:
+ results = {'ERROR': response['FunctionError']}
+
+ return results
\ No newline at end of file
diff --git a/rabbitmq/classification_predict/rabbitmq_handler.py b/rabbitmq/classification_predict/rabbitmq_handler.py
new file mode 100644
index 0000000..915a45e
--- /dev/null
+++ b/rabbitmq/classification_predict/rabbitmq_handler.py
@@ -0,0 +1,117 @@
+import json
+import os
+import traceback
+
+import pika
+import writeToS3 as s3
+from lambda_classification_predict import Classification
+import postToAWSLambda
+
+
+def rabbitmq_handler(ch, method, properties, body):
+ try:
+ msg = {}
+
+ # determine if it goes to aws, lambda, or batch
+ params = json.loads(body)
+
+ if params['platform'] == 'aws-lambda':
+ msg = postToAWSLambda.invoke(params['function_name'], params)
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(msg))
+
+ elif params['platform'] == 'aws-batch':
+ raise ValueError("Not applicable to aws-batch")
+
+ elif params['platform'] == 'lambda':
+ event = json.loads(body)
+
+ uid = event['uid']
+ awsPath = event['s3FolderName'] + '/ML/classification/' + uid + '/'
+ localSavePath = '/tmp/' + event['s3FolderName'] + '/ML/classification/' + uid + '/'
+ if not os.path.exists(localSavePath):
+ os.makedirs(localSavePath)
+ if not os.path.exists(localSavePath):
+ os.makedirs(localSavePath)
+
+ # download config to local folder
+ fname_config = 'config.json'
+ try:
+ s3.downloadToDisk(fname_config, localSavePath, awsPath)
+ with open(localSavePath + fname_config, "r") as fp:
+ data = json.load(fp)
+ for key in data.keys():
+ if key not in event.keys():
+ event[key] = data[key]
+ with open(localSavePath + fname_config, "w") as f:
+ json.dump(event, f)
+ s3.upload(localSavePath, awsPath, fname_config)
+ msg['config'] = s3.generate_downloads(awsPath, fname_config)
+ msg['uid'] = uid
+
+ except:
+ raise ValueError('This session ID is invalid!')
+
+ # download unlabeled data to local folder
+ fname_unlabeled = 'testing.csv'
+ try:
+ s3.downloadToDisk(fname_unlabeled, localSavePath, awsPath)
+ except:
+ raise ValueError('You\'re requesting ' + fname_unlabeled + ' file, and it\'s not found in your remote directory!\
+ It is likely that you have not yet performed step 1 -- split the dataset into training and predicting set, or you have provided the wrong sessionID.')
+
+ # download pickle model to local folder
+ fname_pickle = 'pipeline.pickle'
+ try:
+ s3.downloadToDisk(fname_pickle, localSavePath, awsPath)
+ except:
+ raise ValueError('You\'re requesting ' + fname_pickle + ' file, and it\'s not found in your remote directory! \
+ It is likely that you have not yet performed step 2 -- model training, or you have provided the wrong sessionID.')
+
+ classification = Classification(awsPath, localSavePath)
+ msg['predicting'] = classification.predict()
+ msg['div_category'] = classification.plot()
+
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(msg))
+
+ elif params['platform'] == 'batch':
+ raise ValueError("Not applicable to aws-batch")
+
+ else:
+ raise ValueError(
+ 'Rabbitmq Message Not Recognizable. '
+ 'It has to specify what platform to run: aws-lambda, aws-batch, lambda or batch.')
+
+ except BaseException as e:
+
+ msg = {'ERROR':
+ {'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(msg))
+
+ return msg
+
+
+if __name__ == '__main__':
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+
+ # pass the queue name in environment variable
+ queue = os.environ['QUEUE_NAME']
+
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=rabbitmq_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/classification_predict/requirement.txt b/rabbitmq/classification_predict/requirement.txt
new file mode 100644
index 0000000..a85f28f
--- /dev/null
+++ b/rabbitmq/classification_predict/requirement.txt
@@ -0,0 +1,7 @@
+pandas>=0.24.2
+plotly==2.7.0
+boto3>=1.6.11
+pika>=1.1.0
+scipy>=1.2.1
+scikit-learn>=0.19.1
+networkx==1.11
\ No newline at end of file
diff --git a/lambda/lambda_classification_split_dev/writeToS3.py b/rabbitmq/classification_predict/writeToS3.py
similarity index 84%
rename from lambda/lambda_classification_split_dev/writeToS3.py
rename to rabbitmq/classification_predict/writeToS3.py
index 75b1999..4fba54f 100644
--- a/lambda/lambda_classification_split_dev/writeToS3.py
+++ b/rabbitmq/classification_predict/writeToS3.py
@@ -1,9 +1,14 @@
import boto3
-import os
import mimetypes
+import os
+from botocore.client import Config
+
+client = boto3.client('s3', endpoint_url='http://' + os.environ['HOST_IP'] + ':9000',
+ aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'],
+ config=Config(signature_version='s3v4'))
-client = boto3.client('s3')
-bucket_name = 'macroscope-smile'
+bucket_name = os.environ['BUCKET_NAME']
def upload(localpath, remotepath, filename):
content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
diff --git a/rabbitmq/classification_split/algorithm.py b/rabbitmq/classification_split/algorithm.py
new file mode 100644
index 0000000..5771b7c
--- /dev/null
+++ b/rabbitmq/classification_split/algorithm.py
@@ -0,0 +1,28 @@
+import plot
+from lambda_classification_split import Classification
+
+
+def algorithm(df, params):
+ """
+ wrapper function to put each individual algorithm inside
+ :param df: dataframe that contains all the input dataset
+ :param params: algorithm specific parameters
+ :return: a dictionary of { outputname: output content in memory }
+ """
+ output = {}
+
+ CF = Classification(df, params['column'])
+
+ output['uid'] = params['uid']
+
+ training_set, testing_set = CF.split(int(params['ratio']))
+ output['training'] = training_set
+ output['testing'] = testing_set
+
+ # plot
+ labels = ['training set data points', 'unlabeled data points']
+ values = [len(training_set), len(testing_set)]
+ output['div'] = plot.plot_pie_chart(labels, values,
+ title='breakdown of training vs testing size')
+
+ return output
diff --git a/rabbitmq/classification_split/clear_cache.sh b/rabbitmq/classification_split/clear_cache.sh
new file mode 100644
index 0000000..640c2ac
--- /dev/null
+++ b/rabbitmq/classification_split/clear_cache.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+CACHEDIR=/tmp
+
+# delete file older than 4 hours
+find "$CACHEDIR" -maxdepth 1 -mindepth 1 -type d -mmin +240 -print0 |
+ while IFS= read -d '' -r dir; do
+ rm -rf "$dir"
+ done
\ No newline at end of file
diff --git a/rabbitmq/classification_split/clear_cache_cron b/rabbitmq/classification_split/clear_cache_cron
new file mode 100644
index 0000000..0510c51
--- /dev/null
+++ b/rabbitmq/classification_split/clear_cache_cron
@@ -0,0 +1 @@
+0 * * * * /bin/bash /scripts/clear_cache.sh
diff --git a/rabbitmq/classification_split/command.txt b/rabbitmq/classification_split/command.txt
new file mode 100644
index 0000000..ca56e58
--- /dev/null
+++ b/rabbitmq/classification_split/command.txt
@@ -0,0 +1,2 @@
+# command to build and run this container
+docker build -t socialmediamacroscope/classification_split:latest .
\ No newline at end of file
diff --git a/lambda/lambda_classification_split_dev/dataset.py b/rabbitmq/classification_split/dataset.py
similarity index 100%
rename from lambda/lambda_classification_split_dev/dataset.py
rename to rabbitmq/classification_split/dataset.py
diff --git a/rabbitmq/classification_split/dockerfile b/rabbitmq/classification_split/dockerfile
new file mode 100644
index 0000000..34ef036
--- /dev/null
+++ b/rabbitmq/classification_split/dockerfile
@@ -0,0 +1,15 @@
+FROM python:3.7
+
+RUN apt-get -qq -y update && apt-get -qq -y install cron
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+COPY . ./
+
+RUN pip install --no-cache-dir -r requirement.txt
+
+# cron job clean tmp folder
+RUN chmod u+x ./clear_cache.sh
+RUN chmod 0644 ./clear_cache_cron
+RUN crontab ./clear_cache_cron
\ No newline at end of file
diff --git a/rabbitmq/classification_split/lambda_classification_split.py b/rabbitmq/classification_split/lambda_classification_split.py
new file mode 100755
index 0000000..6201a92
--- /dev/null
+++ b/rabbitmq/classification_split/lambda_classification_split.py
@@ -0,0 +1,22 @@
+import random
+import re
+
+
+class Classification:
+
+ def __init__(self, df, column):
+
+ self.corpus = list(
+ set(df[df[column] != ''][column].dropna().astype('str').tolist()))
+ self.corpus = [re.sub(r"http\S+", "", text) for text in self.corpus]
+
+ def split(self, ratio):
+ training_set = [[item] for item in list(
+ random.sample(self.corpus, int(len(self.corpus) * ratio / 100)))]
+ training_set.insert(0, ['content', 'category'])
+
+ testing_set = [[item] for item in self.corpus if
+ item not in training_set]
+ testing_set.insert(0, ['content'])
+
+ return training_set, testing_set
diff --git a/rabbitmq/classification_split/plot.py b/rabbitmq/classification_split/plot.py
new file mode 100644
index 0000000..431d2ff
--- /dev/null
+++ b/rabbitmq/classification_split/plot.py
@@ -0,0 +1,157 @@
+from plotly.graph_objs import *
+from plotly.offline import plot
+import networkx as nx
+
+
+def plot_pie_chart(labels, values, title):
+ """
+ plot pie chart
+ :param labels: list of label, shape must match parameter values
+ :param values: list of values, shape must match parameter labels
+ :param title: title to show
+ :return: html code in a div
+ """
+ trace = Pie(labels=labels, values=values, textinfo='label+percent')
+ layout = Layout(
+ title=title,
+ font=dict(family='Arial', size=12),
+ margin=dict(
+ l=70,
+ r=70,
+ t=70,
+ b=70,
+ )
+ )
+ fig = Figure(data=[trace], layout=layout)
+ div = plot(fig, output_type='div', image='png', auto_open=False,
+ image_filename='plot_img')
+
+ return div
+
+
+def plot_network(graph, layout, relationships, title):
+ """
+ plot network graph
+ :param graph: networkx graph
+ :param layout: network layout
+ :param relationships: reply, retweet, mention or anything else
+ :param title: title to show
+ :return: html code in a div
+ """
+
+ if layout == 'spring':
+ pos = nx.spring_layout(graph)
+ elif layout == 'circular':
+ pos = nx.circular_layout(graph)
+ elif layout == 'fruchterman':
+ pos = nx.fruchterman_reingold_layout(graph)
+ elif layout == 'random':
+ pos = nx.random_layout(graph)
+ elif layout == 'shell':
+ pos = nx.shell_layout(graph)
+ elif layout == 'spectral':
+ pos = nx.spectral_layout(graph)
+ edge_attri = nx.get_edge_attributes(graph, 'text')
+ edge_trace = Scatter(x=[], y=[], text=[],
+ line=Line(width=1, color='#b5b5b5'),
+ hoverinfo='text',
+ mode='lines',
+ hoveron='points')
+ for edge in graph.edges():
+ x0, y0 = pos[edge[0]]
+ x1, y1 = pos[edge[1]]
+ edge_trace['x'] += [x0, x1, None]
+ edge_trace['y'] += [y0, y1, None]
+ edge_trace['text'].append(edge_attri[edge])
+
+ node_trace = Scatter(x=[], y=[], text=[], mode='markers',
+ hoverinfo='text', hoveron='points+fills',
+ marker=Marker(showscale=True,
+ colorscale='Portland',
+ reversescale=False,
+ color=[],
+ size=10,
+ colorbar=dict(thickness=15,
+ title='node in-degree plus out-degree',
+ xanchor='left',
+ titleside='right'),
+ line=dict(width=2)))
+ for node in graph.nodes():
+ x, y = pos[node]
+ node_trace['x'].append(x)
+ node_trace['y'].append(y)
+
+ # set label
+ for node in graph.nodes():
+ node_trace['marker']['color'].append(graph.in_degree()[node] + graph.out_degree()[node])
+ if relationships == 'reply_to':
+ node_trace['text'].append("@" + node + " is replied by "
+ + str(graph.in_degree()[node])
+ + " user(s), and replies to "
+ + str(graph.out_degree()[node]) + " user(s)")
+
+ elif relationships == 'retweet_from':
+ node_trace['text'].append("@" + node + " is retweeted by "
+ + str(graph.in_degree()[node])
+ + " user(s) and retweets from "
+ + str(graph.out_degree()[node])
+ + " user(s)")
+
+ elif relationships == 'mentions':
+ node_trace['text'].append("@" + node + " is mentioned by "
+ + str(graph.in_degree()[node])
+ + " user(s) and mentions "
+ + str(graph.out_degree()[node])
+ + " user(s)")
+
+ fig = Figure(data=Data([edge_trace, node_trace]),
+ layout=Layout(
+ title=title,
+ titlefont=dict(size=16), showlegend=False,
+ hovermode='closest', margin=dict(b=20, l=5, r=5, t=40),
+ xaxis=XAxis(showgrid=False, zeroline=False,
+ showticklabels=False),
+ yaxis=YAxis(showgrid=False, zeroline=False,
+ showticklabels=False)
+ ))
+
+ div = plot(fig, output_type='div', image='png', auto_open=False,
+ image_filename='plot_img')
+
+ return div
+
+
+def plot_bar_chart(index, counts, title):
+ """
+ plot bar chart
+ :param index: x - axis, usually the index
+ :param counts: y - axis, usually counts
+ :param title:
+ :return:
+ """
+
+ trace = Bar(x=index, y=counts,
+ marker=dict(color='rgba(200,75,73,1.0)',
+ line=dict(color='rgba(111,11,9,1.0)',width=2)))
+ layout = Layout(
+ title=title,
+ font=dict(family='Arial', size=12),
+ yaxis=dict(
+ showgrid=True,
+ showline=True,
+ showticklabels=True,
+ linecolor='rgba(102, 102, 102, 0.8)',
+ linewidth=2
+ ),
+ margin=dict(
+ l=70,
+ r=70,
+ t=70,
+ b=70,
+ )
+ )
+
+ fig = Figure(data=[trace], layout=layout)
+ div = plot(fig, output_type='div', image='png', auto_open=False, image_filename='plot_img')
+
+ return div
diff --git a/rabbitmq/classification_split/postToAWSLambda.py b/rabbitmq/classification_split/postToAWSLambda.py
new file mode 100644
index 0000000..8a227e7
--- /dev/null
+++ b/rabbitmq/classification_split/postToAWSLambda.py
@@ -0,0 +1,28 @@
+import json
+import boto3
+import os
+
+client = boto3.client('lambda', region_name="us-west-2", aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'])
+
+def invoke(function_name, args):
+
+ # pass information so remote lambda can access local s3 minio
+ args['HOST_IP'] = os.environ['HOST_IP']
+ args['AWS_ACCESSKEY'] = os.environ['AWS_ACCESSKEY']
+ args['AWS_ACCESSKEYSECRET'] = os.environ['AWS_ACCESSKEYSECRET']
+ args['BUCKET_NAME'] = os.environ['BUCKET_NAME']
+
+ response = client.invoke(
+ Payload=json.dumps(args),
+ FunctionName=function_name,
+ InvocationType='RequestResponse',
+ LogType='Tail',
+ )
+
+ if response['StatusCode'] == 200:
+ results = json.loads(response['Payload'].read().decode('utf-8'))
+ else:
+ results = {'ERROR': response['FunctionError']}
+
+ return results
\ No newline at end of file
diff --git a/rabbitmq/classification_split/rabbitmq_handler.py b/rabbitmq/classification_split/rabbitmq_handler.py
new file mode 100644
index 0000000..e6f16fb
--- /dev/null
+++ b/rabbitmq/classification_split/rabbitmq_handler.py
@@ -0,0 +1,93 @@
+import json
+import os
+import traceback
+
+import dataset
+import pika
+from algorithm import algorithm
+
+import postToAWSLambda
+
+
+def rabbitmq_handler(ch, method, properties, body):
+ try:
+ msg = {}
+
+ # determine if it goes to aws, lambda, or batch
+ params = json.loads(body)
+
+ if params['platform'] == 'aws-lambda':
+ msg = postToAWSLambda.invoke(params['function_name'], params)
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(msg))
+
+ elif params['platform'] == 'aws-batch':
+ raise ValueError("Not applicable to aws-batch")
+
+ elif params['platform'] == 'lambda':
+ path = dataset.organize_path_lambda(params)
+
+ # save the config file
+ msg['config'] = dataset.save_remote_output(path['localSavePath'],
+ path['remoteSavePath'],
+ 'config',
+ params)
+ # prepare input dataset
+ df = dataset.get_remote_input(path['remoteReadPath'],
+ path['filename'],
+ path['localReadPath'])
+
+ # execute the algorithm
+ output = algorithm(df, params)
+
+ # upload object to s3 bucket and return the url
+ for key, value in output.items():
+ if key != 'uid':
+ msg[key] = dataset.save_remote_output(path['localSavePath'],
+ path['remoteSavePath'],
+ key,
+ value)
+ else:
+ msg[key] = value
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(msg))
+
+ elif params['platform'] == 'batch':
+ raise ValueError("Not applicable to aws-batch")
+
+ else:
+ raise ValueError(
+ 'Rabbitmq Message Not Recognizable. '
+ 'It has to specify what platform to run: aws-lambda, aws-batch, lambda or batch.')
+
+ except BaseException as e:
+
+ msg = {'ERROR':
+ {'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(msg))
+
+ return None
+
+
+if __name__ == '__main__':
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+
+ # pass the queue name in environment variable
+ queue = os.environ['QUEUE_NAME']
+
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=rabbitmq_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/classification_split/requirement.txt b/rabbitmq/classification_split/requirement.txt
new file mode 100644
index 0000000..85973ac
--- /dev/null
+++ b/rabbitmq/classification_split/requirement.txt
@@ -0,0 +1,6 @@
+boto3>=1.6.11
+numpy>=1.16.1
+pandas>=0.24.1
+plotly==2.7.0
+pika>=1.1.0
+networkx==1.11
\ No newline at end of file
diff --git a/lambda/lambda_classification_train_dev/writeToS3.py b/rabbitmq/classification_split/writeToS3.py
similarity index 84%
rename from lambda/lambda_classification_train_dev/writeToS3.py
rename to rabbitmq/classification_split/writeToS3.py
index 75b1999..4fba54f 100644
--- a/lambda/lambda_classification_train_dev/writeToS3.py
+++ b/rabbitmq/classification_split/writeToS3.py
@@ -1,9 +1,14 @@
import boto3
-import os
import mimetypes
+import os
+from botocore.client import Config
+
+client = boto3.client('s3', endpoint_url='http://' + os.environ['HOST_IP'] + ':9000',
+ aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'],
+ config=Config(signature_version='s3v4'))
-client = boto3.client('s3')
-bucket_name = 'macroscope-smile'
+bucket_name = os.environ['BUCKET_NAME']
def upload(localpath, remotepath, filename):
content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
diff --git a/rabbitmq/classification_train/algorithm.py b/rabbitmq/classification_train/algorithm.py
new file mode 100644
index 0000000..db59797
--- /dev/null
+++ b/rabbitmq/classification_train/algorithm.py
@@ -0,0 +1,46 @@
+import plot
+from lambda_classification_train import Classification
+
+
+def algorithm(array, params):
+ """
+ wrapper function to put each individual algorithm inside
+ :param array: array that contains all the input dataset
+ :param params: algorithm specific parameters
+ :return: a dictionary of { outputname: output content in memory }
+ """
+
+ output = {}
+
+ CF = Classification(array)
+
+ output['uid'] = params['uid']
+
+ fold_scores, text_clf = CF.classify(params['model'])
+ output['accuracy'] = fold_scores
+ output['pipeline'] = text_clf
+
+ labels = text_clf.classes_
+ output['metrics'] = CF.calc_metrics(labels)
+
+ # plot
+ output['div_accuracy'] = plot.plot_bar_chart(fold_scores[0], fold_scores[1],
+ title='10 fold cross validation accuracy score')
+
+ return output
+
+if __name__ == "__main__":
+ import csv
+
+ Array = []
+ with open('reddit-ml-multiclass.csv', 'r',encoding='ISO-8859-1') as f:
+ reader = csv.reader(f)
+ for row in reader:
+ Array.append(row)
+
+ # RandomForest
+ params = {
+ "uid":"11111111111111",
+ "model":"AdaBoost"
+ }
+ output = algorithm(array=Array, params=params)
\ No newline at end of file
diff --git a/rabbitmq/classification_train/clear_cache.sh b/rabbitmq/classification_train/clear_cache.sh
new file mode 100644
index 0000000..d0eabdb
--- /dev/null
+++ b/rabbitmq/classification_train/clear_cache.sh
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+CACHEDIR=/tmp
+
+# delete file older than 4 hours
+find "$CACHEDIR" -maxdepth 1 -mindepth 1 -type d -mmin +240 -print0 |
+ while IFS= read -d '' -r dir; do
+ rm -rf "$dir"
+
+ # recording each delete in the log
+ current_date_time="`date +%Y%m%d%H%M%S`";
+ echo "Deleting $dir at $current_date_time"
+ done
\ No newline at end of file
diff --git a/rabbitmq/classification_train/clear_cache_cron b/rabbitmq/classification_train/clear_cache_cron
new file mode 100644
index 0000000..0510c51
--- /dev/null
+++ b/rabbitmq/classification_train/clear_cache_cron
@@ -0,0 +1 @@
+0 * * * * /bin/bash /scripts/clear_cache.sh
diff --git a/rabbitmq/classification_train/command.txt b/rabbitmq/classification_train/command.txt
new file mode 100644
index 0000000..bb1f99e
--- /dev/null
+++ b/rabbitmq/classification_train/command.txt
@@ -0,0 +1,2 @@
+# command to build and run this container
+docker build -t socialmediamacroscope/classification_train:latest .
\ No newline at end of file
diff --git a/lambda/lambda_classification_train_dev/dataset.py b/rabbitmq/classification_train/dataset.py
similarity index 100%
rename from lambda/lambda_classification_train_dev/dataset.py
rename to rabbitmq/classification_train/dataset.py
diff --git a/rabbitmq/classification_train/dockerfile b/rabbitmq/classification_train/dockerfile
new file mode 100644
index 0000000..34ef036
--- /dev/null
+++ b/rabbitmq/classification_train/dockerfile
@@ -0,0 +1,15 @@
+FROM python:3.7
+
+RUN apt-get -qq -y update && apt-get -qq -y install cron
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+COPY . ./
+
+RUN pip install --no-cache-dir -r requirement.txt
+
+# cron job clean tmp folder
+RUN chmod u+x ./clear_cache.sh
+RUN chmod 0644 ./clear_cache_cron
+RUN crontab ./clear_cache_cron
\ No newline at end of file
diff --git a/rabbitmq/classification_train/lambda_classification_train.py b/rabbitmq/classification_train/lambda_classification_train.py
new file mode 100755
index 0000000..b2d660a
--- /dev/null
+++ b/rabbitmq/classification_train/lambda_classification_train.py
@@ -0,0 +1,92 @@
+from sklearn.pipeline import Pipeline
+from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
+from sklearn.naive_bayes import MultinomialNB
+from sklearn.linear_model import Perceptron
+from sklearn.linear_model import SGDClassifier
+from sklearn.ensemble import RandomForestClassifier
+from sklearn.neighbors import KNeighborsClassifier
+from sklearn.linear_model import PassiveAggressiveClassifier
+from sklearn.svm import SVC
+from sklearn.tree import DecisionTreeClassifier
+from sklearn.ensemble import AdaBoostClassifier
+from sklearn import metrics
+from sklearn.model_selection import cross_val_predict
+from sklearn.model_selection import cross_val_score
+import numpy as np
+
+
+class Classification:
+
+ def __init__(self, array):
+
+ self.data = []
+ self.target = []
+
+ for a in array[1:]:
+ self.data.append(a[0])
+ self.target.append(a[1])
+
+ @staticmethod
+ def pipeline(model):
+ text_clf = Pipeline([
+ ('vect', CountVectorizer(stop_words='english')),
+ ('tfidf', TfidfTransformer()),
+ ('clf', model)])
+ return text_clf
+
+ def classify(self, model):
+ if model == 'NaiveBayes':
+ text_clf = self.pipeline(MultinomialNB())
+ elif model == 'Perceptron':
+ text_clf = self.pipeline(Perceptron())
+ elif model == 'SGD':
+ text_clf = self.pipeline(SGDClassifier())
+ elif model == 'RandomForest':
+ text_clf = self.pipeline(RandomForestClassifier(n_estimators=100))
+ elif model == 'KNN':
+ text_clf = self.pipeline(KNeighborsClassifier(n_neighbors=10))
+ elif model == 'PassiveAggressive':
+ text_clf = self.pipeline(PassiveAggressiveClassifier(n_iter=50))
+ elif model == 'SupportVector':
+ text_clf = self.pipeline(SVC(gamma='auto'))
+ elif model == 'DecisionTree':
+ text_clf = self.pipeline(DecisionTreeClassifier(random_state=0))
+ elif model == 'AdaBoost':
+ text_clf = self.pipeline(AdaBoostClassifier(n_estimators=100, random_state=0))
+ else:
+ raise ValueError('Model not supported!')
+
+ # 10 fold cross validation
+ self.predicted = cross_val_predict(text_clf, self.data,
+ self.target, cv=10)
+ # fit the model
+ text_clf.fit(self.data, self.target)
+
+ # get 10 fold cross validation accuracy score
+ fold_scores = [['%.4f' % elem for elem in
+ cross_val_score(text_clf, self.data, self.target,
+ cv=10)]]
+ fold_scores.insert(0,
+ ['fold_1', 'fold_2', 'fold_3', 'fold_4', 'fold_5',
+ 'fold_6', 'fold_7', 'fold_8', 'fold_9', 'fold_10'])
+
+ return fold_scores, text_clf
+
+ def calc_metrics(self, labels):
+ metrics_output = [['Class', 'Precision', 'Recall', 'F-score', 'Support']]
+
+ report = np.array(metrics.precision_recall_fscore_support(self.target,
+ self.predicted,
+ labels=labels)).T
+ for i in range(len(report)):
+ metrics_output.append(
+ [labels[i], round(report[i][0], 4), round(report[i][1], 4),
+ round(report[i][2], 4), round(report[i][3], 4)])
+
+ avg_report = list(metrics.precision_recall_fscore_support(self.target,
+ self.predicted,
+ average='weighted'))
+ avg_report.insert(0, 'AVG')
+ metrics_output.append(avg_report)
+
+ return metrics_output
diff --git a/rabbitmq/classification_train/plot.py b/rabbitmq/classification_train/plot.py
new file mode 100644
index 0000000..b872296
--- /dev/null
+++ b/rabbitmq/classification_train/plot.py
@@ -0,0 +1,159 @@
+from plotly.graph_objs import *
+from plotly.offline import plot
+# import networkx as nx
+
+
+def plot_pie_chart(labels, values, title):
+ """
+ plot pie chart
+ :param labels: list of label, shape must match parameter values
+ :param values: list of values, shape must match parameter labels
+ :param title: title to show
+ :return: html code in a div
+ """
+ trace = Pie(labels=labels, values=values, textinfo='label+percent')
+ layout = Layout(
+ title=title,
+ font=dict(family='Arial', size=12),
+ margin=dict(
+ l=70,
+ r=70,
+ t=70,
+ b=70,
+ )
+ )
+ fig = Figure(data=[trace], layout=layout)
+ div = plot(fig, output_type='div', image='png', auto_open=False,
+ image_filename='plot_img')
+
+ return div
+
+
+# def plot_network(graph, layout, relationships, title):
+# """
+# plot network graph
+# :param graph: networkx graph
+# :param layout: network layout
+# :param relationships: reply, retweet, mention or anything else
+# :param title: title to show
+# :return: html code in a div
+# """
+#
+# if layout == 'spring':
+# pos = nx.spring_layout(graph)
+# elif layout == 'circular':
+# pos = nx.circular_layout(graph)
+# elif layout == 'fruchterman':
+# pos = nx.fruchterman_reingold_layout(graph)
+# elif layout == 'random':
+# pos = nx.random_layout(graph)
+# elif layout == 'shell':
+# pos = nx.shell_layout(graph)
+# elif layout == 'spectral':
+# pos = nx.spectral_layout(graph)
+# edge_attri = nx.get_edge_attributes(graph, 'text')
+# edge_trace = Scatter(x=[], y=[], text=[],
+# line=Line(width=1, color='#b5b5b5'),
+# hoverinfo='text',
+# mode='lines',
+# hoveron='points')
+# for edge in graph.edges():
+# x0, y0 = pos[edge[0]]
+# x1, y1 = pos[edge[1]]
+# edge_trace['x'] += [x0, x1, None]
+# edge_trace['y'] += [y0, y1, None]
+# edge_trace['text'].append(edge_attri[edge])
+#
+# node_trace = Scatter(x=[], y=[], text=[], mode='markers',
+# hoverinfo='text', hoveron='points+fills',
+# marker=Marker(showscale=True,
+# colorscale='Portland',
+# reversescale=False,
+# color=[],
+# size=10,
+# colorbar=dict(thickness=15,
+# title='node in-degree plus out-degree',
+# xanchor='left',
+# titleside='right'),
+# line=dict(width=2)))
+# for node in graph.nodes():
+# x, y = pos[node]
+# node_trace['x'].append(x)
+# node_trace['y'].append(y)
+#
+# # set label
+# for node in graph.nodes():
+# node_trace['marker']['color'].append(graph.in_degree()[node] + graph.out_degree()[node])
+# if relationships == 'reply_to':
+# node_trace['text'].append("@" + node + " is replied by "
+# + str(graph.in_degree()[node])
+# + " user(s), and replies to "
+# + str(graph.out_degree()[node]) + " user(s)")
+#
+# elif relationships == 'retweet_from':
+# node_trace['text'].append("@" + node + " is retweeted by "
+# + str(graph.in_degree()[node])
+# + " user(s) and retweets from "
+# + str(graph.out_degree()[node])
+# + " user(s)")
+#
+# elif relationships == 'mentions':
+# node_trace['text'].append("@" + node + " is mentioned by "
+# + str(graph.in_degree()[node])
+# + " user(s) and mentions "
+# + str(graph.out_degree()[node])
+# + " user(s)")
+#
+# fig = Figure(data=Data([edge_trace, node_trace]),
+# layout=Layout(
+# title=title,
+# titlefont=dict(size=16), showlegend=False,
+# hovermode='closest', margin=dict(b=20, l=5, r=5, t=40),
+# xaxis=XAxis(showgrid=False, zeroline=False,
+# showticklabels=False),
+# yaxis=YAxis(showgrid=False, zeroline=False,
+# showticklabels=False)
+# ))
+#
+# div = plot(fig, output_type='div', image='png', auto_open=False,
+# image_filename='plot_img')
+#
+# return div
+
+
+def plot_bar_chart(index, counts, title):
+ """
+ plot bar chart
+ :param index: x - axis, usually the index
+ :param counts: y - axis, usually counts
+ :param title:
+ :return:
+ """
+
+ trace = Bar(x=index, y=counts,
+ marker=dict(color='rgba(200,75,73,1.0)',
+ line=dict(color='rgba(111,11,9,1.0)',width=2)))
+ layout = Layout(
+ title=title,
+ font=dict(family='Arial', size=12),
+ yaxis=dict(
+ showgrid=True,
+ showline=True,
+ showticklabels=True,
+ linecolor='rgba(102, 102, 102, 0.8)',
+ linewidth=2,
+ # 10 fold cross validation
+ range=[0, 1]
+ ),
+ margin=dict(
+ l=70,
+ r=70,
+ t=70,
+ b=70,
+ )
+ )
+
+ fig = Figure(data=[trace], layout=layout)
+ div = plot(fig, output_type='div', image='png', auto_open=False, image_filename='plot_img')
+
+ return div
diff --git a/rabbitmq/classification_train/postToAWSLambda.py b/rabbitmq/classification_train/postToAWSLambda.py
new file mode 100644
index 0000000..8a227e7
--- /dev/null
+++ b/rabbitmq/classification_train/postToAWSLambda.py
@@ -0,0 +1,28 @@
+import json
+import boto3
+import os
+
+client = boto3.client('lambda', region_name="us-west-2", aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'])
+
+def invoke(function_name, args):
+
+ # pass information so remote lambda can access local s3 minio
+ args['HOST_IP'] = os.environ['HOST_IP']
+ args['AWS_ACCESSKEY'] = os.environ['AWS_ACCESSKEY']
+ args['AWS_ACCESSKEYSECRET'] = os.environ['AWS_ACCESSKEYSECRET']
+ args['BUCKET_NAME'] = os.environ['BUCKET_NAME']
+
+ response = client.invoke(
+ Payload=json.dumps(args),
+ FunctionName=function_name,
+ InvocationType='RequestResponse',
+ LogType='Tail',
+ )
+
+ if response['StatusCode'] == 200:
+ results = json.loads(response['Payload'].read().decode('utf-8'))
+ else:
+ results = {'ERROR': response['FunctionError']}
+
+ return results
\ No newline at end of file
diff --git a/rabbitmq/classification_train/rabbitmq_handler.py b/rabbitmq/classification_train/rabbitmq_handler.py
new file mode 100644
index 0000000..0edd7be
--- /dev/null
+++ b/rabbitmq/classification_train/rabbitmq_handler.py
@@ -0,0 +1,87 @@
+import json
+import os
+import traceback
+
+import dataset
+import pika
+from algorithm import algorithm
+
+import postToAWSLambda
+
+
+def rabbitmq_handler(ch, method, properties, body):
+ try:
+ msg = {}
+
+ # determine if it goes to aws, lambda, or batch
+ params = json.loads(body)
+
+ if params['platform'] == 'aws-lambda':
+ msg = postToAWSLambda.invoke(params['function_name'], params)
+
+ elif params['platform'] == 'aws-batch':
+ raise ValueError("Not applicable to aws-batch")
+
+ elif params['platform'] == 'lambda':
+ # arranging the paths
+ path = dataset.organize_path_lambda(params)
+
+ # save the config file
+ msg['config'] = dataset.save_remote_output(path['localSavePath'],
+ path['remoteSavePath'],
+ 'config',
+ params)
+ # prepare input dataset
+ df = dataset.get_remote_input(path['remoteReadPath'],
+ path['filename'],
+ path['localReadPath'])
+
+ # execute the algorithm
+ output = algorithm(df, params)
+
+ # upload object to s3 bucket and return the url
+ for key, value in output.items():
+ if key != 'uid':
+ msg[key] = dataset.save_remote_output(path['localSavePath'],
+ path['remoteSavePath'],
+ key,
+ value)
+ else:
+ msg[key] = value
+
+ elif params['platform'] == 'batch':
+ raise ValueError("Not applicable to batch")
+
+ else:
+ raise ValueError(
+ 'Rabbitmq Message Not Recognizable. '
+ 'It has to specify what platform to run: aws-lambda, aws-batch, lambda or batch.')
+
+ except BaseException as e:
+
+ msg = {'ERROR':
+ {'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(msg))
+
+ return None
+
+
+if __name__ == '__main__':
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+
+ # pass the queue name in environment variable
+ queue = os.environ['QUEUE_NAME']
+
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=rabbitmq_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/classification_train/requirement.txt b/rabbitmq/classification_train/requirement.txt
new file mode 100644
index 0000000..a85f28f
--- /dev/null
+++ b/rabbitmq/classification_train/requirement.txt
@@ -0,0 +1,7 @@
+pandas>=0.24.2
+plotly==2.7.0
+boto3>=1.6.11
+pika>=1.1.0
+scipy>=1.2.1
+scikit-learn>=0.19.1
+networkx==1.11
\ No newline at end of file
diff --git a/rabbitmq/classification_train/writeToS3.py b/rabbitmq/classification_train/writeToS3.py
new file mode 100644
index 0000000..4fba54f
--- /dev/null
+++ b/rabbitmq/classification_train/writeToS3.py
@@ -0,0 +1,77 @@
+import boto3
+import mimetypes
+import os
+from botocore.client import Config
+
+client = boto3.client('s3', endpoint_url='http://' + os.environ['HOST_IP'] + ':9000',
+ aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'],
+ config=Config(signature_version='s3v4'))
+
+bucket_name = os.environ['BUCKET_NAME']
+
+def upload(localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType':'application/octet-stream'}
+ else:
+ extra_args = {'ContentType':content_type}
+
+ client.upload_file(os.path.join(localpath, filename),
+ bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+
+def createDirectory(DirectoryName):
+ client.put_object(Bucket=bucket_name, Key=DirectoryName)
+
+
+def generate_downloads(remotepath, filename):
+ url = client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+
+def downloadToDisk(filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ client.download_fileobj(bucket_name,
+ os.path.join(remotepath, filename), f)
+
+
+def getObject(remoteKey):
+ obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
+
+
+def putObject(body, remoteKey):
+ # bytes or seekable file-like object
+ obj = client.put_object(Bucket=bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+def listDir(remoteClass):
+ objects = client.list_objects(Bucket=bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+
+def listFiles(foldernames):
+ objects = client.list_objects(Bucket=bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/rabbitmq/clowder_create_collection/command.txt b/rabbitmq/clowder_create_collection/command.txt
new file mode 100644
index 0000000..c5e9325
--- /dev/null
+++ b/rabbitmq/clowder_create_collection/command.txt
@@ -0,0 +1,2 @@
+# command to build and run this container
+docker build -t socialmediamacroscope/clowder_create_collection:latest .
\ No newline at end of file
diff --git a/rabbitmq/clowder_create_collection/dockerfile b/rabbitmq/clowder_create_collection/dockerfile
new file mode 100644
index 0000000..3a23fb2
--- /dev/null
+++ b/rabbitmq/clowder_create_collection/dockerfile
@@ -0,0 +1,8 @@
+FROM python:3.7
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+COPY . ./
+
+RUN pip install --no-cache-dir -r requirement.txt
\ No newline at end of file
diff --git a/rabbitmq/clowder_create_collection/rabbitmq_handler.py b/rabbitmq/clowder_create_collection/rabbitmq_handler.py
new file mode 100644
index 0000000..928e06b
--- /dev/null
+++ b/rabbitmq/clowder_create_collection/rabbitmq_handler.py
@@ -0,0 +1,62 @@
+import json
+import os
+import traceback
+
+import pika
+import requests
+
+
+def rabbitmq_handler(ch, method, properties, body):
+ try:
+ # basic fields
+ event = json.loads(body)
+ auth = (event['username'], event['password'])
+ headers = {'Content-type': 'application/json', 'accept': 'application/json'}
+
+ # create collection
+ name = event['payload']['name']
+ data = {'name': name}
+
+ if 'descriptions' in event['payload'].keys():
+ data['description'] = event['payload']['descriptions']
+ if 'space' in event['payload'].keys():
+ data['space'] = event['payload']['space']
+
+ r = requests.post('https://socialmediamacroscope.ncsa.illinois.edu/clowder/api/collections',
+ data=json.dumps(data),
+ headers=headers,
+ auth=auth)
+ if r.status_code != 200:
+ resp = {'info': r.text, 'id': 'null'}
+ else:
+ resp = {'info': 'successfully created the new collection!', 'id': r.json()['id']}
+
+ except BaseException as e:
+ resp = {
+ 'ERROR':
+ {
+ 'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(resp))
+
+ return resp
+
+
+if __name__ == '__main__':
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+
+ # pass the queue name in environment variable
+ queue = os.environ['QUEUE_NAME']
+
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=rabbitmq_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/clowder_create_collection/requirement.txt b/rabbitmq/clowder_create_collection/requirement.txt
new file mode 100644
index 0000000..b40e7d7
--- /dev/null
+++ b/rabbitmq/clowder_create_collection/requirement.txt
@@ -0,0 +1,2 @@
+requests>=2.22.0
+pika>=1.1.0
\ No newline at end of file
diff --git a/rabbitmq/clowder_create_dataset/command.txt b/rabbitmq/clowder_create_dataset/command.txt
new file mode 100644
index 0000000..ffe00a6
--- /dev/null
+++ b/rabbitmq/clowder_create_dataset/command.txt
@@ -0,0 +1,2 @@
+# command to build and run this container
+docker build -t socialmediamacroscope/clowder_create_dataset:latest .
\ No newline at end of file
diff --git a/rabbitmq/clowder_create_dataset/dockerfile b/rabbitmq/clowder_create_dataset/dockerfile
new file mode 100644
index 0000000..3a23fb2
--- /dev/null
+++ b/rabbitmq/clowder_create_dataset/dockerfile
@@ -0,0 +1,8 @@
+FROM python:3.7
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+COPY . ./
+
+RUN pip install --no-cache-dir -r requirement.txt
\ No newline at end of file
diff --git a/rabbitmq/clowder_create_dataset/rabbitmq_handler.py b/rabbitmq/clowder_create_dataset/rabbitmq_handler.py
new file mode 100644
index 0000000..0f84f6d
--- /dev/null
+++ b/rabbitmq/clowder_create_dataset/rabbitmq_handler.py
@@ -0,0 +1,90 @@
+import json
+import os
+import traceback
+
+import pika
+import requests
+
+
+def rabbitmq_handler(ch, method, properties, body):
+ try:
+ # basic fields
+ event = json.loads(body)
+ auth = (event['username'], event['password'])
+ headers = {'Content-type': 'application/json', 'accept': 'application/json'}
+
+ # create dataset
+ title = event['payload']['title']
+ data = {'name': title, 'access': 'PRIVATE'}
+
+ if 'collection' in event['payload'].keys():
+ data['collection'] = event['payload']['collection']
+ if 'space' in event['payload'].keys():
+ data['space'] = event['payload']['space']
+ if 'descriptions' in event['payload'].keys():
+ data['description'] = event['payload']['descriptions']
+
+ r = requests.post('https://socialmediamacroscope.ncsa.illinois.edu/clowder/api/datasets/createempty',
+ data=json.dumps(data),
+ headers=headers,
+ auth=auth)
+ if r.status_code != 200:
+ resp = {'info': r.text, 'id': 'null'}
+ else:
+
+ dataset_id = r.json()['id']
+ resp = {'info': 'successfully created the new dataset!', 'id': dataset_id }
+
+ # if metadata exist, add metada
+ if 'metadata' in event['payload'].keys():
+ metadata = event['payload']['metadata']
+ r = requests.post(
+ 'https://socialmediamacroscope.ncsa.illinois.edu/clowder/api/datasets/' + dataset_id + '/metadata',
+ data=json.dumps(metadata),
+ headers=headers,
+ auth=auth)
+ # if fail, return fail info and dataset id
+ if r.status_code != 200:
+ resp['info'] = r.text
+
+ # if tag exist, add tags
+ if 'tags' in event['payload'].keys():
+ tags = {'tags': event['payload']['tags']}
+ r = requests.post(
+ 'https://socialmediamacroscope.ncsa.illinois.edu/clowder/api/datasets/' + dataset_id + '/tags',
+ data=json.dumps(tags),
+ headers=headers,
+ auth=auth)
+ # if fail, return fail info and dataset id
+ if r.status_code != 200:
+ resp['info'] = r.text
+
+ except BaseException as e:
+ resp = {
+ 'ERROR':
+ {
+ 'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(resp))
+
+ return resp
+
+
+if __name__ == '__main__':
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+
+ # pass the queue name in environment variable
+ queue = os.environ['QUEUE_NAME']
+
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=rabbitmq_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/clowder_create_dataset/requirement.txt b/rabbitmq/clowder_create_dataset/requirement.txt
new file mode 100644
index 0000000..b40e7d7
--- /dev/null
+++ b/rabbitmq/clowder_create_dataset/requirement.txt
@@ -0,0 +1,2 @@
+requests>=2.22.0
+pika>=1.1.0
\ No newline at end of file
diff --git a/rabbitmq/clowder_create_space/command.txt b/rabbitmq/clowder_create_space/command.txt
new file mode 100644
index 0000000..db2d7a0
--- /dev/null
+++ b/rabbitmq/clowder_create_space/command.txt
@@ -0,0 +1,2 @@
+# command to build and run this container
+docker build -t socialmediamacroscope/clowder_create_space:latest .
\ No newline at end of file
diff --git a/rabbitmq/clowder_create_space/dockerfile b/rabbitmq/clowder_create_space/dockerfile
new file mode 100644
index 0000000..3a23fb2
--- /dev/null
+++ b/rabbitmq/clowder_create_space/dockerfile
@@ -0,0 +1,8 @@
+FROM python:3.7
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+COPY . ./
+
+RUN pip install --no-cache-dir -r requirement.txt
\ No newline at end of file
diff --git a/rabbitmq/clowder_create_space/rabbitmq_handler.py b/rabbitmq/clowder_create_space/rabbitmq_handler.py
new file mode 100644
index 0000000..8f86eab
--- /dev/null
+++ b/rabbitmq/clowder_create_space/rabbitmq_handler.py
@@ -0,0 +1,106 @@
+import json
+import os
+import traceback
+
+import pika
+import requests
+
+
+def rabbitmq_handler(ch, method, properties, body):
+ try:
+ # basic fields
+ event = json.loads(body)
+ auth = (event['username'], event['password'])
+ headers = {'Content-type': 'application/json', 'accept': 'application/json'}
+
+ # private method add user to space
+ def _addUser(sp_id, usr_id, role):
+ data = {'rolesandusers': {role: usr_id}}
+ r = requests.post(
+ 'https://socialmediamacroscope.ncsa.illinois.edu/clowder/api/spaces/' + sp_id + '/updateUsers',
+ data=json.dumps(data),
+ headers=headers,
+ auth=auth)
+ if r.status_code != 200:
+ return None
+ else:
+ return r.text
+
+ # private method to identify myself
+ def _findMyself(username):
+ r = requests.get('https://socialmediamacroscope.ncsa.illinois.edu/clowder/api/me',
+ auth=auth)
+
+ if r.status_code != 200:
+ print('findMyself')
+ print(r.text)
+ return None
+ else:
+ return r.json()['id']
+
+ # create collection
+ name = event['payload']['name']
+ data = {'name': name}
+
+ if 'descriptions' in event['payload'].keys():
+ data['description'] = event['payload']['descriptions']
+ else:
+ # important: description seems to be an required parameter
+ data['description'] = ''
+
+ r = requests.post('https://socialmediamacroscope.ncsa.illinois.edu/clowder/api/spaces',
+ data=json.dumps(data),
+ headers=headers,
+ auth=auth)
+
+ if r.status_code != 200:
+ resp = {'info': r.text, 'id': 'null'}
+
+ else:
+ resp = {'info': 'successfully created the new space!', 'id': r.json()['id']}
+
+ # identify myself
+ my_id = _findMyself(event['username'])
+
+ if my_id == None:
+ resp['info'] = 'cannot add yourself/person to this space, please to go clowder to add'
+
+ # add myself as Admin
+ if _addUser(r.json()['id'], my_id, 'Admin') == None:
+ resp ['info'] = 'cannot add yourself/person to this space, please to go clowder to add'
+
+ # add other people as Editor
+ if 'usr_ids' in event['payload'].keys():
+ if _addUser(r.json()['id'], event['payload']['usr_ids'], 'Editor') == None:
+ resp['info'] = 'cannot add yourself/person to this space, please to go clowder to add'
+
+
+ except BaseException as e:
+ resp = {
+ 'ERROR':
+ {
+ 'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(resp))
+
+ return resp
+
+
+if __name__ == '__main__':
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+
+ # pass the queue name in environment variable
+ queue = os.environ['QUEUE_NAME']
+
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=rabbitmq_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/clowder_create_space/requirement.txt b/rabbitmq/clowder_create_space/requirement.txt
new file mode 100644
index 0000000..b40e7d7
--- /dev/null
+++ b/rabbitmq/clowder_create_space/requirement.txt
@@ -0,0 +1,2 @@
+requests>=2.22.0
+pika>=1.1.0
\ No newline at end of file
diff --git a/rabbitmq/clowder_list/command.txt b/rabbitmq/clowder_list/command.txt
new file mode 100644
index 0000000..84fbeed
--- /dev/null
+++ b/rabbitmq/clowder_list/command.txt
@@ -0,0 +1,2 @@
+# command to build and run this container
+docker build -t socialmediamacroscope/clowder_list:latest .
\ No newline at end of file
diff --git a/rabbitmq/clowder_list/dockerfile b/rabbitmq/clowder_list/dockerfile
new file mode 100644
index 0000000..3a23fb2
--- /dev/null
+++ b/rabbitmq/clowder_list/dockerfile
@@ -0,0 +1,8 @@
+FROM python:3.7
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+COPY . ./
+
+RUN pip install --no-cache-dir -r requirement.txt
\ No newline at end of file
diff --git a/rabbitmq/clowder_list/rabbitmq_handler.py b/rabbitmq/clowder_list/rabbitmq_handler.py
new file mode 100644
index 0000000..26db518
--- /dev/null
+++ b/rabbitmq/clowder_list/rabbitmq_handler.py
@@ -0,0 +1,64 @@
+import json
+import os
+import traceback
+
+import pika
+import requests
+
+
+def rabbitmq_handler(ch, method, properties, body):
+ try:
+ # basic fields
+ event = json.loads(body)
+ auth = (event['username'], event['password'])
+
+ if event['item'] == 'dataset':
+ r = requests.get('https://socialmediamacroscope.ncsa.illinois.edu/clowder/api/datasets',
+ auth=auth)
+ elif event['item'] == 'collection':
+ r = requests.get(
+ 'https://socialmediamacroscope.ncsa.illinois.edu/clowder/api/collections/allCollections',
+ auth=auth)
+ elif event['item'] == 'space':
+ r = requests.get('https://socialmediamacroscope.ncsa.illinois.edu/clowder/api/spaces/canEdit',
+ auth=auth)
+ # use a global key here be careful of this information!!
+ elif event['item'] == 'user':
+ r = requests.get('https://socialmediamacroscope.ncsa.illinois.edu/clowder/api/users?key=Globalkey')
+ else:
+ return {'info': 'cannot list ' + event['item'], 'data': ['error']}
+
+ if r.status_code != 200:
+ resp = {'info': r.text, 'data': ['error']}
+ else:
+ resp = {'info': 'successfully fetched list of dataset', 'data': r.json()}
+
+ except BaseException as e:
+ resp = {
+ 'ERROR':
+ {
+ 'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(resp))
+
+ return resp
+
+
+if __name__ == '__main__':
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+
+ # pass the queue name in environment variable
+ queue = os.environ['QUEUE_NAME']
+
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=rabbitmq_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/clowder_list/requirement.txt b/rabbitmq/clowder_list/requirement.txt
new file mode 100644
index 0000000..b40e7d7
--- /dev/null
+++ b/rabbitmq/clowder_list/requirement.txt
@@ -0,0 +1,2 @@
+requests>=2.22.0
+pika>=1.1.0
\ No newline at end of file
diff --git a/rabbitmq/clowder_upload_file/clear_cache.sh b/rabbitmq/clowder_upload_file/clear_cache.sh
new file mode 100644
index 0000000..640c2ac
--- /dev/null
+++ b/rabbitmq/clowder_upload_file/clear_cache.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+CACHEDIR=/tmp
+
+# delete file older than 4 hours
+find "$CACHEDIR" -maxdepth 1 -mindepth 1 -type d -mmin +240 -print0 |
+ while IFS= read -d '' -r dir; do
+ rm -rf "$dir"
+ done
\ No newline at end of file
diff --git a/rabbitmq/clowder_upload_file/clear_cache_cron b/rabbitmq/clowder_upload_file/clear_cache_cron
new file mode 100644
index 0000000..0510c51
--- /dev/null
+++ b/rabbitmq/clowder_upload_file/clear_cache_cron
@@ -0,0 +1 @@
+0 * * * * /bin/bash /scripts/clear_cache.sh
diff --git a/rabbitmq/clowder_upload_file/command.txt b/rabbitmq/clowder_upload_file/command.txt
new file mode 100644
index 0000000..4b24d2a
--- /dev/null
+++ b/rabbitmq/clowder_upload_file/command.txt
@@ -0,0 +1,2 @@
+# command to build and run this container
+docker build -t socialmediamacroscope/clowder_upload_file:latest .
\ No newline at end of file
diff --git a/rabbitmq/clowder_upload_file/dockerfile b/rabbitmq/clowder_upload_file/dockerfile
new file mode 100644
index 0000000..34ef036
--- /dev/null
+++ b/rabbitmq/clowder_upload_file/dockerfile
@@ -0,0 +1,15 @@
+FROM python:3.7
+
+RUN apt-get -qq -y update && apt-get -qq -y install cron
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+COPY . ./
+
+RUN pip install --no-cache-dir -r requirement.txt
+
+# cron job clean tmp folder
+RUN chmod u+x ./clear_cache.sh
+RUN chmod 0644 ./clear_cache_cron
+RUN crontab ./clear_cache_cron
\ No newline at end of file
diff --git a/rabbitmq/clowder_upload_file/rabbitmq_handler.py b/rabbitmq/clowder_upload_file/rabbitmq_handler.py
new file mode 100644
index 0000000..8dc3545
--- /dev/null
+++ b/rabbitmq/clowder_upload_file/rabbitmq_handler.py
@@ -0,0 +1,142 @@
+import json
+import os
+import traceback
+from urllib.parse import urlparse
+
+import pika
+import requests
+import writeToS3 as s3
+
+
+def get_config_json(config_url):
+ # download config data to json
+ # parse url to extract filename, localPath, and awsPath
+ path = urlparse(config_url).path.split('/')
+ filename = path[-1]
+ localPath = os.path.join('/tmp', path[2])
+ if not os.path.exists(localPath):
+ os.makedirs(localPath)
+ awsPath = '/'.join(path[2:-1])
+ try:
+ s3.downloadToDisk(filename, localPath, awsPath)
+ except:
+ raise ValueError('Cannot find file:' + os.path.join(localPath, filename) + ' in the remote storage!')
+
+ with open(os.path.join(localPath, filename), 'r') as f:
+ return json.load(f)
+
+
+def rabbitmq_handler(ch, method, properties, body):
+ try:
+ # basic fields
+ event = json.loads(body)
+ auth = (event['username'], event['password'])
+ dataset_id = event['payload']['dataset_id']
+
+ config_url = event['payload']['configuration']
+ config_json = get_config_json(config_url)
+
+ # upload files
+ file_ids = []
+ for file in event['payload']['files']:
+ # parse url to extract filename, localPath, and awsPath
+ path = urlparse(file['url']).path.split('/')
+ filename = path[-1]
+ localPath = os.path.join('/tmp', path[2])
+ if not os.path.exists(localPath):
+ os.makedirs(localPath)
+ awsPath = '/'.join(path[2:-1])
+ try:
+ s3.downloadToDisk(filename, localPath, awsPath)
+ except:
+ raise ValueError('Cannot find file:' + os.path.join(localPath, filename) + ' in the remote storage!')
+
+ r = requests.post(
+ 'https://socialmediamacroscope.ncsa.illinois.edu/clowder/api/uploadToDataset/' + dataset_id +
+ '?extract=true',
+ files=[('File', open(os.path.join(localPath, filename), 'rb'))],
+ auth=auth)
+
+ if r.status_code != 200:
+ raise ValueError("cannot upload these files to dataset: " +
+ dataset_id + ". error:" + r.text)
+ else:
+ file_ids.append(r.json()['id'])
+
+ # add config file to metadata (default)
+ config_metadata_r = requests.post('https://socialmediamacroscope.ncsa.illinois.edu' +
+ '/clowder/api/files/' + r.json()['id'] + '/metadata',
+ data=json.dumps(config_json),
+ headers={"Content-Type": "application/json"},
+ auth=auth)
+ if config_metadata_r.status_code != 200:
+ raise ValueError('cannot add configuration metadata to this file: ' + r.json()['id'] + ". error: " +
+ config_metadata_r.text)
+
+ # add tags
+ if 'tags' in file.keys():
+ tag_payload = json.dumps({'tags': file['tags']})
+ tag_r = requests.post('https://socialmediamacroscope.ncsa.illinois.edu/' +
+ 'clowder/api/files/' + r.json()['id'] + '/tags',
+ data=tag_payload,
+ headers={"Content-Type": "application/json"},
+ auth=auth)
+ if tag_r.status_code != 200:
+ raise ValueError('cannot add tags to this file: ' + r.json()['id'] + ". error: " + tag_r.text)
+
+ # add metadata
+ if 'metadata' in file.keys():
+ metadata_payload = json.dumps(file['metadata'])
+ metadata_r = requests.post('https://socialmediamacroscope.ncsa.illinois.edu' +
+ '/clowder/api/files/' + r.json()['id'] + '/metadata',
+ data=metadata_payload,
+ headers={"Content-Type": "application/json"},
+ auth=auth)
+ if metadata_r.status_code != 200:
+ raise ValueError('cannot add metadata to this file: ' + r.json()['id'] + ". error: " +
+ metadata_r.text)
+
+ # add description
+ if 'descriptions' in file.keys():
+ description_payload = json.dumps({'description': file['descriptions']})
+ description_r = requests.put('https://socialmediamacroscope.ncsa.illinois.edu/clowder' +
+ '/api/files/' + r.json()['id'] + '/updateDescription',
+ data=description_payload,
+ headers={"Content-Type": "application/json"},
+ auth=auth)
+ if description_r.status_code != 200:
+ raise ValueError(
+ 'cannot add descriptions to this file: ' + r.json()['id'] + ". error: " + description_r.text)
+
+ resp = {'info': 'You have successfully uploaded all the files to your specified dataset!',
+ 'ids': file_ids}
+
+ except BaseException as e:
+ resp = {
+ 'ERROR':
+ {
+ 'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(resp))
+
+ return resp
+
+
+if __name__ == '__main__':
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+
+ # pass the queue name in environment variable
+ queue = os.environ['QUEUE_NAME']
+
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=rabbitmq_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/clowder_upload_file/requirement.txt b/rabbitmq/clowder_upload_file/requirement.txt
new file mode 100644
index 0000000..6486309
--- /dev/null
+++ b/rabbitmq/clowder_upload_file/requirement.txt
@@ -0,0 +1,3 @@
+requests>=2.22.0
+pika>=1.1.0
+boto3>=1.6.11
\ No newline at end of file
diff --git a/rabbitmq/clowder_upload_file/writeToS3.py b/rabbitmq/clowder_upload_file/writeToS3.py
new file mode 100644
index 0000000..761907a
--- /dev/null
+++ b/rabbitmq/clowder_upload_file/writeToS3.py
@@ -0,0 +1,86 @@
+import boto3
+import mimetypes
+import os
+from botocore.client import Config
+
+client = boto3.client('s3', endpoint_url='http://' + os.environ['HOST_IP'] + ':9000',
+ aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'],
+ config=Config(signature_version='s3v4'))
+
+bucket_name = os.environ['BUCKET_NAME']
+
+def upload(localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType':'application/octet-stream'}
+ else:
+ extra_args = {'ContentType':content_type}
+
+ client.upload_file(os.path.join(localpath, filename),
+ bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+
+def createDirectory(DirectoryName):
+ client.put_object(Bucket=bucket_name, Key=DirectoryName)
+
+
+def generate_downloads(remotepath, filename):
+ url = client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+
+def downloadToDisk(filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ client.download_fileobj(bucket_name,
+ os.path.join(remotepath, filename), f)
+
+
+def getObject(remoteKey):
+ obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
+
+
+def putObject(body, remoteKey):
+ # bytes or seekable file-like object
+ obj = client.put_object(Bucket=bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+
+# def checkExist(remotepath, filename):
+# results = client.list_objects(Bucket=bucket_name, Prefix=os.path.join(remotepath, filename))
+# print(results)
+# if 'Contents' in results:
+# return True
+# else:
+# return False
+
+def listDir(remoteClass):
+ objects = client.list_objects(Bucket=bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+
+def listFiles(foldernames):
+ objects = client.list_objects(Bucket=bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/batch/RedditComment.py b/rabbitmq/collect_reddit_comment/RedditComment.py
similarity index 50%
rename from batch/RedditComment.py
rename to rabbitmq/collect_reddit_comment/RedditComment.py
index 26b6b74..6edb24a 100644
--- a/batch/RedditComment.py
+++ b/rabbitmq/collect_reddit_comment/RedditComment.py
@@ -1,13 +1,19 @@
-import praw
-import csv
import argparse
-import pandas as pd
+import csv
import os
+import shutil
+import uuid
import zipfile
+
import notification as n
-import deleteDir as d
+import pandas as pd
+import praw
import writeToS3 as s3
-import uuid
+
+
+def deletedir(dir):
+ shutil.rmtree(dir)
+
def getFolderSize(folder):
total_size = os.path.getsize(folder)
@@ -19,31 +25,30 @@ def getFolderSize(folder):
total_size += getFolderSize(itempath)
return total_size
+
def zipdir(path, ziph):
# ziph is zipfile handle
for root, dirs, files in os.walk(path):
for file in files:
- ziph.write(os.path.join(root, file),file)
+ ziph.write(os.path.join(root, file), file)
-def bfs(submission,id,directory):
- # check size of the current folder
+def bfs(submission, id, directory):
# expand comments
submission.comments.replace_more(limit=None)
comment_queue = submission.comments[:] # Seed with top-level
- comments_no_order = [['author','body','created_utc','id','link_id',
- 'parent_id', 'score', 'subreddit_display_name','subreddit_name_prefixed','subreddit_id']]
+ comments_no_order = [['author', 'body', 'created_utc', 'id', 'link_id',
+ 'parent_id', 'score', 'subreddit_display_name', 'subreddit_name_prefixed', 'subreddit_id']]
while comment_queue:
comment = comment_queue.pop(0)
comments_no_order.append([str(comment.author),
- comment.body, comment.created_utc, comment.id, comment.link_id,
- comment.parent_id, comment.score, comment.subreddit.display_name,
- comment.subreddit_name_prefixed, comment.subreddit_id])
+ comment.body, comment.created_utc, comment.id, comment.link_id,
+ comment.parent_id, comment.score, comment.subreddit.display_name,
+ comment.subreddit_name_prefixed, comment.subreddit_id])
comment_queue.extend(comment.replies)
-
-
+
# save to csv
- with open( directory + id + '.csv','w',newline="",encoding='utf-8') as f:
+ with open(os.path.join(directory, id + '.csv'), 'w', newline="", encoding='utf-8') as f:
writer = csv.writer(f, delimiter=',')
for c in comments_no_order:
try:
@@ -51,45 +56,34 @@ def bfs(submission,id,directory):
except:
print('encoding error')
- MB = getFolderSize(DIR)
- if MB >= 400*1024*1024: # 400 MB
- return False
- else:
- return True
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Processing...")
parser.add_argument('--email', required=True)
- parser.add_argument('--remoteReadPath',required=True)
- parser.add_argument('--s3FolderName',required=True)
+ parser.add_argument('--remoteReadPath', required=True)
+ parser.add_argument('--s3FolderName', required=True)
parser.add_argument('--sessionURL', required=True)
args = parser.parse_args()
uid = str(uuid.uuid4())
- awsPath = args.s3FolderName + '/NW/networkx/' + uid +'/'
- localSavePath = '/tmp/' + args.s3FolderName + '/NW/networkx/' + uid + '/'
- localReadPath = '/tmp/' + args.s3FolderName + '/' + uid + '/'
-
- # load url and id
- temp_dir = '/tmp/' + args.s3FolderName + '/' + uid + '/'
+ temp_dir = os.path.join('/tmp', args.s3FolderName, uid)
if not os.path.exists(temp_dir):
os.makedirs(temp_dir)
-
+
# configure output directory
# save it in download/temp/xxx-xxxxxxxxxxxxx-xxxxx/aww-comments
-
- file = args.remoteReadPath.split('/')[-2]
- comments_folder = temp_dir + file+ '-comments/'
+
+ file = args.remoteReadPath.split('/')[-2]
+ fname_zip = file + '.zip'
+ comments_folder = os.path.join(temp_dir, file + '-comments')
if not os.path.exists(comments_folder):
os.makedirs(comments_folder)
- fname_zip = file + '.zip'
-
- s3.downloadToDisk(filename=file+'.csv',localpath=temp_dir, remotepath=args.remoteReadPath)
+ s3.downloadToDisk(filename=file + '.csv', localpath=temp_dir, remotepath=args.remoteReadPath)
Array = []
try:
- with open(temp_dir + file + '.csv','r',encoding='utf-8') as f:
+ with open(os.path.join(temp_dir, file + '.csv'), 'r', encoding='utf-8') as f:
reader = csv.reader(f)
try:
for row in reader:
@@ -98,15 +92,15 @@ def bfs(submission,id,directory):
pass
except:
- with open(temp_dir + file + '.csv','r',encoding="ISO-8859-1") as f:
+ with open(os.path.join(temp_dir, file + '.csv'), 'r', encoding="ISO-8859-1") as f:
reader = csv.reader(f)
try:
for row in reader:
Array.append(row)
except Exception as e:
pass
-
- df = pd.DataFrame(Array[1:],columns=Array[0])
+
+ df = pd.DataFrame(Array[1:], columns=Array[0])
headers = df.columns.values.tolist()
if 'permalink' in headers and 'id' in headers:
urls = df['permalink'].dropna().astype('str').tolist()
@@ -115,51 +109,35 @@ def bfs(submission,id,directory):
urls = df['_source.permalink'].dropna().astype('str').tolist()
ids = df['_source.id'].dropna().astype('str').tolist()
else:
- d.deletedir('/tmp')
- n.notification(args.email,case=0,filename='',links='',sessionURL=args.sessionURL)
- exit(code='Incomplete information')
+ deletedir('/tmp')
+ n.notification(args.email, case=0, filename='', links='', sessionURL=args.sessionURL)
+ raise ValueError('The Reddit post collection provided does not have permalink and/or id in it.')
# praw construct submission
reddit = praw.Reddit(user_agent='Comment Extraction (by /u/USERNAME)',
- client_id='***REMOVED***', client_secret="***REMOVED***")
+ client_id=os.environ['REDDIT_CLIENT_ID'], client_secret=os.environ['REDDIT_CLIENT_SECRET'])
-
# loop through the id and store their comments
- for url,id in zip(urls,ids):
+ for url, id in zip(urls, ids):
url = "https://www.reddit.com" + url
try:
submission = reddit.submission(url=url)
- if not bfs(submission,id,comments_folder):
- # zip goes here
- zipf = zipfile.ZipFile(temp_dir + fname_zip, 'w', zipfile.ZIP_DEFLATED)
- zipdir(comments_folder + '/', zipf)
- zipf.close()
-
- # upload this zip to the s3 corresponding folder
- s3.upload(temp_dir, args.remoteReadPath, fname_zip)
- url = s3.generate_downloads(args.remoteReadPath, fname_zip)
- # delete the files
- d.deletedir('/tmp')
- # send out email notification
- n.notification(args.email,case=1,filename=args.remoteReadPath,links=url,sessionURL=args.sessionURL)
- exit(code='Lack of disk space')
+ bfs(submission, id, comments_folder)
except:
- # escape those can't be found in url
- pass
+ print("The url " + url + " is not valid.")
# success and send email notification
# zip goes here
- zipf = zipfile.ZipFile(temp_dir + fname_zip, 'w')
- zipdir(comments_folder + '/', zipf)
+ zipf = zipfile.ZipFile(os.path.join(temp_dir, fname_zip), 'w')
+ zipdir(comments_folder, zipf)
zipf.close()
-
+
# upload this zip to the s3 corresponding folder
s3.upload(temp_dir, args.remoteReadPath, fname_zip)
url = s3.generate_downloads(args.remoteReadPath, fname_zip)
+
# delete the files
- d.deletedir('/tmp')
- # send out email notification
- n.notification(args.email,case=2,filename=args.remoteReadPath,links=url,sessionURL=args.sessionURL)
-
-
+ deletedir('/tmp')
+ # send out email notification
+ n.notification(args.email, case=2, filename=args.remoteReadPath, links=url, sessionURL=args.sessionURL)
diff --git a/rabbitmq/collect_reddit_comment/clear_cache.sh b/rabbitmq/collect_reddit_comment/clear_cache.sh
new file mode 100644
index 0000000..640c2ac
--- /dev/null
+++ b/rabbitmq/collect_reddit_comment/clear_cache.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+CACHEDIR=/tmp
+
+# delete file older than 4 hours
+find "$CACHEDIR" -maxdepth 1 -mindepth 1 -type d -mmin +240 -print0 |
+ while IFS= read -d '' -r dir; do
+ rm -rf "$dir"
+ done
\ No newline at end of file
diff --git a/rabbitmq/collect_reddit_comment/clear_cache_cron b/rabbitmq/collect_reddit_comment/clear_cache_cron
new file mode 100644
index 0000000..0510c51
--- /dev/null
+++ b/rabbitmq/collect_reddit_comment/clear_cache_cron
@@ -0,0 +1 @@
+0 * * * * /bin/bash /scripts/clear_cache.sh
diff --git a/rabbitmq/collect_reddit_comment/command.txt b/rabbitmq/collect_reddit_comment/command.txt
new file mode 100644
index 0000000..6679ca2
--- /dev/null
+++ b/rabbitmq/collect_reddit_comment/command.txt
@@ -0,0 +1,2 @@
+# command to build and run this container
+docker build -t socialmediamacroscope/collect_reddit_comment:latest .
\ No newline at end of file
diff --git a/rabbitmq/collect_reddit_comment/dockerfile b/rabbitmq/collect_reddit_comment/dockerfile
new file mode 100644
index 0000000..2dc8a1f
--- /dev/null
+++ b/rabbitmq/collect_reddit_comment/dockerfile
@@ -0,0 +1,21 @@
+FROM ubuntu:18.04
+
+RUN apt-get -qq -y update && apt-get -qq -y install cron
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+# copy paste python scripts
+COPY . ./
+
+# install dependency libraries
+RUN apt-get update
+RUN apt-get -y install python3-pip
+
+# install dependency libraries and download required data
+RUN pip3 install -r requirement.txt
+
+# cron job clean tmp folder
+RUN chmod u+x ./clear_cache.sh
+RUN chmod 0644 ./clear_cache_cron
+RUN crontab ./clear_cache_cron
\ No newline at end of file
diff --git a/rabbitmq/collect_reddit_comment/notification.py b/rabbitmq/collect_reddit_comment/notification.py
new file mode 100644
index 0000000..176e095
--- /dev/null
+++ b/rabbitmq/collect_reddit_comment/notification.py
@@ -0,0 +1,170 @@
+import smtplib
+from email.mime.multipart import MIMEMultipart
+from email.mime.text import MIMEText
+import os
+
+
+def notification(toaddr,case,filename,links,sessionURL):
+ # toaddr -- email address to send to
+ # text content to send
+ # subject
+ host = os.environ.get('EMAIL_HOST')
+ port = os.environ.get('EMAIL_PORT')
+ fromaddr = os.environ.get('EMAIL_FROM_ADDRESS')
+ password = os.environ.get('EMAIL_PASSWORD')
+
+ if host is not None and host != "" and \
+ port is not None and port != "" and\
+ fromaddr is not None and fromaddr != "" and \
+ password is not None and password != "":
+ # map the fpath component to History panel names
+ # local/NLP/sentiment/xxxxxxxxxxxxxxxxxxxxxxxx/ => [local,nlp,sentiment,xxxx,space]
+ # [local, GraphQL, reddit-post, aww, space]
+ # 0 1 2 3
+ if filename != '':
+ fpath = filename.split('/')
+
+ if fpath[1] == 'GraphQL':
+ fpath[1] = 'Social Media Data'
+ elif fpath[1] == 'NLP':
+ fpath[1] = 'Nature Language Processing'
+ elif fpath[1] == 'ML':
+ fpath[1] = 'Machine Learning ML'
+ elif fpath[1] == 'NW':
+ fpath[1] = 'Network Visualization and Analysis'
+
+ if fpath[2] == 'reddit-Post':
+ fpath[2] = 'Subreddit Posts Title'
+ elif fpath[2] == 'reddit-Historical-Post':
+ fpath[2] = 'Reddit Historical Post'
+ elif fpath[2] == 'reddit-Search':
+ fpath[2] = 'Reddit Search Posts Title'
+ elif fpath[2] == 'sentiment':
+ fpath[2] = 'Sentiment Analysis'
+ elif fpath[2] == 'preprocessing':
+ fpath[2] = 'NLP Preprocessing'
+ elif fpath[2] == 'networkx':
+ fpath[2] = 'Python NetworkX'
+ elif fpath[2] == 'classification':
+ fpath[2] = 'Text Classification'
+
+ if case == 0 or case == 'comment-fail':
+ html = """
+
+
+
+
+
Dear user (session ID: """ + fpath[0] + """),
+
Your Reddit Comment collection has been terminated.
+
We are using the id and permalink from your Reddit Submission dataset
+ to collect comments and replies. It is most likely you have provide an incomplete Reddit Submission dataset missing these two fields.
+
Please try to reproduce the Reddit Submission with id and permalink, or switch to another dataset.
+
Go to your session...
+
+
Best Regards,
+
Social Media Macroscope - SMILE
+
+
+
+ """
+ subject = 'Your Reddit Comment collection has failed...'
+ elif case == 1 or case == 'comment-terminate':
+ html = """
+
+
+
+
Dear user (session ID: """ + fpath[0] + """),
+
Your Reddit Comment collection is exceeding 400 Megabyte, and is terminated due to lack of disk space.
+
+ - You have requested comments and replies for the Reddit Submission (Post):""" + fpath[3] + """. The partial comments we manage to collect and save will be compressed for you in an .zip file named """ + fpath[3] + """-comments.zip (click)
+ - In order to download this file, you need to first locate the original submission in the HISTORY page in SMILE.
+ Go to your session...
+
+ - Go to History
+ - --> under """ + fpath[1] + """
+ - --> click """ + fpath[2] + """
+ - --> then find """ + fpath[3] + """
+ - --> click VIEW
+ - --> in the Overview table under the downloadables column, you will find these comments in a zip file.
+
+
+
+ """
+ subject = 'Your Reddit Comment collection has been terminated...'
+ elif case == 2 or case == 'comment-success':
+ html = """
+
+
+
+
Dear user (session ID: """ + fpath[0] + """),
+
Your Reddit Comment collection is ready for you!
+
+ - You have requested comments and replies for the Reddit Submission (Post):""" + fpath[3] + """. It will be compressed for you in an .zip file named """+ fpath[3] +"""-comments.zip
+ - In order to download this file, you need to first locate the original submission in the HISTORY page in SMILE.
+ Go to your session...
+
+ - Go to History
+ - --> under """ + fpath[1] +"""
+ - --> click """ + fpath[2] + """
+ - --> then find """ + fpath[3] + """
+ - --> click VIEW
+ - --> in the Overview table under the downloadables column, you will find these comments in a zip file.
+
+
+
+
Best Regards,
+
Social Media Macroscope - SMILE
+
+
+ """
+ subject = 'Your Reddit Comment collection is completed!'
+ elif case == 3 or case == 'analytics-success':
+ list_html = ''
+ for key in links.keys():
+ list_html += '' + key + ''
+
+ html = """
+
+
+
+
Dear user (session ID: """ + fpath[0] + """),
+
Your """ + fpath[2] + """ results are ready for you! (job ID: """ + fpath[3] + """)
+
+ - You can view the visualization and download the results at HISTORY page in SMILE.
+ Go to your session...
+
+ - Go to History
+ - --> under """ + fpath[1] + """ tab
+ - --> click """ + fpath[2] + """
+ - --> then find """ + fpath[3] + """
+ - --> click view
+
+
+ - You can also click the link below to download part of the results:
+
+
+
+
+
Best Regards,
+
Social Media Macroscope - SMILE
+
+
+ """
+ subject = 'Your ' + fpath[2] + ' computation is completed!'
+
+ msg = MIMEMultipart('alternative')
+ msg['Subject'] = subject
+ msg['From'] = fromaddr
+ msg['To'] = toaddr
+ msg.attach(MIMEText(html, 'html'))
+
+ server = smtplib.SMTP_SSL(host, port)
+ server.login(fromaddr, password)
+ server.sendmail(fromaddr, toaddr, msg.as_string())
+ server.quit()
+ else:
+ print("Invalid Email host setting! Skip notification.")
diff --git a/rabbitmq/collect_reddit_comment/postToAWSBatch.py b/rabbitmq/collect_reddit_comment/postToAWSBatch.py
new file mode 100644
index 0000000..3f2b946
--- /dev/null
+++ b/rabbitmq/collect_reddit_comment/postToAWSBatch.py
@@ -0,0 +1,23 @@
+import boto3
+import os
+
+client = boto3.client('batch', region_name="us-west-2", aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'])
+
+def invoke(jobDefinition, jobName, jobQueue, command):
+ command.extend(['--HOST_IP', os.environ['HOST_IP'],
+ '--AWS_ACCESSKEY', os.environ['AWS_ACCESSKEY'],
+ '--AWS_ACCESSKEYSECRET', os.environ['AWS_ACCESSKEYSECRET'],
+ '--BUCKET_NAME', os.environ['BUCKET_NAME']])
+ response = client.submit_job(
+ jobDefinition=jobDefinition,
+ jobName=jobName,
+ jobQueue=jobQueue,
+ containerOverrides={
+ 'vcpus': 2,
+ 'memory': 2048,
+ 'command': command
+ }
+ )
+
+ return response
\ No newline at end of file
diff --git a/rabbitmq/collect_reddit_comment/rabbitmq_handler.py b/rabbitmq/collect_reddit_comment/rabbitmq_handler.py
new file mode 100644
index 0000000..79aeaec
--- /dev/null
+++ b/rabbitmq/collect_reddit_comment/rabbitmq_handler.py
@@ -0,0 +1,60 @@
+import json
+import os
+import traceback
+import pika
+import postToAWSBatch
+
+
+def rabbitmq_handler(ch, method, properties, body):
+ try:
+ # determine if it goes to aws, lambda, or batch
+ params = json.loads(body)
+
+ if params['platform'] == 'aws-lambda':
+ raise ValueError("Not applicable to this algorithm.")
+
+ elif params['platform'] == 'lambda':
+ raise ValueError("Not applicable to this algorithm.")
+
+ elif params['platform'] == 'aws-batch':
+ postToAWSBatch.invoke(params['jobDefinition'],
+ params['jobName'],
+ params['jobQueue'],
+ params['command'])
+
+ elif params['platform'] == 'batch':
+ os.system(' '.join(params['command']))
+
+ else:
+ raise ValueError(
+ 'Rabbitmq Message Not Recognizable. '
+ 'It has to specify what platform to run: aws-lambda, aws-batch, lambda or batch.')
+
+ except BaseException as e:
+
+ msg = {'ERROR':
+ {'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(msg))
+
+ return None
+
+
+if __name__ == '__main__':
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+
+ # pass the queue name in environment variable
+ queue = os.environ['QUEUE_NAME']
+
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=rabbitmq_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/collect_reddit_comment/requirement.txt b/rabbitmq/collect_reddit_comment/requirement.txt
new file mode 100644
index 0000000..bd6e212
--- /dev/null
+++ b/rabbitmq/collect_reddit_comment/requirement.txt
@@ -0,0 +1,5 @@
+pika>=1.1.0
+requests==2.21.0
+pandas==0.24.1
+boto3==1.6.11
+praw>=6.5.1
\ No newline at end of file
diff --git a/rabbitmq/collect_reddit_comment/writeToS3.py b/rabbitmq/collect_reddit_comment/writeToS3.py
new file mode 100644
index 0000000..4fba54f
--- /dev/null
+++ b/rabbitmq/collect_reddit_comment/writeToS3.py
@@ -0,0 +1,77 @@
+import boto3
+import mimetypes
+import os
+from botocore.client import Config
+
+client = boto3.client('s3', endpoint_url='http://' + os.environ['HOST_IP'] + ':9000',
+ aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'],
+ config=Config(signature_version='s3v4'))
+
+bucket_name = os.environ['BUCKET_NAME']
+
+def upload(localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType':'application/octet-stream'}
+ else:
+ extra_args = {'ContentType':content_type}
+
+ client.upload_file(os.path.join(localpath, filename),
+ bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+
+def createDirectory(DirectoryName):
+ client.put_object(Bucket=bucket_name, Key=DirectoryName)
+
+
+def generate_downloads(remotepath, filename):
+ url = client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+
+def downloadToDisk(filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ client.download_fileobj(bucket_name,
+ os.path.join(remotepath, filename), f)
+
+
+def getObject(remoteKey):
+ obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
+
+
+def putObject(body, remoteKey):
+ # bytes or seekable file-like object
+ obj = client.put_object(Bucket=bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+def listDir(remoteClass):
+ objects = client.list_objects(Bucket=bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+
+def listFiles(foldernames):
+ objects = client.list_objects(Bucket=bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/rabbitmq/collect_timeline/collect_timeline.py b/rabbitmq/collect_timeline/collect_timeline.py
new file mode 100644
index 0000000..497db3b
--- /dev/null
+++ b/rabbitmq/collect_timeline/collect_timeline.py
@@ -0,0 +1,67 @@
+import json
+import os
+import pika
+import tweepy
+import writeToS3 as s3
+import traceback
+import csv
+
+
+def collect_timeline_handler(ch, method, properties, body):
+ try:
+ event = json.loads(body)
+ awsPath = os.path.join(event['sessionID'], event['screen_name'])
+ localSavePath = os.path.join('/tmp', event['sessionID'], event['screen_name'])
+ if not os.path.exists(localSavePath):
+ os.makedirs(localSavePath)
+
+ auth = tweepy.OAuthHandler(event['consumer_key'], event['consumer_secret'])
+ auth.set_access_token(event['access_token'], event['access_token_secret'])
+ api = tweepy.API(auth)
+
+ tweets = []
+ for status in tweepy.Cursor(api.user_timeline, screen_name=event['screen_name'], count=100,
+ tweet_mode="extended").items():
+ tweets.append([status._json['id'], status._json['full_text'].encode('utf-8', 'ignore').decode()])
+
+ if len(tweets) > 0:
+ fname = event['screen_name'] + '_tweets.txt'
+ with open(os.path.join(localSavePath, fname), 'w', encoding='utf-8', newline='') as f:
+ header = ['id', 'text']
+ writer = csv.writer(f, delimiter=",")
+ writer.writerow(header)
+ for row in tweets:
+ writer.writerow(row)
+
+ s3.upload(localSavePath, awsPath, fname)
+
+ data = {'url': s3.generate_downloads(awsPath, fname)}
+ else:
+ raise ValueError('This user\'s timeline (screen_name: ' + event['screen_name'] + ') is empty. There is nothing to analyze!')
+
+ except BaseException as e:
+ data = {'ERROR':
+ {
+ 'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(data))
+
+ return data
+
+
+if __name__ == '__main__':
+
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+ queue = "bae_collect_timeline"
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=collect_timeline_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/collect_timeline/command.txt b/rabbitmq/collect_timeline/command.txt
new file mode 100644
index 0000000..49b0702
--- /dev/null
+++ b/rabbitmq/collect_timeline/command.txt
@@ -0,0 +1,3 @@
+# command to build and run this container
+docker build -t collect_timeline:latest .
+docker run collect_timeline:latest
diff --git a/rabbitmq/collect_timeline/dockerfile b/rabbitmq/collect_timeline/dockerfile
new file mode 100644
index 0000000..3a23fb2
--- /dev/null
+++ b/rabbitmq/collect_timeline/dockerfile
@@ -0,0 +1,8 @@
+FROM python:3.7
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+COPY . ./
+
+RUN pip install --no-cache-dir -r requirement.txt
\ No newline at end of file
diff --git a/rabbitmq/collect_timeline/requirement.txt b/rabbitmq/collect_timeline/requirement.txt
new file mode 100644
index 0000000..c0d93cf
--- /dev/null
+++ b/rabbitmq/collect_timeline/requirement.txt
@@ -0,0 +1,3 @@
+pika>=1.1.0
+tweepy>=3.8.0
+boto3>=1.10.9
\ No newline at end of file
diff --git a/rabbitmq/collect_timeline/writeToS3.py b/rabbitmq/collect_timeline/writeToS3.py
new file mode 100644
index 0000000..761907a
--- /dev/null
+++ b/rabbitmq/collect_timeline/writeToS3.py
@@ -0,0 +1,86 @@
+import boto3
+import mimetypes
+import os
+from botocore.client import Config
+
+client = boto3.client('s3', endpoint_url='http://' + os.environ['HOST_IP'] + ':9000',
+ aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'],
+ config=Config(signature_version='s3v4'))
+
+bucket_name = os.environ['BUCKET_NAME']
+
+def upload(localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType':'application/octet-stream'}
+ else:
+ extra_args = {'ContentType':content_type}
+
+ client.upload_file(os.path.join(localpath, filename),
+ bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+
+def createDirectory(DirectoryName):
+ client.put_object(Bucket=bucket_name, Key=DirectoryName)
+
+
+def generate_downloads(remotepath, filename):
+ url = client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+
+def downloadToDisk(filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ client.download_fileobj(bucket_name,
+ os.path.join(remotepath, filename), f)
+
+
+def getObject(remoteKey):
+ obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
+
+
+def putObject(body, remoteKey):
+ # bytes or seekable file-like object
+ obj = client.put_object(Bucket=bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+
+# def checkExist(remotepath, filename):
+# results = client.list_objects(Bucket=bucket_name, Prefix=os.path.join(remotepath, filename))
+# print(results)
+# if 'Contents' in results:
+# return True
+# else:
+# return False
+
+def listDir(remoteClass):
+ objects = client.list_objects(Bucket=bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+
+def listFiles(foldernames):
+ objects = client.list_objects(Bucket=bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/rabbitmq/crimson_hexagon_monitors/command.txt b/rabbitmq/crimson_hexagon_monitors/command.txt
new file mode 100644
index 0000000..91a711f
--- /dev/null
+++ b/rabbitmq/crimson_hexagon_monitors/command.txt
@@ -0,0 +1 @@
+docker build -t socialmediamacroscope/crimson_hexagon_monitors:latest .
\ No newline at end of file
diff --git a/rabbitmq/crimson_hexagon_monitors/dockerfile b/rabbitmq/crimson_hexagon_monitors/dockerfile
new file mode 100644
index 0000000..dfff5aa
--- /dev/null
+++ b/rabbitmq/crimson_hexagon_monitors/dockerfile
@@ -0,0 +1,10 @@
+FROM python:3.7
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+# copy paste python scripts
+COPY . ./
+
+# install dependency libraries and download required data
+RUN pip install --no-cache-dir -r requirement.txt
diff --git a/rabbitmq/crimson_hexagon_monitors/rabbitmq_handler.py b/rabbitmq/crimson_hexagon_monitors/rabbitmq_handler.py
new file mode 100644
index 0000000..9c0f8ab
--- /dev/null
+++ b/rabbitmq/crimson_hexagon_monitors/rabbitmq_handler.py
@@ -0,0 +1,59 @@
+import json
+import os
+import traceback
+
+import pika
+import requests
+
+
+def rabbitmq_handler(ch, method, properties, body):
+ try:
+ # important! Don't reveal this token
+ event = json.loads(body)
+ if 'crimson_access_token' in event.keys():
+ crimson_auth_token = event['crimson_access_token']
+ base_url = 'https://api.crimsonhexagon.com/api'
+
+ url = base_url + '/monitor/list?auth=' + crimson_auth_token
+
+ r = requests.get(url)
+
+ if r.status_code != 200:
+ data = {'info': r.text, 'monitor_list': 'null'}
+
+ else:
+ data = {'info': 'successfully retrieve monitor list!',
+ 'monitor_list': r.json()['monitors']}
+ else:
+ data = {'info': 'You fail to provide the correct credentials to access Crimson Hexagon',
+ 'monitor_list': 'null'}
+
+ except BaseException as e:
+ data = {
+ 'ERROR':
+ {
+ 'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(data))
+
+ return data
+
+
+if __name__ == '__main__':
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+
+ # pass the queue name in environment variable
+ queue = os.environ['QUEUE_NAME']
+
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=rabbitmq_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/crimson_hexagon_monitors/requirement.txt b/rabbitmq/crimson_hexagon_monitors/requirement.txt
new file mode 100644
index 0000000..b40e7d7
--- /dev/null
+++ b/rabbitmq/crimson_hexagon_monitors/requirement.txt
@@ -0,0 +1,2 @@
+requests>=2.22.0
+pika>=1.1.0
\ No newline at end of file
diff --git a/rabbitmq/docker-build-smile.sh b/rabbitmq/docker-build-smile.sh
new file mode 100644
index 0000000..870f6cb
--- /dev/null
+++ b/rabbitmq/docker-build-smile.sh
@@ -0,0 +1,9 @@
+docker build -t socialmediamacroscope/autophrase:latest autophrase
+docker build -t socialmediamacroscope/collect_reddit_comment:latest collect_reddit_comment
+docker build -t socialmediamacroscope/image_crawler:latest image_crawler
+docker build -t socialmediamacroscope/name_entity_recognition:latest name_entity_recognition
+docker build -t socialmediamacroscope/network_analysis:latest network_analysis
+docker build -t socialmediamacroscope/preprocessing:latest preprocessing
+docker build -t socialmediamacroscope/sentiment_analysis:latest sentiment_analysis
+docker build -t socialmediamacroscope/topic_modeling:latest topic_modeling
+docker build -t socialmediamacroscope/smile_server:latest ../../SMILE/www/
\ No newline at end of file
diff --git a/rabbitmq/docker-compose-bae.yml b/rabbitmq/docker-compose-bae.yml
new file mode 100644
index 0000000..25a23be
--- /dev/null
+++ b/rabbitmq/docker-compose-bae.yml
@@ -0,0 +1,164 @@
+version: "3.3"
+
+services:
+ rabbitmq:
+ image: rabbitmq:3-management
+ ports:
+ - "5672:5672"
+ - "15672:15672"
+
+ minio:
+ image: minio/minio
+ hostname: minio
+ ports:
+ - "9000:9000"
+ volumes:
+ - "bae_content_data:/tmp"
+ command: server /tmp
+ environment:
+ - MINIO_ACCESS_KEY=${AWS_ACCESSKEY}
+ - MINIO_SECRET_KEY=${AWS_ACCESSKEYSECRET}
+ restart: unless-stopped
+
+ algorithm_botometer_check_bot:
+ image: socialmediamacroscope/botometer_check_bot:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ environment:
+ - RAPIDAPI_KEY=${RAPIDAPI_KEY}
+ command: python ./botometer_check_bot.py
+ restart: unless-stopped
+
+ algorithm_bulk_comparison:
+ image: socialmediamacroscope/bulk_comparison:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python ./bulk_comparison.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ restart: unless-stopped
+
+ algorithm_check_screen_name:
+ image: socialmediamacroscope/check_screen_name:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python ./check_screen_name.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ restart: unless-stopped
+
+ algorithm_collect_timeline:
+ image: socialmediamacroscope/collect_timeline:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python ./collect_timeline.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ restart: unless-stopped
+
+ algorithm_get_personality:
+ image: socialmediamacroscope/get_personality:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python ./get_personality.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ restart: unless-stopped
+
+ algorithm_utku_brand_personality:
+ image: socialmediamacroscope/utku_brand_personality:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python ./rabbitmq_handler.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ - EMAIL_HOST=${EMAIL_HOST}
+ - EMAIL_PORT=${EMAIL_PORT}
+ - EMAIL_FROM_ADDRESS=${EMAIL_FROM_ADDRESS}
+ - EMAIL_PASSWORD=${EMAIL_PASSWORD}
+ restart: unless-stopped
+
+ algorithm_get_sim_score:
+ image: socialmediamacroscope/get_sim_score:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python ./get_sim_score.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ restart: unless-stopped
+
+ algorithm_screen_name_prompt:
+ image: socialmediamacroscope/screen_name_prompt:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python ./screen_name_prompt.py
+ restart: unless-stopped
+
+ bae_server:
+ image: socialmediamacroscope/bae-server:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ - algorithm_botometer_check_bot
+ - algorithm_bulk_comparison
+ - algorithm_check_screen_name
+ - algorithm_collect_timeline
+ - algorithm_get_personality
+ - algorithm_utku_brand_personality
+ - algorithm_get_sim_score
+ - algorithm_screen_name_prompt
+ ports:
+ - "8001:8001"
+ command: npm start
+ environment:
+ - HOME=${HOME}
+ - DOCKERIZED=${DOCKERIZED}
+ - LOCAL_ALGORITHM=${LOCAL_ALGORITHM}
+ - HOST_IP=${HOST_IP}
+ - BUCKET_NAME=${BUCKET_NAME}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - TWITTER_CONSUMER_KEY=${TWITTER_CONSUMER_KEY}
+ - TWITTER_CONSUMER_SECRET=${TWITTER_CONSUMER_SECRET}
+ - EMAIL_HOST=${EMAIL_HOST}
+ - EMAIL_PORT=${EMAIL_PORT}
+ - EMAIL_FROM_ADDRESS=${EMAIL_FROM_ADDRESS}
+ - EMAIL_PASSWORD=${EMAIL_PASSWORD}
+ volumes:
+ - "bae_content_data:/tmp"
+ restart: unless-stopped
+
+volumes:
+ bae_content_data:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ # put your own local data path here
+ device: "${HOME}/bae_data"
diff --git a/rabbitmq/docker-compose-minio.yml b/rabbitmq/docker-compose-minio.yml
new file mode 100644
index 0000000..f43babd
--- /dev/null
+++ b/rabbitmq/docker-compose-minio.yml
@@ -0,0 +1,23 @@
+version: "3.3"
+services:
+ minio:
+ image: minio/minio
+ hostname: minio
+ ports:
+ - "9000:9000"
+ volumes:
+ - "smile_content_data:/tmp"
+ command: server /tmp
+ environment:
+ - MINIO_ACCESS_KEY=${AWS_ACCESSKEY}
+ - MINIO_SECRET_KEY=${AWS_ACCESSKEYSECRET}
+ restart: unless-stopped
+
+volumes:
+ smile_content_data:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ # put your own local data path here
+ device: "${HOME}/smile_data"
\ No newline at end of file
diff --git a/rabbitmq/docker-compose-smile.yml b/rabbitmq/docker-compose-smile.yml
new file mode 100644
index 0000000..89fd161
--- /dev/null
+++ b/rabbitmq/docker-compose-smile.yml
@@ -0,0 +1,368 @@
+version: "3.3"
+
+services:
+ rabbitmq:
+ image: rabbitmq:3-management
+ ports:
+ - "5672:5672"
+ - "15672:15672"
+
+ minio:
+ image: minio/minio
+ hostname: minio
+ expose:
+ - "9000"
+ - "9001"
+ networks:
+ - default
+ volumes:
+ - "smile_content_data:/tmp"
+ command: server --console-address ":9001" /tmp
+ environment:
+ - MINIO_ACCESS_KEY=${AWS_ACCESSKEY}
+ - MINIO_SECRET_KEY=${AWS_ACCESSKEYSECRET}
+ restart: unless-stopped
+
+ minio-nginx:
+ image: nginx:1.19.2-alpine
+ hostname: nginx
+ volumes:
+ - ./minio-nginx.conf:/etc/nginx/nginx.conf:ro
+ ports:
+ - "9000:9000"
+ - "9001:9001"
+ depends_on:
+ - minio
+
+ mongodb:
+ image: mongo
+ hostname: mongodb
+ volumes:
+ - "smile_user:/data/db"
+ ports:
+ - "27017:27017"
+ restart: unless-stopped
+
+ redis:
+ image: redis
+ hostname: redis
+ ports:
+ - "6379:6379"
+ restart: unless-stopped
+
+ algorithm-classification-predict:
+# build: ./classification_predict
+ image: socialmediamacroscope/classification_predict:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python ./rabbitmq_handler.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ - QUEUE_NAME=classification_predict
+ restart: unless-stopped
+
+ algorithm-classification-split:
+# build: ./classification_split
+ image: socialmediamacroscope/classification_split:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python ./rabbitmq_handler.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ - QUEUE_NAME=classification_split
+ restart: unless-stopped
+
+ algorithm-classification-train:
+# build: ./classification_train
+ image: socialmediamacroscope/classification_train:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python ./rabbitmq_handler.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ - QUEUE_NAME=classification_train
+ restart: unless-stopped
+
+ algorithm-histogram:
+# build: ./histogram
+ image: socialmediamacroscope/histogram:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python ./rabbitmq_handler.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ - QUEUE_NAME=histogram
+ restart: unless-stopped
+
+ algorithm-network-analysis:
+# build: ./network_analysis
+ image: socialmediamacroscope/network_analysis:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python ./rabbitmq_handler.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ - QUEUE_NAME=network_analysis
+ - EMAIL_HOST=${EMAIL_HOST}
+ - EMAIL_PORT=${EMAIL_PORT}
+ - EMAIL_FROM_ADDRESS=${EMAIL_FROM_ADDRESS}
+ - EMAIL_PASSWORD=${EMAIL_PASSWORD}
+ restart: unless-stopped
+
+ algorithm-preprocessing:
+# build: ./preprocessing
+ image: socialmediamacroscope/preprocessing:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python ./rabbitmq_handler.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ - QUEUE_NAME=preprocessing
+ - EMAIL_HOST=${EMAIL_HOST}
+ - EMAIL_PORT=${EMAIL_PORT}
+ - EMAIL_FROM_ADDRESS=${EMAIL_FROM_ADDRESS}
+ - EMAIL_PASSWORD=${EMAIL_PASSWORD}
+ restart: unless-stopped
+
+ algorithm-sentiment-analysis:
+# build: ./sentiment_analysis
+ image: socialmediamacroscope/sentiment_analysis:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python ./rabbitmq_handler.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ - QUEUE_NAME=sentiment_analysis
+ - EMAIL_HOST=${EMAIL_HOST}
+ - EMAIL_PORT=${EMAIL_PORT}
+ - EMAIL_FROM_ADDRESS=${EMAIL_FROM_ADDRESS}
+ - EMAIL_PASSWORD=${EMAIL_PASSWORD}
+ restart: unless-stopped
+
+ algorithm-screen-name-prompt:
+# build: ./screen_name_prompt
+ image: socialmediamacroscope/screen_name_prompt:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python ./screen_name_prompt.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ - QUEUE_NAME=bae_screen_name_prompt
+ restart: unless-stopped
+
+ algorithm-topic-modeling:
+# build: ./topic_modeling
+ image: socialmediamacroscope/topic_modeling:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python ./rabbitmq_handler.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ - QUEUE_NAME=topic_modeling
+ - EMAIL_HOST=${EMAIL_HOST}
+ - EMAIL_PORT=${EMAIL_PORT}
+ - EMAIL_FROM_ADDRESS=${EMAIL_FROM_ADDRESS}
+ - EMAIL_PASSWORD=${EMAIL_PASSWORD}
+ restart: unless-stopped
+
+ algorithm-name-entity-recognition:
+# build: ./name_entity_recognition
+ image: socialmediamacroscope/name_entity_recognition:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python3 ./rabbitmq_handler.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ - QUEUE_NAME=name_entity_recognition
+ - EMAIL_HOST=${EMAIL_HOST}
+ - EMAIL_PORT=${EMAIL_PORT}
+ - EMAIL_FROM_ADDRESS=${EMAIL_FROM_ADDRESS}
+ - EMAIL_PASSWORD=${EMAIL_PASSWORD}
+ restart: unless-stopped
+
+ algorithm-autophrase:
+# build: ./autophrase
+ image: socialmediamacroscope/autophrase:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python3 ./rabbitmq_handler.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ - QUEUE_NAME=autophrase
+ - EMAIL_HOST=${EMAIL_HOST}
+ - EMAIL_PORT=${EMAIL_PORT}
+ - EMAIL_FROM_ADDRESS=${EMAIL_FROM_ADDRESS}
+ - EMAIL_PASSWORD=${EMAIL_PASSWORD}
+ restart: unless-stopped
+
+ image-crawler:
+# build: ./image_crawler
+ image: socialmediamacroscope/image_crawler:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python3 ./rabbitmq_handler.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ - QUEUE_NAME=image_crawler
+ - EMAIL_HOST=${EMAIL_HOST}
+ - EMAIL_PORT=${EMAIL_PORT}
+ - EMAIL_FROM_ADDRESS=${EMAIL_FROM_ADDRESS}
+ - EMAIL_PASSWORD=${EMAIL_PASSWORD}
+ restart: unless-stopped
+
+ collect-reddit-comment:
+# build: ./collect_reddit_comment
+ image: socialmediamacroscope/collect_reddit_comment:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ command: python3 ./rabbitmq_handler.py
+ environment:
+ - HOST_IP=${HOST_IP}
+ - REDDIT_CLIENT_ID=${REDDIT_CLIENT_ID}
+ - REDDIT_CLIENT_SECRET=${REDDIT_CLIENT_SECRET}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - BUCKET_NAME=${BUCKET_NAME}
+ - QUEUE_NAME=reddit_comment
+ - EMAIL_HOST=${EMAIL_HOST}
+ - EMAIL_PORT=${EMAIL_PORT}
+ - EMAIL_FROM_ADDRESS=${EMAIL_FROM_ADDRESS}
+ - EMAIL_PASSWORD=${EMAIL_PASSWORD}
+ restart: unless-stopped
+
+ smile-server:
+# build: /Users/cwang138/Documents/Macroscope/SMILE/www
+ image: socialmediamacroscope/smile_server:latest
+ depends_on:
+ - rabbitmq
+ - minio
+ - mongodb
+ - redis
+ - algorithm-classification-predict
+ - algorithm-classification-split
+ - algorithm-classification-train
+ - algorithm-histogram
+ - algorithm-network-analysis
+ - algorithm-preprocessing
+ - algorithm-sentiment-analysis
+ - algorithm-autophrase
+ - algorithm-name-entity-recognition
+ - algorithm-topic-modeling
+ - algorithm-screen-name-prompt
+ - image-crawler
+ ports:
+ - "8001:8001"
+ command: npm run docker-start
+ environment:
+ - HOME=${HOME}
+ - DOCKERIZED=${DOCKERIZED}
+ - LOCAL_ALGORITHM=${LOCAL_ALGORITHM}
+ - HOST_IP=${HOST_IP}
+ - BUCKET_NAME=${BUCKET_NAME}
+ - AWS_ACCESSKEY=${AWS_ACCESSKEY}
+ - AWS_ACCESSKEYSECRET=${AWS_ACCESSKEYSECRET}
+ - TWITTER_CONSUMER_KEY=${TWITTER_CONSUMER_KEY}
+ - TWITTER_CONSUMER_SECRET=${TWITTER_CONSUMER_SECRET}
+ - REDDIT_CLIENT_ID=${REDDIT_CLIENT_ID}
+ - REDDIT_CLIENT_SECRET=${REDDIT_CLIENT_SECRET}
+ - BOX_CLIENT_ID=${BOX_CLIENT_ID}
+ - BOX_CLIENT_SECRET=${BOX_CLIENT_SECRET}
+ - DROPBOX_CLIENT_ID=${DROPBOX_CLIENT_ID}
+ - DROPBOX_CLIENT_SECRET=${DROPBOX_CLIENT_SECRET}
+ - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}
+ - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}
+ - EMAIL_HOST=${EMAIL_HOST}
+ - EMAIL_PORT=${EMAIL_PORT}
+ - EMAIL_FROM_ADDRESS=${EMAIL_FROM_ADDRESS}
+ - EMAIL_PASSWORD=${EMAIL_PASSWORD}
+ - SINGLE_USER=${SINGLE_USER}
+ volumes:
+ - "smile_content_data:/tmp"
+ - "smile_tag:${HOME}/smile"
+ restart: unless-stopped
+
+ smile-graphql:
+# build: /Users/cwang138/Documents/Macroscope/SMILE/www/graphql
+ image: socialmediamacroscope/smile_graphql:latest
+ depends_on:
+ - smile-server
+ ports:
+ - "5050:5050"
+ command: npm run docker-start
+ environment:
+ - DOCKERIZED=${DOCKERIZED}
+ - TWITTER_CONSUMER_KEY=${TWITTER_CONSUMER_KEY}
+ - TWITTER_CONSUMER_SECRET=${TWITTER_CONSUMER_SECRET}
+ restart: unless-stopped
+
+volumes:
+ smile_content_data:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ # put your own local data path here
+ device: "${HOME}/smile_data"
+
+ smile_user:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: "${HOME}/smile_user"
+
+ smile_tag:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: "${HOME}/smile"
diff --git a/rabbitmq/get_personality/command.txt b/rabbitmq/get_personality/command.txt
new file mode 100644
index 0000000..9f9a6eb
--- /dev/null
+++ b/rabbitmq/get_personality/command.txt
@@ -0,0 +1,3 @@
+# command to build and run this container
+docker build -t get_personality:latest .
+docker run get_personality:latest
diff --git a/rabbitmq/get_personality/dockerfile b/rabbitmq/get_personality/dockerfile
new file mode 100644
index 0000000..3a23fb2
--- /dev/null
+++ b/rabbitmq/get_personality/dockerfile
@@ -0,0 +1,8 @@
+FROM python:3.7
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+COPY . ./
+
+RUN pip install --no-cache-dir -r requirement.txt
\ No newline at end of file
diff --git a/rabbitmq/get_personality/get_personality.py b/rabbitmq/get_personality/get_personality.py
new file mode 100644
index 0000000..487336e
--- /dev/null
+++ b/rabbitmq/get_personality/get_personality.py
@@ -0,0 +1,72 @@
+import json
+import os
+import pika
+import requests
+import writeToS3 as s3
+import traceback
+import pandas as pd
+
+
+def get_personality_handler(ch, method, properties, body):
+ try:
+ event = json.loads(body)
+ awsPath = os.path.join(event['sessionID'], event['screen_name'])
+ localPath = os.path.join('/tmp', event['sessionID'], event['screen_name'])
+ if not os.path.exists(localPath):
+ os.makedirs(localPath)
+ screen_name = event['screen_name']
+
+ try:
+ s3.downloadToDisk(screen_name + '_tweets.txt', localPath, awsPath)
+ except:
+ raise ValueError('Cannot find the timeline in the remote storage!')
+
+ with open(os.path.join(localPath, screen_name + '_tweets.txt'), 'r') as personality_text:
+ headers = {'Content-Type': 'text/plain',
+ 'Accept': 'application/json'}
+
+ # concatenate the text field to be a paragraph
+ df = pd.read_csv(os.path.join(localPath, screen_name + '_tweets.txt'))
+ tweets = df['text'].tolist()
+ body = '. '.join(tweets).encode('utf-8', 'ignore')
+
+ r = requests.post(
+ 'https://gateway.watsonplatform.net/personality-insights/api/v3/profile?version=2017-10-13&consumption_preferences=true&raw_scores=true',
+ headers=headers, data=body, auth=('apikey', event['apikey']), timeout=300)
+
+ if r.status_code == 200:
+ data = {'personality': r.json()}
+
+ with open(os.path.join(localPath, screen_name + '_personality' + '.json'), 'w') as outfile:
+ json.dump(data, outfile)
+
+ s3.upload(localPath, awsPath, screen_name + '_personality.json')
+ else:
+ raise ValueError(r.text)
+
+ except BaseException as e:
+ data = {'ERROR':
+ {
+ 'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(data))
+
+ return data
+
+
+if __name__ == '__main__':
+
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+ queue = "bae_get_personality"
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=get_personality_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/get_personality/requirement.txt b/rabbitmq/get_personality/requirement.txt
new file mode 100644
index 0000000..847dcf3
--- /dev/null
+++ b/rabbitmq/get_personality/requirement.txt
@@ -0,0 +1,4 @@
+pika>=1.1.0
+boto3>=1.10.9
+requests>=2.22.0
+pandas>=0.24.2
\ No newline at end of file
diff --git a/rabbitmq/get_personality/writeToS3.py b/rabbitmq/get_personality/writeToS3.py
new file mode 100644
index 0000000..761907a
--- /dev/null
+++ b/rabbitmq/get_personality/writeToS3.py
@@ -0,0 +1,86 @@
+import boto3
+import mimetypes
+import os
+from botocore.client import Config
+
+client = boto3.client('s3', endpoint_url='http://' + os.environ['HOST_IP'] + ':9000',
+ aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'],
+ config=Config(signature_version='s3v4'))
+
+bucket_name = os.environ['BUCKET_NAME']
+
+def upload(localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType':'application/octet-stream'}
+ else:
+ extra_args = {'ContentType':content_type}
+
+ client.upload_file(os.path.join(localpath, filename),
+ bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+
+def createDirectory(DirectoryName):
+ client.put_object(Bucket=bucket_name, Key=DirectoryName)
+
+
+def generate_downloads(remotepath, filename):
+ url = client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+
+def downloadToDisk(filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ client.download_fileobj(bucket_name,
+ os.path.join(remotepath, filename), f)
+
+
+def getObject(remoteKey):
+ obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
+
+
+def putObject(body, remoteKey):
+ # bytes or seekable file-like object
+ obj = client.put_object(Bucket=bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+
+# def checkExist(remotepath, filename):
+# results = client.list_objects(Bucket=bucket_name, Prefix=os.path.join(remotepath, filename))
+# print(results)
+# if 'Contents' in results:
+# return True
+# else:
+# return False
+
+def listDir(remoteClass):
+ objects = client.list_objects(Bucket=bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+
+def listFiles(foldernames):
+ objects = client.list_objects(Bucket=bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/rabbitmq/get_sim_score/command.txt b/rabbitmq/get_sim_score/command.txt
new file mode 100644
index 0000000..9890aab
--- /dev/null
+++ b/rabbitmq/get_sim_score/command.txt
@@ -0,0 +1,3 @@
+# command to build and run this container
+docker build -t get_sim_score:latest .
+docker run get_sim_score:latest
diff --git a/rabbitmq/get_sim_score/dockerfile b/rabbitmq/get_sim_score/dockerfile
new file mode 100644
index 0000000..3a23fb2
--- /dev/null
+++ b/rabbitmq/get_sim_score/dockerfile
@@ -0,0 +1,8 @@
+FROM python:3.7
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+COPY . ./
+
+RUN pip install --no-cache-dir -r requirement.txt
\ No newline at end of file
diff --git a/rabbitmq/get_sim_score/get_sim_score.py b/rabbitmq/get_sim_score/get_sim_score.py
new file mode 100644
index 0000000..73bceb9
--- /dev/null
+++ b/rabbitmq/get_sim_score/get_sim_score.py
@@ -0,0 +1,110 @@
+import json
+import os
+import numpy as np
+import pika
+import writeToS3 as s3
+import traceback
+
+
+def cos_sim(a, b):
+ dot_product = np.dot(a, b)
+ norm_a = np.linalg.norm(a)
+ norm_b = np.linalg.norm(b)
+
+ return dot_product / (norm_a * norm_b)
+
+def get_sim_score_handler(ch, method, properties, body):
+ try:
+ event = json.loads(body)
+ awsUserPath = os.path.join(event['sessionID'], event['user_screen_name'])
+ awsBrandPath = os.path.join(event['sessionID'], event['brand_screen_name'])
+ localPath = os.path.join('/tmp', event['sessionID'])
+
+ if not os.path.exists(localPath):
+ os.makedirs(localPath)
+
+ # default algorithm to IBM-Watson to be compatible with old version
+ if 'algorithm' not in event.keys():
+ event['algorithm'] = 'IBM-Watson'
+
+ # download and read personality scores
+ if event['algorithm'] == 'IBM-Watson':
+ try:
+ s3.downloadToDisk(event['user_screen_name'] + '_personality.json', localPath, awsUserPath)
+ s3.downloadToDisk(event['brand_screen_name'] + '_personality.json', localPath, awsBrandPath)
+
+ # open json and read in values
+ with open(os.path.join(localPath, event['user_screen_name'] + '_personality.json'), 'r') as f:
+ user_data = json.load(f)['personality']
+ with open(os.path.join(localPath, event['brand_screen_name'] + '_personality.json'),'r') as f:
+ brand_data = json.load(f)['personality']
+ except:
+ raise ValueError('Cannot find the timeline in the remote storage!')
+ elif event['algorithm'] == 'TwitPersonality':
+ try:
+ s3.downloadToDisk(event['user_screen_name'] + '_twitPersonality.json', localPath, awsUserPath)
+ s3.downloadToDisk(event['brand_screen_name'] + '_twitPersonality.json', localPath, awsBrandPath)
+
+ # open json and read in values
+ with open(os.path.join(localPath, event['user_screen_name'] + '_twitPersonality.json'), 'r') as f:
+ user_data = json.load(f)['personality']
+ with open(os.path.join(localPath, event['brand_screen_name'] + '_twitPersonality.json'),'r') as f:
+ brand_data = json.load(f)['personality']
+ except:
+ raise ValueError('Cannot find the timeline in the remote storage!')
+
+ # calculate similarity score
+ vector_a = []
+ vector_b = []
+ if event['option'] == 'personality_sim_score':
+ for p in user_data['personality']:
+ vector_a.append(p['percentile'])
+ for p in brand_data['personality']:
+ vector_b.append(p['percentile'])
+
+ elif event['option'] == 'needs_sim_score':
+ for p in user_data['needs']:
+ vector_a.append(p['percentile'])
+ for p in brand_data['needs']:
+ vector_b.append(p['percentile'])
+
+ elif event['option'] == 'values_sim_score':
+ for p in user_data['values']:
+ vector_a.append(p['percentile'])
+ for p in brand_data['values']:
+ vector_b.append(p['percentile'])
+ elif event['option'] == 'consumption_sim_score':
+ for p in user_data['consumption_preferences']:
+ for c in p['consumption_preferences']:
+ vector_a.append(c['score'])
+ for p in brand_data['consumption_preferences']:
+ for c in p['consumption_preferences']:
+ vector_b.append(c['score'])
+
+ data = {'sim_score': cos_sim(vector_a, vector_b)}
+
+ except BaseException as e:
+ data = {'ERROR':
+ {'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(data))
+ return data
+
+
+
+if __name__ == '__main__':
+
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+ queue = "bae_get_sim_score"
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=get_sim_score_handler, auto_ack=True)
+ channel.start_consuming()
\ No newline at end of file
diff --git a/rabbitmq/get_sim_score/requirement.txt b/rabbitmq/get_sim_score/requirement.txt
new file mode 100644
index 0000000..c3f696a
--- /dev/null
+++ b/rabbitmq/get_sim_score/requirement.txt
@@ -0,0 +1,3 @@
+pika>=1.1.0
+boto3>=1.10.9
+numpy>=1.16.4
\ No newline at end of file
diff --git a/rabbitmq/get_sim_score/writeToS3.py b/rabbitmq/get_sim_score/writeToS3.py
new file mode 100644
index 0000000..761907a
--- /dev/null
+++ b/rabbitmq/get_sim_score/writeToS3.py
@@ -0,0 +1,86 @@
+import boto3
+import mimetypes
+import os
+from botocore.client import Config
+
+client = boto3.client('s3', endpoint_url='http://' + os.environ['HOST_IP'] + ':9000',
+ aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'],
+ config=Config(signature_version='s3v4'))
+
+bucket_name = os.environ['BUCKET_NAME']
+
+def upload(localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType':'application/octet-stream'}
+ else:
+ extra_args = {'ContentType':content_type}
+
+ client.upload_file(os.path.join(localpath, filename),
+ bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+
+def createDirectory(DirectoryName):
+ client.put_object(Bucket=bucket_name, Key=DirectoryName)
+
+
+def generate_downloads(remotepath, filename):
+ url = client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+
+def downloadToDisk(filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ client.download_fileobj(bucket_name,
+ os.path.join(remotepath, filename), f)
+
+
+def getObject(remoteKey):
+ obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
+
+
+def putObject(body, remoteKey):
+ # bytes or seekable file-like object
+ obj = client.put_object(Bucket=bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+
+# def checkExist(remotepath, filename):
+# results = client.list_objects(Bucket=bucket_name, Prefix=os.path.join(remotepath, filename))
+# print(results)
+# if 'Contents' in results:
+# return True
+# else:
+# return False
+
+def listDir(remoteClass):
+ objects = client.list_objects(Bucket=bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+
+def listFiles(foldernames):
+ objects = client.list_objects(Bucket=bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/rabbitmq/helloworld.py b/rabbitmq/helloworld.py
new file mode 100644
index 0000000..e5450c4
--- /dev/null
+++ b/rabbitmq/helloworld.py
@@ -0,0 +1,16 @@
+#!/usr/bin/env python
+import pika
+
+connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
+channel = connection.channel()
+channel.queue_declare(queue='hello')
+
+def callback(ch, method, properties, body):
+ print(" [x] Received %r" % body)
+
+
+channel.basic_consume(
+ queue='hello', on_message_callback=callback, auto_ack=True)
+
+print(' [*] Waiting for messages. To exit press CTRL+C')
+channel.start_consuming()
\ No newline at end of file
diff --git a/rabbitmq/histogram/clear_cache.sh b/rabbitmq/histogram/clear_cache.sh
new file mode 100644
index 0000000..640c2ac
--- /dev/null
+++ b/rabbitmq/histogram/clear_cache.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+CACHEDIR=/tmp
+
+# delete file older than 4 hours
+find "$CACHEDIR" -maxdepth 1 -mindepth 1 -type d -mmin +240 -print0 |
+ while IFS= read -d '' -r dir; do
+ rm -rf "$dir"
+ done
\ No newline at end of file
diff --git a/rabbitmq/histogram/clear_cache_cron b/rabbitmq/histogram/clear_cache_cron
new file mode 100644
index 0000000..0510c51
--- /dev/null
+++ b/rabbitmq/histogram/clear_cache_cron
@@ -0,0 +1 @@
+0 * * * * /bin/bash /scripts/clear_cache.sh
diff --git a/rabbitmq/histogram/command.txt b/rabbitmq/histogram/command.txt
new file mode 100644
index 0000000..42deab3
--- /dev/null
+++ b/rabbitmq/histogram/command.txt
@@ -0,0 +1,2 @@
+# command to build and run this container
+docker build -t socialmediamacroscope/histogram:latest .
\ No newline at end of file
diff --git a/rabbitmq/histogram/dockerfile b/rabbitmq/histogram/dockerfile
new file mode 100644
index 0000000..34ef036
--- /dev/null
+++ b/rabbitmq/histogram/dockerfile
@@ -0,0 +1,15 @@
+FROM python:3.7
+
+RUN apt-get -qq -y update && apt-get -qq -y install cron
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+COPY . ./
+
+RUN pip install --no-cache-dir -r requirement.txt
+
+# cron job clean tmp folder
+RUN chmod u+x ./clear_cache.sh
+RUN chmod 0644 ./clear_cache_cron
+RUN crontab ./clear_cache_cron
\ No newline at end of file
diff --git a/rabbitmq/histogram/histogram.py b/rabbitmq/histogram/histogram.py
new file mode 100755
index 0000000..9510f04
--- /dev/null
+++ b/rabbitmq/histogram/histogram.py
@@ -0,0 +1,79 @@
+import pandas as pd
+import plotly.graph_objs as go
+import writeToS3 as s3
+from plotly.offline import plot
+
+
+def plot_freq(index, counts, interval, localPath, remotePath):
+ if interval == '1T':
+ freq = '1 Minute'
+ elif interval == '1H':
+ freq = '1 Hour'
+ elif interval == '6H':
+ freq = '6 Hours'
+ elif interval == '1D':
+ freq = '1 Day'
+ elif interval == '1W':
+ freq = '1 Week'
+ elif interval == '1M':
+ freq = '1 Month'
+ elif interval == '1Q':
+ freq = '1 Quarter'
+ elif interval == '6M':
+ freq = '6 Months'
+ elif interval == '1A':
+ freq = '1 Year'
+ else:
+ freq = 'Undefined'
+
+ trace = go.Bar(x=index,y=counts,marker=dict(color='rgba(200,75,73,1.0)',
+ line=dict(color='rgba(111,11,9,1.0)',width=2)))
+ layout = dict(
+ title='count of posts over time (interval = ' + freq + ')',
+ font=dict(family='Arial',size=12),
+ yaxis=dict(
+ showgrid=True,
+ showline=True,
+ showticklabels=True,
+ linecolor='rgba(102, 102, 102, 0.8)',
+ linewidth=2
+ ),
+ xaxis1=dict(
+ #autotick=False,
+ type='date',
+ tickformat='%x %X',
+ zeroline=True,
+ showline=True,
+ showticklabels=True,
+ showgrid=True
+ ),
+ margin=dict(
+ l=70,
+ r=70,
+ t=70,
+ b=70,
+ )
+ )
+
+ fig = go.Figure(data=[trace], layout=layout)
+ div = plot(fig, output_type='div',image='png',auto_open=False, image_filename='plot_img')
+
+ fname_div = 'div.html'
+ with open(localPath + fname_div,"w") as f:
+ f.write(div)
+ s3.upload(localPath, remotePath,fname_div)
+ div_url = s3.generate_downloads(remotePath,fname_div)
+
+ return div_url
+
+
+def count_freq(df, time_col_name, time_freq, time_unit):
+ # convert time column to datetime
+ df[time_col_name] = pd.to_datetime(df[time_col_name],unit=time_unit)
+ # set index to datetime
+ df.set_index(df[time_col_name],inplace=True)
+
+ return df[time_col_name].resample(time_freq).count()
+
+
+
diff --git a/rabbitmq/histogram/rabbitmq_handler.py b/rabbitmq/histogram/rabbitmq_handler.py
new file mode 100644
index 0000000..07851d6
--- /dev/null
+++ b/rabbitmq/histogram/rabbitmq_handler.py
@@ -0,0 +1,145 @@
+import csv
+import json
+import os
+import traceback
+
+import pandas as pd
+import pika
+import writeToS3 as s3
+from histogram import plot_freq, count_freq
+
+
+def rabbitmq_handler(ch, method, properties, body):
+ try:
+
+ event = json.loads(body)
+ # download the social media data to local lambda /tmp
+ localPath = '/tmp/' + event['s3FolderName'] + '/'
+ filename = event['filename']
+ remotePath = event['remoteReadPath']
+
+ if not os.path.exists(localPath):
+ os.makedirs(localPath)
+
+ s3.downloadToDisk(filename=filename, localpath=localPath, remotepath=remotePath)
+
+ # read it into csv
+ Array = []
+ try:
+ with open(localPath + filename, 'r', encoding="utf-8") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ pass
+ except:
+ with open(localPath + filename, 'r', encoding="ISO-8859-1") as f:
+ reader = csv.reader(f)
+ try:
+ for row in reader:
+ Array.append(row)
+ except Exception as e:
+ pass
+
+ df = pd.DataFrame(Array[1:], columns=Array[0])
+ # tweet
+ if 'created_at' in df.columns:
+ # default at 1 hour
+ if 'interval' in event:
+ interval = event['interval']
+ else:
+ interval = '1H'
+ freq = count_freq(df, 'created_at', interval, 'ns')
+
+ # twitter user
+ elif 'author_created_at' in df.columns:
+ # default at 1M
+ if 'interval' in event:
+ interval = event['interval']
+ else:
+ interval = '1M'
+ freq = count_freq(df, 'author_created_at', interval, 'ns')
+
+ # stream twitter
+ elif '_source.created_at' in df.columns:
+ # default at 1 day
+ if 'interval' in event:
+ interval = event['interval']
+ else:
+ interval = '1D'
+ freq = count_freq(df, '_source.created_at', interval, 'ns')
+
+ # reddit, reddit post, reddit comment
+ elif 'created_utc' in df.columns:
+ # default at 1 month
+ if 'interval' in event:
+ interval = event['interval']
+ else:
+ interval = '1M'
+ freq = count_freq(df, 'created_utc', interval, 's')
+
+ # historical reddit post
+ elif '_source.created_utc' in df.columns:
+ # default at 1 month
+ if 'interval' in event:
+ interval = event['interval']
+ else:
+ interval = '1M'
+ freq = count_freq(df, '_source.created_utc', interval, 's')
+
+ # historical reddit comment
+ elif 'comment_created' in df.columns:
+ # default at 1 month
+ if 'interval' in event:
+ interval = event['interval']
+ else:
+ interval = '1M'
+ freq = count_freq(df, 'comment_created', interval, 's')
+
+ # flickr photos
+ elif 'info.dateuploaded' in df.columns:
+ # default at 1 month
+ if 'interval' in event:
+ interval = event['interval']
+ else:
+ interval = '1M'
+ freq = count_freq(df, 'info.dateuploaded', interval, 's')
+
+ else:
+ return {'url': 'null'}
+
+ index = freq.index.tolist()
+ counts = freq.tolist()
+
+ urls = {'url': plot_freq(index, counts, interval, localPath, remotePath)}
+
+ except BaseException as e:
+ urls = {
+ 'ERROR':
+ {
+ 'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(urls))
+
+ return urls
+
+
+if __name__ == '__main__':
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+
+ # pass the queue name in environment variable
+ queue = os.environ['QUEUE_NAME']
+
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=rabbitmq_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/histogram/requirement.txt b/rabbitmq/histogram/requirement.txt
new file mode 100644
index 0000000..85973ac
--- /dev/null
+++ b/rabbitmq/histogram/requirement.txt
@@ -0,0 +1,6 @@
+boto3>=1.6.11
+numpy>=1.16.1
+pandas>=0.24.1
+plotly==2.7.0
+pika>=1.1.0
+networkx==1.11
\ No newline at end of file
diff --git a/rabbitmq/histogram/writeToS3.py b/rabbitmq/histogram/writeToS3.py
new file mode 100644
index 0000000..4fba54f
--- /dev/null
+++ b/rabbitmq/histogram/writeToS3.py
@@ -0,0 +1,77 @@
+import boto3
+import mimetypes
+import os
+from botocore.client import Config
+
+client = boto3.client('s3', endpoint_url='http://' + os.environ['HOST_IP'] + ':9000',
+ aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'],
+ config=Config(signature_version='s3v4'))
+
+bucket_name = os.environ['BUCKET_NAME']
+
+def upload(localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType':'application/octet-stream'}
+ else:
+ extra_args = {'ContentType':content_type}
+
+ client.upload_file(os.path.join(localpath, filename),
+ bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+
+def createDirectory(DirectoryName):
+ client.put_object(Bucket=bucket_name, Key=DirectoryName)
+
+
+def generate_downloads(remotepath, filename):
+ url = client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+
+def downloadToDisk(filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ client.download_fileobj(bucket_name,
+ os.path.join(remotepath, filename), f)
+
+
+def getObject(remoteKey):
+ obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
+
+
+def putObject(body, remoteKey):
+ # bytes or seekable file-like object
+ obj = client.put_object(Bucket=bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+def listDir(remoteClass):
+ objects = client.list_objects(Bucket=bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+
+def listFiles(foldernames):
+ objects = client.list_objects(Bucket=bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/image_crawler/batch_function.py b/rabbitmq/image_crawler/batch_function.py
similarity index 99%
rename from image_crawler/batch_function.py
rename to rabbitmq/image_crawler/batch_function.py
index b81bb13..c8dc484 100644
--- a/image_crawler/batch_function.py
+++ b/rabbitmq/image_crawler/batch_function.py
@@ -40,7 +40,6 @@
else:
raise ValueError("This data source does not support image collection!")
- urls = {}
for img_url in img_urls:
if ic.is_image(img_url):
filename, binary = ic.crawler(img_url)
diff --git a/rabbitmq/image_crawler/clear_cache.sh b/rabbitmq/image_crawler/clear_cache.sh
new file mode 100644
index 0000000..640c2ac
--- /dev/null
+++ b/rabbitmq/image_crawler/clear_cache.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+CACHEDIR=/tmp
+
+# delete file older than 4 hours
+find "$CACHEDIR" -maxdepth 1 -mindepth 1 -type d -mmin +240 -print0 |
+ while IFS= read -d '' -r dir; do
+ rm -rf "$dir"
+ done
\ No newline at end of file
diff --git a/rabbitmq/image_crawler/clear_cache_cron b/rabbitmq/image_crawler/clear_cache_cron
new file mode 100644
index 0000000..0510c51
--- /dev/null
+++ b/rabbitmq/image_crawler/clear_cache_cron
@@ -0,0 +1 @@
+0 * * * * /bin/bash /scripts/clear_cache.sh
diff --git a/rabbitmq/image_crawler/command.txt b/rabbitmq/image_crawler/command.txt
new file mode 100644
index 0000000..4655cb7
--- /dev/null
+++ b/rabbitmq/image_crawler/command.txt
@@ -0,0 +1,5 @@
+docker run -it smile-image-crawler python3.6 /scripts/batch_function.py --remoteReadPath cwang138/GraphQL/reddit-Search/G20/ \
+--email cwang138@illinois.edu --sessionURL http://localhost:8001/networkx/
+
+# command to build and run this container
+docker build -t socialmediamacroscope/image_crawler:latest .
\ No newline at end of file
diff --git a/image_crawler/dataset.py b/rabbitmq/image_crawler/dataset.py
similarity index 100%
rename from image_crawler/dataset.py
rename to rabbitmq/image_crawler/dataset.py
diff --git a/rabbitmq/image_crawler/dockerfile b/rabbitmq/image_crawler/dockerfile
new file mode 100644
index 0000000..3846d78
--- /dev/null
+++ b/rabbitmq/image_crawler/dockerfile
@@ -0,0 +1,20 @@
+FROM ubuntu:18.04
+
+RUN mkdir -p /scripts
+WORKDIR /scripts
+
+# copy paste python scripts
+COPY . ./
+
+# install dependency libraries
+RUN apt-get update
+RUN apt-get -y install python3-pip
+RUN apt-get -y install cron
+
+# install dependency libraries and download required data
+RUN pip3 install -r requirement.txt
+
+# cron job clean tmp folder
+RUN chmod u+x ./clear_cache.sh
+RUN chmod 0644 ./clear_cache_cron
+RUN crontab ./clear_cache_cron
\ No newline at end of file
diff --git a/rabbitmq/image_crawler/image_crawler.py b/rabbitmq/image_crawler/image_crawler.py
new file mode 100644
index 0000000..6be5dea
--- /dev/null
+++ b/rabbitmq/image_crawler/image_crawler.py
@@ -0,0 +1,41 @@
+import requests
+import re
+
+class image_crawler:
+
+ @staticmethod
+ def crawler(url):
+ r = requests.get(url, stream=True)
+
+ # get filename
+ if "Content-Disposition" in r.headers.keys():
+ fname = re.findall("filename=(.+)", r.headers["Content-Disposition"])[
+ 0]
+ else:
+ fname = url.split("/")[-1]
+
+ return fname, r.content
+
+ @staticmethod
+ def is_image(url):
+ try:
+ head = requests.head(url)
+ content_type = head.headers.get('content-type')
+
+ if content_type is not None and content_type.lower().startswith('image'):
+ return True
+ else:
+ return False
+ # can't retrieve header
+ except:
+ return False
+
+
+if __name__ == "__main__":
+
+ url = "https://theweek.com/speedreads-amp/807154/trump-putin-plan-meeting-argentina"
+ if image_crawler.is_image(url):
+ fname, binary = image_crawler.crawler(url)
+
+
+
diff --git a/rabbitmq/image_crawler/notification.py b/rabbitmq/image_crawler/notification.py
new file mode 100644
index 0000000..176e095
--- /dev/null
+++ b/rabbitmq/image_crawler/notification.py
@@ -0,0 +1,170 @@
+import smtplib
+from email.mime.multipart import MIMEMultipart
+from email.mime.text import MIMEText
+import os
+
+
+def notification(toaddr,case,filename,links,sessionURL):
+ # toaddr -- email address to send to
+ # text content to send
+ # subject
+ host = os.environ.get('EMAIL_HOST')
+ port = os.environ.get('EMAIL_PORT')
+ fromaddr = os.environ.get('EMAIL_FROM_ADDRESS')
+ password = os.environ.get('EMAIL_PASSWORD')
+
+ if host is not None and host != "" and \
+ port is not None and port != "" and\
+ fromaddr is not None and fromaddr != "" and \
+ password is not None and password != "":
+ # map the fpath component to History panel names
+ # local/NLP/sentiment/xxxxxxxxxxxxxxxxxxxxxxxx/ => [local,nlp,sentiment,xxxx,space]
+ # [local, GraphQL, reddit-post, aww, space]
+ # 0 1 2 3
+ if filename != '':
+ fpath = filename.split('/')
+
+ if fpath[1] == 'GraphQL':
+ fpath[1] = 'Social Media Data'
+ elif fpath[1] == 'NLP':
+ fpath[1] = 'Nature Language Processing'
+ elif fpath[1] == 'ML':
+ fpath[1] = 'Machine Learning ML'
+ elif fpath[1] == 'NW':
+ fpath[1] = 'Network Visualization and Analysis'
+
+ if fpath[2] == 'reddit-Post':
+ fpath[2] = 'Subreddit Posts Title'
+ elif fpath[2] == 'reddit-Historical-Post':
+ fpath[2] = 'Reddit Historical Post'
+ elif fpath[2] == 'reddit-Search':
+ fpath[2] = 'Reddit Search Posts Title'
+ elif fpath[2] == 'sentiment':
+ fpath[2] = 'Sentiment Analysis'
+ elif fpath[2] == 'preprocessing':
+ fpath[2] = 'NLP Preprocessing'
+ elif fpath[2] == 'networkx':
+ fpath[2] = 'Python NetworkX'
+ elif fpath[2] == 'classification':
+ fpath[2] = 'Text Classification'
+
+ if case == 0 or case == 'comment-fail':
+ html = """
+
+
+
+
+
Dear user (session ID: """ + fpath[0] + """),
+
Your Reddit Comment collection has been terminated.
+
We are using the id and permalink from your Reddit Submission dataset
+ to collect comments and replies. It is most likely you have provide an incomplete Reddit Submission dataset missing these two fields.
+
Please try to reproduce the Reddit Submission with id and permalink, or switch to another dataset.
+
Go to your session...
+
+
Best Regards,
+
Social Media Macroscope - SMILE
+
+
+
+ """
+ subject = 'Your Reddit Comment collection has failed...'
+ elif case == 1 or case == 'comment-terminate':
+ html = """
+
+
+
+
Dear user (session ID: """ + fpath[0] + """),
+
Your Reddit Comment collection is exceeding 400 Megabyte, and is terminated due to lack of disk space.
+
+ - You have requested comments and replies for the Reddit Submission (Post):""" + fpath[3] + """. The partial comments we manage to collect and save will be compressed for you in an .zip file named """ + fpath[3] + """-comments.zip (click)
+ - In order to download this file, you need to first locate the original submission in the HISTORY page in SMILE.
+ Go to your session...
+
+ - Go to History
+ - --> under """ + fpath[1] + """
+ - --> click """ + fpath[2] + """
+ - --> then find """ + fpath[3] + """
+ - --> click VIEW
+ - --> in the Overview table under the downloadables column, you will find these comments in a zip file.
+
+
+
+ """
+ subject = 'Your Reddit Comment collection has been terminated...'
+ elif case == 2 or case == 'comment-success':
+ html = """
+
+
+
+
Dear user (session ID: """ + fpath[0] + """),
+
Your Reddit Comment collection is ready for you!
+
+ - You have requested comments and replies for the Reddit Submission (Post):""" + fpath[3] + """. It will be compressed for you in an .zip file named """+ fpath[3] +"""-comments.zip
+ - In order to download this file, you need to first locate the original submission in the HISTORY page in SMILE.
+ Go to your session...
+
+ - Go to History
+ - --> under """ + fpath[1] +"""
+ - --> click """ + fpath[2] + """
+ - --> then find """ + fpath[3] + """
+ - --> click VIEW
+ - --> in the Overview table under the downloadables column, you will find these comments in a zip file.
+
+
+
+
Best Regards,
+
Social Media Macroscope - SMILE
+
+
+ """
+ subject = 'Your Reddit Comment collection is completed!'
+ elif case == 3 or case == 'analytics-success':
+ list_html = ''
+ for key in links.keys():
+ list_html += '' + key + ''
+
+ html = """
+
+
+
+
Dear user (session ID: """ + fpath[0] + """),
+
Your """ + fpath[2] + """ results are ready for you! (job ID: """ + fpath[3] + """)
+
+ - You can view the visualization and download the results at HISTORY page in SMILE.
+ Go to your session...
+
+ - Go to History
+ - --> under """ + fpath[1] + """ tab
+ - --> click """ + fpath[2] + """
+ - --> then find """ + fpath[3] + """
+ - --> click view
+
+
+ - You can also click the link below to download part of the results:
+
+
+
+
+
Best Regards,
+
Social Media Macroscope - SMILE
+
+
+ """
+ subject = 'Your ' + fpath[2] + ' computation is completed!'
+
+ msg = MIMEMultipart('alternative')
+ msg['Subject'] = subject
+ msg['From'] = fromaddr
+ msg['To'] = toaddr
+ msg.attach(MIMEText(html, 'html'))
+
+ server = smtplib.SMTP_SSL(host, port)
+ server.login(fromaddr, password)
+ server.sendmail(fromaddr, toaddr, msg.as_string())
+ server.quit()
+ else:
+ print("Invalid Email host setting! Skip notification.")
diff --git a/rabbitmq/image_crawler/postToAWSBatch.py b/rabbitmq/image_crawler/postToAWSBatch.py
new file mode 100644
index 0000000..73c93f5
--- /dev/null
+++ b/rabbitmq/image_crawler/postToAWSBatch.py
@@ -0,0 +1,24 @@
+import boto3
+import os
+
+client = boto3.client('batch', region_name="us-west-2", aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'])
+
+def invoke(jobDefinition, jobName, jobQueue, command):
+ command.extend(['--HOST_IP', os.environ['HOST_IP'],
+ '--AWS_ACCESSKEY', os.environ['AWS_ACCESSKEY'],
+ '--AWS_ACCESSKEYSECRET', os.environ['AWS_ACCESSKEYSECRET'],
+ '--BUCKET_NAME', os.environ['BUCKET_NAME']])
+
+ response = client.submit_job(
+ jobDefinition=jobDefinition,
+ jobName=jobName,
+ jobQueue=jobQueue,
+ containerOverrides={
+ 'vcpus': 2,
+ 'memory': 2048,
+ 'command': command
+ }
+ )
+
+ return response
\ No newline at end of file
diff --git a/rabbitmq/image_crawler/rabbitmq_handler.py b/rabbitmq/image_crawler/rabbitmq_handler.py
new file mode 100644
index 0000000..94f10d0
--- /dev/null
+++ b/rabbitmq/image_crawler/rabbitmq_handler.py
@@ -0,0 +1,60 @@
+import json
+import os
+import traceback
+import pika
+import postToAWSBatch
+
+
+def rabbitmq_handler(ch, method, properties, body):
+ try:
+ # determine if it goes to aws, lambda, or batch
+ params = json.loads(body)
+
+ if params['platform'] == 'aws-lambda':
+ raise ValueError("Not applicable to this algorithm.")
+
+ elif params['platform'] == 'aws-batch':
+ postToAWSBatch.invoke(params['jobDefinition'],
+ params['jobName'],
+ params['jobQueue'],
+ params['command'])
+
+ elif params['platform'] == 'lambda':
+ raise ValueError("Not applicable to this algorithm.")
+
+ elif params['platform'] == 'batch':
+ os.system(' '.join(params['command']))
+
+ else:
+ raise ValueError(
+ 'Rabbitmq Message Not Recognizable. '
+ 'It has to specify what platform to run: aws-lambda, aws-batch, lambda or batch.')
+
+ except BaseException as e:
+
+ msg = {'ERROR':
+ {'message': str(e),
+ 'traceback': traceback.format_exc()
+ }
+ }
+
+ # reply to the sender
+ ch.basic_publish(exchange="",
+ routing_key=properties.reply_to,
+ properties=pika.BasicProperties(correlation_id=properties.correlation_id),
+ body=json.dumps(msg))
+
+ return None
+
+
+if __name__ == '__main__':
+ connection = pika.BlockingConnection(pika.ConnectionParameters(port=5672, host="rabbitmq"))
+ channel = connection.channel()
+
+ # pass the queue name in environment variable
+ queue = os.environ['QUEUE_NAME']
+
+ channel.queue_declare(queue=queue)
+ channel.basic_qos(prefetch_count=1)
+ channel.basic_consume(queue=queue, on_message_callback=rabbitmq_handler, auto_ack=True)
+ channel.start_consuming()
diff --git a/rabbitmq/image_crawler/requirement.txt b/rabbitmq/image_crawler/requirement.txt
new file mode 100644
index 0000000..b3f19eb
--- /dev/null
+++ b/rabbitmq/image_crawler/requirement.txt
@@ -0,0 +1,4 @@
+pika>=1.1.0
+requests==2.21.0
+pandas==0.24.1
+boto3==1.6.11
\ No newline at end of file
diff --git a/rabbitmq/image_crawler/writeToS3.py b/rabbitmq/image_crawler/writeToS3.py
new file mode 100644
index 0000000..4fba54f
--- /dev/null
+++ b/rabbitmq/image_crawler/writeToS3.py
@@ -0,0 +1,77 @@
+import boto3
+import mimetypes
+import os
+from botocore.client import Config
+
+client = boto3.client('s3', endpoint_url='http://' + os.environ['HOST_IP'] + ':9000',
+ aws_access_key_id = os.environ['AWS_ACCESSKEY'],
+ aws_secret_access_key = os.environ['AWS_ACCESSKEYSECRET'],
+ config=Config(signature_version='s3v4'))
+
+bucket_name = os.environ['BUCKET_NAME']
+
+def upload(localpath, remotepath, filename):
+ content_type = mimetypes.guess_type(os.path.join(localpath,filename))[0]
+ print(filename, content_type)
+ if content_type == None:
+ extra_args = {'ContentType':'application/octet-stream'}
+ else:
+ extra_args = {'ContentType':content_type}
+
+ client.upload_file(os.path.join(localpath, filename),
+ bucket_name,
+ os.path.join(remotepath, filename),
+ ExtraArgs=extra_args)
+
+
+def createDirectory(DirectoryName):
+ client.put_object(Bucket=bucket_name, Key=DirectoryName)
+
+
+def generate_downloads(remotepath, filename):
+ url = client.generate_presigned_url(
+ ClientMethod='get_object',
+ Params={
+ 'Bucket': bucket_name,
+ 'Key': os.path.join(remotepath, filename)
+ },
+ ExpiresIn=604800 # one week
+ )
+
+ return url
+
+
+def downloadToDisk(filename, localpath, remotepath):
+ with open(os.path.join(localpath, filename), 'wb') as f:
+ client.download_fileobj(bucket_name,
+ os.path.join(remotepath, filename), f)
+
+
+def getObject(remoteKey):
+ obj = client.get_object(Bucket=bucket_name, Key=remoteKey)
+
+
+def putObject(body, remoteKey):
+ # bytes or seekable file-like object
+ obj = client.put_object(Bucket=bucket_name,
+ Body=body, Key=remoteKey)
+ print(obj['Body'].read())
+
+def listDir(remoteClass):
+ objects = client.list_objects(Bucket=bucket_name,
+ Prefix=remoteClass,
+ Delimiter='/')
+ foldernames = []
+ for o in objects.get('CommonPrefixes'):
+ foldernames.append(o.get('Prefix'))
+
+ # only return the list of foldernames
+ return foldernames
+
+
+def listFiles(foldernames):
+ objects = client.list_objects(Bucket=bucket_name,
+ Prefix=foldernames)
+
+ # return rich information about the files
+ return objects.get('Contents')
diff --git a/rabbitmq/minio-nginx.conf b/rabbitmq/minio-nginx.conf
new file mode 100644
index 0000000..591f942
--- /dev/null
+++ b/rabbitmq/minio-nginx.conf
@@ -0,0 +1,98 @@
+user nginx;
+worker_processes auto;
+
+error_log /var/log/nginx/error.log warn;
+pid /var/run/nginx.pid;
+
+events {
+ worker_connections 4096;
+}
+
+http {
+ include /etc/nginx/mime.types;
+ default_type application/octet-stream;
+
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" '
+ '$status $body_bytes_sent "$http_referer" '
+ '"$http_user_agent" "$http_x_forwarded_for"';
+
+ access_log /var/log/nginx/access.log main;
+ sendfile on;
+ keepalive_timeout 65;
+
+ # include /etc/nginx/conf.d/*.conf;
+
+ upstream minio {
+ server minio:9000;
+ }
+
+ upstream console {
+ ip_hash;
+ server minio:9001;
+ }
+
+ server {
+ listen 9000;
+ listen [::]:9000;
+ server_name localhost;
+
+ # To allow special characters in headers
+ ignore_invalid_headers off;
+ # Allow any size file to be uploaded.
+ # Set to a value such as 1000m; to restrict file size to a specific value
+ client_max_body_size 0;
+ # To disable buffering
+ proxy_buffering off;
+
+ location / {
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+
+ proxy_connect_timeout 300;
+ # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
+ proxy_http_version 1.1;
+ proxy_set_header Connection "";
+ chunked_transfer_encoding off;
+
+ proxy_pass http://minio;
+ }
+ }
+
+ server {
+ listen 9001;
+ listen [::]:9001;
+ server_name localhost;
+
+ # To allow special characters in headers
+ ignore_invalid_headers off;
+ # Allow any size file to be uploaded.
+ # Set to a value such as 1000m; to restrict file size to a specific value
+ client_max_body_size 0;
+ # To disable buffering
+ proxy_buffering off;
+
+ location / {
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header X-NginX-Proxy true;
+
+ # This is necessary to pass the correct IP to be hashed
+ real_ip_header X-Real-IP;
+
+ proxy_connect_timeout 300;
+
+ # To support websocket
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+
+ chunked_transfer_encoding off;
+
+ proxy_pass http://console;
+ }
+ }
+}
diff --git a/rabbitmq/name_entity_recognition/LICENSE b/rabbitmq/name_entity_recognition/LICENSE
new file mode 100644
index 0000000..9cecc1d
--- /dev/null
+++ b/rabbitmq/name_entity_recognition/LICENSE
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ {one line to give the program's name and a brief idea of what it does.}
+ Copyright (C) {year} {name of author}
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ {project} Copyright (C) {year} {fullname}
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
diff --git a/rabbitmq/name_entity_recognition/algorithm.py b/rabbitmq/name_entity_recognition/algorithm.py
new file mode 100644
index 0000000..98f16f7
--- /dev/null
+++ b/rabbitmq/name_entity_recognition/algorithm.py
@@ -0,0 +1,93 @@
+import pandas as pd
+from run_ner import TwitterNER
+from twokenize import tokenizeRawTweetText
+import plot
+
+
+def algorithm(df=None, params=None):
+ """
+ wrapper function to put each individual algorithm inside
+ :param df: dataframe that contains all the input dataset
+ :param params: algorithm specific parameters
+ :return: a dictionary of { outputname: output content in memory }
+ """
+
+ output = {}
+
+ # user specify which column to; each row is a sentence, get a list of sentences
+ column = params['column']
+ sentences = df[df[column] != ''][column].dropna().astype('str').tolist()
+
+ entity_list = []
+ entity_freq = {}
+ entity_category = {}
+
+ # extract entities in each sentence
+ ner = TwitterNER()
+ for sentence in sentences:
+ tokens = tokenizeRawTweetText(sentence)
+ raw_entities = ner.get_entities(tokens)
+
+ entities = []
+ for entry in raw_entities:
+ # record entities
+ entity = " ".join(tokens[entry[0]:entry[1]])
+ category = entry[2]
+ entities.append((entity, category))
+
+ # record entity frequency
+ if entity not in entity_freq.keys():
+ entity_freq[entity] = 1
+ else:
+ entity_freq[entity] += 1
+
+ # record category
+ if category not in entity_category.keys():
+ entity_category[category] = 1
+ else:
+ entity_category[category] += 1
+
+ entity_list.append(entities)
+
+ # extract entities in each sentence
+ output['entity'] = entity_list
+
+ # plot bar chart of most frequent entities
+ output['freq'] = entity_freq
+
+ output['div_freq'] = plot.plot_bar_chart(list(entity_freq.keys())[:30],
+ list(entity_freq.values())[:30],
+ "Top 30 Most Frequent Name Entities")
+
+ # plot pie chart of entity categories
+ output['div_category'] = plot.plot_pie_chart(list(entity_category.keys()),
+ list(entity_category.values()),
+ "Name Entity Category Breakdowns")
+
+ return output
+
+
+if __name__ == '__main__':
+ """
+ help user with no access to AWS test their model
+ to test just run algorithm.py:
+ python3 algorithm.py
+ """
+
+ # download our example dataset and place it under the same directory of this script
+ df = pd.read_csv('example_dataset.csv')
+
+ # add your parameters needed by the analysis
+ params = {
+ "column": "text"
+ }
+
+ # execute your algorithm
+ output = algorithm(df, params)
+
+ # see if the outputs are what you desired
+ print(output.keys())
+ print(output['entity'][:5])
+ print(output['freq'])
+ print(output['div_freq'][:100])
+ print(output['div_category'][:100])
diff --git a/lambda/lambda_preprocessing_dev/lambda_function.py b/rabbitmq/name_entity_recognition/batch_function.py
similarity index 52%
rename from lambda/lambda_preprocessing_dev/lambda_function.py
rename to rabbitmq/name_entity_recognition/batch_function.py
index 42cee8f..63ba1ea 100644
--- a/lambda/lambda_preprocessing_dev/lambda_function.py
+++ b/rabbitmq/name_entity_recognition/batch_function.py
@@ -1,14 +1,31 @@
import dataset
+import argparse
+from notification import notification
from algorithm import algorithm
+if __name__ == '__main__':
-def lambda_handler(params, context):
- '''
- entrance to invoke AWS lambda,
- variable params contains parameters passed in
- '''
+ # entrance to invoke Batch
urls = {}
+ # default parameters
+ parser = argparse.ArgumentParser(description="processing...")
+ parser.add_argument('--remoteReadPath', required=True)
+ parser.add_argument('--column', required=True)
+ parser.add_argument('--s3FolderName', required=True)
+ parser.add_argument('--uid', required=True)
+ parser.add_argument('--resultPath', required=True)
+ parser.add_argument('--email', required=True)
+ parser.add_argument('--sessionURL', required=True)
+
+ # user specified parameters
+ parsed, unknown = parser.parse_known_args()
+ for arg in unknown:
+ if arg.startswith("--"):
+ parser.add_argument(arg, required=False)
+
+ params = vars(parser.parse_args())
+
# arranging the paths
path = dataset.organize_path_lambda(params)
@@ -17,6 +34,7 @@ def lambda_handler(params, context):
path['remoteSavePath'],
'config',
params)
+
# prepare input dataset
df = dataset.get_remote_input(path['remoteReadPath'],
path['filename'],
@@ -35,4 +53,6 @@ def lambda_handler(params, context):
else:
urls[key] = value
- return urls
+ # push notification email
+ notification(toaddr=params['email'], case=3, filename=path['remoteSavePath'],
+ links=urls, sessionURL=params['sessionURL'])
diff --git a/rabbitmq/name_entity_recognition/clear_cache.sh b/rabbitmq/name_entity_recognition/clear_cache.sh
new file mode 100644
index 0000000..640c2ac
--- /dev/null
+++ b/rabbitmq/name_entity_recognition/clear_cache.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+CACHEDIR=/tmp
+
+# delete file older than 4 hours
+find "$CACHEDIR" -maxdepth 1 -mindepth 1 -type d -mmin +240 -print0 |
+ while IFS= read -d '' -r dir; do
+ rm -rf "$dir"
+ done
\ No newline at end of file
diff --git a/rabbitmq/name_entity_recognition/clear_cache_cron b/rabbitmq/name_entity_recognition/clear_cache_cron
new file mode 100644
index 0000000..0510c51
--- /dev/null
+++ b/rabbitmq/name_entity_recognition/clear_cache_cron
@@ -0,0 +1 @@
+0 * * * * /bin/bash /scripts/clear_cache.sh
diff --git a/rabbitmq/name_entity_recognition/command.txt b/rabbitmq/name_entity_recognition/command.txt
new file mode 100644
index 0000000..946b8bd
--- /dev/null
+++ b/rabbitmq/name_entity_recognition/command.txt
@@ -0,0 +1 @@
+docker build -t socialmediamacroscope/name_entity_recognition:latest .
\ No newline at end of file
diff --git a/rabbitmq/name_entity_recognition/conlleval.py b/rabbitmq/name_entity_recognition/conlleval.py
new file mode 100644
index 0000000..2d8fb29
--- /dev/null
+++ b/rabbitmq/name_entity_recognition/conlleval.py
@@ -0,0 +1,259 @@
+#!/usr/bin/env python
+
+## Original script taken from https://github.com/spyysalo/conlleval.py
+## Modifications made by Shubhanshu Mishra to support notypes argument and functional api
+
+# Python version of the evaluation script from CoNLL'00-
+
+# Intentional differences:
+# - accept any space as delimiter by default
+# - optional file argument (default STDIN)
+# - option to set boundary (-b argument)
+# - LaTeX output (-l argument) not supported
+# - raw tags (-r argument) not supported
+
+import re
+import sys
+from collections import defaultdict, namedtuple
+
+ANY_SPACE = ''
+
+class FormatError(Exception):
+ pass
+
+Metrics = namedtuple('Metrics', 'tp fp fn prec rec fscore')
+
+class EvalCounts(object):
+ def __init__(self):
+ self.correct_chunk = 0 # number of correctly identified chunks
+ self.correct_tags = 0 # number of correct chunk tags
+ self.found_correct = 0 # number of chunks in corpus
+ self.found_guessed = 0 # number of identified chunks
+ self.token_counter = 0 # token counter (ignores sentence breaks)
+
+ # counts by type
+ self.t_correct_chunk = defaultdict(int)
+ self.t_found_correct = defaultdict(int)
+ self.t_found_guessed = defaultdict(int)
+
+def parse_args(argv):
+ import argparse
+ parser = argparse.ArgumentParser(
+ description='evaluate tagging results using CoNLL criteria',
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter
+ )
+ arg = parser.add_argument
+ arg('-b', '--boundary', metavar='STR', default='-X-',
+ help='sentence boundary')
+ arg('-d', '--delimiter', metavar='CHAR', default=ANY_SPACE,
+ help='character delimiting items in input')
+ arg('-o', '--otag', metavar='CHAR', default='O',
+ help='alternative outside tag')
+ arg('-t', '--no-types', action='store_const', const=True, default=False,
+ help='evaluate without entity types')
+ arg('file', nargs='?', default=None)
+ return parser.parse_args(argv)
+
+def parse_tag(t):
+ m = re.match(r'^([^-]*)-(.*)$', t)
+ return m.groups() if m else (t, '')
+
+def evaluate(iterable, options=None):
+ if options is None:
+ options = parse_args([]) # use defaults
+ counts = EvalCounts()
+ num_features = None # number of features per line
+ in_correct = False # currently processed chunks is correct until now
+ last_correct = 'O' # previous chunk tag in corpus
+ last_correct_type = '' # type of previously identified chunk tag
+ last_guessed = 'O' # previously identified chunk tag
+ last_guessed_type = '' # type of previous chunk tag in corpus
+ new_sent=True
+
+ for line in iterable:
+ line = line.rstrip('\r\n')
+
+ if options.delimiter == ANY_SPACE:
+ features = line.split()
+ else:
+ features = line.split(options.delimiter)[-2:]
+
+ if num_features is None:
+ num_features = len(features)
+ elif num_features != len(features) and len(features) != 0:
+ raise FormatError('unexpected number of features: %d (%d)' %
+ (len(features), num_features))
+
+ if len(features) == 0 or features[0] == options.boundary:
+ features = ['O', 'O']
+ new_sent=True
+ else:
+ new_sent=False
+ if len(features) < 2:
+ raise FormatError('unexpected number of features in line %s' % line)
+
+ guessed, guessed_type = parse_tag(features.pop())
+ correct, correct_type = parse_tag(features.pop())
+ if options.no_types:
+ guessed_type = ''
+ correct_type = ''
+
+ if new_sent:
+ guessed = 'O'
+
+ end_correct = end_of_chunk(last_correct, correct,
+ last_correct_type, correct_type)
+ end_guessed = end_of_chunk(last_guessed, guessed,
+ last_guessed_type, guessed_type)
+ start_correct = start_of_chunk(last_correct, correct,
+ last_correct_type, correct_type)
+ start_guessed = start_of_chunk(last_guessed, guessed,
+ last_guessed_type, guessed_type)
+
+ if in_correct:
+ if (end_correct and end_guessed and
+ last_guessed_type == last_correct_type):
+ in_correct = False
+ counts.correct_chunk += 1
+ counts.t_correct_chunk[last_correct_type] += 1
+ elif (end_correct != end_guessed or guessed_type != correct_type):
+ in_correct = False
+
+ if start_correct and start_guessed and guessed_type == correct_type:
+ in_correct = True
+
+ if start_correct:
+ counts.found_correct += 1
+ counts.t_found_correct[correct_type] += 1
+ if start_guessed:
+ counts.found_guessed += 1
+ counts.t_found_guessed[guessed_type] += 1
+ if not new_sent:
+ if correct == guessed and guessed_type == correct_type:
+ counts.correct_tags += 1
+ counts.token_counter += 1
+
+ last_guessed = guessed
+ last_correct = correct
+ last_guessed_type = guessed_type
+ last_correct_type = correct_type
+
+ if in_correct:
+ counts.correct_chunk += 1
+ counts.t_correct_chunk[last_correct_type] += 1
+
+ return counts
+
+def uniq(iterable):
+ seen = set()
+ return [i for i in iterable if not (i in seen or seen.add(i))]
+
+def calculate_metrics(correct, guessed, total):
+ tp, fp, fn = correct, guessed-correct, total-correct
+ p = 0 if tp + fp == 0 else 1.*tp / (tp + fp)
+ r = 0 if tp + fn == 0 else 1.*tp / (tp + fn)
+ f = 0 if p + r == 0 else 2 * p * r / (p + r)
+ return Metrics(tp, fp, fn, p, r, f)
+
+def metrics(counts):
+ c = counts
+ overall = calculate_metrics(
+ c.correct_chunk, c.found_guessed, c.found_correct
+ )
+ by_type = {}
+ for t in uniq(c.t_found_correct.keys() + c.t_found_guessed.keys()):
+ by_type[t] = calculate_metrics(
+ c.t_correct_chunk[t], c.t_found_guessed[t], c.t_found_correct[t]
+ )
+ return overall, by_type
+
+def report(counts, out=None):
+ if out is None:
+ out = sys.stdout
+
+ overall, by_type = metrics(counts)
+
+ c = counts
+ out.write('processed %d tokens with %d phrases; ' %
+ (c.token_counter, c.found_correct))
+ out.write('found: %d phrases; correct: %d.\n' %
+ (c.found_guessed, c.correct_chunk))
+
+ if c.token_counter > 0:
+ out.write('accuracy: %6.2f%%; ' %
+ (100.*c.correct_tags/c.token_counter))
+ out.write('precision: %6.2f%%; ' % (100.*overall.prec))
+ out.write('recall: %6.2f%%; ' % (100.*overall.rec))
+ out.write('FB1: %6.2f\n' % (100.*overall.fscore))
+
+ for i, m in sorted(by_type.items()):
+ out.write('%17s: ' % i)
+ out.write('precision: %6.2f%%; ' % (100.*m.prec))
+ out.write('recall: %6.2f%%; ' % (100.*m.rec))
+ out.write('FB1: %6.2f %d\n' % (100.*m.fscore, c.t_found_guessed[i]))
+
+def end_of_chunk(prev_tag, tag, prev_type, type_):
+ # check if a chunk ended between the previous and current word
+ # arguments: previous and current chunk tags, previous and current types
+ chunk_end = False
+
+ if prev_tag == 'E': chunk_end = True
+ if prev_tag == 'U': chunk_end = True
+
+ if prev_tag == 'B' and tag == 'B': chunk_end = True
+ if prev_tag == 'B' and tag == 'U': chunk_end = True
+ if prev_tag == 'B' and tag == 'O': chunk_end = True
+ if prev_tag == 'I' and tag == 'B': chunk_end = True
+ if prev_tag == 'I' and tag == 'U': chunk_end = True
+ if prev_tag == 'I' and tag == 'O': chunk_end = True
+
+ if prev_tag != 'O' and prev_tag != '.' and prev_type != type_:
+ chunk_end = True
+
+ # these chunks are assumed to have length 1
+ if prev_tag == ']': chunk_end = True
+ if prev_tag == '[': chunk_end = True
+
+ return chunk_end
+
+def start_of_chunk(prev_tag, tag, prev_type, type_):
+ # check if a chunk started between the previous and current word
+ # arguments: previous and current chunk tags, previous and current types
+ chunk_start = False
+
+ if tag == 'B': chunk_start = True
+ if tag == 'U': chunk_start = True
+
+ if prev_tag == 'E' and tag == 'E': chunk_start = True
+ if prev_tag == 'E' and tag == 'I': chunk_start = True
+ if prev_tag == 'U' and tag == 'E': chunk_start = True
+ if prev_tag == 'U' and tag == 'I': chunk_start = True
+ if prev_tag == 'O' and tag == 'E': chunk_start = True
+ if prev_tag == 'O' and tag == 'I': chunk_start = True
+
+ if tag != 'O' and tag != '.' and prev_type != type_:
+ chunk_start = True
+
+ # these chunks are assumed to have length 1
+ if tag == '[': chunk_start = True
+ if tag == ']': chunk_start = True
+
+ return chunk_start
+
+def evaluate_from_file(args, outstream=None):
+ with open(args.file, encoding="utf-8", errors="ignore") as f:
+ counts = evaluate(f, args)
+ report(counts, outstream)
+
+def main(argv):
+ args = parse_args(argv[1:])
+
+ if args.file is None:
+ counts = evaluate(sys.stdin, args)
+ else:
+ with open(args.file, encoding="utf-8", errors="ignore") as f:
+ counts = evaluate(f, args)
+ report(counts)
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
diff --git a/rabbitmq/name_entity_recognition/data/50mpaths2 b/rabbitmq/name_entity_recognition/data/50mpaths2
new file mode 100644
index 0000000..96aa63c
--- /dev/null
+++ b/rabbitmq/name_entity_recognition/data/50mpaths2
@@ -0,0 +1,216856 @@
+0000 2)i 40
+0000 \i 40
+0000 /i/ 40
+0000 today-i 41
+0000 nowi 41
+0000 #youever 47
+0000 ifinally 47
+0000 「i 47
+0000 -i- 49
+0000 ineva 49
+0000 »i 50
+0000 whattaya 53
+0000 iiiiiiiiii 53
+0000 56
+0000 ikinda 60
+0000 lol-i 61
+0000 iactually 64
+0000 waddya 68
+0000 #aslongasyou 69
+0000 doyou 69
+0000 i 72
+0000 i̇ 75
+0000 ï 81
+0000 #lolatgirlswho 90
+0000 #rtifyou 94
+0000 ijst 96
+0000 «i 99
+0000 •i 101
+0000 whoda 102
+0000 whadya 102
+0000 )i 106
+0000 +i 111
+0000 #yourfacemakesme 114
+0000 iiiiiiii 117
+0000 `i 117
+0000 iiiiiii 121
+0000 ialready 121
+0000 _i 121
+0000 #youmakeme 123
+0000 *i 126
+0000 |i 132
+0000 #urboyfriendever 142
+0000 wheni 151
+0000 ι 158
+0000 don'tcha 159
+0000 who'da 178
+0000 dyou 187
+0000 whaddaya 192
+0000 ionly 211
+0000 ijuss 236
+0000 ialways 241
+0000 iiiii 254
+0000 doncha 261
+0000 (i 293
+0000 d'ya 295
+0000 ı 305
+0000 #uever 347
+0000 inever 362
+0000 i-i 393
+0000 ijus 424
+0000 //i 438
+0000 istill 477
+0000 whaddya 511
+0000 d'you 527
+0000 ireally 705
+0000 dontcha 872
+0000 ijust 1446
+0000 i 17071657
+0000 -i 4254
+000100 iyou 41
+000100 #innowayshapeorform 41
+000100 (you 44
+000100 //we 50
+000100 //u 58
+000100 #menmarrywomenthat 61
+000100 /we 76
+000100 self-education 83
+000100 #realgrandmas 89
+000100 /you 90
+000100 #shoutouttogirlswho 92
+000100 #boyswho 92
+000100 i/we 95
+000100 #shoutouttotheguysthat 105
+000100 //you 106
+000100 #ilovepeoplethat 119
+000100 #notallblackpeople 167
+000100 #icantstandpeoplethat 183
+000100 #shoutouttothegirlsthat 247
+000100 -they 291
+000100 -we 556
+000100 #howmanypeople 614
+000100 -you 980
+000100 we 1905069
+000100 #aquarians 1169
+000101 tthey 40
+000101 thwy 42
+000101 guildenstern 42
+000101 d'u 44
+000101 #ihatemaleswho 44
+000101 tehy 83
+000101 thry 96
+000101 ifyou 106
+000101 #househippos 109
+000101 theu 117
+000101 theey 232
+000101 #ihatefemaleswho 655
+000101 theyy 1121
+000101 they 1481648
+000101 violets 2302
+000110 eho 40
+000110 who’d 49
+000110 whotf 49
+000110 who’ve 74
+000110 whod 100
+000110 102
+000110 #ilikepeoplewho 158
+000110 -who 265
+000110 wh0 390
+000110 whu 531
+000110 who 1101165
+000110 who've 1987
+0001110 sshe 43
+0001110 ser-ueberwacher 43
+0001110 shhe 47
+0001110 testasterisk 47
+0001110 #mydumbass 48
+0001110 sje 48
+0001110 tachomaster 49
+0001110 ialmost 51
+0001110 idone 53
+0001110 #whatifi 56
+0001110 he/she/it 57
+0001110 $he 68
+0001110 #whatifgod 78
+0001110 #iheardchucknorris 80
+0001110 #fmh2011 87
+0001110 #iheardbowwow 92
+0001110 bld_600_kwh 172
+0001110 bld_650_kwh 196
+0001110 sheee 218
+0001110 #fm2011 234
+0001110 -she 370
+0001110 -he 427
+0001110 s/he 438
+0001110 she/he 446
+0001110 -it 453
+0001110 shee 1887
+0001110 he/she 2959
+0001110 he 1314139
+0001110 she 933409
+0001111 40
+0001111 l've 42
+0001111 theyv 42
+0001111 you\'ve 42
+0001111 i'be 43
+0001111 44
+0001111 iwoulda 48
+0001111 we`ve 48
+0001111 ihaven't 52
+0001111 #ihavenever 53
+0001111 a:i've 54
+0001111 wev 54
+0001111 we´ve 57
+0001111 yu've 63
+0001111 u’ve 70
+0001111 -i've 78
+0001111 there've 78
+0001111 i'da 81
+0001111 83
+0001111 that've 91
+0001111 we'v 93
+0001111 you´ve 100
+0001111 ivee 106
+0001111 i'd've 114
+0001111 you`ve 114
+0001111 i\'ve 118
+0001111 youv 121
+0001111 you'v 122
+0001111 #neverhaveiever 143
+0001111 u'v 164
+0001111 174
+0001111 ihavent 286
+0001111 iv'e 320
+0001111 they’ve 393
+0001111 #haveyouever 435
+0001111 i´ve 544
+0001111 i`ve 630
+0001111 #haveuever 751
+0001111 theyve 773
+0001111 i'v 824
+0001111 0.00% 911
+0001111 weve 1046
+0001111 uve 1926
+0001111 we’ve 2372
+0001111 u've 3538
+0001111 you’ve 3682
+0001111 youve 4246
+0001111 i’ve 7381
+0001111 they've 19184
+0001111 i've 468432
+0001111 ive 58377
+0001111 you've 93343
+0001111 we've 46035
+001000 noooooot 44
+001000 nottttttt 44
+001000 noht 44
+001000 youhave 50
+001000 /not/ 62
+001000 noit 65
+001000 -not- 72
+001000 notttttt 76
+001000 nooooot 81
+001000 n't 82
+001000 nnot 82
+001000 naht 104
+001000 _not_ 121
+001000 deservedly 134
+001000 nottttt 144
+001000 noooot 165
+001000 not- 192
+001000 nooot 202
+001000 noot 244
+001000 nto 293
+001000 notttt 293
+001000 nottt 445
+001000 rightfully 447
+001000 nawt 465
+001000 n0t 898
+001000 nott 1464
+001000 not 2772499
+001000 nt 16893
+001001 gottn 40
+001001 b33n 61
+001001 beeeeeen 62
+001001 gotton 69
+001001 successfuly 77
+001001 beeeeen 102
+001001 beenn 164
+001001 undergone 186
+001001 beeeen 219
+001001 beeen 1058
+001001 been 883361
+001001 gotten 26892
+0010100 juxt 40
+0010100 //just 41
+0010100 justtttt 41
+0010100 jxt 42
+0010100 #sporcle 43
+0010100 jstt 44
+0010100 jurt 45
+0010100 jys 47
+0010100 /just 48
+0010100 -jus 51
+0010100 jyst 53
+0010100 ddeubel 66
+0010100 justttt 67
+0010100 jusssst 69
+0010100 ju$t 76
+0010100 juus 77
+0010100 jsst 83
+0010100 juuuuust 84
+0010100 kust 92
+0010100 jhus 102
+0010100 jussss 103
+0010100 jhuss 105
+0010100 justs 106
+0010100 jussst 116
+0010100 jusx 117
+0010100 juxx 138
+0010100 jzt 143
+0010100 juzz 146
+0010100 judt 152
+0010100 155
+0010100 juhs 157
+0010100 juuuust 168
+0010100 jjust 178
+0010100 juzt 180
+0010100 justtt 180
+0010100 justed 196
+0010100 jusr 213
+0010100 juuust 230
+0010100 juts 237
+0010100 jusy 285
+0010100 juust 334
+0010100 juat 353
+0010100 jusz 396
+0010100 #just 406
+0010100 jss 414
+0010100 jusss 438
+0010100 528
+0010100 jusst 591
+0010100 jz 668
+0010100 -just 692
+0010100 #dontactlikeyounever 909
+0010100 jut 1078
+0010100 justt 1257
+0010100 jux 1274
+0010100 jsut 1566
+0010100 juz 3455
+0010100 jst 17577
+0010100 juss 18713
+0010100 just 3486219
+0010100 jus 136458
+001010100 ain\'t 43
+001010100 ain´t 44
+001010100 a'int 46
+001010100 aitn 47
+001010100 ainy 57
+001010100 wusz 61
+001010100 aynt 72
+001010100 ainnt 84
+001010100 iant 93
+001010100 an't 140
+001010100 aine 203
+001010100 ain`t 243
+001010100 ainn 366
+001010100 aintt 373
+001010100 aiint 551
+001010100 iaint 1101
+001010100 ain’t 1287
+001010100 anit 2322
+001010100 ain 4820
+001010100 aint 175550
+001010100 ain't 145856
+001010101 shouda 40
+001010101 shouldna 40
+001010101 shoula 40
+001010101 wouldn't've 41
+001010101 shouldn't've 42
+001010101 shouldv 43
+001010101 shud've 43
+001010101 hant 44
+001010101 hav'nt 59
+001010101 clda 60
+001010101 wldve 61
+001010101 should'a 64
+001010101 wouldaa 65
+001010101 shouldda 65
+001010101 wuldve 66
+001010101 wud've 67
+001010101 wouldda 71
+001010101 shuldve 72
+001010101 shouldaa 73
+001010101 have't 74
+001010101 could’ve 74
+001010101 haventt 74
+001010101 shldve 88
+001010101 cudve 90
+001010101 may've 96
+001010101 hvn't 97
+001010101 would’ve 110
+001010101 avnt 117
+001010101 wlda 122
+001010101 should’ve 128
+001010101 culda 132
+001010101 haven´t 140
+001010101 shlda 147
+001010101 mightve 154
+001010101 haven`t 166
+001010101 hadn’t 167
+001010101 #glocalurban 172
+001010101 hvent 173
+001010101 shudve 193
+001010101 wudve 199
+001010101 have'nt 204
+001010101 cudda 229
+001010101 mighta 294
+001010101 wulda 300
+001010101 shulda 329
+001010101 wudda 506
+001010101 shudda 553
+001010101 wuda 587
+001010101 shuda 695
+001010101 mustve 745
+001010101 hvnt 779
+001010101 might've 1070
+001010101 hadnt 1102
+001010101 havn't 1588
+001010101 haven’t 1638
+001010101 couldve 2142
+001010101 musta 2159
+001010101 must've 3164
+001010101 wouldve 3752
+001010101 shouldve 3972
+001010101 havnt 5227
+001010101 coulda 6009
+001010101 could've 7435
+001010101 woulda 10061
+001010101 hadn't 11899
+001010101 should've 12997
+001010101 would've 13043
+001010101 shoulda 14114
+001010101 haven't 170431
+001010101 havent 38303
+001010110 nevva 40
+001010110 neeeever 41
+001010110 nevet 42
+001010110 neeever 47
+001010110 enver 49
+001010110 nerver 55
+001010110 neever 66
+001010110 nevaaa 76
+001010110 bever 85
+001010110 #inever 87
+001010110 glady 89
+001010110 neveer 93
+001010110 -never 138
+001010110 ne'er 140
+001010110 letcha 158
+001010110 letchu 188
+001010110 neverrrr 265
+001010110 nva 293
+001010110 nevah 297
+001010110 nevaa 315
+001010110 neverrr 333
+001010110 nver 420
+001010110 neverr 425
+001010110 #never 655
+001010110 nevr 1251
+001010110 gladly 2864
+001010110 nvr 4996
+001010110 never 687647
+001010110 neva 18401
+001010111 evur 40
+001010111 evaaaaa 49
+001010111 evea 53
+001010111 eveeeer 53
+001010111 everrrrrrrrr 61
+001010111 everrrrrrrr 74
+001010111 eveeer 76
+001010111 evaaaa 96
+001010111 eveer 111
+001010111 nevar 124
+001010111 everrrrrrr 158
+001010111 evaaa 164
+001010111 evaa 257
+001010111 everrrrrr 270
+001010111 everrrrr 526
+001010111 evah 804
+001010111 everrrr 888
+001010111 everr 921
+001010111 everrr 1198
+001010111 evr 1344
+001010111 evar 1766
+001010111 eva 12435
+001010111 ever 482832
+00101100 onle 43
+00101100 inly 43
+00101100 onlee 44
+00101100 onlu 47
+00101100 onyl 50
+00101100 onlly 66
+00101100 onlt 68
+00101100 onlyyy 99
+00101100 olny 132
+00101100 -only 164
+00101100 0nly 230
+00101100 onlii 323
+00101100 ony 354
+00101100 onlyy 583
+00101100 only 830131
+00101100 onli 1606
+00101101 get2 42
+00101101 neccesarily 46
+00101101 neccessarily 48
+00101101 eeem 50
+00101101 evern 50
+00101101 neven 53
+00101101 letem 55
+00101101 evennn 59
+00101101 eveb 60
+00101101 eeen 63
+00101101 evem 72
+00101101 eveen 77
+00101101 80
+00101101 -even 94
+00101101 10x's 100
+00101101 make'em 114
+00101101 let'em 199
+00101101 evenn 329
+00101101 eem 383
+00101101 evn 2847
+00101101 even 583243
+00101101 necessarily 4567
+00101110 reeeeeeeally 40
+00101110 reaaaly 40
+00101110 realllllllllly 41
+00101110 rli 43
+00101110 reallie 45
+00101110 realllllyyy 45
+00101110 reeli 46
+00101110 r3ally 46
+00101110 reallllyy 47
+00101110 really-really 47
+00101110 relaly 50
+00101110 reallllyyyy 51
+00101110 rilli 53
+00101110 reallyreallyreally 54
+00101110 -really- 56
+00101110 reallyyyyyy 57
+00101110 reaallyy 57
+00101110 eally 58
+00101110 reeeaaally 58
+00101110 reallyreally 63
+00101110 reeaally 66
+00101110 rreally 66
+00101110 reaaaallly 69
+00101110 reallu 70
+00101110 reaaaaaally 71
+00101110 /really/ 73
+00101110 realyy 74
+00101110 reaallly 75
+00101110 reallllllllly 78
+00101110 reallllyyy 88
+00101110 reaaallly 92
+00101110 weally 94
+00101110 reeeeeeally 99
+00101110 realllyyyy 106
+00101110 relli 108
+00101110 genuinly 115
+00101110 reallt 118
+00101110 reallii 121
+00101110 realllyy 130
+00101110 reaaly 131
+00101110 realllllllly 134
+00101110 _really_ 136
+00101110 reallyyyyy 140
+00101110 really2 169
+00101110 shole 172
+00101110 reaaaaally 174
+00101110 reely 175
+00101110 relle 175
+00101110 realllyyy 176
+00101110 shol 184
+00101110 reeally 187
+00101110 reeeeeally 217
+00101110 reallllllly 235
+00101110 rilly 237
+00101110 reallyyyy 306
+00101110 reaaaally 326
+00101110 reaaally 329
+00101110 rili 343
+00101110 reeeally 392
+00101110 reaally 414
+00101110 realllllly 419
+00101110 reeeeally 432
+00101110 reallyyy 494
+00101110 rily 505
+00101110 sholl 568
+00101110 reali 599
+00101110 reli 665
+00101110 reallllly 666
+00101110 relly 746
+00101110 realli 928
+00101110 rele 967
+00101110 reallyy 1017
+00101110 realllly 1041
+00101110 reallly 2793
+00101110 rlly 3292
+00101110 genuinely 4274
+00101110 realy 5064
+00101110 really 1071704
+00101110 rly 5205
+0010111100 alreday 44
+0010111100 alreayd 45
+0010111100 finali 48
+0010111100 offish 55
+0010111100 alrady 58
+0010111100 wooda 60
+0010111100 oredi 61
+0010111100 alreaady 67
+0010111100 alreadyyyyy 68
+0010111100 alreaddy 69
+0010111100 aleady 134
+0010111100 alreay 140
+0010111100 sucessfully 149
+0010111100 alredi 159
+0010111100 aready 184
+0010111100 alreadi 235
+0010111100 alreadii 250
+0010111100 alread 283
+0010111100 alreadyyy 298
+0010111100 awready 321
+0010111100 alrd 392
+0010111100 cuda 409
+0010111100 alredy 675
+0010111100 allready 862
+0010111100 alreadyy 902
+0010111100 alrdy 1749
+0010111100 previously 4225
+0010111100 already 306450
+0010111100 recently 31408
+00101111010 -almost 40
+00101111010 nealy 40
+00101111010 nearlly 47
+00101111010 alm0st 54
+00101111010 alomost 56
+00101111010 alomst 72
+00101111010 almostt 79
+00101111010 almsot 90
+00101111010 amost 136
+00101111010 allmost 144
+00101111010 almst 228
+00101111010 averaging 699
+00101111010 roughly 2527
+00101111010 virtually 2742
+00101111010 approximately 2747
+00101111010 practically 5209
+00101111010 almost 180323
+00101111010 nearly 37872
+001011110110 sibby 45
+001011110110 currenty 53
+001011110110 officailly 70
+001011110110 offcially 88
+001011110110 #bggplay 95
+001011110110 curently 119
+001011110110 busily 127
+001011110110 officaly 131
+001011110110 oficially 167
+001011110110 cordially 212
+001011110110 214
+001011110110 223
+001011110110 huckleberries 249
+001011110110 heise 328
+001011110110 #readcast 715
+001011110110 presently 725
+001011110110 officialy 759
+001011110110 928
+001011110110 offically 1784
+001011110110 reportedly 3682
+001011110110 officially 50918
+001011110110 currently 69715
+001011110111 finalllyy 41
+001011110111 finalli 42
+001011110111 finalllyyy 50
+001011110111 #officially 52
+001011110111 fiiiinally 53
+001011110111 fnally 57
+001011110111 finallyyyyy 58
+001011110111 fiinally 68
+001011110111 -finally 70
+001011110111 berly 70
+001011110111 finalllllly 79
+001011110111 #thingsididoverthesummer 104
+001011110111 113
+001011110111 finallllly 120
+001011110111 finially 130
+001011110111 snackfeed 135
+001011110111 finallyyyy 143
+001011110111 finalllly 152
+001011110111 fianlly 189
+001011110111 199
+001011110111 finallyyy 208
+001011110111 succesfully 231
+001011110111 finallyy 287
+001011110111 #myfitnesspal 382
+001011110111 finnally 401
+001011110111 414
+001011110111 finallly 512
+001011110111 reluctantly 564
+001011110111 finnaly 683
+001011110111 1001
+001011110111 finaly 2012
+001011110111 finally 260065
+001011110111 successfully 7777
+001011111000 knowest 41
+001011111000 rathr 46
+001011111000 canst 54
+001011111000 93
+001011111000 ratha 119
+001011111000 rather 90633
+001011111000 shalt 1079
+001011111001 dont'cha 40
+001011111001 iion 40
+001011111001 immo 41
+001011111001 4+4 41
+001011111001 iib 43
+001011111001 idontt 45
+001011111001 brinjal 45
+001011111001 idon 45
+001011111001 thell 45
+001011111001 2i 46
+001011111001 nust 48
+001011111001 abta 48
+001011111001 leys 50
+001011111001 me+you 51
+001011111001 lemma 51
+001011111001 shoulds 52
+001011111001 welli 52
+001011111001 i/ii 54
+001011111001 didst 55
+001011111001 1i 56
+001011111001 charset 57
+001011111001 uld 58
+001011111001 d/n 59
+001011111001 í 59
+001011111001 f.i.n.a.l.s. 60
+001011111001 iown 60
+001011111001 iid 61
+001011111001 non-virgin 62
+001011111001 skyhawk 63
+001011111001 skylane 68
+001011111001 ch_type 68
+001011111001 kenot 72
+001011111001 dinny 72
+001011111001 #idont 75
+001011111001 -ii 75
+001011111001 #yamamaever 77
+001011111001 2010/07 78
+001011111001 2010/05 78
+001011111001 c.l.a.s.s. 79
+001011111001 &i 83
+001011111001 ifu 84
+001011111001 fmt 84
+001011111001 thati 86
+001011111001 lemi 88
+001011111001 #mygoalfor2012 90
+001011111001 yud 93
+001011111001 ebu 94
+001011111001 botta 95
+001011111001 money-back 96
+001011111001 19t 97
+001011111001 i8 97
+001011111001 #onlyfatpeople 99
+001011111001 #thingsiaintdoneyet 99
+001011111001 dontchu 104
+001011111001 sge 104
+001011111001 ifi 105
+001011111001 ild 109
+001011111001 #confusingthingsgirlsdo 110
+001011111001 _i_ 111
+001011111001 muz 120
+001011111001 cani 122
+001011111001 #urgirlfriendever 123
+001011111001 i-i-i 124
+001011111001 #onlyuglypeople 129
+001011111001 2010/12 135
+001011111001 letts 141
+001011111001 neer 147
+001011111001 2010/10 152
+001011111001 2010/04 164
+001011111001 cyaa 168
+001011111001 sont 180
+001011111001 2010/08 198
+001011111001 donn 202
+001011111001 2010/06 203
+001011111001 apt-get 205
+001011111001 uon 222
+001011111001 doan 272
+001011111001 dost 317
+001011111001 #onlywhitepeople 343
+001011111001 iiii 363
+001011111001 #thingsblackpeopledo 378
+001011111001 idw 384
+001011111001 2+2 466
+001011111001 ine 614
+001011111001 hast 648
+001011111001 ididnt 700
+001011111001 1+1 827
+001011111001 hed 1031
+001011111001 provoking 1169
+001011111001 idnt 1706
+001011111001 ul 1752
+001011111001 uma 1863
+001011111001 wd 2023
+001011111001 ud 2682
+001011111001 iii 8861
+001011111001 ll 9401
+001011111001 iv 12303
+001011111001 ion 16076
+001011111001 ii 50299
+001011111001 id 45239
+001011111010 practicaly 40
+001011111010 ussually 41
+001011111010 accidentially 43
+001011111010 sudenly 43
+001011111010 tearfully 44
+001011111010 usuallly 44
+001011111010 naively 45
+001011111010 reflexively 46
+001011111010 optionally 46
+001011111010 like2 46
+001011111010 continuosly 47
+001011111010 unwisely 49
+001011111010 practicly 51
+001011111010 atually 53
+001011111010 actly 58
+001011111010 purposly 58
+001011111010 secretely 59
+001011111010 hardley 59
+001011111010 automaticaly 59
+001011111010 conceivably 60
+001011111010 absentmindedly 61
+001011111010 actualli 61
+001011111010 litrally 61
+001011111010 subconciously 62
+001011111010 constanly 65
+001011111010 literly 67
+001011111010 doint 67
+001011111010 makem 68
+001011111010 supposely 71
+001011111010 actuallyy 72
+001011111010 actuly 73
+001011111010 goanna 74
+001011111010 bascially 74
+001011111010 pratically 79
+001011111010 iive 80
+001011111010 supposably 81
+001011111010 basicaly 83
+001011111010 erroneously 86
+001011111010 flatly 87
+001011111010 casj 89
+001011111010 legitly 90
+001011111010 litterly 90
+001011111010 mussy 91
+001011111010 orginally 92
+001011111010 donr 95
+001011111010 inadvertantly 100
+001011111010 actally 101
+001011111010 actuali 103
+001011111010 ususally 107
+001011111010 accually 108
+001011111010 intuitively 109
+001011111010 automaticly 111
+001011111010 grudgingly 119
+001011111010 begrudgingly 121
+001011111010 scarcely 124
+001011111010 barly 125
+001011111010 litteraly 127
+001011111010 blatently 137
+001011111010 habitually 145
+001011111010 ordinarily 145
+001011111010 affectionately 150
+001011111010 sneakily 158
+001011111010 accidentaly 173
+001011111010 normaly 197
+001011111010 singlehandedly 201
+001011111010 compulsively 204
+001011111010 subliminally 220
+001011111010 involuntarily 223
+001011111010 actuallly 232
+001011111010 gine 238
+001011111010 definitively 238
+001011111010 usualy 248
+001011111010 literaly 259
+001011111010 bravely 270
+001011111010 acctually 278
+001011111010 acually 294
+001011111010 basicly 307
+001011111010 haff 310
+001011111010 instinctively 314
+001011111010 unconsciously 315
+001011111010 single-handedly 316
+001011111010 slyly 327
+001011111010 actaully 328
+001011111010 drunkenly 331
+001011111010 acutally 355
+001011111010 foolishly 356
+001011111010 bearly 356
+001011111010 purposefully 359
+001011111010 jokingly 380
+001011111010 routinely 406
+001011111010 knowingly 410
+001011111010 subconsciously 432
+001011111010 unknowingly 448
+001011111010 actully 463
+001011111010 miraculously 518
+001011111010 litterally 613
+001011111010 collectively 635
+001011111010 traditionally 644
+001011111010 inadvertently 645
+001011111010 mistakenly 697
+001011111010 voluntarily 703
+001011111010 blindly 711
+001011111010 indirectly 796
+001011111010 spontaneously 840
+001011111010 willingly 870
+001011111010 hereby 917
+001011111010 gradually 1098
+001011111010 actualy 1154
+001011111010 jes 1239
+001011111010 deliberately 1256
+001011111010 continuously 1521
+001011111010 seldom 1642
+001011111010 intentionally 1690
+001011111010 purposely 1736
+001011111010 barley 1736
+001011111010 initially 1757
+001011111010 actively 1855
+001011111010 ont 1874
+001011111010 casually 2119
+001011111010 essentially 2238
+001011111010 proudly 2415
+001011111010 typically 2620
+001011111010 accidently 2842
+001011111010 magically 2873
+001011111010 allegedly 2958
+001011111010 supposedly 4322
+001011111010 originally 6203
+001011111010 secretly 7789
+001011111010 generally 8149
+001011111010 rarely 8952
+001011111010 automatically 10939
+001011111010 accidentally 11891
+001011111010 randomly 12849
+001011111010 normally 13016
+001011111010 constantly 14121
+001011111010 hardly 14938
+001011111010 barely 22854
+001011111010 basically 23609
+001011111010 literally 36603
+001011111010 actually 273696
+001011111010 usually 51994
+0010111110110 suddently 66
+0010111110110 -always 72
+0010111110110 alos 75
+0010111110110 coincidently 86
+0010111110110 prayerfully 89
+0010111110110 demonbruen 98
+0010111110110 desparately 111
+0010111110110 gies 113
+0010111110110 desperatly 161
+0010111110110 aslo 172
+0010111110110 alternately 204
+0010111110110 belatedly 240
+0010111110110 jx 268
+0010111110110 subsequently 329
+0010111110110 sincerly 341
+0010111110110 henceforth 363
+0010111110110 ultimately 2415
+0010111110110 desperately 5641
+0010111110110 sincerely 9322
+0010111110110 suddenly 21172
+0010111110110 also 283334
+0010111110111 obiously 40
+0010111110111 deadazz 41
+0010111110111 evidentally 41
+0010111110111 totallyyy 41
+0010111110111 sriously 41
+0010111110111 obvioulsy 43
+0010111110111 obvsly 44
+0010111110111 seroiusly 45
+0010111110111 neverrrrrrr 46
+0010111110111 serisouly 46
+0010111110111 honestlyy 46
+0010111110111 srlsy 47
+0010111110111 seriouslyyyy 53
+0010111110111 literallly 53
+0010111110111 obviosly 54
+0010111110111 oviously 54
+0010111110111 gottcha 59
+0010111110111 obvz 62
+0010111110111 d/a 63
+0010111110111 wishi 65
+0010111110111 gotchaa 69
+0010111110111 iiiiiiiii 72
+0010111110111 #justcausewecool 73
+0010111110111 sorry's 75
+0010111110111 likeeeeee 79
+0010111110111 sheeee 79
+0010111110111 gotchya 80
+0010111110111 srly 85
+0010111110111 ferreal 87
+0010111110111 seriouslyyy 87
+0010111110111 siriusly 87
+0010111110111 gez 88
+0010111110111 neverrrrrr 88
+0010111110111 lokey 88
+0010111110111 surley 89
+0010111110111 seriouslly 90
+0010111110111 honeslty 92
+0010111110111 seriuosly 93
+0010111110111 deadasss 98
+0010111110111 lowkeyy 99
+0010111110111 -really 105
+0010111110111 seriusly 123
+0010111110111 seriouly 123
+0010111110111 betchu 123
+0010111110111 serously 142
+0010111110111 serzly 144
+0010111110111 highkey 160
+0010111110111 neverrrrr 168
+0010111110111 seriosly 179
+0010111110111 likeeeee 182
+0010111110111 serioulsy 185
+0010111110111 seriosuly 187
+0010111110111 personaly 201
+0010111110111 understandably 208
+0010111110111 unno 208
+0010111110111 seriouslyy 209
+0010111110111 geddit 221
+0010111110111 likeeee 430
+0010111110111 theoretically 481
+0010111110111 d.a 530
+0010111110111 realistically 544
+0010111110111 obvi 780
+0010111110111 truthfully 1205
+0010111110111 obvs 1378
+0010111110111 betcha 1535
+0010111110111 #lowkey 1859
+0010111110111 obv 2158
+0010111110111 deadass 3254
+0010111110111 gotcha 5129
+0010111110111 lowkey 5748
+0010111110111 srsly 8157
+0010111110111 personally 16985
+0010111110111 surely 18194
+0010111110111 clearly 29561
+0010111110111 obviously 31697
+0010111110111 seriously 149082
+0010111110111 honestly 39859
+00101111110 stillllllll 40
+00101111110 gonnabe 60
+00101111110 stilllllll 62
+00101111110 nolonger 74
+00101111110 matchmaking- 83
+00101111110 stilling 94
+00101111110 stillllll 109
+00101111110 #still 147
+00101111110 sitll 162
+00101111110 -still 189
+00101111110 stiil 192
+00101111110 stilllll 207
+00101111110 stiill 276
+00101111110 stillll 305
+00101111110 stll 475
+00101111110 styll 762
+00101111110 sill 808
+00101111110 stilll 1049
+00101111110 still 895169
+00101111110 stil 4865
+001011111110 alwayssssss 42
+001011111110 alwats 44
+001011111110 lways 44
+001011111110 makeme 44
+001011111110 alwaaaays 45
+001011111110 alwaiz 46
+001011111110 alwz 49
+001011111110 alaways 55
+001011111110 alwaaays 63
+001011111110 alwyas 68
+001011111110 alwaysssss 75
+001011111110 alwaz 80
+001011111110 alwayys 85
+001011111110 alwyz 92
+001011111110 alwas 117
+001011111110 alwaays 120
+001011111110 alwaysz 132
+001011111110 alway's 146
+001011111110 alwayssss 150
+001011111110 alwasy 173
+001011111110 usally 257
+001011111110 alwaysss 264
+001011111110 invariably 310
+001011111110 alwayss 747
+001011111110 alwys 804
+001011111110 inevitably 880
+001011111110 allways 1090
+001011111110 alway 1465
+001011111110 always 537827
+001011111110 alwayz 1699
+001011111111 prbably 40
+001011111111 mostlikely 42
+001011111111 problly 43
+001011111111 prollyy 43
+001011111111 definity 44
+001011111111 deffently 45
+001011111111 defntly 46
+001011111111 prollly 47
+001011111111 defffff 48
+001011111111 certianly 48
+001011111111 problably 48
+001011111111 probebly 49
+001011111111 showl 53
+001011111111 proabably 53
+001011111111 definietly 54
+001011111111 undoubtably 55
+001011111111 definetley 57
+001011111111 totez 58
+001011111111 prally 59
+001011111111 defiently 62
+001011111111 probbly 63
+001011111111 defos 64
+001011111111 69
+001011111111 defently 69
+001011111111 probablyy 71
+001011111111 defnitely 72
+001011111111 propably 72
+001011111111 prly 73
+001011111111 defoo 76
+001011111111 proli 81
+001011111111 defintly 83
+001011111111 defenetly 84
+001011111111 defenitly 85
+001011111111 defn 89
+001011111111 prob'ly 99
+001011111111 deffinitly 101
+001011111111 mosdef 102
+001011111111 defenitely 107
+001011111111 prlly 108
+001011111111 probablly 111
+001011111111 deffinitely 111
+001011111111 probobly 113
+001011111111 deffff 114
+001011111111 proberly 121
+001011111111 doubtless 122
+001011111111 probabaly 126
+001011111111 defly 129
+001011111111 prb 129
+001011111111 definantly 131
+001011111111 proably 141
+001011111111 blates 164
+001011111111 deffinetly 176
+001011111111 probaby 179
+001011111111 deffs 181
+001011111111 definently 194
+001011111111 defff 196
+001011111111 deffinatly 226
+001011111111 probley 250
+001011111111 prbly 304
+001011111111 deffinately 314
+001011111111 prolli 386
+001011111111 definatley 397
+001011111111 definitley 459
+001011111111 defintely 463
+001011111111 probz 464
+001011111111 definetely 495
+001011111111 defs 500
+001011111111 proly 662
+001011111111 probally 691
+001011111111 probaly 723
+001011111111 undoubtedly 922
+001011111111 definatly 1267
+001011111111 definitly 1357
+001011111111 defiantly 1562
+001011111111 definetly 2040
+001011111111 deffo 2170
+001011111111 probly 2670
+001011111111 defo 4008
+001011111111 deff 5402
+001011111111 definately 7190
+001011111111 probs 7929
+001011111111 certainly 18980
+001011111111 prolly 24480
+001011111111 prob 25932
+001011111111 possibly 28361
+001011111111 def 47596
+001011111111 definitely 93405
+001011111111 probably 168106
+0011000 gnaa 42
+0011000 gonnaaa 44
+0011000 qnna 47
+0011000 gonnae 48
+0011000 gonns 49
+0011000 goinna 49
+0011000 qona 54
+0011000 goonna 57
+0011000 quna 60
+0011000 gunaa 63
+0011000 gonny 64
+0011000 gunnaa 71
+0011000 gonnnna 85
+0011000 going2 90
+0011000 gunnna 105
+0011000 gonan 118
+0011000 gonaa 119
+0011000 gunnah 141
+0011000 goingto 162
+0011000 gonnah 177
+0011000 goina 189
+0011000 g0nna 192
+0011000 gonnaa 235
+0011000 goona 348
+0011000 gonne 374
+0011000 qunna 385
+0011000 gana 590
+0011000 gonnna 719
+0011000 qonna 1205
+0011000 ganna 1944
+0011000 gnna 2433
+0011000 guna 3861
+0011000 gna 6269
+0011000 gona 10455
+0011000 gonna 523036
+0011000 gunna 27700
+0011001 fiinna 40
+0011001 bouuta 41
+0011001 tryin2 42
+0011001 trynnna 43
+0011001 trynnaa 46
+0011001 gont 48
+0011001 boutaaa 48
+0011001 tryan 48
+0011001 trynaaa 50
+0011001 gnee 51
+0011001 tryanna 55
+0011001 funa 59
+0011001 boutto 61
+0011001 tryingto 63
+0011001 finta 64
+0011001 tryinna 64
+0011001 finnuh 64
+0011001 fnna 65
+0011001 tranna 65
+0011001 bouto 67
+0011001 finsta 67
+0011001 trna 72
+0011001 tyrna 77
+0011001 trynn 78
+0011001 g0n 86
+0011001 try'na 87
+0011001 fna 88
+0011001 ginna 96
+0011001 bouttaa 96
+0011001 finaa 97
+0011001 trynah 100
+0011001 finnna 103
+0011001 bout2 112
+0011001 goin2 127
+0011001 aboutta 133
+0011001 fitna 134
+0011001 finnaa 137
+0011001 qne 139
+0011001 trinna 164
+0011001 boudda 209
+0011001 abouta 217
+0011001 fena 217
+0011001 bouttah 217
+0011001 boutah 252
+0011001 bouda 256
+0011001 finnah 260
+0011001 funna 300
+0011001 boutaa 401
+0011001 qon 486
+0011001 trynaa 512
+0011001 qone 666
+0011001 fenna 687
+0011001 tryina 770
+0011001 gonn 1097
+0011001 fina 3953
+0011001 gne 4202
+0011001 boutta 6346
+0011001 trynna 8521
+0011001 bouta 13439
+0011001 finna 31284
+0011001 tryna 72964
+0011001 gon 50877
+0011010 lemee 40
+0011010 #whenlifegivesyoulemons 41
+0011010 lettme 42
+0011010 42
+0011010 #let's 43
+0011010 45
+0011010 lemmme 46
+0011010 #ialwayswantedto 46
+0011010 letsssss 47
+0011010 leets 47
+0011010 48
+0011010 48
+0011010 ibetter 51
+0011010 #darksummoner 55
+0011010 lessss 68
+0011010 -let's 70
+0011010 lemmee 72
+0011010 let\'s 73
+0011010 75
+0011010 #peopleshould 84
+0011010 lezz 89
+0011010 -lets 96
+0011010 #1dayiwantto 100
+0011010 lemmi 107
+0011010 letssss 131
+0011010 #lets 138
+0011010 letme 185
+0011010 #girlsshould 227
+0011010 letsss 255
+0011010 #somepeopleneedto 265
+0011010 #tfat 268
+0011010 let`s 269
+0011010 lemmie 337
+0011010 let´s 411
+0011010 letss 453
+0011010 #ivealwayswantedto 525
+0011010 leme 552
+0011010 letz 678
+0011010 let’s 2588
+0011010 lemme 21654
+0011010 lets 108586
+0011010 let's 180455
+00110110 l'd 41
+00110110 icud 46
+00110110 yu'd 60
+00110110 you`d 61
+00110110 a:i'd 62
+00110110 imust 86
+00110110 i'de 88
+00110110 #iwantsomeonewhowill 96
+00110110 she’d 100
+00110110 i'ld 110
+00110110 they’d 149
+00110110 #iusedto 202
+00110110 i´d 204
+00110110 he’d 215
+00110110 #whydopeople 238
+00110110 i`d 273
+00110110 we’d 396
+00110110 icould 490
+00110110 theyd 500
+00110110 iwould 585
+00110110 you’d 862
+00110110 youd 1784
+00110110 u'd 1998
+00110110 i’d 2637
+00110110 who'd 2852
+00110110 she'd 6031
+00110110 they'd 11572
+00110110 he'd 12266
+00110110 we'd 13324
+00110110 i'd 208484
+00110110 you'd 44293
+001101110 ishall 40
+001101110 #iwishpeoplewouldjust 40
+001101110 #ilikewhenyou 40
+001101110 #how2pleaseahoodrat 40
+001101110 #itendto 41
+001101110 #everyguyshould 42
+001101110 #whatwouldyourather 42
+001101110 i'm-a 42
+001101110 #whenboys 42
+001101110 #itshardto 43
+001101110 #whydoboys 43
+001101110 #thingsgoodsexwillmakeyoudo 43
+001101110 -ill 43
+001101110 thatl 44
+001101110 #doyouhaveto 44
+001101110 iqotta 46
+001101110 #youshouldntever 47
+001101110 iwuld 47
+001101110 #whitneymight 47
+001101110 #whydohoes 48
+001101110 #neverwouldiever 49
+001101110 #iwouldneverever 50
+001101110 #taylorgangor 50
+001101110 #idrather 50
+001101110 iamma 52
+001101110 #realfriendswill 52
+001101110 -ima 52
+001101110 #howtopisswhitepeopleoff 52
+001101110 #boysshould 53
+001101110 youcan 53
+001101110 howta 53
+001101110 #whydoyou 54
+001101110 #goodsexwill 54
+001101110 #howdareu 55
+001101110 #ima 56
+001101110 inma 57
+001101110 imite 58
+001101110 #waystomakeagirlsmile 58
+001101110 #onlyratchetgirls 59
+001101110 iwud 59
+001101110 #onceyougetmarriedyoucant 60
+001101110 #thingsyoujustdontdo 60
+001101110 #iknowhowto 61
+001101110 #thingsidowhenimbored 61
+001101110 #pleasedont 64
+001101110 dey'll 64
+001101110 #thingsiusedtodo 64
+001101110 irather 65
+001101110 #ihatepeoplewho 67
+001101110 #whiteppldoitbutblackppldont 67
+001101110 /cupcakes 68
+001101110 #chrisbrownneedsto 68
+001101110 #thingsidowhenigetbored 69
+001101110 #youshouldnever 69
+001101110 #thingsstalkersdo 71
+001101110 icouldnt 71
+001101110 #tpainbetter 72
+001101110 #myexisthetypeto 72
+001101110 #howtopissblackpeopleoff 72
+001101110 #thingsuglypeopledo 72
+001101110 i`ma 73
+001101110 #thingswomendontdoanymore 73
+001101110 #waystogetwomenmad 74
+001101110 #lifeistooshortto 74
+001101110 i’mma 76
+001101110 ii'll 77
+001101110 #menwill 78
+001101110 #morefemalesshould 78
+001101110 #thingspeopledothatgetonmynerves 79
+001101110 #iloveitwhenyou 82
+001101110 iill 83
+001101110 illll 84
+001101110 imay 85
+001101110 how2 85
+001101110 dat'll 86
+001101110 im'ma 87
+001101110 #nevershouldyouever 89
+001101110 #ificouldiwould 92
+001101110 #menshouldnt 93
+001101110 #youshouldnot 93
+001101110 imaaa 93
+001101110 #waystopissoffafatperson 93
+001101110 #adudeshouldnot 98
+001101110 #dontever 98
+001101110 #evenifyoupaidmeiwont 100
+001101110 #nomanshouldever 103
+001101110 #iwouldnever 103
+001101110 #iwantyouto 103
+001101110 #howtopleaseahoodrat 103
+001101110 iimma 104
+001101110 #wouldyourather 106
+001101110 #whydofemales 110
+001101110 i’ma 113
+001101110 ucan 113
+001101110 iwana 115
+001101110 #aboyfriendshouldalways 116
+001101110 iwouldnt 118
+001101110 #thingsiwouldntdo 127
+001101110 #iwishyoasswould 129
+001101110 #mychildwillnever 131
+001101110 #femaleswill 132
+001101110 #thoushaltnot 132
+001101110 #howtopissawomanoff 133
+001101110 #ifyoucant 136
+001101110 #thingsblackpeopledontdo 136
+001101110 #thingsbrokepeopledo 137
+001101110 #dontexpectmeto 141
+001101110 #onlyahoewould 142
+001101110 #thingsidowhenimdrunk 149
+001101110 immah 150
+001101110 #thingsthirstypeopledo 151
+001101110 #iwillnever 152
+001101110 #100thingstodobeforeidie 155
+001101110 #neverwilli 155
+001101110 lesss 155
+001101110 #ithinkyoushould 157
+001101110 imah 162
+001101110 #ilovewhenyou 168
+001101110 immaa 169
+001101110 #realfriendsdont 170
+001101110 #uwannaimpressme 179
+001101110 #amanshouldnot 181
+001101110 #howtopissyourgirloff 192
+001101110 #ushouldnt 195
+001101110 #everymanshouldknowhowto 205
+001101110 #whydogirls 207
+001101110 we'l 208
+001101110 #whycantyoujust 208
+001101110 #thingswhitepeopledo 211
+001101110 ineeda 212
+001101110 #thingsweusedtodoaskids 221
+001101110 imight 226
+001101110 iwont 247
+001101110 itl 252
+001101110 #howtospoilahoodrat 252
+001101110 #irefuseto 255
+001101110 #thingspeopleshouldntdo 280
+001101110 ishould 287
+001101110 #ireallyhatewhenpeople 291
+001101110 iima 292
+001101110 immma 299
+001101110 #thingsblackgirlsdo 321
+001101110 #womenshouldnever 325
+001101110 im'a 328
+001101110 #thingsgirlswantboystodo 364
+001101110 #howdareyou 375
+001101110 #thingspeopleshouldnotdo 395
+001101110 illl 399
+001101110 #ihatewhenpeople 457
+001101110 #thoushallnot 473
+001101110 #sometimesyouhaveto 488
+001101110 #iwishicould 529
+001101110 #whywouldyou 556
+001101110 igotta 600
+001101110 #menshouldnever 608
+001101110 amma 626
+001101110 iwill 752
+001101110 #imthetypeto 866
+001101110 imaa 962
+001101110 umma 976
+001101110 iwanna 1333
+001101110 ican 1702
+001101110 i'mma 3043
+001101110 i'ma 10990
+001101110 ill 147946
+001101110 ima 113490
+001101110 imma 79460
+0011011110 it´ll 41
+0011011110 the'll 41
+0011011110 u´ll 43
+0011011110 we'lll 47
+0011011110 you'lll 47
+0011011110 thisll 48
+0011011110 there’ll 49
+0011011110 it`ll 51
+0011011110 tht'll 51
+0011011110 this'd 52
+0011011110 u’ll 56
+0011011110 he`ll 58
+0011011110 things'll 58
+0011011110 everything'll 60
+0011011110 she'l 67
+0011011110 they'l 76
+0011011110 theyl 76
+0011011110 shit'll 86
+0011011110 he'l 96
+0011011110 it’d 99
+0011011110 that’ll 114
+0011011110 didya 139
+0011011110 we`ll 147
+0011011110 we´ll 159
+0011011110 it'l 176
+0011011110 u'l 177
+0011011110 yull 205
+0011011110 you´ll 233
+0011011110 you'l 244
+0011011110 you`ll 247
+0011011110 youl 250
+0011011110 yu'll 255
+0011011110 she’ll 255
+0011011110 it’ll 320
+0011011110 he’ll 471
+0011011110 didja 484
+0011011110 they’ll 591
+0011011110 thatll 640
+0011011110 thatd 767
+0011011110 this'll 1009
+0011011110 theyll 1095
+0011011110 there'd 1102
+0011011110 itd 1337
+0011011110 we’ll 1527
+0011011110 there'll 2402
+0011011110 itll 2484
+0011011110 you’ll 3145
+0011011110 ull 3726
+0011011110 youll 5147
+0011011110 that'd 6841
+0011011110 u'll 7841
+0011011110 that'll 11266
+0011011110 it'd 13161
+0011011110 she'll 15923
+0011011110 they'll 27188
+0011011110 he'll 27793
+0011011110 it'll 42647
+0011011110 we'll 87537
+0011011110 you'll 117760
+0011011111 she`ll 40
+0011011111 @pretweeting 46
+0011011111 /must 50
+0011011111 -i'll 86
+0011011111 i''ll 93
+0011011111 i\'ll 97
+0011011111 l'll 150
+0011011111 i'lll 224
+0011011111 i´ll 1039
+0011011111 i`ll 1240
+0011011111 i'l 1346
+0011011111 i'll 546535
+0011011111 i’ll 4821
+00111000 hearby 42
+00111000 coulddd 43
+00111000 useto 48
+00111000 couls 54
+00111000 61
+00111000 coudl 71
+00111000 c0uld 72
+00111000 kuld 126
+00111000 cood 128
+00111000 cudd 160
+00111000 coud 162
+00111000 couldd 197
+00111000 kould 225
+00111000 kud 281
+00111000 culd 2013
+00111000 cld 2662
+00111000 could 542750
+00111000 cud 8076
+00111001 caaaan 41
+00111001 cannnn 52
+00111001 caaan 53
+00111001 ccan 55
+00111001 shalll 58
+00111001 ckan 95
+00111001 cannn 137
+00111001 caan 394
+00111001 cann 1022
+00111001 can 1790209
+00111001 cn 7163
+001110100 can/should 40
+001110100 -should 40
+001110100 musnt 47
+001110100 shuold 52
+001110100 shoulld 53
+001110100 suld 54
+001110100 shoould 56
+001110100 hould 66
+001110100 shouuld 72
+001110100 shouls 83
+001110100 shoukd 94
+001110100 sh0uld 94
+001110100 shoulddd 99
+001110100 oughtta 150
+001110100 shold 192
+001110100 shood 194
+001110100 shoudl 266
+001110100 shudd 304
+001110100 shouldd 428
+001110100 sud 549
+001110100 sould 586
+001110100 shoud 649
+001110100 shoul 652
+001110100 oughta 1006
+001110100 shd 1594
+001110100 shuld 3321
+001110100 shld 5593
+001110100 shud 12556
+001110100 should 737824
+001110100 shall 56642
+0011101010 1993-1999 40
+0011101010 may/may 50
+0011101010 -may 64
+0011101010 can's 73
+0011101010 mayy 95
+0011101010 may 311241
+0011101010 migh 297
+00111010110 mitee 75
+00111010110 myte 76
+00111010110 miight 82
+00111010110 mght 87
+00111010110 mightt 115
+00111010110 miqht 367
+00111010110 myt 619
+00111010110 might 273637
+00111010110 mite 7077
+00111010111 mustt 70
+00111010111 twould 86
+00111010111 -must 133
+00111010111 must 291259
+00111010111 #must 297
+001110110 wuldd 41
+001110110 wpuld 42
+001110110 woulf 50
+001110110 could/should 52
+001110110 woould 64
+001110110 wouls 66
+001110110 woulld 69
+001110110 woulddd 77
+001110110 wouuld 79
+001110110 -would 83
+001110110 woukd 83
+001110110 w0uld 108
+001110110 woudl 145
+001110110 whould 223
+001110110 wudd 305
+001110110 woud 361
+001110110 wouldd 475
+001110110 wuld 3752
+001110110 wld 6003
+001110110 would 911715
+001110110 wud 15161
+001110111 eill 40
+001110111 use2 42
+001110111 iwll 45
+001110111 usto 45
+001110111 used2 45
+001110111 willlllll 49
+001110111 which'll 51
+001110111 wlll 51
+001110111 one'll 51
+001110111 can/will 60
+001110111 61
+001110111 who’ll 69
+001110111 willllll 71
+001110111 willlll 140
+001110111 ould 142
+001110111 shant 155
+001110111 sld 168
+001110111 wiill 189
+001110111 wiil 214
+001110111 willll 234
+001110111 shal 266
+001110111 usta 317
+001110111 wold 485
+001110111 doth 580
+001110111 wll 687
+001110111 willl 1197
+001110111 who'll 1914
+001110111 will 1654634
+001110111 wil 10913
+00111100 dinnae 40
+00111100 46
+00111100 don'tt 48
+00111100 dnot 49
+00111100 dnnt 58
+00111100 dobt 63
+00111100 dontttt 63
+00111100 don'y 66
+00111100 whatdya 69
+00111100 do'nt 80
+00111100 ion't 88
+00111100 #idefinitelydont 88
+00111100 #hatewhenpeople 97
+00111100 do't 97
+00111100 dotn 101
+00111100 domt 102
+00111100 #whyshouldi 103
+00111100 donttt 106
+00111100 #don't 110
+00111100 don''t 114
+00111100 ididn't 116
+00111100 d0n't 123
+00111100 dony 134
+00111100 don�t 134
+00111100 dont't 138
+00111100 doont 143
+00111100 -dont 147
+00111100 ionn 156
+00111100 dont 172
+00111100 i'ont 172
+00111100 on't 173
+00111100 donnt 199
+00111100 -don't 218
+00111100 donot 223
+00111100 #dont 233
+00111100 i'on 250
+00111100 dntt 263
+00111100 don\'t 391
+00111100 whataya 441
+00111100 d0nt 500
+00111100 idon't 504
+00111100 dunt 677
+00111100 dontt 777
+00111100 dn't 822
+00111100 iont 2121
+00111100 don`t 2394
+00111100 don´t 2513
+00111100 idont 2731
+00111100 dun 11119
+00111100 don’t 30385
+00111100 don't 1561151
+00111100 dont 466873
+00111100 dnt 99731
+001111010 doesen't 40
+001111010 doesntt 48
+001111010 doesnt 51
+001111010 -doesn't 57
+001111010 doesn\'t 60
+001111010 doesnot 67
+001111010 dusnt 94
+001111010 dsn't 96
+001111010 duznt 120
+001111010 doent 125
+001111010 pathum 133
+001111010 doen't 140
+001111010 does't 151
+001111010 doesent 177
+001111010 doenst 179
+001111010 doens't 206
+001111010 doest 213
+001111010 dosn't 225
+001111010 does'nt 246
+001111010 doesn´t 285
+001111010 doesn`t 296
+001111010 dsnt 453
+001111010 dosen't 598
+001111010 dosnt 771
+001111010 dosent 1959
+001111010 doesn’t 6457
+001111010 doesn't 252556
+001111010 doesnt 45477
+0011110110 disnt 40
+0011110110 didn\'t 48
+0011110110 dind't 51
+0011110110 dodnt 53
+0011110110 didnot 59
+0011110110 didny 63
+0011110110 ddint 68
+0011110110 ddn't 71
+0011110110 ddn 77
+0011110110 didin't 88
+0011110110 daren't 88
+0011110110 diidnt 116
+0011110110 didt 127
+0011110110 didntt 129
+0011110110 diddnt 153
+0011110110 did't 217
+0011110110 dident 240
+0011110110 didint 269
+0011110110 din't 274
+0011110110 didn´t 325
+0011110110 couldn 340
+0011110110 didn`t 358
+0011110110 did'nt 465
+0011110110 didn 1602
+0011110110 ddnt 1815
+0011110110 dint 2795
+0011110110 didn’t 4063
+0011110110 didn't 361096
+0011110110 didnt 95529
+0011110111 shouldn´t 40
+0011110111 wdnt 41
+0011110111 kudnt 42
+0011110111 shouldt 43
+0011110111 wouln't 46
+0011110111 shouldent 48
+0011110111 shouldn`t 49
+0011110111 w0nt 49
+0011110111 shdnt 51
+0011110111 mustnt 52
+0011110111 mightn't 55
+0011110111 woodnt 55
+0011110111 wuddnt 59
+0011110111 can't/won't 60
+0011110111 should't 63
+0011110111 won\'t 69
+0011110111 wount 70
+0011110111 woulnt 73
+0011110111 shoudnt 73
+0011110111 would't 74
+0011110111 shoudn't 78
+0011110111 shldn't 79
+0011110111 wouldn´t 80
+0011110111 wudn 86
+0011110111 woudn't 94
+0011110111 shudn't 94
+0011110111 woudnt 96
+0011110111 wouldn`t 100
+0011110111 wontt 106
+0011110111 musn't 108
+0011110111 wldn't 116
+0011110111 wouldent 135
+0011110111 wudn't 149
+0011110111 should'nt 166
+0011110111 wunt 183
+0011110111 shouldn 210
+0011110111 won´t 223
+0011110111 won`t 238
+0011110111 would'nt 260
+0011110111 needn't 266
+0011110111 shuldnt 276
+0011110111 shan't 299
+0011110111 shldnt 313
+0011110111 wouldn 431
+0011110111 wldnt 515
+0011110111 mustn't 531
+0011110111 wuldnt 532
+0011110111 shudnt 834
+0011110111 shouldn’t 939
+0011110111 wouldn’t 1272
+0011110111 wudnt 1666
+0011110111 won’t 4439
+0011110111 shouldnt 9298
+0011110111 wouldnt 20510
+0011110111 shouldn't 47341
+0011110111 wont 66593
+0011110111 won't 191834
+0011110111 wouldn't 91588
+00111110 cant 40
+00111110 cdnt 42
+00111110 canni 42
+00111110 canr 42
+00111110 cuddnt 42
+00111110 coulnt 43
+00111110 canne 45
+00111110 can''t 46
+00111110 caaaant 46
+00111110 cabt 48
+00111110 camt 49
+00111110 ca't 52
+00111110 cna't 52
+00111110 #can't 53
+00111110 can�t 55
+00111110 cudn 57
+00111110 cnnt 60
+00111110 cntt 60
+00111110 cants 61
+00111110 ikant 61
+00111110 #wishuwould 61
+00111110 cyaan 64
+00111110 -cant 67
+00111110 cantttt 68
+00111110 kouldnt 71
+00111110 cnat 72
+00111110 caaant 75
+00111110 cant't 77
+00111110 couldn`t 77
+00111110 ckant 79
+00111110 coudnt 86
+00111110 cannnot 91
+00111110 couldn´t 93
+00111110 cyah 93
+00111110 cain't 94
+00111110 canttt 94
+00111110 cldn't 94
+00111110 could't 96
+00111110 cann't 102
+00111110 canot 103
+00111110 coudn't 104
+00111110 kan't 105
+00111110 canna 109
+00111110 #cant 115
+00111110 couldent 122
+00111110 -can't 133
+00111110 cany 158
+00111110 cudn't 163
+00111110 caant 167
+00111110 could'nt 183
+00111110 can\'t 197
+00111110 cannae 213
+00111110 cn't 250
+00111110 icnt 254
+00111110 cannt 266
+00111110 ican't 283
+00111110 carnt 355
+00111110 culdnt 407
+00111110 cldnt 468
+00111110 cantt 477
+00111110 knt 599
+00111110 canny 637
+00111110 caint 685
+00111110 couldn’t 1096
+00111110 can`t 1250
+00111110 can´t 1414
+00111110 cudnt 1450
+00111110 icant 1508
+00111110 kant 2664
+00111110 can’t 10825
+00111110 couldnt 17150
+00111110 cnt 19009
+00111110 couldn't 82366
+00111110 cannot 69447
+00111110 cant 239820
+00111110 can't 832371
+001111110 try2 52
+001111110 lettem 55
+001111110 tryta 57
+001111110 waana 60
+001111110 waanna 63
+001111110 wannnnna 68
+001111110 wuna 68
+001111110 wannaaa 77
+001111110 hav2 77
+001111110 wantto 81
+001111110 wanto 83
+001111110 needto 88
+001111110 tryda 88
+001111110 wan2 101
+001111110 haveto 104
+001111110 wona 116
+001111110 wanty 122
+001111110 wanaa 123
+001111110 haveta 126
+001111110 have2 138
+001111110 wannnna 140
+001111110 want2 145
+001111110 wanan 172
+001111110 msut 186
+001111110 waan 203
+001111110 wanne 212
+001111110 wannah 265
+001111110 havta 268
+001111110 giva 299
+001111110 wannaa 342
+001111110 wunna 408
+001111110 wanta 489
+001111110 wonna 919
+001111110 wann 930
+001111110 wnna 1029
+001111110 wannna 1052
+001111110 hafta 1479
+001111110 wna 1978
+001111110 wanna 427565
+001111110 wana 15960
+001111111 gottaaa 40
+001111111 hadta 44
+001111111 gotttta 48
+001111111 qota 51
+001111111 qottah 63
+001111111 had2 68
+001111111 -gotta 70
+001111111 gotaa 74
+001111111 76
+001111111 got2 85
+001111111 gotsa 91
+001111111 goota 105
+001111111 godda 113
+001111111 gotts 118
+001111111 neeeda 135
+001111111 needah 135
+001111111 needta 138
+001111111 need2 162
+001111111 g0tta 172
+001111111 gotto 176
+001111111 needaa 202
+001111111 haffi 209
+001111111 gottaa 244
+001111111 gotsta 294
+001111111 gottta 420
+001111111 hada 443
+001111111 gatta 572
+001111111 gottah 676
+001111111 hadda 733
+001111111 qotta 1007
+001111111 gtta 1097
+001111111 gota 4507
+001111111 gotta 268616
+001111111 needa 14752
+0100000 do/did 40
+0100000 sugest 51
+0100000 do 2179710
+0100000 d0 724
+01000010 deos 47
+01000010 d0es 54
+01000010 doesss 67
+01000010 doez 79
+01000010 sayeth 121
+01000010 -does 147
+01000010 doess 254
+01000010 does 401108
+01000010 duz 389
+01000011 #did 43
+01000011 did/do 47
+01000011 didddd 54
+01000011 #dare 62
+01000011 diddd 113
+01000011 -can 238
+01000011 diid 290
+01000011 didd 308
+01000011 did 765313
+01000011 dare 20669
+010001000 haven't!! 42
+010001000 diig 46
+010001000 noeee 47
+010001000 undastnd 48
+010001000 knoeee 50
+010001000 knowrt 55
+010001000 knoooooo 60
+010001000 hearddd 72
+010001000 kknow 75
+010001000 zeet 89
+010001000 knu 99
+010001000 diggg 113
+010001000 knooooo 129
+010001000 knww 149
+010001000 knoooo 231
+010001000 kn0 255
+010001000 noee 261
+010001000 undastand 355
+010001000 kn0w 371
+010001000 kne 373
+010001000 thiink 413
+010001000 knooo 468
+010001000 knoee 487
+010001000 knoo 1273
+010001000 knoe 2378
+010001000 noe 5324
+010001000 kno 97631
+010001000 knw 25516
+010001001 knoooowww 40
+010001001 kbow 45
+010001001 knooooooow 59
+010001001 knoowww 61
+010001001 knowwwwwwww 64
+010001001 know/ 65
+010001001 lnow 72
+010001001 knnow 77
+010001001 kmow 80
+010001001 knooowww 80
+010001001 kniw 81
+010001001 knowwwwwww 95
+010001001 knooww 103
+010001001 knoooooow 124
+010001001 like/love 154
+010001001 konw 178
+010001001 knowwwwww 204
+010001001 knooooow 250
+010001001 knwo 386
+010001001 kow 397
+010001001 know- 470
+010001001 knowwwww 479
+010001001 knoooow 486
+010001001 knoow 612
+010001001 knooow 669
+010001001 knowwww 1080
+010001001 knowww 2293
+010001001 know 1635985
+010001001 knoww 3341
+0100010100 careeee 68
+0100010100 care- 88
+0100010100 care's 129
+0100010100 careee 135
+0100010100 caree 483
+0100010100 care 215734
+0100010100 kare 582
+01000101010 likeit 42
+01000101010 meam 43
+01000101010 bovvered 45
+01000101010 meeeean 48
+01000101010 won't!!! 49
+01000101010 should've! 54
+01000101010 meannnnn 54
+01000101010 meean 59
+01000101010 meaaan 60
+01000101010 just- 63
+01000101010 meeean 67
+01000101010 like'em 77
+01000101010 won't!! 79
+01000101010 liiiiike 80
+01000101010 mean- 83
+01000101010 want- 87
+01000101010 deserv 87
+01000101010 wantttt 88
+01000101010 can- 90
+01000101010 meaan 110
+01000101010 meannnn 126
+01000101010 shouldn't! 127
+01000101010 wanttt 134
+01000101010 liiiike 145
+01000101010 can't!! 200
+01000101010 meannn 238
+01000101010 meann 461
+01000101010 won't! 616
+01000101010 meen 865
+01000101010 mean 291455
+01000101010 wan 7749
+010001010110 achee 41
+010001010110 hurtsssss 41
+010001010110 automatica 44
+010001010110 toniq 44
+010001010110 stirrers 53
+010001010110 throbs 56
+010001010110 encircles 58
+010001010110 stabber 72
+010001010110 sanitizers 75
+010001010110 ached 94
+010001010110 hurtssss 105
+010001010110 krutch 120
+010001010110 hurtz 131
+010001010110 hurtsss 154
+010001010110 snatchers 190
+010001010110 palpitations 212
+010001010110 calibur 226
+010001010110 tingles 237
+010001010110 hurtss 245
+010001010110 muffs 249
+010001010110 throb 251
+010001010110 scratcher 274
+010001010110 wrenching 357
+010001010110 boggling 448
+010001010110 spasms 476
+010001010110 boggles 568
+010001010110 bleeds 856
+010001010110 stings 932
+010001010110 sanitizer 939
+010001010110 warmers 1006
+010001010110 itches 1098
+010001010110 aches 2923
+010001010110 pains 5446
+010001010110 hurts 59233
+010001010110 ache 6933
+010001010111 pealed 41
+010001010111 hurtingg 42
+010001010111 crossd 43
+010001010111 hurtttt 44
+010001010111 xed 44
+010001010111 squinted 44
+010001010111 lasered 50
+010001010111 unbored 66
+010001010111 re-pierced 68
+010001010111 hurtinq 70
+010001010111 x-rayed 72
+010001010111 dissappoint 78
+010001010111 marrie 82
+010001010111 hurttt 82
+010001010111 retwisted 96
+010001010111 repierced 105
+010001010111 entitle 107
+010001010111 whitened 111
+010001010111 droop 113
+010001010111 dialated 121
+010001010111 hurtt 143
+010001010111 asplode 147
+010001010111 butted 176
+010001010111 amputated 238
+010001010111 peirced 252
+010001010111 hurtn 279
+010001010111 dissapoint 422
+010001010111 hurted 481
+010001010111 mislead 503
+010001010111 deceive 646
+010001010111 depress 649
+010001010111 flatter 920
+010001010111 peeled 1113
+010001010111 waxed 1292
+010001010111 excite 1634
+010001010111 disappoint 3862
+010001010111 bleed 5091
+010001010111 pierced 5221
+010001010111 crossed 18718
+010001010111 hurt 103033
+010001010111 bother 19843
+0100010110 ssay 40
+0100010110 ask- 43
+0100010110 tell'm 43
+0100010110 saaaaay 47
+0100010110 vesper's 51
+0100010110 theorize 54
+0100010110 don't; 54
+0100010110 say/ 55
+0100010110 go/ 58
+0100010110 die- 61
+0100010110 asume 67
+0100010110 sayyyyy 68
+0100010110 have- 68
+0100010110 lagta 68
+0100010110 realiz 68
+0100010110 do/ 75
+0100010110 saaaay 95
+0100010110 mispell 95
+0100010110 insinuate 115
+0100010110 think- 137
+0100010110 see- 144
+0100010110 say/do 154
+0100010110 do/say 157
+0100010110 saaay 158
+0100010110 don't!!! 165
+0100010110 sayyyy 184
+0100010110 admitt 200
+0100010110 be- 207
+0100010110 say- 236
+0100010110 don't!! 267
+0100010110 do- 313
+0100010110 saay 366
+0100010110 reiterate 429
+0100010110 sayyy 471
+0100010110 tell'em 584
+0100010110 imply 950
+0100010110 sayy 1741
+0100010110 don't! 2167
+0100010110 confess 3160
+0100010110 say 728912
+0100010110 admit 29018
+010001011100 rembered 43
+010001011100 membered 43
+010001011100 twigged 44
+010001011100 realizd 53
+010001011100 re-phrase 55
+010001011100 relise 68
+010001011100 relised 109
+010001011100 remebered 174
+010001011100 rememberd 182
+010001011100 relize 273
+010001011100 relized 334
+010001011100 rephrase 1120
+010001011100 realise 10918
+010001011100 realised 11825
+010001011100 remembered 16992
+010001011100 realized 46081
+010001011100 realize 54989
+010001011101 beieve 42
+010001011101 believeee 45
+010001011101 blve 63
+010001011101 beliv 63
+010001011101 belived 82
+010001011101 disbelieve 87
+010001011101 blive 105
+010001011101 beileve 107
+010001011101 beleve 117
+010001011101 believee 119
+010001011101 beleave 127
+010001011101 bliv 175
+010001011101 unsee 188
+010001011101 beliebe 221
+010001011101 blieve 223
+010001011101 believ 271
+010001011101 blv 301
+010001011101 belieb 368
+010001011101 beleive 1754
+010001011101 belive 4076
+010001011101 believe 217312
+010001011101 deny 7789
+0100010111100 dunnnn 42
+0100010111100 fantasise 43
+0100010111100 dunnn 59
+0100010111100 worryy 61
+0100010111100 worry- 63
+0100010111100 worri 77
+0100010111100 worrry 90
+0100010111100 wory 109
+0100010111100 wori 144
+0100010111100 worrie 225
+0100010111100 wrry 303
+0100010111100 wry 355
+0100010111100 fantasize 433
+0100010111100 discriminate 864
+0100010111100 fret 1098
+0100010111100 gaf 1263
+0100010111100 brag 4172
+0100010111100 worry 68647
+0100010111100 complain 19833
+01000101111010 undersand 40
+01000101111010 regreat 40
+01000101111010 reget 47
+01000101111010 overanalyze 49
+01000101111010 over-think 71
+01000101111010 overstand 72
+01000101111010 begrudge 94
+01000101111010 understandd 96
+01000101111010 undertand 108
+01000101111010 undestand 122
+01000101111010 sugarcoat 125
+01000101111010 undrstand 133
+01000101111010 understnd 136
+01000101111010 understan 165
+01000101111010 undrstnd 188
+01000101111010 overestimate 213
+01000101111010 overthink 367
+01000101111010 overdo 414
+01000101111010 condone 637
+01000101111010 comprehend 1678
+01000101111010 understood 8414
+01000101111010 understand 113771
+01000101111010 regret 22343
+01000101111011 overcook 40
+01000101111011 #forget 44
+01000101111011 frget 44
+01000101111011 forget- 58
+01000101111011 frgt 70
+01000101111011 forgt 97
+01000101111011 forgett 116
+01000101111011 undervalue 129
+01000101111011 forqet 165
+01000101111011 foget 166
+01000101111011 4gt 183
+01000101111011 hesitate 1784
+01000101111011 underestimate 3116
+01000101111011 forget 125967
+01000101111011 4get 3620
+0100010111110 dissagree 43
+0100010111110 think) 48
+0100010111110 aqree 65
+0100010111110 empathise 88
+0100010111110 agreeeee 97
+0100010111110 agreeee 152
+0100010111110 sympathise 219
+0100010111110 empathize 246
+0100010111110 digress 303
+0100010111110 disagreed 390
+0100010111110 agreee 397
+0100010111110 sympathize 551
+0100010111110 interfere 1179
+0100010111110 concur 2213
+0100010111110 agree 103091
+0100010111110 disagree 9918
+0100010111111 immagine 40
+0100010111111 disreguard 41
+0100010111111 confirm/deny 43
+0100010111111 rmber 43
+0100010111111 recommand 45
+0100010111111 remb 46
+0100010111111 remeba 47
+0100010111111 remmember 47
+0100010111111 remba 48
+0100010111111 bagsy 58
+0100010111111 surmise 61
+0100010111111 rmmbr 67
+0100010111111 rememebr 75
+0100010111111 rmember 76
+0100010111111 rememberr 81
+0100010111111 rembr 87
+0100010111111 remmber 89
+0100010111111 rmr 93
+0100010111111 temme 100
+0100010111111 remember- 100
+0100010111111 rememer 118
+0100010111111 remenber 131
+0100010111111 remmeber 135
+0100010111111 agree- 138
+0100010111111 #haveyouevernoticed 186
+0100010111111 remembr 229
+0100010111111 imagin 268
+0100010111111 rmbr 323
+0100010111111 rememeber 373
+0100010111111 rember 446
+0100010111111 #ihaveadream 448
+0100010111111 #remember 599
+0100010111111 rememba 766
+0100010111111 memba 839
+0100010111111 fathom 852
+0100010111111 rmb 871
+0100010111111 remeber 2873
+0100010111111 predict 5710
+0100010111111 recall 10418
+0100010111111 suggest 15701
+0100010111111 remember 208481
+0100010111111 imagine 47678
+010001100 lovvvveee 41
+010001100 luvvvvv 41
+010001100 wish- 42
+010001100 lovvveeee 45
+010001100 loooveeee 45
+010001100 lovw 45
+010001100 loveeeeeeeeeeeeee 45
+010001100 solute 46
+010001100 luuurve 47
+010001100 _love_ 48
+010001100 loovveee 48
+010001100 loveeeeeeeeeeeee 49
+010001100 loooooooooooooove 50
+010001100 /love 52
+010001100 looooooooooooove 53
+010001100 lalalove 53
+010001100 lovem 53
+010001100 looovveee 53
+010001100 lovvvee 54
+010001100 lalalalove 56
+010001100 loooovee 57
+010001100 lovveeee 57
+010001100 hete 59
+010001100 wuff 61
+010001100 looooveeee 62
+010001100 lovvvvve 64
+010001100 luf 65
+010001100 laaav 65
+010001100 loooooooooooove 67
+010001100 loff 69
+010001100 lahv 72
+010001100 luffs 73
+010001100 luuuuv 74
+010001100 loue 74
+010001100 loveeeeeeeeeeee 74
+010001100 looovvveee 76
+010001100 lovr 78
+010001100 piacenza 79
+010001100 looovvee 79
+010001100 loce 80
+010001100 looveee 80
+010001100 lovvvve 81
+010001100 loovvee 81
+010001100 loveeeeeeeeeee 90
+010001100 looooveee 90
+010001100 luuuv 90
+010001100 lovvveee 91
+010001100 luvvvv 92
+010001100 luuv 96
+010001100 luhhh 98
+010001100 ruv 98
+010001100 mees 101
+010001100 luph 106
+010001100 lovveee 113
+010001100 loveeeeeeeeee 115
+010001100 looooooooooove 117
+010001100 lave 117
+010001100 flove 118
+010001100 luhv 119
+010001100 lovvve 120
+010001100 lov3 122
+010001100 wove 123
+010001100 whis 124
+010001100 l0v3 128
+010001100 lovvee 133
+010001100 loooooooooove 135
+010001100 looovee 139
+010001100 llove 139
+010001100 lovez 142
+010001100 loooveee 144
+010001100 loveeeeeeeee 158
+010001100 luvvv 168
+010001100 lubb 180
+010001100 looooooooove 191
+010001100 luve 199
+010001100 wub 199
+010001100 ℒℴѵℯ 200
+010001100 luvz 205
+010001100 loge 228
+010001100 loovee 229
+010001100 loveeeeeeee 246
+010001100 lovve 249
+010001100 lurv 254
+010001100 lvoe 263
+010001100 loooooooove 282
+010001100 luhh 285
+010001100 iove 302
+010001100 loveeeeeee 371
+010001100 l-o-v-e 375
+010001100 lve 389
+010001100 lav 429
+010001100 l.o.v.e. 450
+010001100 looooooove 455
+010001100 rebuke 531
+010001100 lub 539
+010001100 luvv 558
+010001100 lovelovelove 583
+010001100 l.o.v.e 585
+010001100 luff 626
+010001100 loveeeeee 667
+010001100 l0ve 712
+010001100 loooooove 849
+010001100 lurve 868
+010001100 loveeeee 1435
+010001100 looooove 1584
+010001100 loove 1664
+010001100 loooove 2740
+010001100 loveeee 2932
+010001100 cba 2975
+010001100 looove 3109
+010001100 dread 3188
+010001100 lov 3625
+010001100 loveee 5107
+010001100 salute 5629
+010001100 envy 9668
+010001100 lovee 9927
+010001100 love 1908093
+010001100 luv 58486
+0100011010 love/miss 47
+0100011010 idolise 48
+0100011010 missssssss 49
+0100011010 wuvv 63
+0100011010 beseech 76
+0100011010 misz 76
+0100011010 misssssss 87
+0100011010 missssss 143
+0100011010 #miss 148
+0100011010 implore 171
+0100011010 miiss 177
+0100011010 misssss 249
+0100011010 pr0m0te 269
+0100011010 missss 465
+0100011010 commend 491
+0100011010 wuv 753
+0100011010 applaud 1371
+0100011010 misss 1498
+0100011010 assure 1731
+0100011010 admire 6086
+0100011010 nominate 7638
+0100011010 adore 8987
+0100011010 miss 346200
+0100011010 owe 13447
+0100011011 hat3 40
+0100011011 hateeeeeee 42
+0100011011 hatte 52
+0100011011 haaaaaate 52
+0100011011 hatehatehate 55
+0100011011 preffer 58
+0100011011 haet 58
+0100011011 ahte 59
+0100011011 hateeeeee 78
+0100011011 hate/love 100
+0100011011 haate 103
+0100011011 haaaaate 117
+0100011011 dispise 123
+0100011011 hateeeee 141
+0100011011 haaate 160
+0100011011 haaaate 166
+0100011011 loath 240
+0100011011 hateeee 247
+0100011011 abhor 261
+0100011011 perfer 353
+0100011011 hateee 423
+0100011011 detest 643
+0100011011 resent 1020
+0100011011 hatee 1046
+0100011011 #hate 1063
+0100011011 loathe 1832
+0100011011 h8 2434
+0100011011 despise 2924
+0100011011 dislike 12911
+0100011011 hate 454241
+0100011011 prefer 28501
+010001110 thonk 44
+010001110 thimk 45
+010001110 thikn 45
+010001110 thibk 47
+010001110 thnik 49
+010001110 thinc 64
+010001110 thinkkkk 74
+010001110 htink 90
+010001110 thynk 91
+010001110 fnk 96
+010001110 thinl 106
+010001110 tihnk 108
+010001110 rekon 145
+010001110 thinnk 149
+010001110 thinkkk 211
+010001110 thik 265
+010001110 haven't! 347
+010001110 thinkk 1243
+010001110 can't! 1323
+010001110 fink 1853
+010001110 thnk 5521
+010001110 reckon 7033
+010001110 think 1222187
+010001110 assume 14781
+01000111100 dreamnt 41
+01000111100 thught 46
+01000111100 thinked 50
+01000111100 knowed 51
+01000111100 th0ught 57
+01000111100 dreampt 60
+01000111100 thoguht 69
+01000111100 thouht 79
+01000111100 thgt 81
+01000111100 thougth 91
+01000111100 thoughtt 106
+01000111100 thoght 141
+01000111100 thawt 142
+01000111100 thout 154
+01000111100 thaught 163
+01000111100 thort 255
+01000111100 thougt 263
+01000111100 thght 279
+01000111100 thouqht 485
+01000111100 tought 911
+01000111100 thunk 1171
+01000111100 swore 2563
+01000111100 thot 3045
+01000111100 assumed 3254
+01000111100 dreamt 4096
+01000111100 thought 319814
+01000111100 dreamed 4614
+010001111010 forgott 96
+010001111010 fogot 112
+010001111010 forqot 141
+010001111010 forgot 95788
+010001111010 4got 2863
+010001111011 knewww 69
+010001111011 knowz 135
+010001111011 knew 107885
+010001111011 kneww 142
+01000111110 hopr 47
+01000111110 hoope 53
+01000111110 hoep 53
+01000111110 hopw 79
+01000111110 hopeee 104
+01000111110 h0pe 111
+01000111110 hpe 527
+01000111110 hopee 644
+01000111110 hope 522847
+01000111110 thk 1015
+010001111110 wishe 42
+010001111110 widh 43
+010001111110 wissh 60
+010001111110 wiish 135
+010001111110 whish 178
+010001111110 wishh 644
+010001111110 wish 368727
+010001111110 wished 6845
+0100011111110 gueess 41
+0100011111110 think/hope 60
+0100011111110 guesssss 65
+0100011111110 guees 67
+0100011111110 daresay 72
+0100011111110 guessss 133
+0100011111110 guss 133
+0100011111110 gess 227
+0100011111110 geuss 234
+0100011111110 guesss 510
+0100011111110 quess 689
+0100011111110 guess 253920
+0100011111110 gues 931
+0100011111111 #confess 41
+0100011111111 gotchuuu 42
+0100011111111 garantee 43
+0100011111111 thnkk 43
+0100011111111 dunnooo 43
+0100011111111 wishhhhh 45
+0100011111111 knoooww 46
+0100011111111 swearrrrr 49
+0100011111111 digz 49
+0100011111111 promess 50
+0100011111111 swere 54
+0100011111111 knaw 55
+0100011111111 wanttttt 56
+0100011111111 promiseee 60
+0100011111111 garuntee 68
+0100011111111 swaer 69
+0100011111111 bettt 69
+0100011111111 sweaar 73
+0100011111111 promiss 74
+0100011111111 waketh 74
+0100011111111 sweaa 75
+0100011111111 promisse 79
+0100011111111 gaurantee 82
+0100011111111 wishhhh 93
+0100011111111 swer 94
+0100011111111 swearrrr 104
+0100011111111 promisee 125
+0100011111111 can't!!! 128
+0100011111111 loike 133
+0100011111111 gurantee 140
+0100011111111 gotchuu 142
+0100011111111 swearrr 161
+0100011111111 swr 169
+0100011111111 wishhh 174
+0100011111111 keed 184
+0100011111111 promis 188
+0100011111111 guarentee 207
+0100011111111 ges 223
+0100011111111 swearr 236
+0100011111111 solemnly 249
+0100011111111 s'pose 363
+0100011111111 lobe 542
+0100011111111 swea 673
+0100011111111 sware 956
+0100011111111 presume 1335
+0100011111111 luh 1607
+0100011111111 gotchu 1963
+0100011111111 tink 3271
+0100011111111 tot 3982
+0100011111111 guarantee 7084
+0100011111111 promise 43964
+0100011111111 swear 78965
+0100011111111 bet 97470
+0100100 _have_ 41
+0100100 heve 42
+0100100 hsve 43
+0100100 havd 44
+0100100 shead 44
+0100100 huv 52
+0100100 hhave 52
+0100100 haaaave 56
+0100100 havv 56
+0100100 haev 57
+0100100 havet 64
+0100100 haaave 74
+0100100 haue 85
+0100100 havve 86
+0100100 hav3 89
+0100100 havr 95
+0100100 haveeee 99
+0100100 haved 106
+0100100 have/had 107
+0100100 -have 170
+0100100 haave 234
+0100100 forsee 249
+0100100 haveee 272
+0100100 hvae 272
+0100100 habe 299
+0100100 ahve 523
+0100100 haf 526
+0100100 foresee 625
+0100100 havee 1963
+0100100 hve 6115
+0100100 hv 11613
+0100100 have 3244795
+0100100 hav 23778
+01001010 neeeeeeeeeeed 41
+01001010 neeeeeeeeeed 44
+01001010 néed 53
+01001010 neeeeeeeeed 57
+01001010 nned 61
+01001010 needdd 61
+01001010 eed 78
+01001010 neeeeeeeed 96
+01001010 n33d 132
+01001010 meed 150
+01001010 nedd 171
+01001010 neeeeeeed 180
+01001010 nees 188
+01001010 needd 226
+01001010 needz 303
+01001010 #need 325
+01001010 neeeeeed 349
+01001010 neeeeed 582
+01001010 neeeed 794
+01001010 nid 1191
+01001010 need 1110442
+01001010 neeed 1968
+01001011 wabt 41
+01001011 wantcha 44
+01001011 wannnt 55
+01001011 waaaaant 59
+01001011 desrve 61
+01001011 diserve 62
+01001011 wantchu 65
+01001011 derserve 67
+01001011 wamt 71
+01001011 wany 82
+01001011 waaaant 88
+01001011 waaant 108
+01001011 vant 111
+01001011 whant 165
+01001011 waant 187
+01001011 wannt 254
+01001011 need/want 258
+01001011 wnat 271
+01001011 want/need 425
+01001011 wan't 630
+01001011 wantt 704
+01001011 intend 2955
+01001011 wnt 6845
+01001011 want 1102355
+01001011 deserve 38659
+010011000 ggot 42
+010011000 goht 64
+010011000 gotcho 76
+010011000 ghot 105
+010011000 gawt 106
+010011000 gottt 184
+010011000 qott 212
+010011000 gotz 494
+010011000 g0t 684
+010011000 gott 2036
+010011000 got 1468990
+010011000 qot 3710
+0100110010 screen(not 41
+0100110010 assisti 1135
+0100110010 rated 15420
+0100110010 favorited 28834
+0100110010 uploaded 38373
+0100110010 liked 85321
+0100110011 hadddd 40
+0100110011 haaaad 41
+0100110011 haaad 42
+0100110011 had/have 76
+0100110011 -had 81
+0100110011 got's 84
+0100110011 haddd 111
+0100110011 ahd 136
+0100110011 haad 147
+0100110011 hade 252
+0100110011 dodged 832
+0100110011 ihad 857
+0100110011 hadd 1157
+0100110011 favourited 1468
+0100110011 had 899199
+0100110011 gots 5850
+01001101000 longoria's 53
+01001101000 eatten 61
+01001101000 seeeen 63
+01001101000 seen/heard 130
+01001101000 4gotten 159
+01001101000 seeen 255
+01001101000 outgrown 257
+01001101000 longoria 897
+01001101000 encountered 1555
+01001101000 seen 223411
+01001101000 eaten 14753
+01001101001 notcied 41
+01001101001 insinuated 41
+01001101001 readed 42
+01001101001 heard/read 44
+01001101001 wagered 44
+01001101001 seened 50
+01001101001 twitter'd 51
+01001101001 partook 53
+01001101001 regreted 57
+01001101001 tweeeted 59
+01001101001 deduced 73
+01001101001 fantasized 82
+01001101001 tweet'd 84
+01001101001 twitpiced 89
+01001101001 boasted 105
+01001101001 heardd 140
+01001101001 learnd 149
+01001101001 refrained 167
+01001101001 seent 207
+01001101001 tweetd 236
+01001101001 sensed 241
+01001101001 twitpic'd 241
+01001101001 unsubscribed 242
+01001101001 heared 309
+01001101001 rt'ed 384
+01001101001 reblogged 477
+01001101001 concluded 1200
+01001101001 twittered 3105
+01001101001 imagined 3382
+01001101001 learnt 4472
+01001101001 guessed 4576
+01001101001 mentioned 20081
+01001101001 noticed 36858
+01001101001 tweeted 39272
+01001101001 heard 176877
+01001101001 learned 41988
+010011010100 saw/heard 42
+010011010100 wtched 44
+010011010100 wiki'd 45
+010011010100 sawww 46
+010011010100 saaw 47
+010011010100 saww 236
+010011010100 saw 240513
+010011010100 peeped 1469
+010011010101 wacthed 41
+010011010101 flickr'd: 41
+010011010101 dicovered 44
+010011010101 overwrote 44
+010011010101 refound 44
+010011010101 redownloaded 45
+010011010101 netflixed 46
+010011010101 re-wrote 46
+010011010101 typoed 47
+010011010101 dwnloaded 48
+010011010101 hallucinated 48
+010011010101 google'd 48
+010011010101 brainstormed 51
+010011010101 re-entered 51
+010011010101 blagged 53
+010011010101 buyed 55
+010011010101 perused 56
+010011010101 ated 59
+010011010101 rewinded 64
+010011010101 lugged 68
+010011010101 recvd 73
+010011010101 recd 73
+010011010101 torrented 75
+010011010101 dl'ed 78
+010011010101 putted 83
+010011010101 dowloaded 83
+010011010101 scoured 95
+010011010101 outgrew 97
+010011010101 visted 97
+010011010101 founds 98
+010011010101 recived 100
+010011010101 wached 101
+010011010101 re-discovered 102
+010011010101 rewound 103
+010011010101 earnt 108
+010011010101 freestyled 109
+010011010101 discoverd 111
+010011010101 watche 118
+010011010101 re-installed 128
+010011010101 #invented 129
+010011010101 dled 142
+010011010101 atee 143
+010011010101 youtubed 167
+010011010101 donned 167
+010011010101 co-wrote 173
+010011010101 baught 182
+010011010101 orderd 188
+010011010101 sipped 211
+010011010101 eated 218
+010011010101 dl'd 219
+010011010101 pondered 236
+010011010101 blipped 241
+010011010101 re-watched 241
+010011010101 craved 242
+010011010101 rewrote 247
+010011010101 chugged 256
+010011010101 bough 319
+010011010101 sniffed 320
+010011010101 rcvd 337
+010011010101 rewatched 356
+010011010101 watchd 374
+010011010101 overcame 439
+010011010101 redid 445
+010011010101 braved 457
+010011010101 uninstalled 476
+010011010101 snorted 479
+010011010101 reinstalled 544
+010011010101 inhaled 554
+010011010101 preordered 683
+010011010101 rediscovered 732
+010011010101 snagged 805
+010011010101 aced 908
+010011010101 rec'd 1132
+010011010101 downed 1153
+010011010101 spilt 1156
+010011010101 pre-ordered 1288
+010011010101 copped 1522
+010011010101 recieved 1894
+010011010101 rented 2565
+010011010101 googled 3526
+010011010101 witnessed 3961
+010011010101 spilled 4058
+010011010101 grabbed 4464
+010011010101 typed 4803
+010011010101 skipped 4848
+010011010101 attended 5111
+010011010101 smoked 7618
+010011010101 purchased 7665
+010011010101 visited 8307
+010011010101 survived 8642
+010011010101 earned 10742
+010011010101 unlocked 12007
+010011010101 wore 13317
+010011010101 drank 13941
+010011010101 downloaded 15133
+010011010101 discovered 20387
+010011010101 ordered 23919
+010011010101 received 26079
+010011010101 wrote 43970
+010011010101 ate 57684
+010011010101 bought 100355
+010011010101 watched 96341
+010011010110 cheked 42
+010011010110 foud 46
+010011010110 wussed 58
+010011010110 founf 67
+010011010110 chkd 90
+010011010110 pled 91
+010011010110 foundd 100
+010011010110 pigged 102
+010011010110 wimped 106
+010011010110 blurted 107
+010011010110 checkd 180
+010011010110 fount 190
+010011010110 flunked 192
+010011010110 chickened 296
+010011010110 figured 25936
+010011010110 found 223329
+010011010110 checked 33112
+010011010111 miss'd 41
+010011010111 biffed 45
+010011010111 looved 45
+010011010111 looooooved 47
+010011010111 detested 48
+010011010111 pvr'd 49
+010011010111 loveed 52
+010011010111 missedd 53
+010011010111 choosed 59
+010011010111 lovedddd 63
+010011010111 resented 66
+010011010111 loooooved 75
+010011010111 mis-read 77
+010011010111 luv'd 78
+010011010111 mised 82
+010011010111 loveddd 95
+010011010111 misse 99
+010011010111 lovd 106
+010011010111 lurves 109
+010011010111 loathed 122
+010011010111 loooved 130
+010011010111 lovedd 141
+010011010111 misjudged 145
+010011010111 looooved 148
+010011010111 misssed 164
+010011010111 misd 174
+010011010111 mistyped 179
+010011010111 overdid 237
+010011010111 luvd 269
+010011010111 prefered 342
+010011010111 luved 513
+010011010111 fancied 524
+010011010111 missd 536
+010011010111 regretted 660
+010011010111 disliked 731
+010011010111 adored 754
+010011010111 resisted 788
+010011010111 underestimated 872
+010011010111 admired 953
+010011010111 misread 1198
+010011010111 hated 14219
+010011010111 loved 99031
+010011010111 missed 124152
+010011011000 ask'd 45
+010011011000 ask's 52
+010011011000 askedd 65
+010011011000 aked 71
+010011011000 askes 105
+010011011000 bargained 165
+010011011000 auditioned 484
+010011011000 dared 874
+010011011000 begged 982
+010011011000 askd 995
+010011011000 thanked 1517
+010011011000 cared 5475
+010011011000 asked 95275
+010011011000 asks 19711
+010011011001 ff'd 40
+010011011001 pmed 42
+010011011001 kissd 44
+010011011001 pm'd 44
+010011011001 smsed 50
+010011011001 msg'd 51
+010011011001 @'ed 54
+010011011001 igged 54
+010011011001 unfllwed 55
+010011011001 tellz 57
+010011011001 unfolowed 57
+010011011001 t0ld 59
+010011011001 texed 63
+010011011001 bbmed 66
+010011011001 text'd 68
+010011011001 re-followed 68
+010011011001 calledd 70
+010011011001 unfollowd 77
+010011011001 wuvs 81
+010011011001 msgd 84
+010011011001 im'd 93
+010011011001 lubs 95
+010011011001 txt'd 105
+010011011001 teached 112
+010011011001 msged 128
+010011011001 unfollwed 130
+010011011001 bbm'd 139
+010011011001 refollowed 144
+010011011001 mooned 156
+010011011001 @'d 160
+010011011001 inboxed 160
+010011011001 imed 161
+010011011001 un-followed 197
+010011011001 textd 216
+010011011001 toldd 220
+010011011001 dmd 361
+010011011001 nudged 399
+010011011001 dm'ed 416
+010011011001 friended 467
+010011011001 forgave 570
+010011011001 txtd 824
+010011011001 doubted 911
+010011011001 txted 926
+010011011001 dmed 1102
+010011011001 messaged 1374
+010011011001 tol 1386
+010011011001 dm'd 1600
+010011011001 tld 1602
+010011011001 unfollowed 11189
+010011011001 texted 11664
+010011011001 reminded 12618
+010011011001 told 185454
+010011011001 taught 17465
+010011011010 elicited 44
+010011011010 madde 45
+010011011010 killled 47
+010011011010 maded 48
+010011011010 mades 51
+010011011010 taugh 52
+010011011010 disobeyed 60
+010011011010 madeee 67
+010011011010 cookd 74
+010011011010 helpd 79
+010011011010 eluded 109
+010011011010 maked 110
+010011011010 mde 162
+010011011010 costed 173
+010011011010 resembled 207
+010011011010 befriended 233
+010011011010 madee 505
+010011011010 jinxed 733
+010011011010 prompted 986
+010011011010 sparked 1012
+010011011010 cheered 2031
+010011011010 cooked 11987
+010011011010 made 409753
+010011011010 helped 23567
+010011011011 mistaked 40
+010011011011 free'd 41
+010011011011 gived 42
+010011011011 wrotee 50
+010011011011 dapped 56
+010011011011 brouqht 57
+010011011011 re-sent 59
+010011011011 bouqht 63
+010011011011 re-added 67
+010011011011 @replied 90
+010011011011 gavee 93
+010011011011 sended 117
+010011011011 intro'd 126
+010011011011 showd 142
+010011011011 qave 148
+010011011011 snaked 172
+010011011011 facebooked 186
+010011011011 snt 198
+010011011011 steered 217
+010011011011 killd 237
+010011011011 brung 331
+010011011011 mistook 498
+010011011011 loaned 569
+010011011011 e-mailed 652
+010011011011 rted 959
+010011011011 phoned 1039
+010011011011 forwarded 1209
+010011011011 mailed 1854
+010011011011 hugged 2543
+010011011011 tore 3119
+010011011011 proved 4178
+010011011011 emailed 6168
+010011011011 kissed 9814
+010011011011 blew 11771
+010011011011 showed 23251
+010011011011 threw 23571
+010011011011 brought 42035
+010011011011 gave 97584
+010011011011 sent 85619
+010011011100 pronouced 40
+010011011100 kald 40
+010011011100 44
+010011011100 considerd 47
+010011011100 re-named 47
+010011011100 kalld 49
+010011011100 misunderestimated 49
+010011011100 auto-corrected 52
+010011011100 clld 59
+010011011100 61
+010011011100 call'd 65
+010011011100 calles 80
+010011011100 codenamed 81
+010011011100 kawasaki's 97
+010011011100 autocorrected 98
+010011011100 labled 99
+010011011100 caled 106
+010011011100 ritchie's 111
+010011011100 cald 152
+010011011100 callled 165
+010011011100 termed 177
+010011011100 kalled 342
+010011011100 labelled 522
+010011011100 nicknamed 526
+010011011100 proclaimed 625
+010011011100 calld 836
+010011011100 deemed 981
+010011011100 crowned 1077
+010011011100 renamed 1543
+010011011100 labeled 1544
+010011011100 spelt 2519
+010011011100 pronounced 2524
+010011011100 titled 3658
+010011011100 spelled 8449
+010011011100 considered 14492
+010011011100 called 174428
+010011011100 named 37919
+010011011101 wroth 40
+010011011101 #curcubitaceae 43
+010011011101 worht 46
+010011011101 duking 51
+010011011101 worths 55
+010011011101 edtbuy 62
+010011011101 bstbuy 71
+010011011101 wrth 86
+010011011101 vlagra 250
+010011011101 pstbuy 356
+010011011101 worth 121005
+010011011101 pdtbuy 593
+0100110111100 fnished 44
+0100110111100 router-gx 46
+0100110111100 finishedd 77
+0100110111100 finised 92
+0100110111100 finishe 98
+0100110111100 bunked 102
+0100110111100 finsihed 174
+0100110111100 finnished 270
+0100110111100 finishd 313
+0100110111100 #viggle 408
+0100110111100 finshed 553
+0100110111100 #crunchyroll 553
+0100110111100 finished 128749
+0100110111100 completed 17249
+0100110111101 stoppped 40
+0100110111101 stopes 45
+0100110111101 startet 52
+0100110111101 gotem 56
+0100110111101 woke-up 79
+0100110111101 stoppd 94
+0100110111101 startedd 96
+0100110111101 stopd 101
+0100110111101 gottem 109
+0100110111101 ceebs 137
+0100110111101 strted 152
+0100110111101 strtd 159
+0100110111101 contemplated 308
+0100110111101 startd 470
+0100110111101 cbf 564
+0100110111101 stoped 723
+0100110111101 awoke 1395
+0100110111101 began 7908
+0100110111101 started 142923
+0100110111101 stopped 39833
+0100110111110 retook 48
+0100110111110 tooks 54
+0100110111110 bcame 64
+0100110111110 toook 155
+0100110111110 took 191495
+0100110111110 became 21827
+0100110111111 \(//∇//) 40
+0100110111111 41
+0100110111111 signed-up 45
+0100110111111 @moi 45
+0100110111111 #tunewiki 47
+0100110111111 1.265 53
+0100110111111 #michaelpollan 54
+0100110111111 rsvpd 59
+0100110111111 1.375 76
+0100110111111 2.375 76
+0100110111111 bankruptcyinformation 88
+0100110111111 rsvped 95
+0100110111111 //en 98
+0100110111111 published/updated 131
+0100110111111 168
+0100110111111 rsvp'd 284
+0100110111111 306
+0100110111111 #soundtracking 497
+0100110111111 #listeningto 3096
+0100110111111 searched 6343
+0100110111111 ousted 6874
+0100110111111 tagged 10769
+0100110111111 voted 54338
+0100111000 quipped 42
+0100111000 sadi 44
+0100111000 kill'd 45
+0100111000 liedd 58
+0100111000 can't!!!! 58
+0100111000 can't: 58
+0100111000 did- 74
+0100111000 need- 78
+0100111000 misspoke 80
+0100111000 didn't!!! 86
+0100111000 will- 92
+0100111000 saaid 97
+0100111000 couldn't! 105
+0100111000 saiddd 108
+0100111000 muttered 114
+0100111000 admited 115
+0100111000 sedd 120
+0100111000 didn't!! 134
+0100111000 vuelto 137
+0100111000 ain't! 143
+0100111000 said- 166
+0100111000 sayed 180
+0100111000 remarked 181
+0100111000 siad 182
+0100111000 wouldn't! 187
+0100111000 mumbled 187
+0100111000 exclaimed 189
+0100111000 sayd 244
+0100111000 saiid 256
+0100111000 wasn't! 288
+0100111000 sais 409
+0100111000 saidd 651
+0100111000 didn't! 1151
+0100111000 whispered 1166
+0100111000 insisted 1191
+0100111000 sed 5827
+0100111000 said 445260
+0100111000 suggested 6328
+01001110010 prooves 44
+01001110010 wholesales 45
+01001110010 presupposes 45
+01001110010 toei 61
+01001110010 meanss 68
+01001110010 meens 78
+01001110010 mean's 93
+01001110010 meanz 103
+01001110010 accomplishes 142
+01001110010 signifies 200
+01001110010 entails 334
+01001110010 dictates 401
+01001110010 implies 1079
+01001110010 determines 1863
+01001110010 proves 5511
+01001110010 means 114839
+01001110010 explains 10579
+01001110011 isn't!! 41
+01001110011 isn't: 42
+01001110011 â 43
+01001110011 pauling 44
+01001110011 hausfeld 46
+01001110011 doesn't: 48
+01001110011 49
+01001110011 @novatracks 49
+01001110011 berates 50
+01001110011 implores 51
+01001110011 does- 51
+01001110011 starrer 57
+01001110011 3/32 58
+01001110011 jafargholi 59
+01001110011 kardon 61
+01001110011 impersonates 68
+01001110011 contends 73
+01001110011 -say 74
+01001110011 speculates 75
+01001110011 verifies 76
+01001110011 assails 77
+01001110011 說 79
+01001110011 exclaims 84
+01001110011 8.4.1 88
+01001110011 omits 92
+01001110011 chides 94
+01001110011 misspells 98
+01001110011 hasn 108
+01001110011 sayss 117
+01001110011 121
+01001110011 likens 124
+01001110011 says- 127
+01001110011 narrates 127
+01001110011 arnley 134
+01001110011 torvalds 173
+01001110011 asserts 183
+01001110011 saids 192
+01001110011 decries 210
+01001110011 sayz 227
+01001110011 observes 231
+01001110011 mathers 251
+01001110011 proclaims 268
+01001110011 pronounces 298
+01001110011 laments 298
+01001110011 q:who's 315
+01001110011 preaches 338
+01001110011 342
+01001110011 concedes 357
+01001110011 doesn't! 374
+01001110011 acknowledges 565
+01001110011 say's 617
+01001110011 advises 722
+01001110011 criticizes 812
+01001110011 q:what's 812
+01001110011 opposes 855
+01001110011 assumes 856
+01001110011 doesn 874
+01001110011 attends 879
+01001110011 discovers 1106
+01001110011 indicates 1296
+01001110011 endorses 1719
+01001110011 sachs 1985
+01001110011 sez 2280
+01001110011 blames 2502
+01001110011 recommends 2689
+01001110011 insists 2833
+01001110011 denies 4027
+01001110011 suggests 4836
+01001110011 admits 6014
+01001110011 confirms 6106
+01001110011 says 247861
+01001110011 writes 9812
+0100111010 adheres 40
+0100111010 professes 42
+0100111010 panders 47
+0100111010 needss 48
+0100111010 wants/needs 49
+0100111010 neeeeeds 52
+0100111010 purports 54
+0100111010 alludes 57
+0100111010 wonts 59
+0100111010 wnats 61
+0100111010 neeeeds 62
+0100111010 undertakes 69
+0100111010 migrates 72
+0100111010 nids 84
+0100111010 wans 121
+0100111010 wantss 136
+0100111010 subscribes 155
+0100111010 conspires 158
+0100111010 succumbs 161
+0100111010 aspires 167
+0100111010 attaches 185
+0100111010 adapts 185
+0100111010 try's 190
+0100111010 need's 212
+0100111010 neeeds 215
+0100111010 wantz 239
+0100111010 caters 269
+0100111010 strives 309
+0100111010 equates 314
+0100111010 wnts 355
+0100111010 confesses 437
+0100111010 craves 524
+0100111010 contributes 611
+0100111010 intends 666
+0100111010 trys 815
+0100111010 want's 843
+0100111010 pretends 964
+0100111010 dares 989
+0100111010 reacts 1208
+0100111010 commits 1624
+0100111010 refers 1820
+0100111010 manages 1904
+0100111010 learns 2042
+0100111010 tends 2286
+0100111010 compares 2346
+0100111010 chooses 2492
+0100111010 threatens 3509
+0100111010 responds 3962
+0100111010 expects 4093
+0100111010 listens 4560
+0100111010 refuses 4996
+0100111010 decides 6405
+0100111010 tries 13433
+0100111010 deserves 17224
+0100111010 wants 174477
+0100111010 needs 180688
+010011101100 thinkz 46
+010011101100 wishs 48
+010011101100 #ilovemydadeventhough 53
+010011101100 thinx 57
+010011101100 thinkss 60
+010011101100 supposes 78
+010011101100 belives 82
+010011101100 finks 126
+010011101100 tinks 162
+010011101100 think's 176
+010011101100 #hescutebut 256
+010011101100 rears 259
+010011101100 #helooksgoodbut 310
+010011101100 mops 443
+010011101100 realises 540
+010011101100 reckons 736
+010011101100 swears 1818
+010011101100 realizes 2350
+010011101100 believes 8676
+010011101100 hopes 21032
+010011101100 thinks 76677
+010011101100 wishes 31020
+010011101101 kno's 42
+010011101101 agree's 51
+010011101101 4gets 52
+010011101101 remebers 52
+010011101101 knowsss 55
+010011101101 knoes 93
+010011101101 knoweth 94
+010011101101 knowss 94
+010011101101 brags 331
+010011101101 knos 442
+010011101101 know's 453
+010011101101 knws 741
+010011101101 complains 1843
+010011101101 forgets 2528
+010011101101 remembers 5946
+010011101101 understands 6238
+010011101101 knows 91400
+010011101101 cares 26505
+010011101110 keept 45
+010011101110 keepz 48
+010011101110 982mb 85
+010011101110 kips 108
+010011101110 #snowballfight 224
+010011101110 kept 31294
+010011101110 keeps 53244
+010011101110 tells 31444
+010011101111 a-a-ate 40
+010011101111 looooooves 40
+010011101111 tell's 42
+010011101111 keepeth 42
+010011101111 fo11ow 44
+010011101111 hatess 45
+010011101111 looves 46
+010011101111 misunderstands 46
+010011101111 folows 46
+010011101111 likez 46
+010011101111 detests 48
+010011101111 tels 49
+010011101111 inhabits 49
+010011101111 pities 49
+010011101111 frequents 50
+010011101111 overthrew 51
+010011101111 watchs 52
+010011101111 followsback 54
+010011101111 idolizes 57
+010011101111 excepts 57
+010011101111 molests 59
+010011101111 browses 60
+010011101111 likess 60
+010011101111 lovesssss 61
+010011101111 lovs 63
+010011101111 lovees 65
+010011101111 interupts 69
+010011101111 luv's 72
+010011101111 oversaw 75
+010011101111 lyks 76
+010011101111 twatches 77
+010011101111 foresaw 79
+010011101111 underestimates 80
+010011101111 foll0w 81
+010011101111 h8s 83
+010011101111 resents 84
+010011101111 follow's 86
+010011101111 put's 88
+010011101111 hate's 93
+010011101111 #loves 99
+010011101111 loveth 100
+010011101111 loooooves 104
+010011101111 marcado 104
+010011101111 loathes 106
+010011101111 envies 108
+010011101111 tolerates 109
+010011101111 suscrito 112
+010011101111 looooves 129
+010011101111 loooves 132
+010011101111 neglects 132
+010011101111 like's 153
+010011101111 lovessss 156
+010011101111 kidnaps 162
+010011101111 disrespects 197
+010011101111 despises 206
+010011101111 lovesss 257
+010011101111 worships 308
+010011101111 admires 364
+010011101111 lovess 442
+010011101111 adores 702
+010011101111 fancies 782
+010011101111 stalks 787
+010011101111 forgives 792
+010011101111 spoils 1035
+010011101111 see's 1079
+010011101111 dislikes 1309
+010011101111 trusts 1313
+010011101111 unfollows 1414
+010011101111 respects 1664
+010011101111 prefers 1899
+010011101111 appreciates 1900
+010011101111 ignores 2276
+010011101111 luvs 2330
+010011101111 hears 4021
+010011101111 enjoys 4393
+010011101111 owns 7156
+010011101111 misses 11538
+010011101111 sees 18930
+010011101111 follows 23285
+010011101111 hates 29373
+010011101111 loves 97300
+010011101111 likes 52949
+010011110 has'nt 40
+010011110 has/had 43
+010011110 182rg 45
+010011110 hasss 48
+010011110 182t 72
+010011110 -has 85
+010011110 bfb-attack 95
+010011110 hasent 152
+010011110 /americablog 203
+010011110 hass 369
+010011110 hasn’t 564
+010011110 hath 1533
+010011110 hasnt 5294
+010011110 has 1052678
+010011110 hasn't 30718
+0100111110 astonishes 40
+0100111110 unnerves 43
+0100111110 deprives 45
+0100111110 give's 46
+0100111110 vexes 47
+0100111110 perplexes 48
+0100111110 displeases 54
+0100111110 startles 54
+0100111110 enrages 59
+0100111110 flatters 65
+0100111110 givs 66
+0100111110 disqualifies 71
+0100111110 entitles 73
+0100111110 differentiates 74
+0100111110 makez 78
+0100111110 confounds 82
+0100111110 captivates 82
+0100111110 intimidates 91
+0100111110 humbles 112
+0100111110 seperates 124
+0100111110 makess 134
+0100111110 maketh 142
+0100111110 notifies 151
+0100111110 tempts 152
+0100111110 astounds 167
+0100111110 aggravates 167
+0100111110 infuriates 172
+0100111110 mkes 177
+0100111110 erks 183
+0100111110 overwhelms 193
+0100111110 weirds 201
+0100111110 make's 215
+0100111110 urks 231
+0100111110 convinces 234
+0100111110 terrifies 246
+0100111110 eludes 256
+0100111110 compels 259
+0100111110 intrigues 279
+0100111110 grosses 300
+0100111110 ails 302
+0100111110 fascinates 306
+0100111110 sickens 322
+0100111110 frightens 347
+0100111110 disgusts 451
+0100111110 distracts 455
+0100111110 disturbs 465
+0100111110 entertains 493
+0100111110 informs 502
+0100111110 frustrates 505
+0100111110 soothes 521
+0100111110 baffles 522
+0100111110 depresses 526
+0100111110 saddens 613
+0100111110 offends 636
+0100111110 surrounds 657
+0100111110 bores 767
+0100111110 separates 774
+0100111110 haunts 795
+0100111110 excites 806
+0100111110 angers 830
+0100111110 amuses 861
+0100111110 calms 875
+0100111110 irks 894
+0100111110 motivates 962
+0100111110 pleases 988
+0100111110 irritates 1467
+0100111110 confuses 1687
+0100111110 upsets 1820
+0100111110 amazes 2297
+0100111110 owes 2919
+0100111110 inspires 3261
+0100111110 bothers 3325
+0100111110 annoys 5201
+0100111110 scares 6242
+0100111110 cracks 6665
+0100111110 pisses 6731
+0100111110 allows 10230
+0100111110 reminds 29302
+0100111110 gives 58426
+0100111110 makes 281311
+01001111110 #justofferedlebron 52
+01001111110 outgrows 56
+01001111110 getts 70
+01001111110 getss 95
+01001111110 qets 193
+01001111110 getz 414
+01001111110 get's 1515
+01001111110 spends 3336
+01001111110 earns 4758
+01001111110 wears 10373
+01001111110 gets 183496
+01001111110 becomes 17600
+01001111111 restrains 40
+01001111111 upstages 40
+01001111111 supersedes 40
+01001111111 infers 40
+01001111111 accommodates 40
+01001111111 hastens 41
+01001111111 fulfils 41
+01001111111 douses 41
+01001111111 detonates 41
+01001111111 parses 41
+01001111111 decodes 41
+01001111111 presumes 41
+01001111111 disowns 41
+01001111111 unbuttons 42
+01001111111 unplugs 42
+01001111111 feigns 43
+01001111111 bringeth 43
+01001111111 invalidates 43
+01001111111 replenishes 43
+01001111111 resizes 43
+01001111111 extinguishes 43
+01001111111 emphasises 44
+01001111111 sabotages 44
+01001111111 afflicts 44
+01001111111 disregards 44
+01001111111 throttles 45
+01001111111 lengthens 46
+01001111111 tkes 47
+01001111111 subsidizes 47
+01001111111 accentuates 47
+01001111111 belies 47
+01001111111 augments 47
+01001111111 articulates 48
+01001111111 inflicts 48
+01001111111 pervades 48
+01001111111 exacts 48
+01001111111 necessitates 49
+01001111111 visualizes 49
+01001111111 obliterates 50
+01001111111 humiliates 50
+01001111111 confers 50
+01001111111 unifies 50
+01001111111 instills 51
+01001111111 elicits 52
+01001111111 isolates 52
+01001111111 animates 52
+01001111111 infuses 52
+01001111111 precludes 53
+01001111111 retrieves 53
+01001111111 cultivates 53
+01001111111 pollutes 53
+01001111111 findeth 53
+01001111111 rekindles 54
+01001111111 suffocates 54
+01001111111 transmits 55
+01001111111 exempts 56
+01001111111 deceives 56
+01001111111 crams 56
+01001111111 impedes 56
+01001111111 arouses 56
+01001111111 condones 57
+01001111111 glorifies 57
+01001111111 uplifts 58
+01001111111 sobers 58
+01001111111 relives 58
+01001111111 toughens 58
+01001111111 disproves 58
+01001111111 inflates 58
+01001111111 terrorizes 59
+01001111111 tames 59
+01001111111 replicates 59
+01001111111 infringes 60
+01001111111 enlarges 60
+01001111111 undoes 60
+01001111111 persuades 61
+01001111111 composes 61
+01001111111 portends 61
+01001111111 dulls 62
+01001111111 -show 62
+01001111111 covets 62
+01001111111 dilutes 63
+01001111111 abhors 63
+01001111111 equips 64
+01001111111 exalts 64
+01001111111 encapsulates 64
+01001111111 magnifies 65
+01001111111 straddles 65
+01001111111 enlightens 66
+01001111111 predates 66
+01001111111 carrys 66
+01001111111 nurtures 66
+01001111111 displaces 67
+01001111111 outdoes 67
+01001111111 emulates 67
+01001111111 unwraps 67
+01001111111 withholds 67
+01001111111 harasses 68
+01001111111 repays 68
+01001111111 prescribes 68
+01001111111 entices 69
+01001111111 specifies 69
+01001111111 maximizes 70
+01001111111 refines 71
+01001111111 insures 71
+01001111111 navigates 71
+01001111111 cheapens 73
+01001111111 sweetens 73
+01001111111 furthers 73
+01001111111 deflects 74
+01001111111 perpetuates 74
+01001111111 deters 75
+01001111111 nourishes 75
+01001111111 erodes 75
+01001111111 devotes 76
+01001111111 alleviates 76
+01001111111 impairs 76
+01001111111 permeates 77
+01001111111 scatters 77
+01001111111 skews 77
+01001111111 wields 79
+01001111111 dispels 80
+01001111111 obscures 80
+01001111111 cherishes 81
+01001111111 prolongs 82
+01001111111 strangles 82
+01001111111 amplifies 83
+01001111111 perceives 83
+01001111111 inherits 83
+01001111111 epitomizes 84
+01001111111 incites 85
+01001111111 modifies 85
+01001111111 dampens 86
+01001111111 conceals 87
+01001111111 mashes 87
+01001111111 quiets 87
+01001111111 minimizes 88
+01001111111 manipulates 88
+01001111111 sews 89
+01001111111 recites 89
+01001111111 optimizes 90
+01001111111 exemplifies 90
+01001111111 solidifies 91
+01001111111 inhibits 91
+01001111111 diverts 91
+01001111111 flattens 93
+01001111111 exaggerates 94
+01001111111 enriches 94
+01001111111 evaluates 94
+01001111111 organises 96
+01001111111 decorates 96
+01001111111 dispenses 96
+01001111111 paralyzes 96
+01001111111 denotes 96
+01001111111 devalues 96
+01001111111 classifies 96
+01001111111 engulfs 98
+01001111111 degrades 98
+01001111111 liberates 98
+01001111111 enforces 99
+01001111111 endangers 99
+01001111111 energizes 100
+01001111111 repels 100
+01001111111 numbs 101
+01001111111 arranges 101
+01001111111 affords 101
+01001111111 locates 102
+01001111111 suppresses 104
+01001111111 overpowers 104
+01001111111 evades 106
+01001111111 heightens 106
+01001111111 discourages 108
+01001111111 zaps 108
+01001111111 outshines 108
+01001111111 devours 110
+01001111111 instructs 111
+01001111111 ejaculates 112
+01001111111 obeys 114
+01001111111 redeems 114
+01001111111 interprets 115
+01001111111 simulates 117
+01001111111 recieves 117
+01001111111 exudes 120
+01001111111 governs 121
+01001111111 lessens 122
+01001111111 comprises 123
+01001111111 darkens 124
+01001111111 distorts 124
+01001111111 encompasses 124
+01001111111 penetrates 127
+01001111111 straightens 129
+01001111111 oversees 132
+01001111111 loosens 134
+01001111111 underlines 134
+01001111111 distinguishes 136
+01001111111 shames 138
+01001111111 hijacks 139
+01001111111 carves 139
+01001111111 embarrasses 139
+01001111111 exhausts 141
+01001111111 summarizes 141
+01001111111 educates 146
+01001111111 reinvents 147
+01001111111 reaps 147
+01001111111 elevates 147
+01001111111 induces 148
+01001111111 seduces 148
+01001111111 stifles 149
+01001111111 automates 149
+01001111111 facilitates 150
+01001111111 flaunts 151
+01001111111 regulates 152
+01001111111 multiplies 158
+01001111111 conveys 158
+01001111111 emits 163
+01001111111 lightens 164
+01001111111 negates 164
+01001111111 calculates 165
+01001111111 accompanies 166
+01001111111 softens 167
+01001111111 embodies 172
+01001111111 overlooks 173
+01001111111 deems 174
+01001111111 aggregates 175
+01001111111 injects 175
+01001111111 recognises 176
+01001111111 oozes 182
+01001111111 invokes 183
+01001111111 soaks 185
+01001111111 provokes 185
+01001111111 disables 186
+01001111111 utilizes 187
+01001111111 illuminates 188
+01001111111 assigns 189
+01001111111 compiles 191
+01001111111 infects 191
+01001111111 distributes 194
+01001111111 blurs 196
+01001111111 absorbs 196
+01001111111 overtook 197
+01001111111 hinders 198
+01001111111 reassures 198
+01001111111 symbolizes 199
+01001111111 punishes 201
+01001111111 manifests 205
+01001111111 forbids 205
+01001111111 anticipates 206
+01001111111 underwent 207
+01001111111 fetches 208
+01001111111 sustains 208
+01001111111 occupies 211
+01001111111 shortens 213
+01001111111 validates 220
+01001111111 complicates 223
+01001111111 fulfills 224
+01001111111 diminishes 224
+01001111111 depicts 228
+01001111111 incorporates 232
+01001111111 mimics 233
+01001111111 simplifies 234
+01001111111 scolds 234
+01001111111 undermines 235
+01001111111 contemplates 235
+01001111111 prohibits 238
+01001111111 precedes 239
+01001111111 evokes 239
+01001111111 transcends 248
+01001111111 restricts 250
+01001111111 recycles 250
+01001111111 portrays 254
+01001111111 regains 255
+01001111111 binds 265
+01001111111 advertises 270
+01001111111 emphasizes 273
+01001111111 betrays 274
+01001111111 resolves 279
+01001111111 ignites 280
+01001111111 resists 286
+01001111111 possesses 292
+01001111111 alters 293
+01001111111 borrows 296
+01001111111 imitates 301
+01001111111 sharpens 310
+01001111111 organizes 310
+01001111111 stimulates 311
+01001111111 excludes 316
+01001111111 contradicts 319
+01001111111 activates 319
+01001111111 invents 323
+01001111111 reinforces 323
+01001111111 pursues 329
+01001111111 satisfies 331
+01001111111 erases 335
+01001111111 analyzes 342
+01001111111 employs 349
+01001111111 slays 354
+01001111111 empowers 357
+01001111111 buries 368
+01001111111 illustrates 384
+01001111111 shoves 385
+01001111111 detects 396
+01001111111 unites 426
+01001111111 justifies 430
+01001111111 divides 431
+01001111111 unlocks 438
+01001111111 refreshes 442
+01001111111 adjusts 445
+01001111111 assures 481
+01001111111 ensures 496
+01001111111 relieves 499
+01001111111 tightens 512
+01001111111 violates 513
+01001111111 renders 516
+01001111111 retains 533
+01001111111 interrupts 539
+01001111111 lends 542
+01001111111 relaxes 545
+01001111111 impresses 550
+01001111111 consumes 552
+01001111111 restores 561
+01001111111 eliminates 606
+01001111111 identifies 608
+01001111111 defies 618
+01001111111 conquers 620
+01001111111 achieves 621
+01001111111 overcomes 626
+01001111111 boasts 666
+01001111111 directs 675
+01001111111 corrects 682
+01001111111 tosses 684
+01001111111 injures 694
+01001111111 stabs 718
+01001111111 enhances 729
+01001111111 transforms 756
+01001111111 integrates 775
+01001111111 stirs 776
+01001111111 maintains 778
+01001111111 wastes 800
+01001111111 frees 818
+01001111111 expresses 882
+01001111111 concludes 884
+01001111111 collects 900
+01001111111 exceeds 913
+01001111111 tickles 951
+01001111111 demonstrates 955
+01001111111 avoids 984
+01001111111 embraces 1009
+01001111111 strengthens 1026
+01001111111 eases 1031
+01001111111 drags 1039
+01001111111 resembles 1066
+01001111111 stresses 1072
+01001111111 generates 1115
+01001111111 deletes 1157
+01001111111 lowers 1169
+01001111111 develops 1206
+01001111111 recognizes 1219
+01001111111 solves 1227
+01001111111 exposes 1250
+01001111111 combines 1287
+01001111111 cleans 1443
+01001111111 prevents 1459
+01001111111 encourages 1531
+01001111111 defines 1547
+01001111111 warms 1558
+01001111111 enables 1651
+01001111111 protects 1718
+01001111111 removes 1751
+01001111111 replaces 1772
+01001111111 reduces 1797
+01001111111 pours 1817
+01001111111 attracts 1829
+01001111111 destroys 1849
+01001111111 captures 1892
+01001111111 reflects 2048
+01001111111 produces 2185
+01001111111 promotes 2232
+01001111111 lacks 2253
+01001111111 completes 2280
+01001111111 accepts 2393
+01001111111 represents 2441
+01001111111 fills 2513
+01001111111 improves 2837
+01001111111 carries 3244
+01001111111 clears 3456
+01001111111 describes 3594
+01001111111 builds 3605
+01001111111 lays 3612
+01001111111 knocks 3675
+01001111111 affects 3775
+01001111111 serves 3829
+01001111111 delivers 3870
+01001111111 pushes 4160
+01001111111 teaches 4213
+01001111111 involves 4266
+01001111111 catches 4493
+01001111111 contains 4666
+01001111111 reaches 5203
+01001111111 creates 6782
+01001111111 saves 8052
+01001111111 requires 8182
+01001111111 supports 8236
+01001111111 buys 8492
+01001111111 sells 8787
+01001111111 pulls 8897
+01001111111 provides 8975
+01001111111 sends 9786
+01001111111 raises 10399
+01001111111 throws 10912
+01001111111 pays 11102
+01001111111 includes 12958
+01001111111 adds 12984
+01001111111 drives 13052
+01001111111 holds 14628
+01001111111 finds 19440
+01001111111 kills 20799
+01001111111 puts 25606
+01001111111 brings 29908
+01001111111 helps 34207
+01001111111 takes 91660
+01010000000 bulks 56
+01010000000 gobbles 96
+01010000000 cozies 101
+01010000000 beging 123
+01010000000 welling 355
+01010000000 primed 485
+01010000000 awaken 1330
+01010000000 suited 1445
+01010000000 composed 1483
+01010000000 stripped 1842
+01010000000 heats 1909
+01010000000 wound 3663
+01010000000 cleared 8314
+01010000000 set 168298
+01010000000 tied 12260
+01010000001 un-see 51
+01010000001 aford 60
+01010000001 standd 63
+01010000001 stnd 76
+01010000001 abide 632
+01010000001 muster 860
+01010000001 resist 10421
+01010000001 stand 91143
+01010000001 afford 16426
+010100000100 busk 61
+010100000100 shied 62
+010100000100 sashay 63
+010100000100 saunter 64
+010100000100 amble 68
+010100000100 walk/jog 73
+010100000100 jogg 74
+010100000100 walk- 75
+010100000100 scamper 89
+010100000100 bikeride 93
+010100000100 walkk 113
+010100000100 sleepwalk 116
+010100000100 meander 120
+010100000100 rollerblade 126
+010100000100 hobble 140
+010100000100 trudge 153
+010100000100 prance 154
+010100000100 tiptoe 160
+010100000100 stagger 188
+010100000100 walk/run 199
+010100000100 taketh 203
+010100000100 laze 222
+010100000100 runn 412
+010100000100 wlk 508
+010100000100 roam 1212
+010100000100 wander 2159
+010100000100 stroll 2642
+010100000100 jog 4048
+010100000100 burst 5801
+010100000100 fade 7576
+010100000100 run 188365
+010100000100 walk 127279
+010100000101 drve 43
+010100000101 sitta 44
+010100000101 powerwalk 45
+010100000101 castell 47
+010100000101 riide 48
+010100000101 drive- 61
+010100000101 labb 62
+010100000101 ride- 63
+010100000101 capsize 68
+010100000101 drive's 87
+010100000101 rideee 88
+010100000101 pile-up 93
+010100000101 capsizes 108
+010100000101 trawl 120
+010100000101 drivee 121
+010100000101 derails 143
+010100000101 derailment 147
+010100000101 whizz 188
+010100000101 schlep 192
+010100000101 corsten 196
+010100000101 fast-forward 203
+010100000101 muddle 222
+010100000101 reck 254
+010100000101 ridee 272
+010100000101 rummage 304
+010100000101 plough 315
+010100000101 maneuver 350
+010100000101 sift 413
+010100000101 slog 490
+010100000101 romp 528
+010100000101 malfunction 1060
+010100000101 plow 1445
+010100000101 haul 2730
+010100000101 wreck 7008
+010100000101 slide 14556
+010100000101 crash 35475
+010100000101 drive 116332
+010100000101 ride 84533
+010100000110 check's 51
+010100000110 forays 69
+010100000110 -leans 89
+010100000110 backstreets 95
+010100000110 autoblogs 106
+010100000110 stepp 116
+010100000110 frmt 132
+010100000110 mlbr 198
+010100000110 dubl 240
+010100000110 foray 481
+010100000110 rein 513
+010100000110 revel 539
+010100000110 leap 4890
+010100000110 step 65976
+010100000110 tune 34944
+010100000111 colapse 40
+010100000111 backpedal 41
+010100000111 subsist 42
+010100000111 loq 43
+010100000111 swich 44
+010100000111 freeload 45
+010100000111 abseil 46
+010100000111 travell 48
+010100000111 cash-in 48
+010100000111 swith 49
+010100000111 ruminate 49
+010100000111 flyyyyyy 50
+010100000111 bouce 50
+010100000111 f-off 51
+010100000111 apparate 56
+010100000111 rollerskate 59
+010100000111 swtich 61
+010100000111 mooove 63
+010100000111 defecate 67
+010100000111 jaywalk 71
+010100000111 double-click 71
+010100000111 live/work 74
+010100000111 tred 76
+010100000111 devolve 77
+010100000111 toddle 79
+010100000111 flyyyyy 80
+010100000111 chunder 80
+010100000111 mve 82
+010100000111 reincarnate 82
+010100000111 opine 84
+010100000111 moove 87
+010100000111 slink 92
+010100000111 flit 99
+010100000111 plod 102
+010100000111 expound 108
+010100000111 foreclose 110
+010100000111 hangup 113
+010100000111 wriggle 115
+010100000111 capitalise 115
+010100000111 moveee 121
+010100000111 hopp 123
+010100000111 hitchhike 126
+010100000111 regress 142
+010100000111 waver 142
+010100000111 flyyyy 153
+010100000111 recline 173
+010100000111 intrude 185
+010100000111 reup 189
+010100000111 mosey 194
+010100000111 skimp 197
+010100000111 right-click 206
+010100000111 eavesdrop 211
+010100000111 ejaculate 223
+010100000111 slither 234
+010100000111 scurry 267
+010100000111 urinate 267
+010100000111 fizzle 273
+010100000111 seep 274
+010100000111 movee 296
+010100000111 graze 344
+010100000111 refocus 366
+010100000111 delve 376
+010100000111 wither 387
+010100000111 frolic 391
+010100000111 converge 532
+010100000111 descend 535
+010100000111 plummet 544
+010100000111 re-up 570
+010100000111 morph 590
+010100000111 nibble 653
+010100000111 pounce 665
+010100000111 swerve 697
+010100000111 ramble 742
+010100000111 scoot 769
+010100000111 splurge 853
+010100000111 teleport 876
+010100000111 lurk 1012
+010100000111 capitalize 1062
+010100000111 thrust 1072
+010100000111 tread 1089
+010100000111 meditate 1275
+010100000111 rot 1665
+010100000111 evolve 1704
+010100000111 dwell 1884
+010100000111 thrive 2137
+010100000111 soar 2682
+010100000111 stumble 2741
+010100000111 sail 3260
+010100000111 drift 3280
+010100000111 reflect 4110
+010100000111 float 4669
+010100000111 vent 4679
+010100000111 weigh 5493
+010100000111 concentrate 6165
+010100000111 dive 6217
+010100000111 crawl 7448
+010100000111 lean 8712
+010100000111 climb 8896
+010100000111 slip 10529
+010100000111 bounce 11397
+010100000111 cheat 15618
+010100000111 appear 16071
+010100000111 log 18281
+010100000111 switch 25246
+010100000111 jump 38189
+010100000111 move 134221
+010100000111 fly 62061
+01010000100 fallll 43
+01010000100 ifall 61
+01010000100 falll 141
+01010000100 fluctuate 242
+01010000100 confide 335
+01010000100 opt 2654
+01010000100 fall 140015
+01010000101 falin 40
+01010000101 faling 44
+01010000101 dozes 49
+01010000101 gallops 52
+01010000101 cordoned 52
+01010000101 -falls 54
+01010000101 simmered 59
+01010000101 crouched 66
+01010000101 falled 66
+01010000101 warding 69
+01010000101 felll 74
+01010000101 fallinq 80
+01010000101 ifell 81
+01010000101 lightyears 81
+01010000101 staving 87
+01010000101 dozin 91
+01010000101 fends 114
+01010000101 tapering 116
+01010000101 falln 155
+01010000101 fending 173
+01010000101 loggin 327
+01010000101 dozed 532
+01010000101 dozing 728
+01010000101 beez 909
+01010000101 resulting 1141
+01010000101 fallin 4996
+01010000101 rising 18581
+01010000101 falls 24878
+01010000101 fell 51726
+01010000101 falling 50153
+01010000110 keepit 40
+01010000110 stayyyy 41
+01010000110 2stay 59
+01010000110 -stay 80
+01010000110 staay 80
+01010000110 stayyy 86
+01010000110 saty 103
+01010000110 stayy 380
+01010000110 stay 210710
+01010000110 remain 14201
+010100001110 chiil 42
+010100001110 #cuddle 48
+010100001110 crashh 48
+010100001110 chilax 59
+010100001110 hangg 75
+010100001110 hng 78
+010100001110 chiill 82
+010100001110 killem 85
+010100001110 relaxe 87
+010100001110 zonk 100
+010100001110 kill'em 102
+010100001110 kickit 104
+010100001110 conk 109
+010100001110 hanq 111
+010100001110 cheel 116
+010100001110 chyll 122
+010100001110 relaxx 144
+010100001110 eke 157
+010100001110 get'em 318
+010100001110 conversate 483
+010100001110 chilll 611
+010100001110 chillax 980
+010100001110 mingle 1473
+010100001110 dine 3357
+010100001110 snuggle 3578
+010100001110 hangout 4821
+010100001110 cuddle 12309
+010100001110 chill 56729
+010100001110 hang 61264
+010100001111 particpate 40
+010100001111 siit 44
+010100001111 -lays 62
+010100001111 wolfed 78
+010100001111 layy 113
+010100001111 scarfed 120
+010100001111 sitt 134
+010100001111 hunker 292
+010100001111 dabble 321
+010100001111 wallow 324
+010100001111 bask 607
+010100001111 specialize 736
+010100001111 indulge 1644
+010100001111 invest 9288
+010100001111 lay 33318
+010100001111 sit 65798
+010100010 lady-gaga 47
+010100010 #ninjaassassin 55
+010100010 -moans 62
+010100010 -live 95
+010100010 cross-posted 101
+010100010 @thebamboozle 104
+010100010 liive 192
+010100010 @stickaid 242
+010100010 live 538120
+010100010 livee 696
+01010001100 guested 40
+01010001100 preyed 40
+01010001100 chirco 40
+01010001100 od'ed 40
+01010001100 lavished 41
+01010001100 odeed 41
+01010001100 hell-bent 44
+01010001100 prattle 45
+01010001100 hellbent 46
+01010001100 flighted 48
+01010001100 tated 50
+01010001100 snooped 51
+01010001100 ixnay 53
+01010001100 remarking 54
+01010001100 foreclosing 56
+01010001100 feasted 61
+01010001100 emblazoned 65
+01010001100 tattood 67
+01010001100 maybachs 71
+01010001100 #findit 72
+01010001100 kibosh 73
+01010001100 £200.00 75
+01010001100 predicated 76
+01010001100 skeeted 77
+01010001100 encroaching 79
+01010001100 heaped 79
+01010001100 fixate 84
+01010001100 scrawled 86
+01010001100 teeters 87
+01010001100 capitalizes 89
+01010001100 focuse 91
+01010001100 pressure's 108
+01010001100 trod 109
+01010001100 dibbs 109
+01010001100 riffing 115
+01010001100 oded 116
+01010001100 #bandpage 120
+01010001100 pounced 122
+01010001100 backtracks 123
+01010001100 soley 129
+01010001100 infringe 129
+01010001100 converged 133
+01010001100 embarked 138
+01010001100 tacked 141
+01010001100 tatooed 143
+01010001100 tattoo'd 146
+01010001100 tattoed 152
+01010001100 centred 162
+01010001100 sshd 165
+01010001100 infringing 183
+01010001100 embarks 188
+01010001100 #kawaii_pet 219
+01010001100 dependant 227
+01010001100 od'd 235
+01010001100 joke's 235
+01010001100 fixated 239
+01010001100 dependin 246
+01010001100 rowed 250
+01010001100 269
+01010001100 bordering 290
+01010001100 291
+01010001100 nov30 308
+01010001100 snitched 314
+01010001100 relied 331
+01010001100 goings 397
+01010001100 focussed 400
+01010001100 409
+01010001100 hinges 457
+01010001100 teardrops 503
+01010001100 dependence 535
+01010001100 dawned 538
+01010001100 overdosed 541
+01010001100 relies 573
+01010001100 depended 577
+01010001100 628
+01010001100 (****) 637
+01010001100 (*****) 656
+01010001100 embark 797
+01010001100 (***) 820
+01010001100 937
+01010001100 shitted 1027
+01010001100 dibs 1166
+01010001100 centered 1475
+01010001100 spying 1646
+01010001100 dependent 1671
+01010001100 focuses 1842
+01010001100 emphasis 1891
+01010001100 solely 1916
+01010001100 reflecting 2226
+01010001100 tattooed 2635
+01010001100 2930
+01010001100 insist 4164
+01010001100 rely 4414
+01010001100 depend 5017
+01010001100 depending 6359
+01010001100 cheated 7870
+01010001100 commented 9777
+01010001100 focused 12031
+01010001100 depends 21178
+01010001100 based 41556
+01010001100 focus 39794
+01010001101 92/100 40
+01010001101 skimping 40
+01010001101 muching 42
+01010001101 woring 45
+01010001101 wroking 46
+01010001101 backpedaling 48
+01010001101 5pmpt 48
+01010001101 erring 50
+01010001101 wkg 51
+01010001101 spyin 51
+01010001101 bingeing 52
+01010001101 elaborating 52
+01010001101 wokring 59
+01010001101 workig 60
+01010001101 workign 64
+01010001101 soldiering 64
+01010001101 smarting 68
+01010001101 sippen 69
+01010001101 worken 78
+01010001101 noming 80
+01010001101 commentin 80
+01010001101 focusin 83
+01010001101 od'ing 83
+01010001101 workinggg 83
+01010001101 budging 87
+01010001101 workng 92
+01010001101 verging 92
+01010001101 loafting 94
+01010001101 workinn 96
+01010001101 recoverin 97
+01010001101 wking 98
+01010001101 noshing 98
+01010001101 werking 99
+01010001101 wrkng 99
+01010001101 ruminating 103
+01010001101 regrouping 105
+01010001101 work'n 110
+01010001101 abstaining 114
+01010001101 intruding 119
+01010001101 recouping 121
+01010001101 refraining 128
+01010001101 harping 135
+01010001101 sippn 144
+01010001101 workinq 147
+01010001101 splurging 152
+01010001101 oding 153
+01010001101 ragging 163
+01010001101 workingg 164
+01010001101 snackin 176
+01010001101 decompressing 179
+01010001101 preying 181
+01010001101 194
+01010001101 focussing 202
+01010001101 flaking 205
+01010001101 binging 206
+01010001101 guesting 211
+01010001101 werkin 214
+01010001101 teetering 215
+01010001101 gorging 226
+01010001101 overdosing 228
+01010001101 gnawing 232
+01010001101 grubbing 244
+01010001101 capitalizing 269
+01010001101 recuperating 280
+01010001101 perving 284
+01010001101 plottin 289
+01010001101 munchin 310
+01010001101 profiting 346
+01010001101 embarking 369
+01010001101 nibbling 383
+01010001101 #latestgossip 405
+01010001101 grubbin 406
+01010001101 wrking 456
+01010001101 unwinding 488
+01010001101 eavesdropping 522
+01010001101 feasting 588
+01010001101 crushin 591
+01010001101 meditating 662
+01010001101 wrkn 675
+01010001101 wrkin 707
+01010001101 cooperating 722
+01010001101 dwelling 885
+01010001101 workn 886
+01010001101 reeling 965
+01010001101 concentrating 1037
+01010001101 snacking 1082
+01010001101 relying 1218
+01010001101 shittin 1284
+01010001101 munching 1620
+01010001101 appearing 2866
+01010001101 commenting 3776
+01010001101 sippin 4055
+01010001101 focusing 4616
+01010001101 recovering 8757
+01010001101 working 286109
+01010001101 workin 20557
+01010001110 siiting 40
+01010001110 luxuriating 42
+01010001110 stayingg 48
+01010001110 -sitting 51
+01010001110 balking 53
+01010001110 -hides 53
+01010001110 layinqq 53
+01010001110 sittingg 54
+01010001110 moored 56
+01010001110 layen 62
+01010001110 huddling 70
+01010001110 sittng 70
+01010001110 sit'n 71
+01010001110 layiin 72
+01010001110 stucc 78
+01010001110 stayinq 78
+01010001110 zeroing 79
+01010001110 layinn 79
+01010001110 #placesiwannahavesex 81
+01010001110 stuckk 82
+01010001110 standn 89
+01010001110 headquartered 97
+01010001110 sittting 105
+01010001110 layingg 117
+01010001110 cowering 119
+01010001110 ensconced 120
+01010001110 languishing 120
+01010001110 151
+01010001110 stuk 157
+01010001110 holidaying 162
+01010001110 dabbling 170
+01010001110 sittinq 190
+01010001110 layinq 193
+01010001110 -sits 198
+01010001110 wedged 220
+01010001110 sitin 231
+01010001110 residing 250
+01010001110 stucked 252
+01010001110 reveling 259
+01010001110 sitten 262
+01010001110 nestled 276
+01010001110 wallowing 288
+01010001110 sitn 303
+01010001110 arrvd 327
+01010001110 huddled 350
+01010001110 perched 355
+01010001110 chomping 360
+01010001110 stayn 395
+01010001110 butting 418
+01010001110 stationed 480
+01010001110 frowned 593
+01010001110 layn 597
+01010001110 indulging 738
+01010001110 sittn 746
+01010001110 siting 801
+01010001110 basking 1027
+01010001110 lounging 1428
+01010001110 standin 1568
+01010001110 stranded 3628
+01010001110 stayin 4586
+01010001110 settling 4622
+01010001110 parked 4853
+01010001110 layin 5663
+01010001110 trapped 7101
+01010001110 located 7270
+01010001110 sittin 14746
+01010001110 laying 25205
+01010001110 standing 30909
+01010001110 staying 39552
+01010001110 stuck 69032
+01010001110 sitting 107544
+01010001111 a-brewin 40
+01010001111 fiddlin 40
+01010001111 chillian 40
+01010001111 knockedd 40
+01010001111 mallin 41
+01010001111 conversant 41
+01010001111 imbued 41
+01010001111 conversatin 42
+01010001111 fraternizing 42
+01010001111 brainstormin 42
+01010001111 chiillin 42
+01010001111 cheeling 42
+01010001111 re-connecting 42
+01010001111 coolan 42
+01010001111 filld 43
+01010001111 parlaying 44
+01010001111 sketchin 44
+01010001111 commiserating 44
+01010001111 chiiling 44
+01010001111 contrasted 45
+01010001111 coolingg 45
+01010001111 chillinnnn 45
+01010001111 hangingout 45
+01010001111 bammin 45
+01010001111 -screams 45
+01010001111 vibed 45
+01010001111 pregamin 45
+01010001111 knocced 46
+01010001111 chillinggg 46
+01010001111 chilliin 46
+01010001111 flirtn 46
+01010001111 communing 47
+01010001111 obssed 47
+01010001111 chattn 47
+01010001111 -plays 47
+01010001111 ifucks 48
+01010001111 skypeing 48
+01010001111 oovooing 48
+01010001111 chillennn 49
+01010001111 busying 49
+01010001111 -dances 49
+01010001111 #likeagoodneighborstatefarmisthere 49
+01010001111 chilld 49
+01010001111 cool'n 50
+01010001111 showerin 50
+01010001111 steppn 51
+01010001111 peacin 51
+01010001111 festooned 51
+01010001111 hangen 51
+01010001111 chiln 52
+01010001111 dealn 52
+01010001111 self-medicating 52
+01010001111 sympathizing 53
+01010001111 makkin 53
+01010001111 profilin 55
+01010001111 collabing 56
+01010001111 chillllin 56
+01010001111 reminiscin 57
+01010001111 lepaking 57
+01010001111 sympathizes 59
+01010001111 wrasslin 59
+01010001111 videochatting 59
+01010001111 postedd 60
+01010001111 chilen 60
+01010001111 check'n 60
+01010001111 chllin 61
+01010001111 msning 62
+01010001111 chilllen 63
+01010001111 breezin 63
+01010001111 jivin 63
+01010001111 veggin 63
+01010001111 obsesed 64
+01010001111 laxin 65
+01010001111 roadtrippin 66
+01010001111 coinciding 67
+01010001111 summercamp 67
+01010001111 chekin 68
+01010001111 hang'n 69
+01010001111 chillling 70
+01010001111 maxxin 70
+01010001111 mashin 72
+01010001111 facetiming 72
+01010001111 kooling 72
+01010001111 mingled 74
+01010001111 #hookmeup 74
+01010001111 chillings 74
+01010001111 re-united 76
+01010001111 chillinnn 77
+01010001111 piggin 77
+01010001111 tinged 78
+01010001111 iparty 79
+01010001111 webcaming 80
+01010001111 agreein 81
+01010001111 text-ing 82
+01010001111 ridn 82
+01010001111 tunin 83
+01010001111 garnished 83
+01010001111 cheelin 84
+01010001111 chillinqq 84
+01010001111 chilaxing 84
+01010001111 maintainin 86
+01010001111 ym-ing 87
+01010001111 zonin 87
+01010001111 chylln 88
+01010001111 chatin 88
+01010001111 resonating 89
+01010001111 complying 91
+01010001111 kooln 92
+01010001111 interspersed 93
+01010001111 lampin 94
+01010001111 goofin 94
+01010001111 obbsessed 95
+01010001111 coolinn 95
+01010001111 skype-ing 97
+01010001111 replete 98
+01010001111 twouble 99
+01010001111 snugglin 102
+01010001111 wiggin 104
+01010001111 futzing 108
+01010001111 relaxn 109
+01010001111 saddled 113
+01010001111 ichatting 114
+01010001111 chillenn 115
+01010001111 in-love 116
+01010001111 teeming 117
+01010001111 stampin 117
+01010001111 webcamming 121
+01010001111 chilaxin 122
+01010001111 chyllen 122
+01010001111 chillan 123
+01010001111 tampered 123
+01010001111 messn 126
+01010001111 interfered 126
+01010001111 chillingg 127
+01010001111 msn-ing 129
+01010001111 chyllin 130
+01010001111 -composed 130
+01010001111 brunching 141
+01010001111 lunched 143
+01010001111 conversating 149
+01010001111 chiilin 151
+01010001111 wild'n 154
+01010001111 fraught 156
+01010001111 haning 159
+01010001111 rooming 165
+01010001111 adorned 167
+01010001111 chiling 167
+01010001111 toyed 175
+01010001111 chillinn 176
+01010001111 skypin 179
+01010001111 riden 187
+01010001111 brimming 189
+01010001111 hangn 193
+01010001111 drizzled 208
+01010001111 clashed 220
+01010001111 restin 226
+01010001111 illin 229
+01010001111 maccin 229
+01010001111 loungin 233
+01010001111 cuddlin 236
+01010001111 tasked 242
+01010001111 macking 243
+01010001111 crusin 248
+01010001111 chilllin 250
+01010001111 chill'n 254
+01010001111 maxin 255
+01010001111 obssesed 259
+01010001111 zonked 259
+01010001111 cooln 266
+01010001111 littered 271
+01010001111 obessed 291
+01010001111 abuzz 292
+01010001111 zan 301
+01010001111 obssessed 305
+01010001111 bbm-ing 305
+01010001111 checkn 305
+01010001111 chillinq 316
+01010001111 rife 318
+01010001111 riddled 333
+01010001111 dissatisfied 333
+01010001111 vegging 347
+01010001111 inundated 350
+01010001111 mucking 375
+01010001111 chating 387
+01010001111 collided 393
+01010001111 cashin 393
+01010001111 floatin 404
+01010001111 reconnected 444
+01010001111 disagreeing 447
+01010001111 reconnecting 490
+01010001111 infatuated 500
+01010001111 interfering 505
+01010001111 reuniting 506
+01010001111 flirtin 516
+01010001111 chilin 520
+01010001111 synonymous 522
+01010001111 conversing 552
+01010001111 grillin 552
+01010001111 tinkering 589
+01010001111 sprinkled 603
+01010001111 chillaxing 622
+01010001111 lunching 636
+01010001111 mackin 645
+01010001111 collaborating 646
+01010001111 coupled 662
+01010001111 partnering 698
+01010001111 toying 746
+01010001111 arguin 754
+01010001111 koolin 755
+01010001111 interacting 781
+01010001111 mobbin 811
+01010001111 infested 868
+01010001111 affiliated 940
+01010001111 cruisin 955
+01010001111 chillaxin 976
+01010001111 geeking 983
+01010001111 beefing 996
+01010001111 laced 1032
+01010001111 chattin 1061
+01010001111 dealin 1079
+01010001111 paired 1105
+01010001111 steppin 1380
+01010001111 skyping 1505
+01010001111 coping 1584
+01010001111 snuggling 1613
+01010001111 experimenting 1827
+01010001111 otp 1887
+01010001111 burnin 2076
+01010001111 relaxin 2108
+01010001111 agreeing 2196
+01010001111 inlove 2370
+01010001111 reunited 2373
+01010001111 chilln 2414
+01010001111 topped 2517
+01010001111 diagnosed 2567
+01010001111 messin 3729
+01010001111 coolin 4035
+01010001111 chilled 4605
+01010001111 ridin 4639
+01010001111 cuddling 4956
+01010001111 checkin 4981
+01010001111 chillen 7925
+01010001111 hangin 8602
+01010001111 rollin 8886
+01010001111 messing 11370
+01010001111 chatting 11947
+01010001111 dealing 12827
+01010001111 obsessed 19761
+01010001111 chilling 22892
+01010001111 filled 23285
+01010001111 hanging 47324
+01010001111 chillin 52916
+0101001000 hurrrrry 40
+0101001000 tumbs 42
+0101001000 shutttt 46
+0101001000 shuuut 49
+0101001000 hitme 49
+0101001000 hurryyy 56
+0101001000 hury 61
+0101001000 shuut 61
+0101001000 hurrrry 68
+0101001000 -stands 71
+0101001000 puckers 72
+0101001000 hurryy 79
+0101001000 himme 79
+0101001000 shuttt 80
+0101001000 wokeee 91
+0101001000 chut 99
+0101001000 pingdomalert 171
+0101001000 hurrry 223
+0101001000 shutt 228
+0101001000 pucker 415
+0101001000 sums 2870
+0101001000 thumbs 10939
+0101001000 shut 88014
+0101001000 hurry 34801
+01010010010 wakeee 53
+01010010010 sgin 99
+01010010010 wke 130
+01010010010 smarten 159
+01010010010 wakee 221
+01010010010 wake 108052
+01010010010 fess 421
+01010010011 groww 40
+01010010011 grw 43
+01010010011 chear 43
+01010010011 qrow 50
+01010010011 cheeer 72
+01010010011 stiffen 73
+01010010011 pickk 92
+01010010011 hitchu 105
+01010010011 thicken 118
+01010010011 rile 127
+01010010011 shrivel 135
+01010010011 rustle 178
+01010010011 fatten 189
+01010010011 scrounge 212
+01010010011 toughen 353
+01010010011 freshen 414
+01010010011 conjure 432
+01010010011 liven 623
+01010010011 loosen 918
+01010010011 lighten 1485
+01010010011 tighten 1753
+01010010011 brighten 2673
+01010010011 soak 3060
+01010010011 curl 5340
+01010010011 cheer 22572
+01010010011 grow 53277
+01010010011 pick 105340
+01010010011 catch 90943
+0101001010 gangin 47
+0101001010 cozied 51
+0101001010 cathing 54
+0101001010 wised 66
+0101001010 cozying 68
+0101001010 iwake 71
+0101001010 w0ke 74
+0101001010 saddling 76
+0101001010 wakinq 81
+0101001010 gearin 87
+0101001010 iwoke 90
+0101001010 woked 98
+0101001010 wakn 105
+0101001010 wakeing 112
+0101001010 sprucing 115
+0101001010 novidade 168
+0101001010 surf's 175
+0101001010 sobered 199
+0101001010 ganging 256
+0101001010 wokee 369
+0101001010 ramping 446
+0101001010 waken 689
+0101001010 teared 746
+0101001010 wakin 3232
+0101001010 gearing 4512
+0101001010 wakes 5875
+0101001010 catching 29090
+0101001010 waking 36562
+0101001010 woke 99260
+0101001011 stiched 40
+0101001011 wokin 40
+0101001011 locced 40
+0101001011 fracked 40
+0101001011 toked 40
+0101001011 bunned 40
+0101001011 inkd 41
+0101001011 yammed 41
+0101001011 vamped 42
+0101001011 fesses 42
+0101001011 fuckt 43
+0101001011 couped 43
+0101001011 suped 44
+0101001011 hookd 46
+0101001011 firmed 46
+0101001011 shacked 46
+0101001011 payd 46
+0101001011 fucc'd 47
+0101001011 fattened 47
+0101001011 fessed 47
+0101001011 f***ed 47
+0101001011 ened 48
+0101001011 mucks 49
+0101001011 kaught 49
+0101001011 sicked 49
+0101001011 hammed 50
+0101001011 t'd 51
+0101001011 layd 52
+0101001011 fuckedddd 52
+0101001011 tarted 53
+0101001011 playedd 53
+0101001011 smaked 54
+0101001011 piked 54
+0101001011 speeded 56
+0101001011 lotioned 57
+0101001011 fu*ked 58
+0101001011 freshened 59
+0101001011 pilled 60
+0101001011 signd 60
+0101001011 poed 63
+0101001011 mustered 64
+0101001011 fck'd 65
+0101001011 boo'ed 66
+0101001011 fucke 66
+0101001011 fuk'd 66
+0101001011 gitty 66
+0101001011 mic'd 67
+0101001011 phucked 67
+0101001011 spruced 67
+0101001011 slugged 70
+0101001011 effd 71
+0101001011 prettied 73
+0101001011 bubbled 74
+0101001011 welled 77
+0101001011 fukkd 78
+0101001011 fuckked 78
+0101001011 fecked 79
+0101001011 fuckeddd 79
+0101001011 cued 81
+0101001011 gussied 83
+0101001011 funked 85
+0101001011 fuccd 85
+0101001011 boozed 85
+0101001011 fuct 87
+0101001011 cauqht 87
+0101001011 twerked 88
+0101001011 conjured 90
+0101001011 fuxked 90
+0101001011 bunched 91
+0101001011 hotting 95
+0101001011 tatt'd 96
+0101001011 scrunched 96
+0101001011 gased 96
+0101001011 liquored 102
+0101001011 fked 106
+0101001011 bunged 106
+0101001011 postd 106
+0101001011 mushed 108
+0101001011 lubed 108
+0101001011 weaved 109
+0101001011 glammed 111
+0101001011 screwd 113
+0101001011 f'cked 114
+0101001011 wraped 116
+0101001011 levelled 117
+0101001011 hemmed 117
+0101001011 ganged 118
+0101001011 messd 119
+0101001011 fudged 126
+0101001011 buffed 132
+0101001011 lapped 133
+0101001011 fugged 136
+0101001011 growed 139
+0101001011 scuffed 139
+0101001011 chalked 140
+0101001011 pickd 142
+0101001011 loosened 143
+0101001011 ramped 146
+0101001011 eff'd 148
+0101001011 fcuked 150
+0101001011 highed 151
+0101001011 lockd 157
+0101001011 gobbled 157
+0101001011 conjures 165
+0101001011 fuckedd 170
+0101001011 catched 172
+0101001011 dinged 178
+0101001011 mucked 179
+0101001011 clued 180
+0101001011 roughed 182
+0101001011 f-ed 183
+0101001011 revved 185
+0101001011 waked 187
+0101001011 flexed 196
+0101001011 fogged 198
+0101001011 fuck'd 200
+0101001011 bossed 202
+0101001011 buttoned 204
+0101001011 perked 209
+0101001011 flamed 216
+0101001011 dosed 224
+0101001011 swelled 227
+0101001011 beefed 228
+0101001011 sexed 250
+0101001011 fkd 259
+0101001011 goofed 262
+0101001011 chocked 267
+0101001011 fxcked 271
+0101001011 f**ked 277
+0101001011 g'd 284
+0101001011 souped 287
+0101001011 cooped 287
+0101001011 doped 288
+0101001011 propped 291
+0101001011 surfs 294
+0101001011 bucked 312
+0101001011 holed 338
+0101001011 zipped 353
+0101001011 wacked 359
+0101001011 fukked 363
+0101001011 dicked 366
+0101001011 f'ed 375
+0101001011 leveled 403
+0101001011 cought 412
+0101001011 riled 431
+0101001011 boo'd 435
+0101001011 fucced 437
+0101001011 fckd 528
+0101001011 scooped 535
+0101001011 fukd 536
+0101001011 wifed 600
+0101001011 queued 633
+0101001011 caked 639
+0101001011 racked 646
+0101001011 sped 694
+0101001011 dolled 705
+0101001011 coughed 729
+0101001011 balled 738
+0101001011 summed 741
+0101001011 piled 754
+0101001011 cranked 763
+0101001011 whacked 773
+0101001011 f*cked 788
+0101001011 fuked 817
+0101001011 fcked 885
+0101001011 teaming 910
+0101001011 bundled 912
+0101001011 fuckd 1015
+0101001011 teamed 1025
+0101001011 f'd 1076
+0101001011 drugged 1087
+0101001011 inked 1126
+0101001011 geared 1237
+0101001011 cuddled 1244
+0101001011 snuggled 1383
+0101001011 gassed 1452
+0101001011 effed 1492
+0101001011 stocked 1567
+0101001011 warmed 1844
+0101001011 payed 2022
+0101001011 banged 2279
+0101001011 curled 2361
+0101001011 choked 2909
+0101001011 turnt 3139
+0101001011 jacked 3193
+0101001011 lined 3868
+0101001011 smacked 3971
+0101001011 backed 5083
+0101001011 woken 5344
+0101001011 settled 5891
+0101001011 stood 9070
+0101001011 wrapped 10183
+0101001011 hooked 12001
+0101001011 grew 12813
+0101001011 hung 13201
+0101001011 screwed 13529
+0101001011 laid 14327
+0101001011 locked 17877
+0101001011 messed 18880
+0101001011 ended 29368
+0101001011 picked 33137
+0101001011 signed 38923
+0101001011 fucked 53930
+0101001011 caught 56257
+0101001011 paid 55153
+0101001100 cheack 42
+0101001100 -find 44
+0101001100 #saturdaynitelive 50
+0101001100 ch-ch-check 53
+0101001100 ceck 53
+0101001100 checkkk 60
+0101001100 chekc 65
+0101001100 chack 74
+0101001100 ckeck 77
+0101001100 look@ 90
+0101001100 #whatifyoufound 96
+0101001100 chekk 103
+0101001100 checkit 128
+0101001100 check'em 131
+0101001100 cheak 140
+0101001100 chech 148
+0101001100 yigg 162
+0101001100 checkk 226
+0101001100 -check 291
+0101001100 chck 374
+0101001100 checc 559
+0101001100 chek 1299
+0101001100 chk 2633
+0101001100 check 482031
+0101001100 ck 3702
+01010011010 firgure 47
+01010011010 noagenda 77
+01010011010 balllwin 77
+01010011010 figger 79
+01010011010 fiqure 126
+01010011010 figur 129
+01010011010 blurt 203
+01010011010 753
+01010011010 figure 72951
+01010011010 dailysourcecode 1660
+01010011011 wimping 41
+01010011011 chickening 47
+01010011011 grayed 48
+01010011011 greyed 54
+01010011011 shoutt 59
+01010011011 doles 61
+01010011011 sussing 63
+01010011011 cross)portuguese(brazil)check 64
+01010011011 doling 69
+01010011011 #greendayrockband 70
+01010011011 fleshing 72
+01010011011 peacing 86
+01010011011 wigging 88
+01010011011 souled 88
+01010011011 hollowed 100
+01010011011 mellowing 100
+01010011011 blissed 107
+01010011011 blinged 131
+01010011011 figurin 132
+01010011011 shoutz 167
+01010011011 thugged 213
+01010011011 daylights 236
+01010011011 tuckered 252
+01010011011 nerding 258
+01010011011 flied 270
+01010011011 blacking 292
+01010011011 pigging 294
+01010011011 #shout 419
+01010011011 weirded 593
+01010011011 #tweetcloud 807
+01010011011 shouts 6493
+01010011011 shout 54920
+01010011011 figuring 7028
+01010011100 `з´ 40
+01010011100 #twitteraward 41
+01010011100 macmost 41
+01010011100 #securitycast 43
+01010011100 refudiate 48
+01010011100 #blonoautos 53
+01010011100 #kalradio 57
+01010011100 votee 63
+01010011100 #votekatniss 66
+01010011100 #thankafarmer 69
+01010011100 -guy 74
+01010011100 87
+01010011100 #topapps 90
+01010011100 //me 90
+01010011100 #blonoforsale 101
+01010011100 %mp3 108
+01010011100 #votepotter 109
+01010011100 pre-register 117
+01010011100 #chambanaforsale 133
+01010011100 136
+01010011100 -dad 144
+01010011100 146
+01010011100 193
+01010011100 204
+01010011100 #spfldforsale 222
+01010011100 infraction 347
+01010011100 matata 435
+01010011100 vote 141379
+01010011100 -me 1072
+01010011101 follow/ 40
+01010011101 #unotfromthehood 41
+01010011101 #yoboyfriendgay 41
+01010011101 #getoutmyface 42
+01010011101 #shesimmature 42
+01010011101 #theworldwouldbeabetterplace 42
+01010011101 upvote 42
+01010011101 retweeeeet 43
+01010011101 #yoursexisweak 43
+01010011101 addme 45
+01010011101 #youmightbeaconservative 45
+01010011101 【retweet】 45
+01010011101 #gtfomytimeline 46
+01010011101 #shedefinitelyahoe 47
+01010011101 #yougetpoints 48
+01010011101 #bitchuhit 48
+01010011101 retweet&follow 49
+01010011101 #sheprobablyahoodrat 50
+01010011101 #dontevenask 50
+01010011101 follow+rt 50
+01010011101 #slapyoself 51
+01010011101 #stoptrynarap 52
+01010011101 byh 52
+01010011101 re-blog 54
+01010011101 nuck 54
+01010011101 part6 55
+01010011101 #youahater 55
+01010011101 retwet 55
+01010011101 #ilikeobamacare 55
+01010011101 #cnqueen 56
+01010011101 #urnotmytype 56
+01010011101 #youainthittinitright 57
+01010011101 #no1wantsyou 57
+01010011101 #deleteyourtwitter 57
+01010011101 #famufb 58
+01010011101 rewteet 59
+01010011101 #hedontreallylikeyou 59
+01010011101 r.e.t.w.e.e.t. 59
+01010011101 #follows4c 59
+01010011101 #jumpoffabridge 60
+01010011101 #illbeatchoass 61
+01010011101 #yougetmajorpoints 62
+01010011101 #youknowsheyoung 62
+01010011101 #pleasedontaskme 62
+01010011101 #uneedanewphone 65
+01010011101 retweeeet 65
+01010011101 #youknowyouafreak 66
+01010011101 rt) 66
+01010011101 #uaintforme 66
+01010011101 #youdonthavealife 67
+01010011101 -retweet 71
+01010011101 r.t 71
+01010011101 qft 73
+01010011101 #youcantdj 73
+01010011101 #ucanthaveme 73
+01010011101 r.t. 74
+01010011101 reetweet 74
+01010011101 #youshouldbeashamed 75
+01010011101 #donttrusthim 75
+01010011101 retwitt 75
+01010011101 #youaintforme 76
+01010011101 tweetme 78
+01010011101 #theydontwantyou 78
+01010011101 #youneedtoshutup 79
+01010011101 #somebodytoldyouwrong 79
+01010011101 #yououtyoduckassmind 81
+01010011101 @soompi 81
+01010011101 #ididnttextyouback 81
+01010011101 #uknowufromqueens 82
+01010011101 #whatwouldyoudo 82
+01010011101 #icanttakeyouserious 84
+01010011101 #illpunchyouintheface 85
+01010011101 #younotfromdetroit 85
+01010011101 #cantbemyvalentine 85
+01010011101 #imnotinterested 86
+01010011101 #goplankintraffic 87
+01010011101 #fuckyouwashington 87
+01010011101 retweet- 87
+01010011101 #igotnorespectforyou 88
+01010011101 #deprivednaijachildhood 89
+01010011101 #wecandate 92
+01010011101 #wwyd 95
+01010011101 #sheaintwifeymaterial 95
+01010011101 rtweet 96
+01010011101 #dontcometomyhouse 96
+01010011101 reweet 100
+01010011101 #umustbecrazy 104
+01010011101 #wifeher 104
+01010011101 #dontgetinmycar 106
+01010011101 【retweet】only 107
+01010011101 #urahoe 108
+01010011101 #uneedyourassbeat 108
+01010011101 #youfromthehood 108
+01010011101 #biebersummer 108
+01010011101 rt+follow 110
+01010011101 #cuffhim 117
+01010011101 #shedontreallylikeyou 120
+01010011101 #urwack 121
+01010011101 follow&rt 122
+01010011101 #youknowshestheone 123
+01010011101 #wewontwork 131
+01010011101 retwit 132
+01010011101 #yallneedtobreakup 136
+01010011101 -tweet 137
+01010011101 knuck 137
+01010011101 retwt 137
+01010011101 #youneedtositdown 139
+01010011101 #smackyaself 142
+01010011101 #youdontknowstruggle 144
+01010011101 #goseeksomehelp 145
+01010011101 #youshouldbeembarrassed 152
+01010011101 #youdeservetobesingle 157
+01010011101 #sheiswifey 162
+01010011101 reblip 167
+01010011101 #youcanthaveswag 167
+01010011101 #itaintgoodsex 167
+01010011101 #rtthis 171
+01010011101 follow/rt 172
+01010011101 #bieberblast 172
+01010011101 #sorryicantdateyou 179
+01010011101 #deleteyouraccount 187
+01010011101 retweeet 188
+01010011101 #youdeserveashoutout 190
+01010011101 #yougottaberealspecial 191
+01010011101 #umightbeghetto 200
+01010011101 r.e.t.w.e.e.t 201
+01010011101 #sheprobablyahoe 206
+01010011101 #donttrusther 207
+01010011101 #shooturself 207
+01010011101 #youneedanewboyfriend 210
+01010011101 #meandyoucantdate 213
+01010011101 #getouttherelationship 214
+01010011101 #yourenotmytype 217
+01010011101 #dontcuffhim 224
+01010011101 #thatwouldbeawesome 233
+01010011101 #youdumbashell 234
+01010011101 #itsnotcheating 240
+01010011101 #lifewouldbebetter 241
+01010011101 #deletemynumber 245
+01010011101 rt/follow 255
+01010011101 #wewontlast 266
+01010011101 #unfollowme 275
+01010011101 #wecantbefriends 276
+01010011101 #donttalktome 280
+01010011101 #pleaseseekhelp 290
+01010011101 #yourlame 309
+01010011101 #hesnotthatintoyou 310
+01010011101 rt&follow 332
+01010011101 #youmightbealiberal 368
+01010011101 re-post 377
+01010011101 #wecanttalk 408
+01010011101 wwyd 437
+01010011101 #showurid 446
+01010011101 #howwouldyoufeel 473
+01010011101 #makeachange 483
+01010011101 #donttrytoholla 491
+01010011101 #yournotmytype 504
+01010011101 #itmightbeover 517
+01010011101 #dontwifeher 552
+01010011101 #icanttakeyouseriously 553
+01010011101 #itsnotgonnawork 606
+01010011101 #slapyourself 607
+01010011101 #youcantdateme 639
+01010011101 #losemynumber 702
+01010011101 r-e-t-w-e-e-t 753
+01010011101 rt- 871
+01010011101 #retweetthis 906
+01010011101 #icantdateyou 1198
+01010011101 #wecantdate 1511
+01010011101 r-t 1620
+01010011101 repost 2530
+01010011101 reblog 2568
+01010011101 r/t 2597
+01010011101 re-tweet 4443
+01010011101 retweet 96513
+01010011101 #retweet 7332
+010100111100 #advertise 45
+010100111100 #changetheworld 45
+010100111100 call/email 47
+010100111100 relink 48
+010100111100 59
+010100111100 [-] 61
+010100111100 cross-post 67
+010100111100 #enter 77
+010100111100 enrol 121
+010100111100 tune-in 150
+010100111100 #donate 189
+010100111100 203
+010100111100 arv 348
+010100111100 vist 508
+010100111100 donate 17279
+010100111100 register 17912
+010100111100 enter 46173
+010100111100 visit 106546
+010100111101 pinoyportal 40
+010100111101 -join 50
+010100111101 joinn 54
+010100111101 #join 67
+010100111101 113
+010100111101 joing 235
+010100111101 join 118951
+010100111101 #ebz 453
+010100111110 clickity 42
+010100111110 0nliine 54
+010100111110 lookee 67
+010100111110 spred 67
+010100111110 more's 69
+010100111110 komment 70
+010100111110 -click 72
+010100111110 silkk 77
+010100111110 50off 82
+010100111110 jeru 96
+010100111110 spead 100
+010100111110 cmmnt 105
+010100111110 pliny 114
+010100111110 cyhi 193
+010100111110 achmed 194
+010100111110 uncheck 227
+010100111110 looka 230
+010100111110 clack 452
+010100111110 clik 464
+010100111110 winnie 1891
+010100111110 rsvp 7499
+010100111110 click 69108
+010100111110 spread 33147
+010100111111 testdrive 40
+010100111111 c/p 40
+010100111111 hiso 40
+010100111111 jailbrake 40
+010100111111 d.l 41
+010100111111 getout 42
+010100111111 listen- 44
+010100111111 strongarm 44
+010100111111 paraben 44
+010100111111 maxb 45
+010100111111 a's: 46
+010100111111 cantlivewithout 46
+010100111111 xm's 46
+010100111111 081221657223 46
+010100111111 studdy 47
+010100111111 freedownload 47
+010100111111 commentt 48
+010100111111 48
+010100111111 upsize 48
+010100111111 pc- 48
+010100111111 crosspost 48
+010100111111 sve 49
+010100111111 d/load 50
+010100111111 donwload 50
+010100111111 entrando 52
+010100111111 slappa 53
+010100111111 chkout 58
+010100111111 hommage 59
+010100111111 transcode 60
+010100111111 nomis 61
+010100111111 -post 61
+010100111111 iwear 62
+010100111111 download- 69
+010100111111 printscreen 71
+010100111111 galvanize 72
+010100111111 drp 73
+010100111111 sidepodcast 78
+010100111111 eof 85
+010100111111 downlaod 86
+010100111111 co-starring 87
+010100111111 dual-boot 88
+010100111111 auto-tweet 95
+010100111111 cmmt 96
+010100111111 unscramble 97
+010100111111 100
+010100111111 fid 113
+010100111111 #cellflare 120
+010100111111 fileserve 121
+010100111111 listen/download 130
+010100111111 invert 130
+010100111111 reupload 153
+010100111111 dld 154
+010100111111 trackback 167
+010100111111 d.l. 168
+010100111111 fastforward 176
+010100111111 dload 179
+010100111111 re-use 210
+010100111111 cmnt 212
+010100111111 whither 213
+010100111111 dowload 259
+010100111111 etch 263
+010100111111 refactor 285
+010100111111 check-out 286
+010100111111 logout 297
+010100111111 dwnload 299
+010100111111 iluv 306
+010100111111 retry 312
+010100111111 repack 332
+010100111111 dwnld 348
+010100111111 amplify 381
+010100111111 #run 403
+010100111111 paraphrase 423
+010100111111 vendo 506
+010100111111 transcend 580
+010100111111 copy/paste 644
+010100111111 reuse 956
+010100111111 sign-up 1086
+010100111111 d/l 1442
+010100111111 preorder 1574
+010100111111 embed 1761
+010100111111 ignite 1767
+010100111111 signup 2039
+010100111111 behold 2646
+010100111111 bookmark 3243
+010100111111 rewind 3373
+010100111111 occupy 3996
+010100111111 pre-order 4060
+010100111111 cue 4221
+010100111111 jailbreak 4300
+010100111111 insert 6751
+010100111111 hail 7378
+010100111111 dl 7761
+010100111111 checkout 8428
+010100111111 select 10181
+010100111111 edit 16178
+010100111111 rent 23280
+010100111111 download 86158
+010100111111 rip 37839
+01010100000 ordr 40
+01010100000 order- 40
+01010100000 unkindness 43
+01010100000 chrg 45
+01010100000 ad-lib 50
+01010100000 aproach 53
+01010100000 #miles 81
+01010100000 indent 100
+01010100000 deference 115
+01010100000 attemp 141
+01010100000 benifit 168
+01010100000 opt-out 303
+01010100000 haste 605
+01010100000 unsubscribe 757
+01010100000 jest 823
+01010100000 attribute 997
+01010100000 heed 1006
+01010100000 regard 1895
+01010100000 relation 2422
+01010100000 estimate 2547
+01010100000 honour 3103
+01010100000 regards 4191
+01010100000 addition 7703
+01010100000 arrest 9226
+01010100000 appeal 10024
+01010100000 approach 12318
+01010100000 advance 14406
+01010100000 escape 14716
+01010100000 benefit 15740
+01010100000 upgrade 19245
+01010100000 honor 21072
+01010100000 purchase 21695
+01010100000 effect 24879
+01010100000 charge 29239
+01010100000 offer 49249
+01010100000 return 52839
+01010100000 order 81553
+010101000010 spatter 43
+010101000010 commercial/industrial 44
+010101000010 classic- 44
+010101000010 libris 44
+010101000010 adjustmen 48
+010101000010 touchs 54
+010101000010 officio 56
+010101000010 fronta 58
+010101000010 nogg 61
+010101000010 touch- 62
+010101000010 pway 62
+010101000010 transfusions 65
+010101000010 touchh 77
+010101000010 800w 80
+010101000010 nano's 80
+010101000010 touch's 81
+010101000010 touch/iphone 93
+010101000010 101
+010101000010 suppressant 102
+010101000010 #fitstats 134
+010101000010 locsin 137
+010101000010 machina 156
+010101000010 clots 165
+010101000010 loompas 167
+010101000010 transfusion 206
+010101000010 nanos 219
+010101000010 fascinate 309
+010101000010 loompa 330
+010101000010 clot 461
+010101000010 synch 468
+010101000010 blot 1306
+010101000010 nano 6528
+010101000010 sync 8656
+010101000010 touch 80274
+010101000010 contact 41176
+010101000011 xmlns 40
+010101000011 menton 44
+010101000011 stength 46
+010101000011 re-route 47
+010101000011 poisen 47
+010101000011 vote- 48
+010101000011 hoodwink 48
+010101000011 re-direct 52
+010101000011 support- 55
+010101000011 rebuff 57
+010101000011 malign 57
+010101000011 brodcast 60
+010101000011 worklife 61
+010101000011 suppport 62
+010101000011 force's 80
+010101000011 recco 81
+010101000011 co-sponsor 83
+010101000011 #findlauren 85
+010101000011 condem 92
+010101000011 whitelist 97
+010101000011 d.m. 110
+010101000011 raze 118
+010101000011 live-blog 121
+010101000011 supprt 121
+010101000011 prides 138
+010101000011 reprimand 146
+010101000011 cohost 178
+010101000011 205
+010101000011 fledged 247
+010101000011 spearhead 250
+010101000011 dupe 278
+010101000011 sanction 285
+010101000011 clothe 295
+010101000011 suport 369
+010101000011 rebrand 446
+010101000011 ridicule 497
+010101000011 conditioned 710
+010101000011 intrigue 725
+010101000011 torment 791
+010101000011 co-host 855
+010101000011 throttle 961
+010101000011 redirect 1181
+010101000011 forge 1497
+010101000011 lure 1654
+010101000011 groom 1721
+010101000011 elect 2525
+010101000011 tilt 2564
+010101000011 conduct 2894
+010101000011 divide 3074
+010101000011 boycott 3528
+010101000011 sponsor 7663
+010101000011 rank 9269
+010101000011 feeds 9545
+010101000011 broadcast 10806
+010101000011 rep 11396
+010101000011 swing 15448
+010101000011 rescue 16492
+010101000011 host 26247
+010101000011 force 32990
+010101000011 support 135699
+010101000011 feed 44299
+01010100010 raep 40
+01010100010 twing 40
+01010100010 namedrop 41
+01010100010 kiiss 42
+01010100010 try- 43
+01010100010 do-do 44
+01010100010 #bitchslap 45
+01010100010 re-play 45
+01010100010 f.u.c.k 45
+01010100010 knacker 46
+01010100010 bodyslam 46
+01010100010 floow 46
+01010100010 kisssss 47
+01010100010 geed 47
+01010100010 stike 48
+01010100010 suprize 48
+01010100010 ffk 49
+01010100010 supprise 49
+01010100010 smoochie 51
+01010100010 treet 51
+01010100010 assk 52
+01010100010 frazzle 53
+01010100010 bitee 54
+01010100010 geth 55
+01010100010 aak 56
+01010100010 -kiss 56
+01010100010 churp 57
+01010100010 182's 58
+01010100010 cise 59
+01010100010 t-bag 59
+01010100010 twittpic 62
+01010100010 crucio 63
+01010100010 bitch-slap 64
+01010100010 stabb 64
+01010100010 kll 65
+01010100010 commment 65
+01010100010 twiss 67
+01010100010 wisk 68
+01010100010 #twitterhump 68
+01010100010 blockk 68
+01010100010 baste 68
+01010100010 fakie 70
+01010100010 muder 70
+01010100010 spamm 71
+01010100010 rashed 71
+01010100010 goad 71
+01010100010 firebomb 72
+01010100010 suplex 74
+01010100010 high-5 75
+01010100010 warrent 75
+01010100010 preen 78
+01010100010 kissss 79
+01010100010 maje 80
+01010100010 jynx 81
+01010100010 mesmerize 83
+01010100010 banq 83
+01010100010 nuzzle 84
+01010100010 frape 84
+01010100010 gape 84
+01010100010 telle 85
+01010100010 f-u-c-k 86
+01010100010 dragg 88
+01010100010 fightt 89
+01010100010 liker 111
+01010100010 puch 111
+01010100010 pisss 119
+01010100010 skipp 120
+01010100010 surprize 122
+01010100010 misquote 123
+01010100010 diddle 131
+01010100010 jigg 132
+01010100010 roofie 137
+01010100010 boink 137
+01010100010 smoosh 140
+01010100010 alow 141
+01010100010 miis 144
+01010100010 freek 152
+01010100010 twiddle 158
+01010100010 gank 169
+01010100010 hi-five 172
+01010100010 retouch 174
+01010100010 bitchslap 181
+01010100010 snapp 184
+01010100010 sedate 185
+01010100010 surpise 191
+01010100010 cockblock 195
+01010100010 begg 198
+01010100010 motorboat 203
+01010100010 aks 210
+01010100010 kisss 217
+01010100010 razzle 223
+01010100010 grope 253
+01010100010 hugg 255
+01010100010 wets 258
+01010100010 bugg 261
+01010100010 flatline 267
+01010100010 sponser 277
+01010100010 whisk 293
+01010100010 boggle 301
+01010100010 blindfold 302
+01010100010 handcuff 307
+01010100010 heave 317
+01010100010 bagg 332
+01010100010 headbutt 340
+01010100010 gass 374
+01010100010 backhand 390
+01010100010 snipe 399
+01010100010 teabag 469
+01010100010 chitty 473
+01010100010 plop 483
+01010100010 high-five 485
+01010100010 erk 493
+01010100010 boned 494
+01010100010 mish 543
+01010100010 snog 599
+01010100010 caress 623
+01010100010 squish 646
+01010100010 faze 667
+01010100010 zap 752
+01010100010 thump 836
+01010100010 dazzle 880
+01010100010 lull 921
+01010100010 bleep 1012
+01010100010 dap 1021
+01010100010 skeet 1113
+01010100010 shun 1145
+01010100010 putt 1214
+01010100010 shag 1261
+01010100010 twug 1278
+01010100010 swipe 1335
+01010100010 gv 1368
+01010100010 shank 1420
+01010100010 bribe 1503
+01010100010 serenade 1545
+01010100010 tock 1574
+01010100010 chirp 1647
+01010100010 nag 1722
+01010100010 spank 2034
+01010100010 nudge 2071
+01010100010 tickle 2318
+01010100010 cuff 2956
+01010100010 suprise 3066
+01010100010 bore 3625
+01010100010 pinch 3655
+01010100010 nod 3665
+01010100010 gag 4662
+01010100010 ditch 4833
+01010100010 cuss 5286
+01010100010 diss 5329
+01010100010 bully 5508
+01010100010 tick 5510
+01010100010 poke 6367
+01010100010 tease 7168
+01010100010 blink 7410
+01010100010 dump 7807
+01010100010 sue 9496
+01010100010 stretch 10062
+01010100010 curse 11707
+01010100010 rape 12605
+01010100010 drag 13337
+01010100010 snap 17919
+01010100010 slap 18844
+01010100010 bite 22213
+01010100010 punch 22798
+01010100010 bang 26028
+01010100010 surprise 34995
+01010100010 hug 35345
+01010100010 block 42837
+01010100010 kiss 66479
+01010100010 shoot 60443
+010101000110 clamour 40
+010101000110 fly- 41
+010101000110 strugle 41
+010101000110 move- 41
+010101000110 figth 42
+010101000110 favr 42
+010101000110 exercize 42
+010101000110 foret 42
+010101000110 pre-record 44
+010101000110 rear-end 44
+010101000110 chaperon 47
+010101000110 pollinate 47
+010101000110 croon 49
+010101000110 excape 50
+010101000110 dither 50
+010101000110 buttfuck 51
+010101000110 gatt 52
+010101000110 losse 53
+010101000110 precipitate 53
+010101000110 looose 60
+010101000110 nade 63
+010101000110 lip-sync 67
+010101000110 recc 68
+010101000110 tarry 68
+010101000110 start- 68
+010101000110 envelop 71
+010101000110 comit 71
+010101000110 subsitute 75
+010101000110 jeer 75
+010101000110 conect 76
+010101000110 broach 77
+010101000110 www•reportmoney•net 79
+010101000110 f-up 80
+010101000110 cruse 91
+010101000110 shirk 94
+010101000110 reroute 95
+010101000110 sidetrack 98
+010101000110 scrim 102
+010101000110 mutate 111
+010101000110 lipsync 116
+010101000110 glisten 117
+010101000110 prostrate 117
+010101000110 joust 119
+010101000110 shunt 120
+010101000110 ddo 123
+010101000110 resit 130
+010101000110 clobber 130
+010101000110 schmooze 131
+010101000110 sacrafice 135
+010101000110 scorch 153
+010101000110 correlate 165
+010101000110 crimp 173
+010101000110 beckon 178
+010101000110 rupture 180
+010101000110 bicker 202
+010101000110 fiqht 204
+010101000110 ogle 225
+010101000110 gallop 230
+010101000110 botch 247
+010101000110 chaperone 248
+010101000110 burrow 264
+010101000110 skew 273
+010101000110 ascend 283
+010101000110 fixx 283
+010101000110 preface 300
+010101000110 tangle 358
+010101000110 bunt 364
+010101000110 quarrel 392
+010101000110 brood 408
+010101000110 swindle 412
+010101000110 tether 523
+010101000110 cull 523
+010101000110 keel 524
+010101000110 barge 534
+010101000110 flourish 582
+010101000110 convict 585
+010101000110 mull 602
+010101000110 overlap 641
+010101000110 shreds 684
+010101000110 wager 723
+010101000110 cripple 803
+010101000110 manufacture 814
+010101000110 compute 827
+010101000110 complement 1027
+010101000110 slander 1043
+010101000110 bind 1077
+010101000110 swoop 1099
+010101000110 hover 1154
+010101000110 disconnect 1359
+010101000110 scramble 1730
+010101000110 mend 1817
+010101000110 consult 1827
+010101000110 punt 1915
+010101000110 sway 2024
+010101000110 flee 2100
+010101000110 shrink 2511
+010101000110 halt 2523
+010101000110 rhyme 3343
+010101000110 encounter 3675
+010101000110 drain 4069
+010101000110 unite 4275
+010101000110 trigger 4390
+010101000110 curb 4428
+010101000110 sweep 5059
+010101000110 assist 5236
+010101000110 gather 5543
+010101000110 sacrifice 5813
+010101000110 pose 6959
+010101000110 defeat 7438
+010101000110 shed 7461
+010101000110 witness 7731
+010101000110 bend 7865
+010101000110 sink 8248
+010101000110 hack 9393
+010101000110 plug 11259
+010101000110 hunt 16091
+010101000110 cure 18124
+010101000110 chase 19740
+010101000110 ship 20408
+010101000110 connect 21544
+010101000110 loose 22472
+010101000110 draw 26001
+010101000110 fit 52390
+010101000110 lead 56978
+010101000110 fight 100771
+010101000111 contort 40
+010101000111 overstep 40
+010101000111 depreciate 46
+010101000111 overhype 46
+010101000111 re-vamp 50
+010101000111 deactive 51
+010101000111 unfurl 52
+010101000111 speedup 52
+010101000111 tranfer 55
+010101000111 counterbalance 56
+010101000111 sabatoge 56
+010101000111 resound 60
+010101000111 changeee 60
+010101000111 unprivate 61
+010101000111 transpose 61
+010101000111 sexify 62
+010101000111 resync 65
+010101000111 re-work 69
+010101000111 chnage 73
+010101000111 moye 77
+010101000111 re-order 78
+010101000111 re-air 80
+010101000111 re-set 88
+010101000111 increment 91
+010101000111 re-boot 92
+010101000111 unbreak 98
+010101000111 change- 101
+010101000111 redress 109
+010101000111 chane 125
+010101000111 chage 135
+010101000111 chng 149
+010101000111 re-start 154
+010101000111 darken 192
+010101000111 self-destruct 216
+010101000111 photocopy 235
+010101000111 chnge 238
+010101000111 whet 249
+010101000111 changee 252
+010101000111 chanqe 342
+010101000111 escalate 346
+010101000111 outperform 351
+010101000111 worsen 390
+010101000111 forfeit 407
+010101000111 restock 427
+010101000111 skyrocket 537
+010101000111 re-do 592
+010101000111 jumpstart 629
+010101000111 hinder 902
+010101000111 purge 1084
+010101000111 reload 1115
+010101000111 sabotage 1203
+010101000111 revamp 1245
+010101000111 recharge 1652
+010101000111 tweak 1772
+010101000111 decrease 1779
+010101000111 grasp 2248
+010101000111 reboot 3850
+010101000111 restart 4958
+010101000111 reset 5151
+010101000111 refresh 6394
+010101000111 ease 8003
+010101000111 affect 8925
+010101000111 spill 10437
+010101000111 boost 14576
+010101000111 change 214296
+010101000111 increase 22274
+01010100100 fáil 40
+01010100100 beah 41
+01010100100 tecktonik 41
+01010100100 yiff 42
+01010100100 hoppity 42
+01010100100 dogger 43
+01010100100 douggie 43
+01010100100 mpire 43
+01010100100 diamondz 44
+01010100100 propolis 45
+01010100100 unch 45
+01010100100 46
+01010100100 corridos 46
+01010100100 tipico 47
+01010100100 flexor 48
+01010100100 s'cool 48
+01010100100 hura 49
+01010100100 ryhme 49
+01010100100 flitter 49
+01010100100 lepard 49
+01010100100 bating 50
+01010100100 smize 51
+01010100100 bopp 52
+01010100100 8110 52
+01010100100 #dougie 52
+01010100100 bumpa 53
+01010100100 jugg 54
+01010100100 tinkers 55
+01010100100 boggie 56
+01010100100 c-walk 56
+01010100100 krash 56
+01010100100 fu's 57
+01010100100 bhajan 57
+01010100100 fuz 58
+01010100100 dawdle 58
+01010100100 muv 58
+01010100100 sheringham 59
+01010100100 ruxpin 59
+01010100100 doo's 62
+01010100100 cypha 63
+01010100100 8120 63
+01010100100 kday 65
+01010100100 dysplasia 67
+01010100100 skitz 67
+01010100100 #catdaddy 68
+01010100100 danceeee 68
+01010100100 belve 68
+01010100100 8130 69
+01010100100 clicc 70
+01010100100 stip 71
+01010100100 slosh 71
+01010100100 roosevelt's 71
+01010100100 #plank 72
+01010100100 hake 72
+01010100100 fyt 72
+01010100100 oogie 74
+01010100100 hop/rap 76
+01010100100 stripp 77
+01010100100 jackoff 77
+01010100100 smoochy 78
+01010100100 geg 80
+01010100100 skeem 80
+01010100100 hang-out 89
+01010100100 mccreary 91
+01010100100 duppy 91
+01010100100 dace 92
+01010100100 swimm 94
+01010100100 rott 94
+01010100100 dagga 95
+01010100100 vape 96
+01010100100 skii 97
+01010100100 kompa 99
+01010100100 squeek 100
+01010100100 purl 101
+01010100100 2step 103
+01010100100 camwhore 105
+01010100100 rapstar 106
+01010100100 panick 107
+01010100100 waggle 107
+01010100100 104.9 108
+01010100100 dance- 112
+01010100100 95.1 113
+01010100100 danceee 115
+01010100100 showout 117
+01010100100 88.3 118
+01010100100 hop's 120
+01010100100 jook 121
+01010100100 gee's 122
+01010100100 alanta 124
+01010100100 sitdown 124
+01010100100 catdaddy 124
+01010100100 98.3 128
+01010100100 clang 134
+01010100100 larp 135
+01010100100 91.5 137
+01010100100 boogy 139
+01010100100 takeova 140
+01010100100 flexx 142
+01010100100 agee 143
+01010100100 izumi 143
+01010100100 93.5 146
+01010100100 lep 147
+01010100100 yodel 159
+01010100100 faceplant 164
+01010100100 krump 169
+01010100100 97.3 171
+01010100100 grubb 175
+01010100100 90.5 178
+01010100100 89.9 178
+01010100100 make-out 179
+01010100100 cashout 181
+01010100100 snarl 199
+01010100100 sods 202
+01010100100 jam's 204
+01010100100 yack 208
+01010100100 geiger 208
+01010100100 woogie 210
+01010100100 fester 211
+01010100100 scram 223
+01010100100 94.9 224
+01010100100 jamm 229
+01010100100 trapp 230
+01010100100 91.3 236
+01010100100 azonto 237
+01010100100 beed 240
+01010100100 stearns 241
+01010100100 shoop 243
+01010100100 kiis 250
+01010100100 merengue 255
+01010100100 dancee 261
+01010100100 getup 262
+01010100100 showoff 263
+01010100100 pendergrass 274
+01010100100 bashment 283
+01010100100 fallback 293
+01010100100 sk8 305
+01010100100 lye 306
+01010100100 waite 314
+01010100100 d'or 316
+01010100100 foxtrot 318
+01010100100 loos 319
+01010100100 breakdance 323
+01010100100 grahams 329
+01010100100 roleplay 360
+01010100100 fawn 362
+01010100100 dumpty 363
+01010100100 waddle 376
+01010100100 skydive 396
+01010100100 dirtbag 400
+01010100100 poynter 404
+01010100100 numa 418
+01010100100 k.o. 422
+01010100100 blogg 423
+01010100100 bear's 426
+01010100100 sota 432
+01010100100 ddos 452
+01010100100 dotted 460
+01010100100 grylls 471
+01010100100 groundswell 478
+01010100100 sty 497
+01010100100 berra 528
+01010100100 beatbox 532
+01010100100 taper 559
+01010100100 makeout 615
+01010100100 bachata 628
+01010100100 fila 640
+01010100100 grunt 645
+01010100100 shimmy 653
+01010100100 moonwalk 690
+01010100100 chillout 697
+01010100100 revolving 706
+01010100100 murda 707
+01010100100 leppard 712
+01010100100 glide 726
+01010100100 sizzle 784
+01010100100 howl 967
+01010100100 gees 1049
+01010100100 fiddle 1102
+01010100100 carpool 1134
+01010100100 wok 1228
+01010100100 wobble 1247
+01010100100 squat 1274
+01010100100 claw 1344
+01010100100 growl 1358
+01010100100 spaz 1405
+01010100100 jive 1453
+01010100100 wiggle 1995
+01010100100 fangirl 2237
+01010100100 twerk 2405
+01010100100 rumble 2470
+01010100100 sparkle 2517
+01010100100 tango 2737
+01010100100 bop 2817
+01010100100 chow 2886
+01010100100 boogie 3451
+01010100100 converse 3525
+01010100100 whistle 3894
+01010100100 sting 3930
+01010100100 rave 4717
+01010100100 stunt 4910
+01010100100 hoop 5820
+01010100100 dougie 5944
+01010100100 skate 7105
+01010100100 hustle 8130
+01010100100 goo 10331
+01010100100 dot 10513
+01010100100 panic 14658
+01010100100 swim 17401
+01010100100 bee 17632
+01010100100 grind 18553
+01010100100 rap 28109
+01010100100 jam 30464
+01010100100 hop 30607
+01010100100 bear 31311
+01010100100 dance 108581
+010101001010 tevo 41
+010101001010 super-size 41
+010101001010 picken 42
+010101001010 make- 43
+010101001010 rappel 45
+010101001010 leep 50
+010101001010 1-up 54
+010101001010 eaze 57
+010101001010 flounce 58
+010101001010 p*ss 59
+010101001010 poo-poo 62
+010101001010 flipp 64
+010101001010 bruck 65
+010101001010 frow 65
+010101001010 belay 67
+010101001010 ratcheting 67
+010101001010 cach 67
+010101001010 spraypaint 69
+010101001010 spinn 72
+010101001010 teamin 75
+010101001010 divvy 88
+010101001010 savile 89
+010101001010 coupes 92
+010101001010 swaddle 93
+010101001010 pck 93
+010101001010 crak 96
+010101001010 vacum 97
+010101001010 sighn 97
+010101001010 tapp 98
+010101001010 #wake 99
+010101001010 plonk 101
+010101001010 siqn 102
+010101001010 dredge 105
+010101001010 krack 108
+010101001010 wuk 110
+010101001010 #grow 118
+010101001010 peal 121
+010101001010 popp 122
+010101001010 skewer 146
+010101001010 cortisone 172
+010101001010 tattle 173
+010101001010 saute 181
+010101001010 spritz 191
+010101001010 saint's 196
+010101001010 drape 201
+010101001010 swab 216
+010101001010 smush 219
+010101001010 tetanus 245
+010101001010 belted 294
+010101001010 desolation 299
+010101001010 ooze 306
+010101001010 videotape 340
+010101001010 brine 342
+010101001010 knotted 350
+010101001010 maul 360
+010101001010 spook 395
+010101001010 tilted 431
+010101001010 latch 441
+010101001010 picc 449
+010101001010 sneek 485
+010101001010 lug 531
+010101001010 sprain 552
+010101001010 clamp 603
+010101001010 clog 619
+010101001010 spruce 782
+010101001010 tun 800
+010101001010 yank 839
+010101001010 muck 871
+010101001010 pik 1150
+010101001010 skid 1242
+010101001010 rake 1421
+010101001010 paddle 1481
+010101001010 sling 1666
+010101001010 fig 1693
+010101001010 shred 1717
+010101001010 hitch 1753
+010101001010 perk 1800
+010101001010 buckle 2160
+010101001010 mop 2256
+010101001010 beam 2492
+010101001010 chalk 2558
+010101001010 hol 2647
+010101001010 scrub 2839
+010101001010 scrap 3496
+010101001010 trace 3579
+010101001010 stir 3816
+010101001010 blaze 3987
+010101001010 mash 4141
+010101001010 trim 4337
+010101001010 mute 4607
+010101001010 dial 4946
+010101001010 mock 4964
+010101001010 spark 5657
+010101001010 bump 9778
+010101001010 pump 11246
+010101001010 spin 12846
+010101001010 split 13925
+010101001010 sneak 14291
+010101001010 tap 14445
+010101001010 tie 17544
+010101001010 cop 17915
+010101001010 lock 18093
+010101001010 wrap 18282
+010101001010 hook 21146
+010101001010 flip 21665
+010101001010 crack 29609
+010101001010 tag 30949
+010101001010 pop 53605
+010101001010 sign 101883
+010101001011 upconverting 40
+010101001011 pigford 40
+010101001011 parts)u 41
+010101001011 rockkkk 41
+010101001011 guiter 42
+010101001011 jonz 42
+010101001011 budos 43
+010101001011 smif 44
+010101001011 nkorho 44
+010101001011 crisscross 47
+010101001011 medicom 47
+010101001011 8cm 52
+010101001011 coster 54
+010101001011 handclap 55
+010101001011 rock/metal 56
+010101001011 yakety 57
+010101001011 gaffa 61
+010101001011 mcgruff 61
+010101001011 freaker 64
+010101001011 aila 64
+010101001011 rockkk 65
+010101001011 spinto 71
+010101001011 shortz 77
+010101001011 rock- 77
+010101001011 geils 91
+010101001011 rubba 95
+010101001011 skirted 95
+010101001011 bungy 99
+010101001011 intercooler 108
+010101001011 dazz 112
+010101001011 cardy 112
+010101001011 98.1 136
+010101001011 cymru 147
+010101001011 rockk 148
+010101001011 herniated 162
+010101001011 rocc 189
+010101001011 gaffer 205
+010101001011 aloft 248
+010101001011 masking 420
+010101001011 mariachi 503
+010101001011 lob 558
+010101001011 snare 636
+010101001011 bungee 661
+010101001011 horseback 691
+010101001011 sky's 864
+010101001011 wheaton 946
+010101001011 duct 2418
+010101001011 marching 3453
+010101001011 treasure 7681
+010101001011 tube 13063
+010101001011 rock 136711
+010101001011 cross 35066
+01010100110 typeee 40
+01010100110 #bcamroses 41
+01010100110 #behandsfree 41
+01010100110 twote 42
+01010100110 43
+01010100110 twape 43
+01010100110 tweet/ 43
+01010100110 pic'd 43
+01010100110 #5000 45
+01010100110 tweer 45
+01010100110 subb 46
+01010100110 #projectpink 47
+01010100110 twicpic 51
+01010100110 twweet 54
+01010100110 assest 55
+01010100110 twit-pic 55
+01010100110 @bradsdeals 55
+01010100110 #tunasub 58
+01010100110 twoot 60
+01010100110 tweet/rt 63
+01010100110 twot 71
+01010100110 twett 77
+01010100110 #2000 92
+01010100110 twittle 96
+01010100110 thought- 105
+01010100110 twwet 108
+01010100110 tweeeeeet 108
+01010100110 tweett 123
+01010100110 twipic 123
+01010100110 twiit 130
+01010100110 tweeeeet 186
+01010100110 wek 243
+01010100110 tweetpic 248
+01010100110 blab 254
+01010100110 tweet- 269
+01010100110 tweat 276
+01010100110 #twitpic 309
+01010100110 twet 315
+01010100110 tweeeet 318
+01010100110 twitvid 510
+01010100110 twt 695
+01010100110 gripe 786
+01010100110 #tweet 819
+01010100110 tweeet 1022
+01010100110 twitt 3819
+01010100110 twitpic 17611
+01010100110 tweet 376384
+01010100110 twit 22068
+010101001110 winge 40
+010101001110 crake 40
+010101001110 jetsam 41
+010101001110 atem 41
+010101001110 dwns 41
+010101001110 lindsley 42
+010101001110 screem 42
+010101001110 smaak 42
+010101001110 sunbath 43
+010101001110 sauté 44
+010101001110 lavagirl 44
+010101001110 grommit 44
+010101001110 smolder 45
+010101001110 drinkkk 45
+010101001110 dimed 46
+010101001110 gladrags 46
+010101001110 cotch 47
+010101001110 garfunkle 48
+010101001110 scrimp 48
+010101001110 thither 49
+010101001110 don'ts: 50
+010101001110 crannies 50
+010101001110 what-not 51
+010101001110 braise 51
+010101001110 erma's 52
+010101001110 primp 53
+010101001110 quaff 53
+010101001110 hartly 54
+010101001110 stfd 54
+010101001110 decant 55
+010101001110 slipp 55
+010101001110 cranny 55
+010101001110 spluttering 56
+010101001110 schmick's 57
+010101001110 kickbox 57
+010101001110 #havesex 58
+010101001110 jerry’s 58
+010101001110 lomb 59
+010101001110 drink- 59
+010101001110 dorfmeister 60
+010101001110 daxter 60
+010101001110 smokeee 61
+010101001110 #mccainshot 62
+010101001110 olufsen 62
+010101001110 rolllll 63
+010101001110 herzegovina 68
+010101001110 smke 68
+010101001110 shmoke 68
+010101001110 upchuck 69
+010101001110 man-up 71
+010101001110 moke 72
+010101001110 wisper 72
+010101001110 rollll 73
+010101001110 puy 74
+010101001110 rokk 76
+010101001110 piddle 76
+010101001110 rool 78
+010101001110 pastes 80
+010101001110 dring 85
+010101001110 stammer 85
+010101001110 iterate 85
+010101001110 rhesa 85
+010101001110 suckle 86
+010101001110 d'essentials 88
+010101001110 wrapp 88
+010101001110 tumbl 89
+010101001110 ferment 92
+010101001110 baff 96
+010101001110 #149 96
+010101001110 dont's 97
+010101001110 quartered 99
+010101001110 throw-up 99
+010101001110 @tweetswin 103
+010101001110 sinker 117
+010101001110 sagg 117
+010101001110 relist 119
+010101001110 wee's 119
+010101001110 getit 120
+010101001110 donts 121
+010101001110 fidget 122
+010101001110 drinkk 122
+010101001110 rolll 124
+010101001110 at'em 124
+010101001110 bennys 125
+010101001110 gort 129
+010101001110 bakey 130
+010101001110 shuck 132
+010101001110 twisses 134
+010101001110 dudettes 134
+010101001110 headbang 136
+010101001110 guzzle 139
+010101001110 imbibe 143
+010101001110 stich 144
+010101001110 #smoke 145
+010101001110 dipp 155
+010101001110 stik 163
+010101001110 brimstone 164
+010101001110 butt-head 167
+010101001110 milds 169
+010101001110 hotbox 173
+010101001110 drnk 173
+010101001110 beezus 175
+010101001110 rollup 196
+010101001110 vice-versa 204
+010101001110 buster's 206
+010101001110 dubz 210
+010101001110 deepthroat 211
+010101001110 ikes 211
+010101001110 pillage 214
+010101001110 wesson 219
+010101001110 caicos 225
+010101001110 queef 229
+010101001110 garnish 235
+010101001110 slobber 239
+010101001110 pepa 241
+010101001110 poot 254
+010101001110 stimpy 275
+010101001110 smokee 281
+010101001110 lather 304
+010101001110 clank 307
+010101001110 tinkle 307
+010101001110 wail 314
+010101001110 mooch 332
+010101001110 rock'n 340
+010101001110 tobago 347
+010101001110 gromit 356
+010101001110 marinate 370
+010101001110 desist 376
+010101001110 smudge 382
+010101001110 fite 408
+010101001110 gargle 450
+010101001110 nobles 468
+010101001110 spout 469
+010101001110 prune 577
+010101001110 garfunkel 601
+010101001110 tiaras 627
+010101001110 toke 636
+010101001110 shone 653
+010101001110 dribble 750
+010101001110 squeak 822
+010101001110 chug 885
+010101001110 butthead 900
+010101001110 relish 919
+010101001110 skim 943
+010101001110 sprinkle 1104
+010101001110 twirl 1110
+010101001110 kip 1299
+010101001110 flake 1312
+010101001110 whatnot 1321
+010101001110 sow 1352
+010101001110 jizz 1432
+010101001110 wakeup 1433
+010101001110 squirt 1466
+010101001110 exhale 1508
+010101001110 busters 1547
+010101001110 ferb 2073
+010101001110 comb 2191
+010101001110 gents 2230
+010101001110 munch 2240
+010101001110 drip 2253
+010101001110 gamble 2543
+010101001110 boil 2751
+010101001110 sew 3394
+010101001110 shovel 3551
+010101001110 bark 3693
+010101001110 knit 4080
+010101001110 whisper 4489
+010101001110 downs 4735
+010101001110 vomit 4824
+010101001110 peel 5279
+010101001110 chew 5448
+010101001110 greet 6018
+010101001110 paste 6312
+010101001110 sip 8061
+010101001110 forth 8993
+010101001110 fart 9059
+010101001110 dip 10199
+010101001110 sweat 15249
+010101001110 pee 18068
+010101001110 shine 19099
+010101001110 smoke 51365
+010101001110 roll 58857
+010101001110 drink 116977
+0101010011110 breaak 50
+0101010011110 breake 56
+0101010011110 breakkkk 61
+0101010011110 restyle 63
+0101010011110 shoehorn 69
+0101010011110 break- 94
+0101010011110 breakkk 111
+0101010011110 hymnal 138
+0101010011110 break's 153
+0101010011110 brthng 173
+0101010011110 glau 182
+0101010011110 breakk 255
+0101010011110 brk 350
+0101010011110 #txfsign 829
+0101010011110 break 152402
+0101010011110 fling 1473
+01010100111110 40
+01010100111110 responed 42
+01010100111110 liie 47
+01010100111110 respone 47
+01010100111110 reply- 49
+01010100111110 repy 52
+01010100111110 answerrr 53
+01010100111110 relpy 59
+01010100111110 blong 63
+01010100111110 giveup 65
+01010100111110 speakk 69
+01010100111110 disrepect 71
+01010100111110 lie- 73
+01010100111110 replyyy 83
+01010100111110 lieeee 92
+01010100111110 lieee 158
+01010100111110 replyy 189
+01010100111110 #lie 202
+01010100111110 rply 315
+01010100111110 liee 358
+01010100111110 budge 484
+01010100111110 stoop 1218
+01010100111110 subtweet 3279
+01010100111110 reply 72678
+01010100111110 lie 72229
+01010100111111 bodda 40
+01010100111111 fuxxx 40
+01010100111111 jives 45
+01010100111111 futz 46
+01010100111111 loaft 51
+01010100111111 cwtch 54
+01010100111111 sticc 55
+01010100111111 fcuks 57
+01010100111111 stickk 63
+01010100111111 fukz 65
+01010100111111 f**ks 66
+01010100111111 fuckss 67
+01010100111111 fuggs 67
+01010100111111 fks 70
+01010100111111 hit'em 84
+01010100111111 fuxs 93
+01010100111111 fxcks 94
+01010100111111 faff 116
+01010100111111 phunk 120
+01010100111111 fukks 126
+01010100111111 messs 127
+01010100111111 effs 136
+01010100111111 fuccs 162
+01010100111111 fuckz 170
+01010100111111 correspond 180
+01010100111111 f*cks 184
+01010100111111 fcks 417
+01010100111111 fuxx 439
+01010100111111 fuks 472
+01010100111111 flirts 872
+01010100111111 snitch 1914
+01010100111111 fux 2147
+01010100111111 messes 2376
+01010100111111 flirt 6699
+01010100111111 creep 7269
+01010100111111 fucks 13573
+01010100111111 freak 26578
+01010100111111 stick 45802
+01010100111111 mess 52095
+01010101000 smacc 52
+01010101000 ihit 59
+01010101000 hyt 97
+01010101000 katch 115
+01010101000 ketch 120
+01010101000 hiit 356
+01010101000 hit 222715
+01010101000 hitt 556
+01010101001 plussed 40
+01010101001 helpt 41
+01010101001 slacken 42
+01010101001 stratch 42
+01010101001 hate- 45
+01010101001 callem 46
+01010101001 outclass 52
+01010101001 forger 54
+01010101001 manhandle 54
+01010101001 get- 55
+01010101001 steamroll 56
+01010101001 outscore 62
+01010101001 outplay 62
+01010101001 fall- 65
+01010101001 overplay 66
+01010101001 beatt 67
+01010101001 comfirm 70
+01010101001 rike 71
+01010101001 upend 71
+01010101001 mett 71
+01010101001 mown 76
+01010101001 killt 77
+01010101001 repp 93
+01010101001 mistype 98
+01010101001 boycot 104
+01010101001 metion 107
+01010101001 speel 111
+01010101001 trounce 112
+01010101001 clapp 141
+01010101001 wooped 163
+01010101001 spel 171
+01010101001 whopped 179
+01010101001 #beat 223
+01010101001 slapp 254
+01010101001 go- 304
+01010101001 outlast 333
+01010101001 bodied 796
+01010101001 thrash 858
+01010101001 stun 1175
+01010101001 whooping 1438
+01010101001 whooped 2248
+01010101001 herd 3520
+01010101001 scratch 13904
+01010101001 spell 28477
+01010101001 beat 124719
+01010101001 mention 51945
+01010101010 bumrush 40
+01010101010 furrow 41
+01010101010 brong 41
+01010101010 re-fill 41
+01010101010 kount 42
+01010101010 licc 42
+01010101010 cornrow 43
+01010101010 🚌 45
+01010101010 gibe 46
+01010101010 spitt 47
+01010101010 returnn 48
+01010101010 get'cha 49
+01010101010 kock 50
+01010101010 tump 51
+01010101010 re-gift 51
+01010101010 waer 52
+01010101010 #catch 53
+01010101010 smackk 53
+01010101010 grabb 55
+01010101010 doff 56
+01010101010 gemme 57
+01010101010 plunk 59
+01010101010 crumple 61
+01010101010 konk 62
+01010101010 tweeze 62
+01010101010 wike 66
+01010101010 twork 67
+01010101010 ieat 70
+01010101010 gtt 71
+01010101010 seel 72
+01010101010 twirk 74
+01010101010 freez 75
+01010101010 sqeeze 77
+01010101010 shakee 80
+01010101010 figga 81
+01010101010 ifind 85
+01010101010 squeez 85
+01010101010 bloww 89
+01010101010 enchant 90
+01010101010 half-ass 95
+01010101010 chopp 95
+01010101010 sputter 96
+01010101010 hwy-2/stevens 111
+01010101010 drys 115
+01010101010 whipe 116
+01010101010 submerge 117
+01010101010 knocc 118
+01010101010 passs 118
+01010101010 detonate 119
+01010101010 recored 120
+01010101010 igive 121
+01010101010 nock 123
+01010101010 scuff 126
+01010101010 rubb 133
+01010101010 whipp 134
+01010101010 scrunch 138
+01010101010 gte 143
+01010101010 nake 148
+01010101010 fishtail 152
+01010101010 bruk 153
+01010101010 drench 160
+01010101010 straddle 162
+01010101010 strech 167
+01010101010 knead 168
+01010101010 trow 206
+01010101010 swang 209
+01010101010 strum 217
+01010101010 tagg 220
+01010101010 dropp 226
+01010101010 tweek 235
+01010101010 christen 244
+01010101010 peddle 249
+01010101010 blag 250
+01010101010 tare 255
+01010101010 fnd 283
+01010101010 flunk 284
+01010101010 wring 290
+01010101010 merk 305
+01010101010 tuk 317
+01010101010 gouge 329
+01010101010 flog 329
+01010101010 suss 337
+01010101010 supersize 338
+01010101010 hoist 351
+01010101010 churn 401
+01010101010 murk 427
+01010101010 scribble 450
+01010101010 scatter 463
+01010101010 jiggle 537
+01010101010 abort 602
+01010101010 snuff 667
+01010101010 hone 687
+01010101010 spew 703
+01010101010 pluck 759
+01010101010 shatter 882
+01010101010 snd 962
+01010101010 thaw 967
+01010101010 strut 974
+01010101010 rattle 1012
+01010101010 lash 1070
+01010101010 pwn 1082
+01010101010 steer 1473
+01010101010 inhale 1523
+01010101010 rinse 1601
+01010101010 nip 1694
+01010101010 jinx 1775
+01010101010 braid 1901
+01010101010 multiply 1923
+01010101010 mke 1950
+01010101010 toot 2275
+01010101010 buss 2577
+01010101010 snatch 2581
+01010101010 fetch 2701
+01010101010 tuck 2872
+01010101010 stomp 2920
+01010101010 flush 3378
+01010101010 crank 4136
+01010101010 fold 4639
+01010101010 drown 4793
+01010101010 git 5142
+01010101010 toss 5419
+01010101010 bail 6317
+01010101010 choke 6360
+01010101010 wipe 6598
+01010101010 squeeze 6600
+01010101010 pour 6972
+01010101010 melt 7275
+01010101010 chop 7512
+01010101010 peep 8141
+01010101010 freeze 9488
+01010101010 spit 10495
+01010101010 rub 10646
+01010101010 brush 10867
+01010101010 smack 10941
+01010101010 lick 11920
+01010101010 smash 12145
+01010101010 whip 13390
+01010101010 gt 13547
+01010101010 lift 14580
+01010101010 bust 15036
+01010101010 tear 18653
+01010101010 knock 23393
+01010101010 paint 23898
+01010101010 shake 29696
+01010101010 push 32493
+01010101010 burn 33883
+01010101010 blow 38806
+01010101010 drop 67472
+01010101010 pass 78447
+010101010110 cuttt 40
+010101010110 cut- 42
+010101010110 kikk 45
+010101010110 cuttery 45
+010101010110 tongued 56
+010101010110 gating 61
+010101010110 kickk 72
+010101010110 teed 87
+010101010110 retwist 90
+010101010110 plumper 90
+010101010110 ripp 107
+010101010110 skive 113
+010101010110 slicked 128
+010101010110 whup 130
+010101010110 glosses 148
+010101010110 sawed 155
+010101010110 recast 172
+010101010110 kicc 193
+010101010110 permed 217
+010101010110 whittle 234
+010101010110 synching 357
+010101010110 stave 370
+010101010110 strikeout 485
+010101010110 cutt 795
+010101010110 getcha 944
+010101010110 doze 970
+010101010110 braided 1187
+010101010110 slit 1342
+010101010110 gloss 2852
+010101010110 alter 3626
+010101010110 chopped 3762
+010101010110 dye 7204
+010101010110 cut 109880
+010101010110 kick 58873
+010101010111 cancle 40
+010101010111 re-dye 44
+010101010111 redye 44
+010101010111 restring 45
+010101010111 rebond 53
+010101010111 start/finish 55
+010101010111 cancell 59
+010101010111 washh 60
+010101010111 blow-dry 68
+010101010111 relight 73
+010101010111 fufill 76
+010101010111 finishh 78
+010101010111 finsih 88
+010101010111 blowdry 139
+010101010111 clench 168
+010101010111 repaint 238
+010101010111 chiong 337
+010101010111 finsh 339
+010101010111 reformat 463
+010101010111 go2 516
+010101010111 mow 2231
+010101010111 straighten 2610
+010101010111 goto 3545
+010101010111 shave 9472
+010101010111 skip 15633
+010101010111 finish 86362
+010101010111 wash 30209
+0101010110 hlep 56
+0101010110 heelp 57
+0101010110 fllwback 59
+0101010110 hellp 101
+0101010110 help- 129
+0101010110 helppp 208
+0101010110 helpp 412
+0101010110 help 375749
+0101010110 hlp 425
+010101011100 #understand 45
+010101011100 #tell 49
+010101011100 distrub 52
+010101011100 noticee 54
+010101011100 #forgive 56
+010101011100 #judge 57
+010101011100 jugde 60
+010101011100 exspect 61
+010101011100 trustt 72
+010101011100 #have 85
+010101011100 #know 125
+010101011100 overwork 131
+010101011100 frisk 152
+010101011100 xpect 164
+010101011100 neglect 1825
+010101011100 judge 40689
+010101011100 notice 45954
+010101011100 trust 84251
+010101011100 expect 48631
+010101011101 ansr 41
+010101011101 invitee 56
+010101011101 exscuse 60
+010101011101 asnwer 65
+010101011101 excusee 68
+010101011101 aswer 69
+010101011101 answere 71
+010101011101 answa 74
+010101011101 anwer 85
+010101011101 exuse 99
+010101011101 unsend 100
+010101011101 copy&paste 100
+010101011101 anser 108
+010101011101 answerr 112
+010101011101 overshare 127
+010101011101 awnser 128
+010101011101 answr 162
+010101011101 xcuse 183
+010101011101 uppercut 189
+010101011101 anwser 265
+010101011101 ansa 408
+010101011101 itch 3405
+010101011101 disrespect 4627
+010101011101 insult 5983
+010101011101 invite 29329
+010101011101 excuse 33272
+010101011101 answer 95386
+010101011101 count 49293
+010101011110 calk 40
+010101011110 killlllll 40
+010101011110 callllll 54
+010101011110 -call 60
+010101011110 ckall 65
+010101011110 callz 68
+010101011110 kalls 81
+010101011110 killlll 85
+010101011110 overcharge 105
+010101011110 igg 128
+010101011110 icall 130
+010101011110 tase 137
+010101011110 sicken 177
+010101011110 tole 184
+010101011110 tll 195
+010101011110 cll 198
+010101011110 killl 291
+010101011110 sice 309
+010101011110 lett 430
+010101011110 irk 528
+010101011110 calll 597
+010101011110 taunt 644
+010101011110 kall 1438
+010101011110 warn 5425
+010101011110 scare 12266
+010101011110 piss 23862
+010101011110 call 372752
+010101011110 treat 40121
+010101011111 texxxxt 40
+010101011111 nbox 41
+010101011111 reply/follow 44
+010101011111 vxpose 46
+010101011111 call/ 47
+010101011111 folla 48
+010101011111 itext 49
+010101011111 texttttt 49
+010101011111 d/m 52
+010101011111 t3xt 53
+010101011111 truthbox 54
+010101011111 tweet/text 54
+010101011111 61
+010101011111 -text 62
+010101011111 txxt 63
+010101011111 voel 65
+010101011111 inboxx 67
+010101011111 text/tweet 67
+010101011111 teext 70
+010101011111 calllll 75
+010101011111 mentionn 81
+010101011111 qwit 81
+010101011111 verveel 81
+010101011111 dmin 83
+010101011111 llow 92
+010101011111 textttt 95
+010101011111 txtt 100
+010101011111 texxxt 105
+010101011111 tweet/dm 105
+010101011111 txt/call 114
+010101011111 texx 120
+010101011111 gie 122
+010101011111 d.m 135
+010101011111 callll 142
+010101011111 #text 146
+010101011111 #pleasedonttext 146
+010101011111 call/txt 182
+010101011111 texttt 223
+010101011111 #dm 363
+010101011111 texxt 411
+010101011111 text/call 437
+010101011111 sext 437
+010101011111 call/text 655
+010101011111 textt 681
+010101011111 truss 763
+010101011111 @reply 1041
+010101011111 #unfollow 1132
+010101011111 disgust 1996
+010101011111 txt 30555
+010101011111 dm 90341
+010101011111 text 165379
+010101100 hekk 40
+010101100 libertador 41
+010101100 helllllllllll 43
+010101100 heeellll 44
+010101100 heeelll 49
+010101100 mid-off 50
+010101100 hxll 50
+010101100 heeeell 55
+010101100 heelll 55
+010101100 heeell 60
+010101100 feezy 62
+010101100 heell 67
+010101100 hell- 70
+010101100 hayle 72
+010101100 hellllllllll 73
+010101100 heckkk 78
+010101100 bejeezus 88
+010101100 helllllllll 89
+010101100 h3ll 97
+010101100 answer's 118
+010101100 h*ll 118
+010101100 hecky 127
+010101100 heckk 155
+010101100 hellllllll 157
+010101100 bejesus 171
+010101100 hek 189
+010101100 helllllll 234
+010101100 #hell 265
+010101100 hecks 290
+010101100 hellllll 465
+010101100 helllll 635
+010101100 hellll 909
+010101100 hellz 1463
+010101100 helll 1773
+010101100 hells 3467
+010101100 hell 251581
+010101100 heck 26490
+010101101 fuckkkkkkkkkkkk 40
+010101101 fuckfuck 40
+010101101 ffuck 40
+010101101 fackkk 40
+010101101 hoook 42
+010101101 fuccckkk 42
+010101101 efffffff 42
+010101101 screww 43
+010101101 f*&k 43
+010101101 fukkkkk 44
+010101101 foook 44
+010101101 pissss 44
+010101101 fyck 44
+010101101 ifuck 44
+010101101 fuck- 45
+010101101 f'k 45
+010101101 kcuf 46
+010101101 fackkkk 46
+010101101 frell 46
+010101101 f**ck 46
+010101101 faack 47
+010101101 fugggg 47
+010101101 fahk 48
+010101101 fauck 49
+010101101 iliked 50
+010101101 twuck 50
+010101101 ufck 51
+010101101 f@#$ 51
+010101101 fckkkk 52
+010101101 dadada 53
+010101101 f*%k 56
+010101101 skrew 56
+010101101 f#*k 57
+010101101 fackk 57
+010101101 fuckkkkkkkkkkk 58
+010101101 fuccccck 58
+010101101 -picks 59
+010101101 phuk 59
+010101101 fuch 59
+010101101 fcck 60
+010101101 fucckkk 61
+010101101 fkc 61
+010101101 beleee 63
+010101101 balee 65
+010101101 fuckkkkkkkkkk 65
+010101101 fuggg 68
+010101101 fucx 68
+010101101 f*uck 71
+010101101 fakk 72
+010101101 effffff 72
+010101101 faaaack 73
+010101101 fuvk 74
+010101101 frik 74
+010101101 fuckkkkkkkkk 76
+010101101 fucckk 76
+010101101 frigg 77
+010101101 fukkkk 79
+010101101 fxckk 84
+010101101 -hands 85
+010101101 fuccc 86
+010101101 fek 88
+010101101 fruck 89
+010101101 faaack 90
+010101101 fqk 93
+010101101 f*k 101
+010101101 f'ck 104
+010101101 -fuck 105
+010101101 efffff 107
+010101101 fucccck 110
+010101101 fxk 113
+010101101 fxxk 115
+010101101 fckkk 115
+010101101 muthafuck 139
+010101101 fluck 142
+010101101 fuckkkkkkkk 149
+010101101 fuccck 159
+010101101 fsck 166
+010101101 fick 171
+010101101 fukkk 172
+010101101 f^ck 174
+010101101 f_ck 186
+010101101 fuckkkkkkk 191
+010101101 fukc 197
+010101101 effff 200
+010101101 fok 219
+010101101 fuqq 220
+010101101 fuuuuuuck 229
+010101101 fuhk 233
+010101101 fkk 236
+010101101 belee 240
+010101101 lookit 242
+010101101 f- 249
+010101101 fuhh 264
+010101101 fuqk 274
+010101101 fucck 337
+010101101 fock 343
+010101101 f-ck 343
+010101101 motherfuck 355
+010101101 fuckkkkkk 387
+010101101 efff 390
+010101101 fvck 425
+010101101 fuuuuuck 430
+010101101 frack 446
+010101101 fckk 447
+010101101 468
+010101101 fook 473
+010101101 fuuck 497
+010101101 fug 564
+010101101 fawk 574
+010101101 phuck 597
+010101101 fuckkkkk 633
+010101101 fuuuuck 708
+010101101 fu*k 731
+010101101 fuuuck 774
+010101101 fuxk 838
+010101101 frak 901
+010101101 feck 917
+010101101 fuckkkk 1050
+010101101 fugg 1063
+010101101 frick 1073
+010101101 fack 1193
+010101101 fuq 1318
+010101101 gtf 1694
+010101101 fcuk 1735
+010101101 fuckkk 1774
+010101101 sod 1846
+010101101 fuc 2076
+010101101 fk 2327
+010101101 fxck 2532
+010101101 f**k 3021
+010101101 fukk 3141
+010101101 fuckk 3218
+010101101 fucc 4538
+010101101 f*ck 6872
+010101101 fuk 11070
+010101101 fck 11191
+010101101 eff 11285
+010101101 fuck 446481
+010101101 screw 19905
+010101110 parp 40
+010101110 wink*wink 40
+010101110 whooosh 40
+010101110 tiredly 40
+010101110 akari 40
+010101110 gasp* 40
+010101110 grinz 40
+010101110 @natalieellis__ 41
+010101110 @alicecwhitlock 41
+010101110 @newborn_jen 41
+010101110 wispers 41
+010101110 jizzes 42
+010101110 faps 42
+010101110 toel 42
+010101110 @kalacree 42
+010101110 kecup 42
+010101110 @vampiremagister 43
+010101110 coversface 43
+010101110 thuds 43
+010101110 @werebraiden 43
+010101110 @fairy_laurana 43
+010101110 yawnz 43
+010101110 yawwn 43
+010101110 @lady_celeste1 43
+010101110 ulp 43
+010101110 curtsey 43
+010101110 jiggs 44
+010101110 purrrs 44
+010101110 happyface 44
+010101110 @teambrianhaner 44
+010101110 siiiiiigh 44
+010101110 shugs 44
+010101110 @dark_apprentice 44
+010101110 evillaugh 44
+010101110 @ericslighttight 45
+010101110 that* 46
+010101110 salivates 46
+010101110 zingt 46
+010101110 dreamily 46
+010101110 evily 46
+010101110 wriggles 46
+010101110 dead*rt 46
+010101110 @werekai 46
+010101110 @manicdistress 47
+010101110 siqh 47
+010101110 clapclap 47
+010101110 o* 47
+010101110 hinthint 47
+010101110 teasingly 48
+010101110 @ness_cullen 48
+010101110 -cries 48
+010101110 insiderr 48
+010101110 *cough 48
+010101110 retch 48
+010101110 #gs4death 48
+010101110 whipes 49
+010101110 kissses 49
+010101110 curtsies 49
+010101110 furrows 49
+010101110 fistbump 49
+010101110 flatlines 49
+010101110 cough*cough 50
+010101110 wimper 50
+010101110 mitter 50
+010101110 hugssss 50
+010101110 koff 51
+010101110 hugggg 51
+010101110 grimaces 51
+010101110 gurgles 52
+010101110 @jashale 52
+010101110 blurp 52
+010101110 @claudine_fairy 52
+010101110 @plays 52
+010101110 sneers 53
+010101110 patpat 53
+010101110 hoest 53
+010101110 gigglesnort 54
+010101110 @hoytscell 54
+010101110 shrugss 54
+010101110 me* 54
+010101110 trollface 55
+010101110 kissies 55
+010101110 @felix_guard 56
+010101110 frp 57
+010101110 shimmies 57
+010101110 cough* 57
+010101110 siiiiigh 58
+010101110 @vampire_makenna 58
+010101110 @chelsea_v_ 58
+010101110 couqh 58
+010101110 kisshug 58
+010101110 highfives 58
+010101110 cosigns 58
+010101110 sighz 58
+010101110 thwack 58
+010101110 yelps 58
+010101110 flinches 59
+010101110 *hugs 59
+010101110 huggg 60
+010101110 gubrak 60
+010101110 yawnn 60
+010101110 sigh* 61
+010101110 e-hug 62
+010101110 @alyxdom 62
+010101110 @sheriffnorthman 62
+010101110 yaaaaawn 63
+010101110 moonwalks 63
+010101110 hesitantly 64
+010101110 clinks 64
+010101110 @grabbitkwik 64
+010101110 happydance 64
+010101110 @irishcovenliam 64
+010101110 hyperventilates 64
+010101110 hollers 65
+010101110 yawwwwn 66
+010101110 hugs* 66
+010101110 snogs 66
+010101110 hening 66
+010101110 hugs&kisses 66
+010101110 waggles 67
+010101110 smileyface 67
+010101110 scrunches 67
+010101110 nosetaps 68
+010101110 shrugz 68
+010101110 yawwwn 69
+010101110 t.j 69
+010101110 *smiles 69
+010101110 cowers 70
+010101110 nodnod 71
+010101110 clunk 71
+010101110 {}: 71
+010101110 *dead 71
+010101110 clenches 72
+010101110 *sigh 72
+010101110 snork 72
+010101110 squees 73
+010101110 nosetap 73
+010101110 ichc 74
+010101110 clapclapclap 75
+010101110 @harrypotter19 76
+010101110 you* 76
+010101110 fingerscrossed 76
+010101110 @sweetlycaroline 76
+010101110 sighhhhhh 77
+010101110 yoink 78
+010101110 grumps 79
+010101110 hearteyes 79
+010101110 hugsss 79
+010101110 kissess 81
+010101110 yaaaawn 81
+010101110 82
+010101110 siigh 83
+010101110 quivers 83
+010101110 yawnnn 83
+010101110 teleports 83
+010101110 curtsy 84
+010101110 p/n 85
+010101110 splutter 87
+010101110 huggle 90
+010101110 unzips 90
+010101110 #dialtest 91
+010101110 rollseyes 91
+010101110 shrugg 93
+010101110 urp 96
+010101110 mjbrt 96
+010101110 squirms 98
+010101110 glomp 101
+010101110 @irish_vampire 101
+010101110 wibble 101
+010101110 whap 103
+010101110 sniggers 103
+010101110 yaaawn 104
+010101110 fistpump 104
+010101110 rewinds 107
+010101110 slurps 110
+010101110 facepalms 110
+010101110 kisskiss 111
+010101110 shrieks 113
+010101110 scowls 114
+010101110 evl 116
+010101110 snerk 117
+010101110 trembles 117
+010101110 spazzes 118
+010101110 squishes 118
+010101110 siiiigh 121
+010101110 cackles 121
+010101110 winces 121
+010101110 caresses 122
+010101110 kanyeshrug 123
+010101110 jiggles 123
+010101110 rolleyes 123
+010101110 pingsan 127
+010101110 smilez 127
+010101110 hugss 128
+010101110 sarcasim 128
+010101110 evilly 128
+010101110 flatlined 128
+010101110 high5 129
+010101110 sighhhhh 129
+010101110 high-fives 130
+010101110 purrr 131
+010101110 coughcough 131
+010101110 barfs 132
+010101110 twiddles 132
+010101110 shyly 132
+010101110 glomps 133
+010101110 lo*luv 133
+010101110 munches 133
+010101110 pounces 133
+010101110 thumbsup 133
+010101110 gurgle 134
+010101110 smoochies 135
+010101110 snugs 137
+010101110 murmurs 139
+010101110 blankstare 141
+010101110 siiigh 142
+010101110 shurgs 143
+010101110 pauz 144
+010101110 twerks 145
+010101110 hisses 145
+010101110 shrugging 147
+010101110 bighug 148
+010101110 gaap 149
+010101110 jigs 149
+010101110 sideeye 149
+010101110 flutters 149
+010101110 huffs 152
+010101110 weakly 156
+010101110 guffaw 159
+010101110 winkwink 160
+010101110 hust 163
+010101110 wheeze 166
+010101110 lovestruck 172
+010101110 inhales 173
+010101110 sulks 174
+010101110 wails 174
+010101110 exhales 175
+010101110 belch 178
+010101110 side-eye 184
+010101110 squints 187
+010101110 dougies 190
+010101110 caugh 191
+010101110 rimshot 202
+010101110 scoffs 203
+010101110 gulps 205
+010101110 sways 208
+010101110 pecks 211
+010101110 chortle 219
+010101110 cringes 222
+010101110 whimpers 222
+010101110 mutters 223
+010101110 snigger 227
+010101110 huggs 234
+010101110 dnf 247
+010101110 nuzzles 251
+010101110 tugs 261
+010101110 sheepish 261
+010101110 nags 262
+010101110 grunts 269
+010101110 swoons 271
+010101110 twirls 275
+010101110 bawls 276
+010101110 cackle 277
+010101110 highfive 277
+010101110 excl 282
+010101110 hi-5 307
+010101110 hums 313
+010101110 eyeroll 314
+010101110 thrusts 316
+010101110 yimu 325
+010101110 daps 330
+010101110 bops 332
+010101110 flails 337
+010101110 vomits 337
+010101110 mutter 353
+010101110 squeals 370
+010101110 pukes 377
+010101110 grumbles 381
+010101110 shruggs 383
+010101110 playfully 396
+010101110 drumroll 399
+010101110 pinches 410
+010101110 clink 419
+010101110 tilts 421
+010101110 stomps 444
+010101110 snorts 444
+010101110 sighhh 445
+010101110 innocently 445
+010101110 whimper 454
+010101110 flail 474
+010101110 nibbles 488
+010101110 clings 491
+010101110 burps 494
+010101110 snif 512
+010101110 whines 517
+010101110 sighh 528
+010101110 purrs 545
+010101110 glances 552
+010101110 mumbles 568
+010101110 sniffs 572
+010101110 groans 572
+010101110 crys 573
+010101110 mjb 574
+010101110 hugz 590
+010101110 rme 652
+010101110 headdesk 652
+010101110 weeps 668
+010101110 snip 700
+010101110 glares 716
+010101110 huggles 765
+010101110 gasps 769
+010101110 slurp 772
+010101110 thud 784
+010101110 shudders 787
+010101110 gags 797
+010101110 hiccup 822
+010101110 smooch 830
+010101110 sneezes 857
+010101110 pauses 861
+010101110 sadface 869
+010101110 shifty 873
+010101110 hi5 890
+010101110 hic 892
+010101110 wiggles 914
+010101110 drools 917
+010101110 growls 929
+010101110 sniffle 945
+010101110 ponders 1002
+010101110 blinks 1017
+010101110 purr 1059
+010101110 smooches 1109
+010101110 sniffles 1115
+010101110 groan 1122
+010101110 faints 1131
+010101110 moans 1154
+010101110 sips 1238
+010101110 whistles 1314
+010101110 shiver 1332
+010101110 smacks 1345
+010101110 snuggles 1368
+010101110 claps 1373
+010101110 squee 1400
+010101110 1425
+010101110 snicker 1428
+010101110 shivers 1432
+010101110 pouts 1439
+010101110 pout 1442
+010101110 smirk 1447
+010101110 curses 1523
+010101110 coughs 1544
+010101110 frowns 1583
+010101110 sobs 1586
+010101110 hiss 1628
+010101110 twitch 1648
+010101110 chime 1659
+010101110 gulp 1687
+010101110 shudder 1739
+010101110 facepalm 1750
+010101110 swoon 1767
+010101110 poof 1803
+010101110 grumble 1808
+010101110 snort 1974
+010101110 burp 2009
+010101110 blushes 2119
+010101110 crickets 2174
+010101110 yawns 2177
+010101110 pokes 2192
+010101110 chuckles 2254
+010101110 smirks 2391
+010101110 rubs 2401
+010101110 cuddles 2440
+010101110 bows 2554
+010101110 slaps 2574
+010101110 scratches 2575
+010101110 blushing 2787
+010101110 winks 2983
+010101110 drool 3235
+010101110 hides 3326
+010101110 wipes 3354
+010101110 sob 3607
+010101110 whispers 3723
+010101110 gasp 4469
+010101110 grins 4519
+010101110 shrug 4614
+010101110 screams 4809
+010101110 ahem 4846
+010101110 blush 5011
+010101110 nods 5343
+010101110 sniff 5544
+010101110 grin 5606
+010101110 giggles 6618
+010101110 sighs 6839
+010101110 cries 7319
+010101110 shakes 7736
+010101110 clap 9153
+010101110 pause 9980
+010101110 yawn 10502
+010101110 wink 10607
+010101110 shrugs 11125
+010101110 waves 13215
+010101110 laughs 18282
+010101110 kisses 22441
+010101110 cough 22879
+010101110 smiles 25381
+010101110 sigh 60881
+010101110 hugs 34407
+0101011110 credit's 40
+0101011110 c4n 46
+0101011110 я 51
+0101011110 wereee 51
+0101011110 hakusho 58
+0101011110 weren 72
+0101011110 areyou 95
+0101011110 sre 119
+0101011110 darvish 122
+0101011110 werr 131
+0101011110 wre 280
+0101011110 rnt 425
+0101011110 wer 4023
+0101011110 r 257803
+0101011110 ru 4352
+0101011111 dbe 40
+0101011111 farell 40
+0101011111 namur 41
+0101011111 /h1 41
+0101011111 ghett 42
+0101011111 infobox 44
+0101011111 shorturl 44
+0101011111 nbe 48
+0101011111 [_] 49
+0101011111 ferell 49
+0101011111 mysbx 50
+0101011111 eq&tw 52
+0101011111 /font 52
+0101011111 /h3 53
+0101011111 /span 54
+0101011111 stabbymac 55
+0101011111 kill- 58
+0101011111 @font 65
+0101011111 firstname 67
+0101011111 #nowon 69
+0101011111 bxl/bsl 71
+0101011111 ++++++++++ 72
+0101011111 gho 73
+0101011111 /longitude 75
+0101011111 /latitude 76
+0101011111 /success 77
+0101011111 /div 80
+0101011111 vivastreet 80
+0101011111 8e 85
+0101011111 mysql_connect 89
+0101011111 702-544-4368 99
+0101011111 searchresults 102
+0101011111 /strong 105
+0101011111 :*{ 107
+0101011111 bhee 111
+0101011111 /title 122
+0101011111 beein 133
+0101011111 -be 133
+0101011111 behh 136
+0101011111 beeh 179
+0101011111 arnett 186
+0101011111 /p 197
+0101011111 o.d. 200
+0101011111 beeeee 201
+0101011111 meteo 211
+0101011111 /em 212
+0101011111 6e 230
+0101011111 ferrel 231
+0101011111 be's 233
+0101011111 bhe 328
+0101011111 thurman 394
+0101011111 beeee 396
+0101011111 hava 444
+0101011111 srt 515
+0101011111 beee 797
+0101011111 round-trip 1164
+0101011111 ferrell 1412
+0101011111 /a 1686
+0101011111 b 265234
+0101011111 /b 4184
+0101100000 recommence 50
+0101100000 endup 61
+0101100000 sart 75
+0101100000 startt 138
+0101100000 strt 855
+0101100000 commence 2507
+0101100000 start 334960
+0101100000 begin 35614
+0101100001 wishfull 42
+0101100001 negatif 46
+0101100001 #mistakesgirlsmake 49
+0101100001 -stops 50
+0101100001 #thingsimguiltyof 56
+0101100001 #thankstwitter4 56
+0101100001 #ladyspleasestop 57
+0101100001 -keeps 60
+0101100001 #dontbother 60
+0101100001 #whyyouatchurch 63
+0101100001 -stop 72
+0101100001 stop- 83
+0101100001 #dumbestthingigotputoutofclassfor 85
+0101100001 #thingsigotawhoopinfor 87
+0101100001 #iwishyouwouldstop 91
+0101100001 #fellaspleasestop 115
+0101100001 #peoplepleasestop 118
+0101100001 #howlong 128
+0101100001 st0p 139
+0101100001 #imreallygoodat 146
+0101100001 #neverapologizefor 157
+0101100001 #thingspeoplehavetostopdoing 161
+0101100001 #nothingwrongwith 161
+0101100001 #blackpeoplehobbies 166
+0101100001 #peopleshouldstop 178
+0101100001 #youwillnevercatchme 183
+0101100001 #youmightwannastop 235
+0101100001 #thingswomenshouldstopdoing 236
+0101100001 #icantstop 266
+0101100001 #ladiespleasestop 289
+0101100001 #whyyouintheclub 307
+0101100001 #ineedtostop 375
+0101100001 #peopleneedtostop 376
+0101100001 stopp 857
+0101100001 stp 1400
+0101100001 wishful 1587
+0101100001 stop 367836
+0101100001 quit 36951
+0101100010 keeeeep 57
+0101100010 keeo 58
+0101100010 keepp 63
+0101100010 -keep 72
+0101100010 keeeep 82
+0101100010 #keep 96
+0101100010 keep'em 122
+0101100010 kepp 149
+0101100010 ikeep 170
+0101100010 kep 225
+0101100010 keep 387385
+0101100010 keeep 435
+01011000110 recommed 43
+01011000110 appeciate 43
+01011000110 deplore 44
+01011000110 appreaciate 45
+01011000110 enoy 49
+01011000110 appreicate 52
+01011000110 recommened 53
+01011000110 concider 59
+01011000110 injoy 59
+01011000110 appericate 65
+01011000110 njoyed 65
+01011000110 enjoyd 85
+01011000110 apperciate 89
+01011000110 enjoyy 112
+01011000110 enjoi 150
+01011000110 reccommend 158
+01011000110 outdid 160
+01011000110 liken 224
+01011000110 apreciate 297
+01011000110 appriciate 298
+01011000110 reccomend 520
+01011000110 njoy 670
+01011000110 recomend 689
+01011000110 cherish 3395
+01011000110 recommend 25327
+01011000110 consider 28152
+01011000110 enjoyed 36165
+01011000110 appreciate 47791
+01011000110 enjoy 136132
+01011000111 reaad 41
+01011000111 read/watch 53
+01011000111 -read 80
+01011000111 fav'd 83
+01011000111 read- 127
+01011000111 proofread 457
+01011000111 retract 634
+01011000111 reread 1264
+01011000111 read 296601
+01011000111 re-read 1581
+01011001000 recur 40
+01011001000 trembled 40
+01011001000 die's 41
+01011001000 overtweet 41
+01011001000 do) 41
+01011001000 overcompensate 42
+01011001000 ovulate 42
+01011001000 curdle 43
+01011001000 culminate 44
+01011001000 recoop 44
+01011001000 showup 45
+01011001000 dieeeeeee 45
+01011001000 oscillate 45
+01011001000 sightsee 46
+01011001000 materialise 46
+01011001000 disembark 47
+01011001000 reverberate 49
+01011001000 diie 50
+01011001000 proliferate 50
+01011001000 dieeeeee 50
+01011001000 be/ 51
+01011001000 vegetate 51
+01011001000 come- 51
+01011001000 emanate 52
+01011001000 remarry 52
+01011001000 acquit 54
+01011001000 cheerlead 58
+01011001000 spectate 60
+01011001000 stagnate 60
+01011001000 re-register 63
+01011001000 adjourn 65
+01011001000 13elieve 65
+01011001000 reconvene 67
+01011001000 chafe 69
+01011001000 unionize 70
+01011001000 arive 73
+01011001000 diverge 73
+01011001000 intercede 74
+01011001000 resched 76
+01011001000 reinvest 79
+01011001000 intertwine 79
+01011001000 equalise 81
+01011001000 comeout 83
+01011001000 languish 83
+01011001000 excist 85
+01011001000 underperform 86
+01011001000 grovel 90
+01011001000 overspend 93
+01011001000 shoplift 94
+01011001000 deplurk 94
+01011001000 dilate 95
+01011001000 decompose 100
+01011001000 recede 102
+01011001000 dissipate 106
+01011001000 overeat 109
+01011001000 dieeeee 111
+01011001000 detract 113
+01011001000 disintegrate 116
+01011001000 congregate 119
+01011001000 dissappear 120
+01011001000 deviate 129
+01011001000 cower 137
+01011001000 dwindle 144
+01011001000 succed 146
+01011001000 relent 148
+01011001000 deteriorate 151
+01011001000 hyu 152
+01011001000 suceed 165
+01011001000 co-exist 166
+01011001000 bartend 169
+01011001000 materialize 173
+01011001000 hallucinate 177
+01011001000 overheat 178
+01011001000 passout 180
+01011001000 meddle 181
+01011001000 dieeee 182
+01011001000 procreate 186
+01011001000 disapear 191
+01011001000 destress 192
+01011001000 resurface 193
+01011001000 decompress 197
+01011001000 recuperate 199
+01011001000 convene 206
+01011001000 evaporate 228
+01011001000 dieee 234
+01011001000 reappear 234
+01011001000 combust 238
+01011001000 secede 247
+01011001000 misbehave 253
+01011001000 originate 255
+01011001000 coexist 262
+01011001000 masterbate 285
+01011001000 abstain 299
+01011001000 falter 320
+01011001000 subside 329
+01011001000 retaliate 338
+01011001000 oversleep 340
+01011001000 diee 353
+01011001000 oblige 356
+01011001000 overreact 358
+01011001000 dissapear 404
+01011001000 exsist 408
+01011001000 tremble 416
+01011001000 reciprocate 429
+01011001000 re-open 430
+01011001000 persevere 456
+01011001000 erupt 464
+01011001000 grieve 504
+01011001000 accumulate 504
+01011001000 backfire 531
+01011001000 intervene 553
+01011001000 regroup 579
+01011001000 implode 666
+01011001000 haves 687
+01011001000 perish 792
+01011001000 ensue 794
+01011001000 persist 809
+01011001000 innovate 861
+01011001000 reside 889
+01011001000 enroll 901
+01011001000 linger 921
+01011001000 partake 972
+01011001000 vanish 1042
+01011001000 unfold 1128
+01011001000 hibernate 1180
+01011001000 depart 1238
+01011001000 suffice 1271
+01011001000 reopen 1312
+01011001000 cooperate 1322
+01011001000 testify 1342
+01011001000 prevail 1367
+01011001000 arise 1370
+01011001000 expire 1395
+01011001000 masturbate 1517
+01011001000 vary 1551
+01011001000 prosper 1810
+01011001000 emerge 2064
+01011001000 procrastinate 2094
+01011001000 starve 2222
+01011001000 differ 2556
+01011001000 resign 2716
+01011001000 rejoice 3483
+01011001000 retire 6015
+01011001000 disappear 6743
+01011001000 participate 6900
+01011001000 recover 7108
+01011001000 explode 7490
+01011001000 suffer 9450
+01011001000 succeed 9467
+01011001000 graduate 10984
+01011001000 arrive 13741
+01011001000 survive 16610
+01011001000 die 95583
+01011001000 exist 20598
+010110010010 preech 40
+010110010010 moveeeee 40
+010110010010 likeeeeeee 40
+010110010010 gotit 40
+010110010010 #lied 41
+010110010010 suuuck 42
+010110010010 diqq 42
+010110010010 plaaay 42
+010110010010 readdd 42
+010110010010 failz 44
+010110010010 isuck 44
+010110010010 liiive 45
+010110010010 blowww 46
+010110010010 mooooove 46
+010110010010 beeeeeeee 47
+010110010010 #bring5friends 47
+010110010010 #findthecolt 47
+010110010010 #killmyself 47
+010110010010 faillll 48
+010110010010 deww 48
+010110010010 dooooooooooo 49
+010110010010 suckit 49
+010110010010 wup 50
+010110010010 hollas 50
+010110010010 scoree 52
+010110010010 fint 52
+010110010010 seeeeeeeeee 53
+010110010010 watchhhh 53
+010110010010 unmuted 53
+010110010010 #showout 54
+010110010010 runnnnn 54
+010110010010 winz 55
+010110010010 -waves 55
+010110010010 gyt 56
+010110010010 call'em 58
+010110010010 moooove 58
+010110010010 comeeeeee 60
+010110010010 shwing 61
+010110010010 sucketh 61
+010110010010 seeeeeeeee 63
+010110010010 loveme 64
+010110010010 killllll 66
+010110010010 blaspheme 70
+010110010010 growup 70
+010110010010 burnn 71
+010110010010 overate 72
+010110010010 sukk 73
+010110010010 beeeeeee 75
+010110010010 suckkkkk 76
+010110010010 getem 77
+010110010010 losee 80
+010110010010 doooooooooo 85
+010110010010 callme 91
+010110010010 winnnn 92
+010110010010 faill 92
+010110010010 dooooooooo 92
+010110010010 runnnn 94
+010110010010 gerrit 98
+010110010010 hollah 99
+010110010010 fwu 102
+010110010010 lagg 102
+010110010010 turnup 103
+010110010010 beeeeee 103
+010110010010 suckkkk 104
+010110010010 comeeeee 109
+010110010010 seeeeeeee 114
+010110010010 doos 118
+010110010010 runnn 120
+010110010010 nyam 127
+010110010010 doooooooo 132
+010110010010 gettem 134
+010110010010 hollla 141
+010110010010 syh 141
+010110010010 suckkk 147
+010110010010 dooby 151
+010110010010 phail 177
+010110010010 love'em 181
+010110010010 dooooooo 189
+010110010010 diaf 196
+010110010010 seeeeeee 200
+010110010010 #suck 202
+010110010010 rtfm 210
+010110010010 balk 231
+010110010010 doit 235
+010110010010 hollar 246
+010110010010 urk 250
+010110010010 #suckit 292
+010110010010 suckk 312
+010110010010 seeeeee 358
+010110010010 succ 377
+010110010010 doooooo 392
+010110010010 halla 428
+010110010010 hml 468
+010110010010 suk 699
+010110010010 rawk 781
+010110010010 dooooo 790
+010110010010 co-sign 966
+010110010010 cosign 1280
+010110010010 honk 1406
+010110010010 doooo 1424
+010110010010 fwm 1863
+010110010010 dooo 2312
+010110010010 holler 2739
+010110010010 stink 6285
+010110010010 preach 6383
+010110010010 hmu 7159
+010110010010 doo 10767
+010110010010 holla 20936
+010110010010 suck 81430
+010110010010 fail 65454
+010110010011 lauf 40
+010110010011 ensina 40
+010110010011 retiro 40
+010110010011 crie 40
+010110010011 backslide 40
+010110010011 caes 40
+010110010011 avisas 40
+010110010011 alegro 40
+010110010011 sneez 41
+010110010011 sream 42
+010110010011 choca 42
+010110010011 gustas 43
+010110010011 aburri 46
+010110010011 smile/laugh 48
+010110010011 digas 49
+010110010011 acalma 50
+010110010011 squeel 53
+010110010011 moveeee 54
+010110010011 luagh 54
+010110010011 gbaa 58
+010110010011 recuerda 59
+010110010011 perspire 63
+010110010011 llamo 65
+010110010011 leaveeee 65
+010110010011 ajude 66
+010110010011 consome 67
+010110010011 cryyyyy 68
+010110010011 studder 69
+010110010011 laughhh 71
+010110010011 irrita 73
+010110010011 seethe 77
+010110010011 nitpick 80
+010110010011 encantan 81
+010110010011 cry- 83
+010110010011 ligou 83
+010110010011 likie 86
+010110010011 aburro 87
+010110010011 enamore 88
+010110010011 amam 90
+010110010011 muero 91
+010110010011 crey 99
+010110010011 laugh- 99
+010110010011 cryyyy 105
+010110010011 singg 126
+010110010011 sneer 138
+010110010011 salivate 140
+010110010011 hyperventilate 143
+010110010011 gawk 149
+010110010011 throwup 153
+010110010011 cryyy 154
+010110010011 exclaim 168
+010110010011 encanto 174
+010110010011 croak 181
+010110010011 hearties 186
+010110010011 shriek 187
+010110010011 lauqh 191
+010110010011 laughh 202
+010110010011 mope 221
+010110010011 wince 254
+010110010011 whinge 265
+010110010011 cryy 295
+010110010011 flinch 304
+010110010011 laught 338
+010110010011 squirm 342
+010110010011 scoff 369
+010110010011 gloat 401
+010110010011 squint 450
+010110010011 gush 452
+010110010011 bawl 457
+010110010011 sulk 486
+010110010011 vom 561
+010110010011 squeal 664
+010110010011 mumble 690
+010110010011 hurl 713
+010110010011 encanta 739
+010110010011 obsess 821
+010110010011 laff 1143
+010110010011 spazz 1148
+010110010011 weep 1710
+010110010011 snore 1875
+010110010011 gusta 2162
+010110010011 barf 2197
+010110010011 likey 2356
+010110010011 cringe 2619
+010110010011 moan 2856
+010110010011 chuckle 3009
+010110010011 whine 3290
+010110010011 faint 3697
+010110010011 sneeze 4334
+010110010011 behave 4672
+010110010011 puke 4889
+010110010011 giggle 6116
+010110010011 yell 9124
+010110010011 scream 19611
+010110010011 laugh 92629
+010110010011 cry 86418
+01011001010 compleate 46
+01011001010 48
+01011001010 -win 50
+01011001010 #wins 54
+01011001010 $777 61
+01011001010 co-write 64
+01011001010 #endmalaria 67
+01011001010 winnnnn 69
+01011001010 wiin 74
+01011001010 win's 81
+01011001010 win- 102
+01011001010 winnn 144
+01011001010 313131 251
+01011001010 clinch 1063
+01011001010 win 291442
+01011001010 #win 11919
+010110010110 playyyy 43
+010110010110 self-medicate 44
+010110010110 perfrom 44
+010110010110 performe 51
+010110010110 comunicate 51
+010110010110 re-engage 51
+010110010110 agrue 51
+010110010110 oogle 53
+010110010110 abscond 65
+010110010110 re-connect 70
+010110010110 play- 71
+010110010110 peform 75
+010110010110 re-buy 98
+010110010110 playyy 102
+010110010110 plaay 104
+010110010110 perfom 109
+010110010110 paly 119
+010110010110 commentate 120
+010110010110 commiserate 121
+010110010110 socialise 136
+010110010110 fornicate 139
+010110010110 haggle 169
+010110010110 harmonize 181
+010110010110 elope 230
+010110010110 grapple 246
+010110010110 resonate 312
+010110010110 coincide 351
+010110010110 playy 387
+010110010110 contend 436
+010110010110 re-sign 446
+010110010110 preform 447
+010110010110 ply 674
+010110010110 comply 685
+010110010110 rehearse 738
+010110010110 reconnect 883
+010110010110 socialize 946
+010110010110 reunite 1508
+010110010110 wrestle 1721
+010110010110 collaborate 1746
+010110010110 operate 2313
+010110010110 interact 2545
+010110010110 cope 4536
+010110010110 communicate 4791
+010110010110 engage 4839
+010110010110 compete 6383
+010110010110 argue 12012
+010110010110 play 305617
+010110010110 perform 18999
+010110010111 unthaw 40
+010110010111 moisturise 45
+010110010111 hidee 45
+010110010111 re-group 46
+010110010111 re-apply 49
+010110010111 babysitt 54
+010110010111 acomplish 55
+010110010111 eattttt 55
+010110010111 eat- 55
+010110010111 singgg 57
+010110010111 sautee 57
+010110010111 caffeinate 58
+010110010111 see'em 61
+010110010111 wearr 62
+010110010111 enunciate 64
+010110010111 refrigerate 77
+010110010111 eaat 80
+010110010111 rehydrate 85
+010110010111 coook 86
+010110010111 eattt 92
+010110010111 dehydrate 94
+010110010111 ripen 104
+010110010111 eat/drink 109
+010110010111 sinq 124
+010110010111 laydown 129
+010110010111 reapply 137
+010110010111 copp 176
+010110010111 comeover 182
+010110010111 reheat 207
+010110010111 eatt 277
+010110010111 de-stress 290
+010110010111 hydrate 316
+010110010111 improvise 387
+010110010111 unpack 1301
+010110010111 bathe 2192
+010110010111 babysit 2637
+010110010111 revise 2999
+010110010111 accomplish 5334
+010110010111 bake 11577
+010110010111 relax 26896
+010110010111 eat 226524
+010110010111 cook 46697
+010110011000 portend 40
+010110011000 unsuppor 43
+010110011000 imperil 48
+010110011000 foretell 48
+010110011000 underwrite 48
+010110011000 outrank 49
+010110011000 supplant 49
+010110011000 outstrip 53
+010110011000 concoct 61
+010110011000 rcv 67
+010110011000 envisage 71
+010110011000 beget 77
+010110011000 necessitate 87
+010110011000 criminalize 90
+010110011000 becum 96
+010110011000 ferrell's 97
+010110011000 amass 101
+010110011000 recive 102
+010110011000 bcom 103
+010110011000 displace 109
+010110011000 bcum 109
+010110011000 denote 115
+010110011000 outpace 121
+010110011000 impede 123
+010110011000 devastate 129
+010110011000 comprise 131
+010110011000 precede 132
+010110011000 incur 132
+010110011000 elicit 152
+010110011000 exude 178
+010110011000 aquire 180
+010110011000 decry 183
+010110011000 depict 200
+010110011000 outsell 204
+010110011000 allocate 228
+010110011000 emit 249
+010110011000 instill 253
+010110011000 enact 259
+010110011000 develope 262
+010110011000 solicit 262
+010110011000 detain 264
+010110011000 prohibit 266
+010110011000 evoke 271
+010110011000 formulate 279
+010110011000 bcome 304
+010110011000 devise 328
+010110011000 undertake 329
+010110011000 outnumber 373
+010110011000 news| 400
+010110011000 constitute 503
+010110011000 induce 546
+010110011000 cultivate 567
+010110011000 initiate 698
+010110011000 undergo 861
+010110011000 impose 872
+010110011000 construct 907
+010110011000 compose 908
+010110011000 appoint 933
+010110011000 employ 1329
+010110011000 exceed 1386
+010110011000 establish 1923
+010110011000 recieve 1960
+010110011000 unveil 2118
+010110011000 obtain 2354
+010110011000 enable 2619
+010110011000 invent 3171
+010110011000 acquire 3931
+010110011000 involve 4684
+010110011000 contain 4698
+010110011000 generate 5530
+010110011000 attract 6529
+010110011000 require 8726
+010110011000 produce 9367
+010110011000 develop 9469
+010110011000 provide 17018
+010110011000 include 17880
+010110011000 receive 21698
+010110011000 build 47419
+010110011000 become 86968
+010110011000 create 48862
+0101100110010 buy’s 41
+0101100110010 -buy 44
+0101100110010 bulid 49
+0101100110010 finagle 69
+0101100110010 buyy 113
+0101100110010 gratify 120
+0101100110010 buy's 230
+0101100110010 procure 276
+0101100110010 smuggle 464
+0101100110010 inject 826
+0101100110010 snag 1500
+0101100110010 adopt 5373
+0101100110010 buy 230767
+0101100110010 grab 29131
+01011001100110 spnd 42
+01011001100110 rehome 42
+01011001100110 wangle 43
+01011001100110 wirte 53
+01011001100110 handwrite 56
+01011001100110 disect 66
+01011001100110 expend 126
+01011001100110 choreograph 163
+01011001100110 devote 706
+01011001100110 cram 1460
+01011001100110 organise 1468
+01011001100110 arrange 2650
+01011001100110 dedicate 3118
+01011001100110 borrow 11058
+01011001100110 upload 23981
+01011001100110 spend 71602
+01011001100110 write 102258
+01011001100111 overstay 41
+01011001100111 blacken 43
+01011001100111 personify 44
+01011001100111 vocalize 47
+01011001100111 accrue 56
+01011001100111 hyphenate 58
+01011001100111 posess 74
+01011001100111 dislocate 87
+01011001100111 24-volt 102
+01011001100111 mispronounce 103
+01011001100111 officiate 114
+01011001100111 bedazzle 129
+01011001100111 repress 151
+01011001100111 squander 175
+01011001100111 jeopardize 183
+01011001100111 feign 185
+01011001100111 retrace 187
+01011001100111 20-volt 188
+01011001100111 instigate 200
+01011001100111 ingest 219
+01011001100111 misplace 256
+01011001100111 breastfeed 263
+01011001100111 flatten 272
+01011001100111 inhabit 276
+01011001100111 covet 414
+01011001100111 prescribe 435
+01011001100111 waive 486
+01011001100111 classify 527
+01011001100111 portray 681
+01011001100111 perceive 755
+01011001100111 carve 1238
+01011001100111 resemble 1367
+01011001100111 possess 1659
+01011001100111 consume 2864
+01011001100111 crave 3939
+01011001100111 swallow 6476
+01011001100111 deliver 11339
+01011001100111 serve 15311
+01011001100111 ruin 15590
+01011001100111 gain 21434
+01011001100111 steal 22170
+01011001100111 sell 56325
+01011001100111 lose 91930
+01011001100111 wear 99942
+010110011010 watxh 42
+010110011010 wwatch 53
+010110011010 listen/watch 54
+010110011010 wacht 55
+010110011010 listen2 56
+010110011010 waatch 60
+010110011010 reassemble 74
+010110011010 -watch 84
+010110011010 watch- 91
+010110011010 rehire 112
+010110011010 watchhh 115
+010110011010 wacth 225
+010110011010 wtch 235
+010110011010 savour 266
+010110011010 wach 335
+010110011010 whatch 353
+010110011010 watchh 374
+010110011010 bieberblast 385
+010110011010 re-watch 470
+010110011010 watch 462046
+010110011010 rewatch 982
+010110011011 re-sell 40
+010110011011 re-type 40
+010110011011 40
+010110011011 synchronise 40
+010110011011 initialize 40
+010110011011 excavate 41
+010110011011 conceptualize 41
+010110011011 foist 41
+010110011011 democratize 41
+010110011011 #suspend 41
+010110011011 pilfer 41
+010110011011 turbocharge 41
+010110011011 inflame 42
+010110011011 supersede 42
+010110011011 formalize 42
+010110011011 substantiate 43
+010110011011 dicuss 43
+010110011011 re-discover 43
+010110011011 unstick 43
+010110011011 espouse 43
+010110011011 ressurect 43
+010110011011 randomize 43
+010110011011 elucidate 43
+010110011011 proof-read 43
+010110011011 constrain 43
+010110011011 annul 44
+010110011011 re-activate 44
+010110011011 reenter 45
+010110011011 co-create 46
+010110011011 reexamine 47
+010110011011 re-schedule 47
+010110011011 lubricate 47
+010110011011 over-analyze 48
+010110011011 demystify 48
+010110011011 politicize 48
+010110011011 re-sync 48
+010110011011 dramatize 48
+010110011011 re-join 48
+010110011011 reestablish 49
+010110011011 retell 49
+010110011011 repopulate 49
+010110011011 re-organize 49
+010110011011 destabilize 50
+010110011011 edify 50
+010110011011 invigorate 50
+010110011011 memorialize 50
+010110011011 rebalance 51
+010110011011 re-enable 51
+010110011011 centralize 51
+010110011011 remap 51
+010110011011 reassign 51
+010110011011 unmask 52
+010110011011 nuture 52
+010110011011 perpetrate 52
+010110011011 juxtapose 52
+010110011011 scupper 52
+010110011011 popularize 53
+010110011011 deride 53
+010110011011 remember's 53
+010110011011 deregulate 53
+010110011011 re-name 53
+010110011011 reattach 53
+010110011011 defragment 53
+010110011011 subsidise 54
+010110011011 incentivize 54
+010110011011 monetise 54
+010110011011 disavow 54
+010110011011 affix 54
+010110011011 fine-tune 54
+010110011011 jettison 55
+010110011011 assail 55
+010110011011 polarize 55
+010110011011 stymie 55
+010110011011 obfuscate 55
+010110011011 unclutter 55
+010110011011 decriminalize 56
+010110011011 delist 56
+010110011011 denigrate 58
+010110011011 re-check 58
+010110011011 redevelop 58
+010110011011 pre-empt 58
+010110011011 reinvigorate 58
+010110011011 re-stock 59
+010110011011 commercialize 59
+010110011011 desecrate 59
+010110011011 cosponsor 59
+010110011011 unclench 59
+010110011011 colonize 59
+010110011011 re-establish 59
+010110011011 enliven 59
+010110011011 refinish 60
+010110011011 satiate 60
+010110011011 extol 61
+010110011011 exemplify 61
+010110011011 ransack 62
+010110011011 incinerate 62
+010110011011 replant 62
+010110011011 delineate 62
+010110011011 permeate 62
+010110011011 uncork 63
+010110011011 cheapen 63
+010110011011 truncate 63
+010110011011 flout 64
+010110011011 test-drive 64
+010110011011 overrule 64
+010110011011 re-focus 64
+010110011011 privatise 65
+010110011011 encapsulate 66
+010110011011 refurbish 66
+010110011011 preempt 66
+010110011011 re-charge 66
+010110011011 re-visit 67
+010110011011 collate 67
+010110011011 recalibrate 67
+010110011011 stabilise 67
+010110011011 nationalise 68
+010110011011 defraud 69
+010110011011 internalize 69
+010110011011 recompile 69
+010110011011 localize 69
+010110011011 appraise 69
+010110011011 wrest 70
+010110011011 assuage 70
+010110011011 dislodge 71
+010110011011 mobilise 71
+010110011011 monopolize 71
+010110011011 commandeer 71
+010110011011 embroider 72
+010110011011 sieze 72
+010110011011 de-ice 72
+010110011011 unhook 72
+010110011011 spurn 73
+010110011011 synthesize 73
+010110011011 humanize 75
+010110011011 repudiate 75
+010110011011 achive 76
+010110011011 decrypt 76
+010110011011 squelch 77
+010110011011 re-brand 77
+010110011011 usurp 77
+010110011011 apprehend 77
+010110011011 bemoan 77
+010110011011 realign 78
+010110011011 distill 78
+010110011011 uproot 78
+010110011011 bulldoze 79
+010110011011 divest 79
+010110011011 re-build 79
+010110011011 interject 80
+010110011011 conjugate 80
+010110011011 gatecrash 80
+010110011011 muffle 80
+010110011011 reshoot 81
+010110011011 engrave 81
+010110011011 anounce 81
+010110011011 personalise 81
+010110011011 virtualize 81
+010110011011 prise 81
+010110011011 legitimize 81
+010110011011 defile 82
+010110011011 de-clutter 82
+010110011011 republish 82
+010110011011 supress 82
+010110011011 vaporize 83
+010110011011 regift 86
+010110011011 impair 87
+010110011011 disseminate 87
+010110011011 re-take 87
+010110011011 exacerbate 87
+010110011011 re-examine 87
+010110011011 unseat 87
+010110011011 disallow 88
+010110011011 vandalize 88
+010110011011 fullfill 88
+010110011011 reposition 90
+010110011011 deface 90
+010110011011 re-energize 90
+010110011011 rebut 91
+010110011011 reignite 91
+010110011011 ascertain 92
+010110011011 rehabilitate 92
+010110011011 emphasise 92
+010110011011 sterilize 93
+010110011011 deplete 93
+010110011011 characterize 94
+010110011011 infest 96
+010110011011 revolutionise 96
+010110011011 publicise 96
+010110011011 decimate 96
+010110011011 contaminate 96
+010110011011 heighten 97
+010110011011 eschew 97
+010110011011 inaugurate 97
+010110011011 mutilate 97
+010110011011 winterize 98
+010110011011 dethrone 98
+010110011011 self-publish 98
+010110011011 subvert 99
+010110011011 deconstruct 99
+010110011011 retool 100
+010110011011 normalize 101
+010110011011 allay 101
+010110011011 entrust 103
+010110011011 summarise 103
+010110011011 resubmit 103
+010110011011 detoxify 104
+010110011011 recant 105
+010110011011 saturate 105
+010110011011 embellish 105
+010110011011 modernize 106
+010110011011 demonize 106
+010110011011 double-check 106
+010110011011 overstate 106
+010110011011 punctuate 106
+010110011011 electrify 107
+010110011011 overclock 108
+010110011011 rebook 108
+010110011011 reconfigure 108
+010110011011 disassemble 108
+010110011011 redraw 108
+010110011011 re-record 109
+010110011011 unscrew 109
+010110011011 glean 109
+010110011011 orchestrate 109
+010110011011 equalize 109
+010110011011 sidestep 109
+010110011011 renegotiate 110
+010110011011 standardize 110
+010110011011 fertilize 110
+010110011011 restate 111
+010110011011 legalise 112
+010110011011 livetweet 112
+010110011011 neutralize 113
+010110011011 hr3962 113
+010110011011 outwit 114
+010110011011 fortify 114
+010110011011 reword 114
+010110011011 insulate 115
+010110011011 evangelize 115
+010110011011 extradite 116
+010110011011 inhibit 116
+010110011011 amputate 116
+010110011011 euthanize 117
+010110011011 invalidate 117
+010110011011 visualise 117
+010110011011 regrow 117
+010110011011 obstruct 117
+010110011011 readjust 118
+010110011011 minimise 118
+010110011011 unfreeze 120
+010110011011 scrutinize 120
+010110011011 reprogram 121
+010110011011 exorcise 122
+010110011011 reconstruct 122
+010110011011 retrain 124
+010110011011 nullify 125
+010110011011 prioritise 126
+010110011011 obliterate 128
+010110011011 indict 128
+010110011011 cede 129
+010110011011 authenticate 129
+010110011011 re-enact 129
+010110011011 reaffirm 130
+010110011011 assimilate 130
+010110011011 optimise 130
+010110011011 scuttle 131
+010110011011 unbox 131
+010110011011 disinfect 133
+010110011011 mangle 133
+010110011011 unclog 133
+010110011011 regurgitate 134
+010110011011 persue 136
+010110011011 erode 136
+010110011011 encompass 137
+010110011011 utilise 139
+010110011011 rewire 140
+010110011011 recheck 140
+010110011011 accentuate 140
+010110011011 subdue 141
+010110011011 append 142
+010110011011 annouce 142
+010110011011 poach 143
+010110011011 overwrite 143
+010110011011 quash 143
+010110011011 re-upload 143
+010110011011 sanitize 145
+010110011011 shelve 145
+010110011011 reframe 145
+010110011011 televise 145
+010110011011 liquidate 146
+010110011011 re-download 146
+010110011011 curtail 147
+010110011011 ratify 147
+010110011011 curate 147
+010110011011 devalue 148
+010110011011 ravage 149
+010110011011 reassess 149
+010110011011 unlearn 149
+010110011011 strategize 151
+010110011011 augment 153
+010110011011 live-tweet 153
+010110011011 reorder 154
+010110011011 re-arrange 154
+010110011011 lengthen 156
+010110011011 calibrate 156
+010110011011 redownload 156
+010110011011 re-create 157
+010110011011 customise 157
+010110011011 moisturize 157
+010110011011 reenact 158
+010110011011 forego 158
+010110011011 bide 159
+010110011011 fabricate 159
+010110011011 jump-start 160
+010110011011 vaccinate 161
+010110011011 acheive 162
+010110011011 diffuse 162
+010110011011 circumvent 162
+010110011011 exfoliate 162
+010110011011 propagate 163
+010110011011 repurpose 163
+010110011011 annotate 163
+010110011011 digitize 166
+010110011011 solidify 167
+010110011011 renounce 168
+010110011011 defund 168
+010110011011 blare 171
+010110011011 defuse 172
+010110011011 nationalize 176
+010110011011 retype 176
+010110011011 finalise 178
+010110011011 downplay 178
+010110011011 rescind 178
+010110011011 disband 179
+010110011011 deflect 180
+010110011011 certify 180
+010110011011 encrypt 182
+010110011011 supercharge 182
+010110011011 crowdsource 183
+010110011011 tarnish 184
+010110011011 debunk 187
+010110011011 mitigate 188
+010110011011 overpower 189
+010110011011 condense 190
+010110011011 extinguish 191
+010110011011 legislate 191
+010110011011 kick-start 193
+010110011011 relinquish 195
+010110011011 whiten 195
+010110011011 recapture 197
+010110011011 perpetuate 197
+010110011011 maximise 198
+010110011011 dispense 199
+010110011011 deflate 200
+010110011011 mediate 200
+010110011011 overshadow 200
+010110011011 exert 202
+010110011011 symbolize 202
+010110011011 impart 203
+010110011011 redistribute 203
+010110011011 dispel 205
+010110011011 magnify 206
+010110011011 untangle 206
+010110011011 disprove 207
+010110011011 accessorize 207
+010110011011 divulge 207
+010110011011 beautify 207
+010110011011 quantify 207
+010110011011 redecorate 208
+010110011011 expedite 211
+010110011011 re-enter 213
+010110011011 accomodate 217
+010110011011 signify 219
+010110011011 revitalize 219
+010110011011 negate 220
+010110011011 unify 220
+010110011011 dampen 221
+010110011011 sooth 222
+010110011011 offload 222
+010110011011 dilute 224
+010110011011 bestow 225
+010110011011 embody 226
+010110011011 regenerate 228
+010110011011 privatize 230
+010110011011 expel 231
+010110011011 refute 233
+010110011011 adorn 234
+010110011011 undercut 234
+010110011011 p/u 235
+010110011011 neuter 237
+010110011011 rationalize 238
+010110011011 omit 239
+010110011011 subsidize 240
+010110011011 disperse 240
+010110011011 fondle 240
+010110011011 authorize 240
+010110011011 scour 241
+010110011011 confiscate 241
+010110011011 sweeten 241
+010110011011 distort 242
+010110011011 populate 245
+010110011011 exterminate 246
+010110011011 furnish 246
+010110011011 publicize 247
+010110011011 unearth 248
+010110011011 encode 251
+010110011011 downsize 252
+010110011011 reactivate 259
+010110011011 unzip 260
+010110011011 repel 263
+010110011011 counteract 264
+010110011011 infuse 265
+010110011011 discontinue 266
+010110011011 memorise 267
+010110011011 synchronize 267
+010110011011 disarm 269
+010110011011 halve 269
+010110011011 fulfil 271
+010110011011 refuel 271
+010110011011 reshape 272
+010110011011 deduct 273
+010110011011 grok 273
+010110011011 declutter 274
+010110011011 designate 274
+010110011011 infiltrate 274
+010110011011 narrate 279
+010110011011 pollute 279
+010110011011 inflate 279
+010110011011 rekindle 280
+010110011011 circulate 281
+010110011011 re-live 285
+010110011011 renovate 285
+010110011011 peruse 287
+010110011011 administer 287
+010110011011 deepen 288
+010110011011 dissect 288
+010110011011 re-think 289
+010110011011 reinstate 293
+010110011011 294
+010110011011 wield 294
+010110011011 discard 298
+010110011011 incite 300
+010110011011 evade 305
+010110011011 intensify 309
+010110011011 reorganize 311
+010110011011 supervise 313
+010110011011 simulate 319
+010110011011 rejuvenate 319
+010110011011 vacate 322
+010110011011 transcribe 324
+010110011011 wrangle 324
+010110011011 prolong 325
+010110011011 recoup 329
+010110011011 re-install 330
+010110011011 avenge 330
+010110011011 assert 331
+010110011011 stifle 338
+010110011011 nourish 340
+010110011011 detach 341
+010110011011 eradicate 354
+010110011011 quell 355
+010110011011 withhold 356
+010110011011 denounce 356
+010110011011 enlist 359
+010110011011 stabilize 363
+010110011011 coax 365
+010110011011 unravel 367
+010110011011 safeguard 367
+010110011011 replenish 369
+010110011011 mobilize 374
+010110011011 rediscover 374
+010110011011 unwrap 375
+010110011011 pinpoint 375
+010110011011 intercept 377
+010110011011 troubleshoot 377
+010110011011 diversify 379
+010110011011 affirm 380
+010110011011 restructure 385
+010110011011 oversee 390
+010110011011 inflict 391
+010110011011 invoke 396
+010110011011 revoke 401
+010110011011 re-evaluate 401
+010110011011 rectify 409
+010110011011 dismantle 416
+010110011011 broaden 418
+010110011011 diminish 421
+010110011011 re-write 421
+010110011011 forgo 421
+010110011011 penetrate 424
+010110011011 terminate 424
+010110011011 rejoin 425
+010110011011 eject 426
+010110011011 oust 428
+010110011011 overthrow 429
+010110011011 outrun 431
+010110011011 reinforce 433
+010110011011 kickstart 433
+010110011011 compress 436
+010110011011 illuminate 436
+010110011011 summarize 437
+010110011011 analyse 444
+010110011011 thwart 447
+010110011011 conceal 448
+010110011011 refine 449
+010110011011 revolutionize 451
+010110011011 parse 452
+010110011011 derail 452
+010110011011 reevaluate 456
+010110011011 defrost 460
+010110011011 reconcile 463
+010110011011 alleviate 466
+010110011011 criticise 471
+010110011011 enrich 473
+010110011011 animate 476
+010110011011 override 479
+010110011011 streamline 482
+010110011011 avert 500
+010110011011 lessen 502
+010110011011 soften 504
+010110011011 resurrect 504
+010110011011 prosecute 514
+010110011011 uphold 515
+010110011011 quench 516
+010110011011 weaken 519
+010110011011 undermine 520
+010110011011 topple 524
+010110011011 replicate 532
+010110011011 withstand 536
+010110011011 redefine 537
+010110011011 overturn 537
+010110011011 banish 541
+010110011011 propel 551
+010110011011 personalize 552
+010110011011 dissolve 560
+010110011011 illustrate 562
+010110011011 emulate 569
+010110011011 mimic 570
+010110011011 abolish 586
+010110011011 decipher 591
+010110011011 demolish 591
+010110011011 commemorate 593
+010110011011 conceive 595
+010110011011 emphasize 599
+010110011011 reproduce 600
+010110011011 complicate 605
+010110011011 pave 607
+010110011011 diagnose 625
+010110011011 suppress 625
+010110011011 accommodate 627
+010110011011 summon 628
+010110011011 insure 628
+010110011011 proclaim 637
+010110011011 bolster 650
+010110011011 envision 652
+010110011011 inspect 671
+010110011011 retake 673
+010110011011 conserve 677
+010110011011 prioritize 687
+010110011011 resize 697
+010110011011 facilitate 699
+010110011011 attain 701
+010110011011 sharpen 727
+010110011011 nurture 730
+010110011011 pry 736
+010110011011 decode 748
+010110011011 finalize 760
+010110011011 recite 763
+010110011011 consolidate 767
+010110011011 amend 771
+010110011011 inherit 800
+010110011011 validate 800
+010110011011 govern 813
+010110011011 accelerate 815
+010110011011 surpass 837
+010110011011 unload 838
+010110011011 enlarge 842
+010110011011 reclaim 847
+010110011011 conclude 848
+010110011011 minimize 848
+010110011011 restrict 855
+010110011011 soothe 868
+010110011011 juggle 869
+010110011011 savor 871
+010110011011 configure 875
+010110011011 disrupt 891
+010110011011 convey 902
+010110011011 disclose 904
+010110011011 uncover 910
+010110011011 contemplate 915
+010110011011 visualize 915
+010110011011 assign 924
+010110011011 hijack 926
+010110011011 revisit 931
+010110011011 salvage 941
+010110011011 enforce 945
+010110011011 devour 950
+010110011011 manipulate 959
+010110011011 interpret 965
+010110011011 align 974
+010110011011 coordinate 1002
+010110011011 uninstall 1003
+010110011011 recreate 1006
+010110011011 monetize 1039
+010110011011 reschedule 1039
+010110011011 cite 1046
+010110011011 rotate 1056
+010110011011 retrieve 1067
+010110011011 absorb 1073
+010110011011 evacuate 1084
+010110011011 defy 1087
+010110011011 assemble 1105
+010110011011 assess 1108
+010110011011 unplug 1114
+010110011011 rearrange 1115
+010110011011 overlook 1134
+010110011011 sustain 1140
+010110011011 condemn 1162
+010110011011 modify 1172
+010110011011 compile 1187
+010110011011 censor 1223
+010110011011 utilize 1229
+010110011011 elevate 1230
+010110011011 postpone 1253
+010110011011 offset 1253
+010110011011 automate 1262
+010110011011 outsource 1268
+010110011011 incorporate 1275
+010110011011 regulate 1285
+010110011011 deploy 1302
+010110011011 relive 1314
+010110011011 distribute 1316
+010110011011 evaluate 1343
+010110011011 simplify 1354
+010110011011 optimize 1376
+010110011011 manifest 1383
+010110011011 legalize 1388
+010110011011 reconsider 1388
+010110011011 calculate 1389
+010110011011 examine 1392
+010110011011 demonstrate 1429
+010110011011 negotiate 1430
+010110011011 regain 1432
+010110011011 stimulate 1448
+010110011011 rename 1464
+010110011011 maximize 1504
+010110011011 withdraw 1536
+010110011011 exploit 1536
+010110011011 reinstall 1571
+010110011011 execute 1588
+010110011011 memorize 1596
+010110011011 undo 1623
+010110011011 retain 1631
+010110011011 detect 1639
+010110011011 navigate 1644
+010110011011 unleash 1690
+010110011011 indicate 1716
+010110011011 suspend 1722
+010110011011 disable 1724
+010110011011 invade 1730
+010110011011 render 1778
+010110011011 attach 1805
+010110011011 revive 1818
+010110011011 analyze 1898
+010110011011 shorten 1946
+010110011011 strengthen 1949
+010110011011 rewrite 2024
+010110011011 integrate 2092
+010110011011 preserve 2095
+010110011011 activate 2146
+010110011011 locate 2171
+010110011011 fulfill 2178
+010110011011 customize 2179
+010110011011 relieve 2194
+010110011011 seize 2251
+010110011011 oppose 2314
+010110011011 verify 2326
+010110011011 redo 2338
+010110011011 rethink 2346
+010110011011 ponder 2387
+010110011011 obey 2413
+010110011011 endure 2474
+010110011011 await 2576
+010110011011 abandon 2614
+010110011011 observe 2656
+010110011011 rebuild 2755
+010110011011 decorate 2812
+010110011011 implement 2864
+010110011011 recruit 2911
+010110011011 enhance 2962
+010110011011 renew 3049
+010110011011 recycle 3185
+010110011011 browse 3263
+010110011011 pursue 3283
+010110011011 clarify 3283
+010110011011 transform 3400
+010110011011 resolve 3403
+010110011011 adjust 3444
+010110011011 justify 3485
+010110011011 eliminate 3691
+010110011011 declare 3722
+010110011011 reject 3735
+010110011011 conquer 3752
+010110011011 combine 4054
+010110011011 dominate 4129
+010110011011 advertise 4192
+010110011011 investigate 4196
+010110011011 erase 4213
+010110011011 identify 4225
+010110011011 ensure 4229
+010110011011 translate 4901
+010110011011 publish 4919
+010110011011 extend 5020
+010110011011 unlock 5020
+010110011011 organize 5136
+010110011011 overcome 5199
+010110011011 restore 5471
+010110011011 expand 5925
+010110011011 maintain 6023
+010110011011 represent 6097
+010110011011 tackle 6718
+010110011011 explore 6814
+010110011011 capture 6837
+010110011011 convert 7311
+010110011011 embrace 7431
+010110011011 reveal 7489
+010110011011 collect 7938
+010110011011 heal 8010
+010110011011 confirm 8840
+010110011011 achieve 8889
+010110011011 cancel 8972
+010110011011 prevent 9310
+010110011011 reduce 9410
+010110011011 submit 10193
+010110011011 solve 10765
+010110011011 remove 14392
+010110011011 announce 14616
+010110011011 discuss 16665
+010110011011 replace 16917
+010110011011 attend 17070
+010110011011 improve 18092
+010110011011 install 18496
+010110011011 hide 26368
+010110011011 avoid 29031
+010110011011 celebrate 34762
+010110011011 handle 37888
+010110011011 fix 57200
+010110011011 share 87523
+010110011100 memtion 41
+010110011100 unlink 59
+010110011100 60
+010110011100 aprove 72
+010110011100 usee 181
+010110011100 hasten 221
+010110011100 misspell 648
+010110011100 haz 3574
+010110011100 use 334742
+010110011100 approve 6804
+0101100111010 lrn 68
+0101100111010 disengage 85
+0101100111010 lern 99
+0101100111010 leads@ 100
+0101100111010 re-learn 109
+0101100111010 xplain 183
+0101100111010 relearn 228
+0101100111010 refrain 1679
+0101100111010 discover 15931
+0101100111010 learn 123956
+0101100111010 explain 34300
+0101100111011 generalise 40
+0101100111011 reep 45
+0101100111011 spek 46
+0101100111011 feel- 50
+0101100111011 speack 54
+0101100111011 acclimate 54
+0101100111011 decied 62
+0101100111011 extrapolate 65
+0101100111011 deside 67
+0101100111011 verbalize 69
+0101100111011 speaketh 70
+0101100111011 repond 71
+0101100111011 ascribe 77
+0101100111011 speaka 90
+0101100111011 don't: 108
+0101100111011 committ 134
+0101100111011 infer 169
+0101100111011 speek 181
+0101100111011 levitate 196
+0101100111011 conspire 223
+0101100111011 gravitate 223
+0101100111011 posses 270
+0101100111011 discern 271
+0101100111011 radiate 315
+0101100111011 spk 323
+0101100111011 derive 328
+0101100111011 defer 352
+0101100111011 speculate 371
+0101100111011 profess 405
+0101100111011 exaggerate 432
+0101100111011 equate 555
+0101100111011 differentiate 672
+0101100111011 distinguish 704
+0101100111011 concede 715
+0101100111011 specify 788
+0101100111011 relocate 904
+0101100111011 migrate 1119
+0101100111011 dictate 1155
+0101100111011 mourn 1395
+0101100111011 plead 1573
+0101100111011 reap 1700
+0101100111011 adapt 1869
+0101100111011 propose 2665
+0101100111011 threaten 3011
+0101100111011 determine 4959
+0101100111011 react 5047
+0101100111011 commit 7381
+0101100111011 compare 13456
+0101100111011 seek 15569
+0101100111011 manage 18093
+0101100111011 pretend 18221
+0101100111011 claim 19605
+0101100111011 decide 37628
+0101100111011 choose 47071
+0101100111011 speak 70497
+0101100111011 sing 65040
+0101100111100 talk2 42
+0101100111100 second-guess 49
+0101100111100 1)kiss 52
+0101100111100 ask/tell 52
+0101100111100 love/like 54
+0101100111100 iask 65
+0101100111100 critisize 71
+0101100111100 iasked 74
+0101100111100 askkk 77
+0101100111100 backstab 116
+0101100111100 taze 125
+0101100111100 jio 168
+0101100111100 aske 202
+0101100111100 idolize 319
+0101100111100 un-follow 442
+0101100111100 askk 444
+0101100111100 twatch 545
+0101100111100 scold 705
+0101100111100 ask 203009
+0101100111100 unfollow 25052
+0101100111101 misconstrue 40
+0101100111101 immitate 40
+0101100111101 uncross 43
+0101100111101 distroy 43
+0101100111101 chanqee 44
+0101100111101 delte 46
+0101100111101 leaave 46
+0101100111101 blaim 47
+0101100111101 critize 49
+0101100111101 misjudge 50
+0101100111101 ingore 52
+0101100111101 cremate 53
+0101100111101 unroll 54
+0101100111101 dickride 56
+0101100111101 acept 57
+0101100111101 patronise 59
+0101100111101 coddle 62
+0101100111101 pronouce 67
+0101100111101 dignify 71
+0101100111101 plagiarize 72
+0101100111101 destory 80
+0101100111101 misrepresent 80
+0101100111101 badmouth 82
+0101100111101 deliever 83
+0101100111101 defame 85
+0101100111101 swollow 85
+0101100111101 agitate 95
+0101100111101 disapoint 115
+0101100111101 reconize 121
+0101100111101 delet 122
+0101100111101 ignor 134
+0101100111101 recollect 135
+0101100111101 misinterpret 142
+0101100111101 leaveee 156
+0101100111101 patronize 159
+0101100111101 proove 160
+0101100111101 unbutton 166
+0101100111101 disobey 167
+0101100111101 generalize 186
+0101100111101 untie 214
+0101100111101 abbreviate 226
+0101100111101 readd 237
+0101100111101 interupt 266
+0101100111101 outgrow 270
+0101100111101 unprotect 274
+0101100111101 categorize 327
+0101100111101 misunderstand 401
+0101100111101 leavee 408
+0101100111101 forsake 438
+0101100111101 glorify 441
+0101100111101 subtract 519
+0101100111101 deem 538
+0101100111101 suffocate 563
+0101100111101 deactivate 722
+0101100111101 flaunt 831
+0101100111101 imitate 839
+0101100111101 anticipate 1077
+0101100111101 violate 1318
+0101100111101 endorse 1698
+0101100111101 recognise 1810
+0101100111101 interrupt 2074
+0101100111101 criticize 2332
+0101100111101 tolerate 2460
+0101100111101 disturb 2498
+0101100111101 acknowledge 2979
+0101100111101 pronounce 3612
+0101100111101 confuse 5057
+0101100111101 spoil 5563
+0101100111101 recognize 10271
+0101100111101 prove 19932
+0101100111101 delete 24384
+0101100111101 accept 25900
+0101100111101 ignore 26285
+0101100111101 leave 188407
+0101100111101 blame 38586
+0101100111110 appologise 42
+0101100111110 repsect 42
+0101100111110 pre-registered 44
+0101100111110 commot 63
+0101100111110 respekt 63
+0101100111110 deathcab 69
+0101100111110 repect 103
+0101100111110 gird 118
+0101100111110 #blamedrewscancer 126
+0101100111110 apoligize 136
+0101100111110 appologize 171
+0101100111110 medicate 254
+0101100111110 tnk 260
+0101100111110 yearn 462
+0101100111110 repent 1074
+0101100111110 #pray 1682
+0101100111110 disregard 1715
+0101100111110 apologise 2079
+0101100111110 strive 2517
+0101100111110 brace 2925
+0101100111110 surrender 3437
+0101100111110 advise 4219
+0101100111110 beg 8656
+0101100111110 apologize 11373
+0101100111110 praise 15205
+0101100111110 prepare 17933
+0101100111110 respect 50620
+0101100111110 pray 51921
+0101100111111 sginup 41
+0101100111111 singup 48
+0101100111111 overshoot 50
+0101100111111 sigunp 58
+0101100111111 payy 67
+0101100111111 2331 86
+0101100111111 37404 89
+0101100111111 69937 103
+0101100111111 scavenge 116
+0101100111111 overpay 121
+0101100111111 atone 122
+0101100111111 jion 129
+0101100111111 forage 206
+0101100111111 fundraise 209
+0101100111111 divert 405
+0101100111111 fend 632
+0101100111111 vouch 733
+0101100111111 compensate 924
+0101100111111 qualify 4015
+0101100111111 settle 14017
+0101100111111 pay 115783
+0101100111111 reach 40835
+010110100 ƒσℓℓσω 40
+010110100 sleeprt 42
+010110100 followwwwww 42
+010110100 folloowww 44
+010110100 vote4 44
+010110100 #notice 46
+010110100 -follows 46
+010110100 ifollowed 47
+010110100 follllllow 47
+010110100 pleasefollow 49
+010110100 follooooow 50
+010110100 folw 57
+010110100 unfolow 60
+010110100 fflw 61
+010110100 ollow 61
+010110100 #followpenshoppe 62
+010110100 folllowww 62
+010110100 version(lead 64
+010110100 ℱℴℓℓℴω 64
+010110100 ffbk 65
+010110100 ffw 71
+010110100 pa-follow 71
+010110100 persigam 71
+010110100 backstreet's 72
+010110100 follloww 75
+010110100 followwwww 82
+010110100 pafollow 83
+010110100 folloooow 95
+010110100 folllllow 96
+010110100 follwo 103
+010110100 follooww 108
+010110100 addd 109
+010110100 f0llow 109
+010110100 follow/dm 118
+010110100 foloow 125
+010110100 follow/tweet 143
+010110100 foolow 146
+010110100 ifollow 153
+010110100 dort 154
+010110100 follooow 166
+010110100 foollow 170
+010110100 followwww 176
+010110100 -follow 195
+010110100 follow- 206
+010110100 fllow 225
+010110100 folloe 228
+010110100 tweet/follow 248
+010110100 follllow 252
+010110100 folloow 260
+010110100 folo 264
+010110100 f0ll0w 367
+010110100 re-follow 412
+010110100 fllw 417
+010110100 followe 440
+010110100 followww 497
+010110100 follw 696
+010110100 refollow 849
+010110100 followw 1171
+010110100 foll 1203
+010110100 fallow 1489
+010110100 folllow 1896
+010110100 folow 2016
+010110100 pardon 3658
+010110100 follow 721296
+010110100 followback 7358
+0101101010 -give 53
+0101101010 ilet 61
+0101101010 -tell 72
+0101101010 -let 110
+0101101010 let 427911
+0101101010 scuse 373
+0101101011 anoy 42
+0101101011 judqe 44
+0101101011 unbore 46
+0101101011 4giv 49
+0101101011 unlove 56
+0101101011 telllll 75
+0101101011 savee 88
+0101101011 decieve 88
+0101101011 tellll 104
+0101101011 dm-ed 114
+0101101011 killll 128
+0101101011 itell 147
+0101101011 harrass 211
+0101101011 itold 334
+0101101011 4give 499
+0101101011 disown 558
+0101101011 telll 675
+0101101011 enlighten 1115
+0101101011 irritate 1613
+0101101011 amaze 3766
+0101101011 annoy 7812
+0101101011 forgive 19756
+0101101011 remind 23934
+0101101011 tell 440158
+010110110 qhet 46
+010110110 gget 62
+010110110 gedd 65
+010110110 getttt 69
+010110110 gettt 177
+010110110 qett 195
+010110110 g3t 217
+010110110 gey 240
+010110110 ghet 240
+010110110 getchu 266
+010110110 geet 271
+010110110 gett 2263
+010110110 get 2384756
+010110110 qet 4406
+01011011100 descibe 43
+01011011100 ssee 45
+01011011100 decribe 49
+01011011100 show'em 81
+01011011100 discribe 109
+01011011100 findout 149
+01011011100 seeeee 655
+01011011100 seeee 998
+01011011100 seee 2786
+01011011100 see 1194648
+01011011100 describe 12503
+01011011101 see/ 41
+01011011101 see/read 44
+01011011101 hear/read 76
+01011011101 deduce 81
+01011011101 hearr 87
+01011011101 hear/see 115
+01011011101 overhear 206
+01011011101 hear 225716
+01011011101 see/hear 321
+0101101111000 puut 46
+0101101111000 thrw 100
+0101101111000 iput 140
+0101101111000 brang 275
+0101101111000 shove 3338
+0101101111000 put 326326
+0101101111000 throw 58222
+01011011110010 catchh 57
+01011011110010 geeet 59
+01011011110010 takeee 77
+01011011110010 writee 87
+01011011110010 slather 100
+01011011110010 bringg 108
+01011011110010 holdd 109
+01011011110010 -throws 150
+01011011110010 -puts 150
+01011011110010 -holds 169
+01011011110010 hld 231
+01011011110010 brinq 267
+01011011110010 fasten 286
+01011011110010 carry 23183
+01011011110010 hold 99114
+01011011110010 bring 149268
+01011011110011 take'em 44
+01011011110011 pulll 51
+01011011110011 turnn 83
+01011011110011 #turn 105
+01011011110011 trun 129
+01011011110011 logg 141
+01011011110011 gnaw 213
+01011011110011 revolve 984
+01011011110011 scrape 1243
+01011011110011 dig 18914
+01011011110011 fill 24960
+01011011110011 turn 130466
+01011011110011 pull 42781
+0101101111010 fynd 45
+0101101111010 fiind 108
+0101101111010 find 399350
+0101101111010 findd 234
+0101101111011 takke 41
+0101101111011 taake 62
+0101101111011 givem 70
+0101101111011 #take 111
+0101101111011 itake 114
+0101101111011 give'em 121
+0101101111011 -take 144
+0101101111011 takee 629
+0101101111011 take 611104
+0101101111011 tke 909
+010110111110 makea 40
+010110111110 meke 42
+010110111110 makr 43
+010110111110 amke 45
+010110111110 mak3 47
+010110111110 maek 53
+010110111110 makke 58
+010110111110 maake 84
+010110111110 makeee 97
+010110111110 -make 184
+010110111110 make 954992
+010110111110 makee 1000
+01011011111100 behoove 47
+01011011111100 giveee 52
+01011011111100 qivee 52
+01011011111100 giive 87
+01011011111100 mistreat 279
+01011011111100 givee 391
+01011011111100 gve 519
+01011011111100 qive 535
+01011011111100 betray 948
+01011011111100 tempt 1386
+01011011111100 giv 3223
+01011011111100 give 390800
+01011011111100 allow 23124
+01011011111101 -send 41
+01011011111101 giveme 46
+01011011111101 unmute 48
+01011011111101 ugot 48
+01011011111101 sned 50
+01011011111101 mkae 58
+01011011111101 unban 73
+01011011111101 send/receive 81
+01011011111101 sendd 93
+01011011111101 re-send 139
+01011011111101 brng 203
+01011011111101 re-add 261
+01011011111101 unblock 852
+01011011111101 resend 1102
+01011011111101 lend 3837
+01011011111101 add 103500
+01011011111101 send 156518
+01011011111110 see/meet 44
+01011011111110 congradulate 64
+01011011111110 meeet 164
+01011011111110 impersonate 222
+01011011111110 heckle 265
+01011011111110 impeach 559
+01011011111110 assassinate 571
+01011011111110 meet 156169
+01011011111110 congratulate 1828
+01011011111111 unfuck 40
+01011011111111 assasinate 40
+01011011111111 ensnare 41
+01011011111111 endear 41
+01011011111111 eviscerate 41
+01011011111111 acquaint 41
+01011011111111 horrify 42
+01011011111111 $ave 42
+01011011111111 disenfranchise 43
+01011011111111 marginalize 44
+01011011111111 vilify 44
+01011011111111 afflict 45
+01011011111111 reelect 45
+01011011111111 disassociate 45
+01011011111111 embarras 45
+01011011111111 vindicate 45
+01011011111111 endow 46
+01011011111111 mystify 46
+01011011111111 tranquilize 47
+01011011111111 extricate 49
+01011011111111 ravish 49
+01011011111111 de-friend 49
+01011011111111 unsettle 49
+01011011111111 impale 50
+01011011111111 unchain 51
+01011011111111 outwork 51
+01011011111111 circumcise 52
+01011011111111 perplex 53
+01011011111111 incriminate 53
+01011011111111 inundate 53
+01011011111111 recuse 56
+01011011111111 out-do 56
+01011011111111 hypnotise 57
+01011011111111 intoxicate 60
+01011011111111 disparage 60
+01011011111111 admonish 60
+01011011111111 traumatize 61
+01011011111111 sodomize 61
+01011011111111 delude 61
+01011011111111 sanctify 61
+01011011111111 terrorise 61
+01011011111111 objectify 64
+01011011111111 -save 65
+01011011111111 segregate 65
+01011011111111 implicate 66
+01011011111111 encase 68
+01011011111111 engulf 70
+01011011111111 repulse 71
+01011011111111 re-introduce 72
+01011011111111 befall 72
+01011011111111 dismember 73
+01011011111111 antagonize 74
+01011011111111 absolve 74
+01011011111111 consign 80
+01011011111111 demean 82
+01011011111111 launder 83
+01011011111111 indoctrinate 83
+01011011111111 regale 83
+01011011111111 convice 84
+01011011111111 coerce 85
+01011011111111 dissuade 88
+01011011111111 chastise 89
+01011011111111 enrage 89
+01011011111111 familiarize 90
+01011011111111 anoint 92
+01011011111111 pacify 93
+01011011111111 demote 93
+01011011111111 bludgeon 94
+01011011111111 electrocute 95
+01011011111111 preclude 97
+01011011111111 behead 103
+01011011111111 induct 105
+01011011111111 emancipate 108
+01011011111111 confound 108
+01011011111111 infuriate 109
+01011011111111 untag 109
+01011011111111 decapitate 109
+01011011111111 kidnapp 112
+01011011111111 imprison 115
+01011011111111 re-invent 116
+01011011111111 defriend 118
+01011011111111 resuscitate 120
+01011011111111 waterboard 122
+01011011111111 extort 125
+01011011111111 one-up 127
+01011011111111 startle 129
+01011011111111 persecute 130
+01011011111111 baptize 132
+01011011111111 castrate 132
+01011011111111 disqualify 133
+01011011111111 placate 134
+01011011111111 oppress 134
+01011011111111 upstage 135
+01011011111111 confine 142
+01011011111111 interrogate 143
+01011011111111 penalize 145
+01011011111111 re-elect 148
+01011011111111 berate 150
+01011011111111 maim 151
+01011011111111 arouse 154
+01011011111111 outlive 158
+01011011111111 astonish 162
+01011011111111 pummel 162
+01011011111111 reintroduce 167
+01011011111111 exalt 168
+01011011111111 douse 180
+01011011111111 paralyze 181
+01011011111111 annihilate 185
+01011011111111 elude 188
+01011011111111 enslave 193
+01011011111111 compel 204
+01011011111111 reimburse 212
+01011011111111 abduct 212
+01011011111111 endanger 213
+01011011111111 terrify 214
+01011011111111 burry 225
+01011011111111 impregnate 233
+01011011111111 outshine 236
+01011011111111 wean 244
+01011011111111 baffle 249
+01011011111111 outsmart 249
+01011011111111 trample 250
+01011011111111 discredit 251
+01011011111111 smite 254
+01011011111111 astound 254
+01011011111111 purify 257
+01011011111111 crucify 268
+01011011111111 immerse 268
+01011011111111 terrorize 280
+01011011111111 bombard 283
+01011011111111 outdo 286
+01011011111111 pester 292
+01011011111111 instruct 322
+01011011111111 aggravate 322
+01011011111111 deport 335
+01011011111111 belittle 336
+01011011111111 evict 337
+01011011111111 humiliate 338
+01011011111111 brainwash 340
+01011011111111 deprive 360
+01011011111111 degrade 365
+01011011111111 wreak 384
+01011011111111 embarass 384
+01011011111111 energize 391
+01011011111111 liberate 391
+01011011111111 isolate 398
+01011011111111 appease 411
+01011011111111 alienate 411
+01011011111111 molest 450
+01011011111111 frighten 451
+01011011111111 hypnotize 453
+01011011111111 smother 464
+01011011111111 reassure 492
+01011011111111 entice 511
+01011011111111 uplift 511
+01011011111111 contradict 517
+01011011111111 restrain 529
+01011011111111 undress 531
+01011011111111 frustrate 557
+01011011111111 deter 577
+01011011111111 overwhelm 578
+01011011111111 intimidate 613
+01011011111111 provoke 636
+01011011111111 injure 658
+01011011111111 exclude 670
+01011011111111 unfriend 676
+01011011111111 discourage 750
+01011011111111 reinvent 780
+01011011111111 infect 791
+01011011111111 befriend 796
+01011011111111 overtake 831
+01011011111111 harass 1034
+01011011111111 pamper 1062
+01011011111111 repay 1161
+01011011111111 strangle 1187
+01011011111111 notify 1209
+01011011111111 seduce 1241
+01011011111111 dismiss 1319
+01011011111111 empower 1375
+01011011111111 persuade 1376
+01011011111111 confront 1449
+01011011111111 accuse 1460
+01011011111111 accompany 1523
+01011011111111 slay 1537
+01011011111111 redeem 1537
+01011011111111 embarrass 1636
+01011011111111 amuse 1745
+01011011111111 punish 2138
+01011011111111 haunt 2399
+01011011111111 kidnap 2619
+01011011111111 offend 2746
+01011011111111 satisfy 2774
+01011011111111 distract 2883
+01011011111111 educate 2901
+01011011111111 motivate 3205
+01011011111111 expose 3328
+01011011111111 inform 3772
+01011011111111 surround 3975
+01011011111111 bury 3995
+01011011111111 stab 5129
+01011011111111 stalk 6285
+01011011111111 impress 6496
+01011011111111 defend 6528
+01011011111111 encourage 6528
+01011011111111 define 6781
+01011011111111 entertain 7317
+01011011111111 introduce 7418
+01011011111111 inspire 7840
+01011011111111 convince 9943
+01011011111111 destroy 10990
+01011011111111 hire 13891
+01011011111111 promote 19046
+01011011111111 protect 19203
+01011011111111 earn 21610
+01011011111111 marry 25688
+01011011111111 raise 25746
+01011011111111 teach 37441
+01011011111111 save 114416
+01011011111111 kill 107372
+0101110 be 3552300
+0101111000 dunwan 41
+0101111000 tryyyy 51
+0101111000 -try 53
+0101111000 #try 85
+0101111000 ulike 87
+0101111000 tryyy 119
+0101111000 smang 144
+0101111000 try 361698
+0101111000 tryy 339
+01011110010 twk 42
+01011110010 talkkkk 68
+01011110010 tlkk 73
+01011110010 tlak 74
+01011110010 pontificate 76
+01011110010 taalk 78
+01011110010 talke 98
+01011110010 tallk 108
+01011110010 talkkk 142
+01011110010 enquire 168
+01011110010 tlks 174
+01011110010 @mindlessbhavior's 235
+01011110010 talkk 590
+01011110010 inquire 607
+01011110010 tawk 680
+01011110010 reminisce 726
+01011110010 boast 942
+01011110010 talk 315980
+01011110010 tlk 7508
+01011110011 listern 40
+01011110011 lstn 41
+01011110011 contine 41
+01011110011 resubscribe 42
+01011110011 listent 46
+01011110011 acquiesce 47
+01011110011 allude 50
+01011110011 mini-hdmi 52
+01011110011 recommit 53
+01011110011 atempt 59
+01011110011 download/listen 64
+01011110011 70070 71
+01011110011 50555 72
+01011110011 lissen 73
+01011110011 85944 79
+01011110011 immigrate 80
+01011110011 subcribe 98
+01011110011 20222 106
+01011110011 haft 110
+01011110011 lisen 112
+01011110011 beable 114
+01011110011 watch/listen 117
+01011110011 listenn 118
+01011110011 listn 127
+01011110011 suscribe 129
+01011110011 emigrate 136
+01011110011 pander 154
+01011110011 501501 284
+01011110011 adhere 292
+01011110011 attest 327
+01011110011 listin 346
+01011110011 succumb 542
+01011110011 conform 559
+01011110011 90999 792
+01011110011 cling 1124
+01011110011 cater 1296
+01011110011 proceed 2307
+01011110011 cease 3387
+01011110011 contribute 4047
+01011110011 refer 6078
+01011110011 relate 7119
+01011110011 subscribe 9386
+01011110011 respond 18118
+01011110011 apply 19234
+01011110011 attempt 19584
+01011110011 listen 147677
+01011110011 continue 36058
+0101111010 goooooooooooooooo 44
+0101111010 q0 46
+0101111010 goooooooooooooo 67
+0101111010 gooooooooooooooo 68
+0101111010 finda 70
+0101111010 dowan 85
+0101111010 gooooooooooooo 98
+0101111010 goooooooooooo 121
+0101111010 gooooooooooo 175
+0101111010 qoo 237
+0101111010 goooooooooo 246
+0101111010 -go 258
+0101111010 gooooooooo 324
+0101111010 goooooooo 488
+0101111010 revert 738
+0101111010 g0 774
+0101111010 getta 788
+0101111010 gooooooo 832
+0101111010 goooooo 1309
+0101111010 gooooo 2214
+0101111010 goooo 3264
+0101111010 gooo 4072
+0101111010 go 1658021
+0101111010 qo 4134
+0101111011 comeeeeeee 40
+0101111011 coooome 44
+0101111011 -comes 45
+0101111011 put'em 46
+0101111011 cooome 56
+0101111011 gern 67
+0101111011 coem 69
+0101111011 coome 69
+0101111011 seeyou 99
+0101111011 -come 102
+0101111011 -jumps 109
+0101111011 2come 131
+0101111011 c0me 170
+0101111011 cumm 208
+0101111011 comeeee 290
+0101111011 comeee 496
+0101111011 kome 669
+0101111011 kum 1225
+0101111011 comee 1289
+0101111011 cme 1703
+0101111011 come 679626
+0101111011 cum 18886
+010111110 waaaaaait 42
+010111110 wair 44
+010111110 waittttttt 46
+010111110 waiitt 57
+010111110 waiiiiit 71
+010111110 #youwereonmygoodside 87
+010111110 waaaaait 97
+010111110 waitttttt 103
+010111110 waiiiit 113
+010111110 #ithoughtyoulookedgood 126
+010111110 waiiit 146
+010111110 wiat 172
+010111110 waaaait 184
+010111110 waait 187
+010111110 waaait 201
+010111110 waittttt 207
+010111110 waitttt 345
+010111110 waiit 385
+010111110 waittt 452
+010111110 waitt 757
+010111110 wait 443574
+010111110 w8 1102
+0101111110 elseeee 40
+0101111110 else's! 45
+0101111110 else- 72
+0101111110 elese 76
+0101111110 elseee 84
+0101111110 esle 223
+0101111110 else’s 284
+0101111110 elsee 292
+0101111110 eles 668
+0101111110 els 836
+0101111110 elses 2842
+0101111110 else 197163
+0101111110 else's 6971
+01011111110 happeneds 46
+01011111110 happenss 49
+01011111110 happen's 49
+01011111110 happenend 63
+01011111110 happenz 64
+01011111110 hpnd 71
+01011111110 happpened 74
+01011111110 hppnd 77
+01011111110 hapend 84
+01011111110 happenedd 84
+01011111110 happed 87
+01011111110 happene 95
+01011111110 happns 96
+01011111110 hapens 99
+01011111110 happended 103
+01011111110 transpired 108
+01011111110 hapened 123
+01011111110 happenes 130
+01011111110 happned 135
+01011111110 happenned 139
+01011111110 hapnd 166
+01011111110 happnd 300
+01011111110 happends 412
+01011111110 occured 713
+01011111110 occurs 1656
+01011111110 occurred 2269
+01011111110 happend 5246
+01011111110 happened 95495
+01011111110 happens 68299
+01011111111 happen- 43
+01011111111 appen 46
+01011111111 transpire 59
+01011111111 potate 70
+01011111111 hppn 71
+01011111111 hpn 74
+01011111111 happpen 92
+01011111111 happenn 93
+01011111111 hapn 114
+01011111111 happin 178
+01011111111 hapen 198
+01011111111 happn 302
+01011111111 entail 361
+01011111111 happen 113987
+01011111111 occur 2567
+011000000 /i'm 41
+011000000 ah'm 42
+011000000 //not 45
+011000000 i-i'm 70
+011000000 //i'm 78
+011000000 im 105
+011000000 i''m 234
+011000000 l'm 269
+011000000 #whyareyou 276
+011000000 a:i'm 314
+011000000 i\'m 484
+011000000 -i'm 568
+011000000 i`m 5245
+011000000 i´m 5600
+011000000 i'm 3043489
+011000000 i’m 26620
+011000001 iimm 41
+011000001 iym 42
+011000001 immmmmm 43
+011000001 ibee 43
+011000001 iiam 44
+011000001 i/m 44
+011000001 ii`m 46
+011000001 ikm 47
+011000001 /im 48
+011000001 istarted 49
+011000001 iiwas 49
+011000001 50
+011000001 -been 54
+011000001 #youhavesomenerve 61
+011000001 a̶̲̥̅♏ 76
+011000001 icame 78
+011000001 immmmm 79
+011000001 i*m 82
+011000001 laundry's 83
+011000001 #iregret 84
+011000001 #areyouseriously 87
+011000001 imnot 92
+011000001 iwass 112
+011000001 istay 115
+011000001 ihm 119
+011000001 i'z 122
+011000001 #tweetyourheight 128
+011000001 #i'm 145
+011000001 immmm 167
+011000001 #whatsworsethan 174
+011000001 iwasnt 180
+011000001 i'mm 184
+011000001 #igrewup 186
+011000001 #thesehoesbe 208
+011000001 ii'm 212
+011000001 i.m 291
+011000001 #currently 333
+011000001 dinner's 344
+011000001 ibeen 443
+011000001 immm 445
+011000001 -im 493
+011000001 ibe 549
+011000001 i'am 1511
+011000001 iim 2749
+011000001 iwas 3047
+011000001 imm 3322
+011000001 im 1011605
+011000001 iam 8605
+011000010 yo're 42
+011000010 a:you're 44
+011000010 you�re 44
+011000010 youre 55
+011000010 u´re 58
+011000010 youree 64
+011000010 -ur 69
+011000010 iqet 70
+011000010 you'e 82
+011000010 youare 99
+011000010 -you're 99
+011000010 yu're 106
+011000010 u’re 131
+011000010 you\'re 131
+011000010 your're 352
+011000010 your'e 483
+011000010 you`re 951
+011000010 you´re 961
+011000010 u're 8832
+011000010 you’re 14189
+011000010 you're 565435
+011000010 youre 26527
+0110000110 we\'re 52
+0110000110 #justinthanksfor 64
+0110000110 i�m 69
+0110000110 they´re 113
+0110000110 everything’s 127
+0110000110 the're 169
+0110000110 they`re 192
+0110000110 they'r 244
+0110000110 we`re 249
+0110000110 we´re 311
+0110000110 we'r 372
+0110000110 theyr 446
+0110000110 they’re 2870
+0110000110 we’re 5146
+0110000110 theyre 9811
+0110000110 they're 156381
+0110000110 we're 191565
+0110000111 -feeling 42
+0110000111 s/he's 44
+0110000111 she'z 49
+0110000111 she\'s 50
+0110000111 you'z 59
+0110000111 somethin's 69
+0110000111 he'z 71
+0110000111 -he's 78
+0110000111 shees 83
+0110000111 they's 85
+0110000111 somethins 87
+0110000111 something’s 91
+0110000111 he/she's 100
+0110000111 shess 134
+0110000111 nothins 138
+0110000111 no-one's 156
+0110000111 she´s 281
+0110000111 she`s 286
+0110000111 he´s 323
+0110000111 he`s 384
+0110000111 hez 441
+0110000111 shez 450
+0110000111 nothings 2331
+0110000111 she’s 2362
+0110000111 something's 2882
+0110000111 he’s 3361
+0110000111 shes 36393
+0110000111 hes 37201
+0110000111 she's 179788
+0110000111 he's 271252
+011000100 -there's 40
+011000100 u'z 42
+011000100 there\'s 44
+011000100 ihav 45
+011000100 payback's 46
+011000100 theress 57
+011000100 der's 59
+011000100 ihavee 69
+011000100 hajime 69
+011000100 uhave 70
+011000100 miep 71
+011000100 derz 81
+011000100 82
+011000100 therz 83
+011000100 dere's 99
+011000100 ther's 106
+011000100 thrs 197
+011000100 therez 211
+011000100 there´s 237
+011000100 thr's 241
+011000100 there`s 254
+011000100 karmas 337
+011000100 deres 374
+011000100 ders 533
+011000100 karma's 557
+011000100 thers 632
+011000100 there're 702
+011000100 ihave 1704
+011000100 there’s 5284
+011000100 there's 201633
+011000100 theres 35813
+0110001010 itsx 41
+0110001010 ehts 42
+0110001010 shz 42
+0110001010 itzz 43
+0110001010 trouble's 43
+0110001010 igott 46
+0110001010 easter's 47
+0110001010 tomarrows 47
+0110001010 it$ 54
+0110001010 iitsz 57
+0110001010 i't 58
+0110001010 insomnia's 60
+0110001010 it'ss 67
+0110001010 iitz 67
+0110001010 #it's 69
+0110001010 vacation's 70
+0110001010 ifelt 77
+0110001010 -insert 78
+0110001010 iit's 80
+0110001010 iys 81
+0110001010 forever's 81
+0110001010 sleep's 92
+0110001010 itssss 102
+0110001010 itx 102
+0110001010 traffic's 113
+0110001010 everyday's 116
+0110001010 itwas 117
+0110001010 halloween's 128
+0110001010 itts 145
+0110001010 iqot 146
+0110001010 itsa 164
+0110001010 it'z 170
+0110001010 stuff's 191
+0110001010 ilook 234
+0110001010 anythings 279
+0110001010 ihts 326
+0110001010 -its 348
+0110001010 itsss 353
+0110001010 itsz 477
+0110001010 work's 622
+0110001010 iits 625
+0110001010 ifeel 1039
+0110001010 shit's 1254
+0110001010 igot 1833
+0110001010 itss 1864
+0110001010 everythings 2985
+0110001010 lifes 4712
+0110001010 itz 6323
+0110001010 tis 9653
+0110001010 its 1131862
+0110001010 life's 10400
+0110001011 ocnl 40
+0110001011 //it's 41
+0110001011 it'sa 45
+0110001011 itâs 46
+0110001011 #edhardyis 53
+0110001011 s'not 60
+0110001011 nothing’s 71
+0110001011 failure's 72
+0110001011 its's 95
+0110001011 a:it's 104
+0110001011 it'a 111
+0110001011 it''s 125
+0110001011 it�s 129
+0110001011 #2011was 129
+0110001011 mnly 150
+0110001011 t'is 167
+0110001011 its 203
+0110001011 #2010was 254
+0110001011 anything's 323
+0110001011 -it's 440
+0110001011 it\'s 443
+0110001011 i'ts 445
+0110001011 t'was 535
+0110001011 it`s 2259
+0110001011 mine's 2325
+0110001011 nothing's 2471
+0110001011 it´s 2820
+0110001011 twas 3739
+0110001011 everything's 5017
+0110001011 it's 1564683
+0110001011 it’s 30324
+011000110 #that's 40
+011000110 thsts 41
+011000110 that'a 42
+011000110 thaaaats 42
+011000110 dahts 43
+011000110 thtas 43
+011000110 //that's 44
+011000110 dahs 45
+011000110 twaz 45
+011000110 dasss 46
+011000110 thatssss 47
+011000110 thatsa 49
+011000110 datts 54
+011000110 dhatss 55
+011000110 thaaats 66
+011000110 dhts 68
+011000110 tha'ts 68
+011000110 dhass 68
+011000110 dhatz 70
+011000110 dtz 71
+011000110 thats's 71
+011000110 that\'s 80
+011000110 tahts 84
+011000110 thaas 85
+011000110 dhas 86
+011000110 a:that's 87
+011000110 -feels 90
+011000110 thisis 91
+011000110 #twitteris 95
+011000110 thatts 98
+011000110 thtss 99
+011000110 datss 102
+011000110 datsz 106
+011000110 thasss 108
+011000110 #thats 121
+011000110 thast 131
+011000110 thays 133
+011000110 -thats 135
+011000110 thatsz 137
+011000110 tha's 168
+011000110 thatsss 188
+011000110 -that's 205
+011000110 thaz 212
+011000110 thaats 280
+011000110 this's 298
+011000110 thtz 300
+011000110 tht's 560
+011000110 dat's 614
+011000110 dhats 648
+011000110 that`s 753
+011000110 dass 804
+011000110 thatss 889
+011000110 that´s 932
+011000110 thatz 1361
+011000110 thass 1628
+011000110 datz 2045
+011000110 das 5746
+011000110 that’s 6697
+011000110 thas 7231
+011000110 thts 13896
+011000110 dats 26815
+011000110 thats 254555
+011000110 that's 667387
+0110001110 sumthins 40
+0110001110 wotz 40
+0110001110 whazz 41
+0110001110 whut's 43
+0110001110 what'z 43
+0110001110 wt's 44
+0110001110 warris 49
+0110001110 whutz 53
+0110001110 #whats 56
+0110001110 whatsz 56
+0110001110 whaaats 60
+0110001110 whatssss 61
+0110001110 whast 63
+0110001110 -what's 68
+0110001110 -whats 71
+0110001110 whatts 73
+0110001110 wtz 74
+0110001110 whuz 75
+0110001110 wha's 79
+0110001110 wut's 82
+0110001110 what\'s 83
+0110001110 wot's 97
+0110001110 whuss 112
+0110001110 127
+0110001110 watsz 133
+0110001110 whaats 137
+0110001110 whatsss 138
+0110001110 whaz 145
+0110001110 wtf's 150
+0110001110 whus 160
+0110001110 whtz 163
+0110001110 wahs 163
+0110001110 watss 167
+0110001110 wahts 174
+0110001110 wazz 285
+0110001110 whuts 292
+0110001110 whass 305
+0110001110 wutz 331
+0110001110 whatever's 353
+0110001110 what`s 364
+0110001110 wht's 367
+0110001110 s'all 410
+0110001110 what´s 467
+0110001110 whatss 490
+0110001110 wat's 771
+0110001110 wots 873
+0110001110 whatz 957
+0110001110 whas 1428
+0110001110 watz 1835
+0110001110 wuts 2837
+0110001110 whts 3579
+0110001110 what’s 5646
+0110001110 wats 38421
+0110001110 what's 265585
+0110001110 whats 112527
+0110001111 watchaa 40
+0110001111 thanks4 42
+0110001111 howya 45
+0110001111 watchya 47
+0110001111 who'se 49
+0110001111 wotcha 51
+0110001111 who'z 52
+0110001111 -moves 52
+0110001111 whatca 53
+0110001111 wutcha 56
+0110001111 what'chu 59
+0110001111 whatchaa 63
+0110001111 #whyyomama 73
+0110001111 whatchall 75
+0110001111 #whythemanonyourjordans 76
+0110001111 whoss 80
+0110001111 no1's 82
+0110001111 #whyyopolo 88
+0110001111 wacha 91
+0110001111 nothin's 92
+0110001111 #thatsyouhuh 92
+0110001111 #mybiggestfearis 92
+0110001111 whoes 106
+0110001111 noone's 114
+0110001111 wachu 115
+0110001111 whtchu 116
+0110001111 hu's 116
+0110001111 no1s 118
+0110001111 whacha 121
+0110001111 #whyyouinchurch 125
+0110001111 /is 127
+0110001111 whatya 128
+0110001111 whatchuu 133
+0110001111 nobody’s 135
+0110001111 whatchya 135
+0110001111 watchuu 137
+0110001111 #theresnoexcusefor 143
+0110001111 -starts 146
+0110001111 who´s 149
+0110001111 whatchoo 150
+0110001111 whachu 153
+0110001111 we's 163
+0110001111 wutchu 171
+0110001111 who`s 176
+0110001111 #areyoureallystill 183
+0110001111 #its2012whyyoustill 198
+0110001111 what'cha 204
+0110001111 whoevers 210
+0110001111 them's 241
+0110001111 -gets 267
+0110001111 noones 320
+0110001111 whoever's 358
+0110001111 whoz 364
+0110001111 #its2010whyyoustill 429
+0110001111 nobodys 1250
+0110001111 watcha 1335
+0110001111 who’s 1824
+0110001111 watchu 2976
+0110001111 whatchu 3200
+0110001111 nobody's 4498
+0110001111 whatcha 5204
+0110001111 whos 15070
+0110001111 who's 92779
+0110001111 whose 20906
+0110010000 feeeels 43
+0110010000 #quitacting 53
+0110010000 lookss 73
+0110010000 loox 73
+0110010000 lookes 75
+0110010000 shawty's 112
+0110010000 loks 121
+0110010000 feel's 133
+0110010000 feeels 148
+0110010000 look's 207
+0110010000 lookz 214
+0110010000 loooks 251
+0110010000 luks 406
+0110010000 tastes 13079
+0110010000 smells 25593
+0110010000 looks 278368
+0110010000 feels 103554
+0110010001 sonds 40
+0110010001 looks/sounds 43
+0110010001 souds 44
+0110010001 -sounds 66
+0110010001 souns 68
+0110010001 snds 72
+0110010001 soundss 122
+0110010001 sound's 163
+0110010001 soundz 285
+0110010001 sounds 174680
+0110010001 sounded 11375
+0110010010 -feel 41
+0110010010 feeeeeeel 52
+0110010010 f33l 52
+0110010010 #feel 72
+0110010010 feeeeeel 91
+0110010010 feal 110
+0110010010 feell 153
+0110010010 feeeeel 171
+0110010010 feelz 241
+0110010010 feeeel 263
+0110010010 feel 563338
+0110010010 feeel 1054
+01100100110 llook 40
+01100100110 llok 42
+01100100110 -glares 44
+01100100110 looooook 45
+01100100110 luuk 52
+01100100110 lo0k 57
+01100100110 -stares 57
+01100100110 lqqk 58
+01100100110 #hoteldeals 67
+01100100110 lokk 79
+01100100110 loooook 88
+01100100110 -look 92
+01100100110 lookk 115
+01100100110 l00k 134
+01100100110 looke 148
+01100100110 #throwagrenade 155
+01100100110 163
+01100100110 looook 188
+01100100110 loook 830
+01100100110 -looks 882
+01100100110 luk 1542
+01100100110 look 559610
+01100100110 stare 11461
+011001001110 feeliing 41
+011001001110 feeeelin 44
+011001001110 fealing 46
+011001001110 feeeeeling 46
+011001001110 feelig 47
+011001001110 feeeeling 56
+011001001110 smelln 62
+011001001110 feling 64
+011001001110 #feeling 72
+011001001110 feeliin 75
+011001001110 feelinn 86
+011001001110 feelng 88
+011001001110 feelinqq 90
+011001001110 feelling 115
+011001001110 feeing 123
+011001001110 feeelin 139
+011001001110 feelingg 146
+011001001110 fellin 168
+011001001110 feel'n 176
+011001001110 feeeling 323
+011001001110 feelinq 480
+011001001110 seeming 584
+011001001110 soundin 619
+011001001110 felling 923
+011001001110 weather's 997
+011001001110 smellin 1272
+011001001110 feeln 1390
+011001001110 smelling 5394
+011001001110 sounding 6037
+011001001110 feeling 221607
+011001001110 feelin 29553
+0110010011110 look/feel 51
+0110010011110 fels 53
+0110010011110 sond 67
+0110010011110 smel 82
+0110010011110 smelll 84
+0110010011110 soundd 89
+0110010011110 feek 103
+0110010011110 tast 192
+0110010011110 reek 530
+0110010011110 weathers 962
+0110010011110 taste 47901
+0110010011110 sound 112857
+0110010011110 smell 51182
+0110010011111 actting 45
+0110010011111 aktin 50
+0110010011111 act'n 55
+0110010011111 acking 57
+0110010011111 actingg 67
+0110010011111 actinn 85
+0110010011111 akt 89
+0110010011111 unlady 90
+0110010011111 ackin 124
+0110010011111 actinq 139
+0110010011111 quacks 230
+0110010011111 #wegotogether 264
+0110010011111 typ3 311
+0110010011111 dressin 529
+0110010011111 actn 585
+0110010011111 behaving 1590
+0110010011111 shaped 5231
+0110010011111 actin 7241
+0110010011111 acts 10938
+0110010011111 act 79670
+0110010011111 acting 33510
+011001010 ammmmm 61
+011001010 was/am 81
+011001010 ammmm 154
+011001010 ammm 334
+011001010 am 1075945
+011001010 amm 730
+0110010110 wassssss 44
+0110010110 wouldbe 48
+0110010110 wasx 52
+0110010110 wasd 53
+0110010110 -is- 56
+0110010110 wa$ 59
+0110010110 waaas 67
+0110010110 wwas 78
+0110010110 was- 79
+0110010110 wsa 92
+0110010110 wasssss 95
+0110010110 willbe 113
+0110010110 wuzz 187
+0110010110 wasa 197
+0110010110 wos 215
+0110010110 wassss 216
+0110010110 wasz 401
+0110010110 waas 484
+0110010110 wasss 696
+0110010110 wz 934
+0110010110 wus 1887
+0110010110 waz 3997
+0110010110 wass 5692
+0110010110 wuz 5703
+0110010110 was 2568926
+0110010110 ws 5778
+0110010111 shouldbe 43
+0110010111 wasen't 51
+0110010111 was't 52
+0110010111 wusnt 56
+0110010111 wassnt 62
+0110010111 wanst 64
+0110010111 wasntt 84
+0110010111 wasn´t 84
+0110010111 waznt 101
+0110010111 wasn`t 136
+0110010111 was'nt 142
+0110010111 wuznt 147
+0110010111 wsnt 225
+0110010111 wasent 445
+0110010111 wasn 492
+0110010111 wasn’t 1397
+0110010111 wasn't 120303
+0110010111 wasnt 29989
+011001100 52
+011001100 -she's 61
+011001100 iiss 65
+011001100 ìs 66
+011001100 isnot 68
+011001100 is/are 69
+011001100 bad's 70
+011001100 /is/ 74
+011001100 -was 101
+011001100 iisz 109
+011001100 isx 114
+011001100 iiz 114
+011001100 _is_ 116
+011001100 i$ 149
+011001100 s/b 205
+011001100 is/was 395
+011001100 izz 407
+011001100 was/is 508
+011001100 constitutes 513
+011001100 -is 544
+011001100 isz 706
+011001100 iis 2206
+011001100 ;s 5215
+011001100 is 7818833
+011001100 iz 10785
+011001101 doeth 48
+011001101 harmonizes 54
+011001101 iznt 59
+011001101 is't 74
+011001101 isint 166
+011001101 isent 172
+011001101 isn`t 200
+011001101 is'nt 212
+011001101 isn´t 265
+011001101 -not 502
+011001101 isn’t 4249
+011001101 isn't 181748
+011001101 isnt 32103
+011001110 areeeeee 53
+011001110 that're 66
+011001110 areeeee 87
+011001110 are/were 110
+011001110 aare 116
+011001110 were/are 146
+011001110 areeee 217
+011001110 who're 425
+011001110 areee 460
+011001110 are 2759733
+011001110 aree 1980
+0110011110 3x15 40
+0110011110 were'nt 60
+0110011110 aren´t 83
+0110011110 are'nt 87
+0110011110 aren`t 91
+0110011110 rn't 101
+0110011110 wern't 180
+0110011110 aren't! 216
+0110011110 weren’t 373
+0110011110 arn't 502
+0110011110 arnt 1550
+0110011110 aren’t 1810
+0110011110 werent 3606
+0110011110 arent 12518
+0110011110 aren't 78664
+0110011110 weren't 23485
+0110011111 #mustbe 40
+0110011111 weere 45
+0110011111 werre 49
+0110011111 arer 60
+0110011111 weren't! 66
+0110011111 are- 154
+0110011111 £$1500 156
+0110011111 weree 236
+0110011111 were 495792
+0110011111 wernt 666
+011010000 vut 40
+011010000 buutt 43
+011010000 buhd 47
+011010000 #avivacf 50
+011010000 bhudd 51
+011010000 buhtt 59
+011010000 bhu 66
+011010000 buuh 72
+011010000 bhutt 79
+011010000 buit 86
+011010000 seislnd 88
+011010000 6ut 94
+011010000 buuuuuut 98
+011010000 bbut 98
+011010000 anndd 114
+011010000 /and 117
+011010000 altough 143
+011010000 buuuuut 219
+011010000 -but 467
+011010000 buuuut 493
+011010000 bhut 515
+011010000 buuut 661
+011010000 buut 735
+011010000 buht 789
+011010000 buhh 1415
+011010000 pero 2850
+011010000 buh 6947
+011010000 but 2806914
+011010000 bt 24942
+0110100010 nexttime 42
+0110100010 giggles- 44
+0110100010 theeeen 46
+0110100010 supporthyunjoongpetition 56
+0110100010 jerry's! 58
+0110100010 theeen 61
+0110100010 nods- 63
+0110100010 thence 64
+0110100010 /or 73
+0110100010 laughs- 75
+0110100010 thennnnn 82
+0110100010 theb 83
+0110100010 tehn 91
+0110100010 ferb's 109
+0110100010 -then 114
+0110100010 then- 121
+0110100010 smiles- 159
+0110100010 thennnn 162
+0110100010 theen 217
+0110100010 dhen 354
+0110100010 thennn 355
+0110100010 thereby 392
+0110100010 thenn 1219
+0110100010 then 852413
+0110100010 thn 4562
+011010001100 #youknowyouintheghetto 40
+011010001100 #thankyouchrisbrown 41
+011010001100 #bodyart 41
+011010001100 #akwardmoment 42
+011010001100 #uknowyourlatino 43
+011010001100 #bcu08 44
+011010001100 #makesmemad 44
+011010001100 #youknowyouugly 45
+011010001100 #youknowyouhigh 45
+011010001100 espeically 48
+011010001100 -remember 51
+011010001100 #thatminiheartattack 51
+011010001100 51
+011010001100 esspecially 52
+011010001100 hogy 52
+011010001100 #isaywow 53
+011010001100 excpt 55
+011010001100 #youknowuasideline 55
+011010001100 ecspecially 57
+011010001100 #uknowughetto 58
+011010001100 #thatawkardmoment 59
+011010001100 #youknewshewascrazy 59
+011010001100 #thatawesomemoment 60
+011010001100 #uknowurbreathstink 61
+011010001100 #youknowtheystalkingyou 62
+011010001100 64
+011010001100 #youknowurescrewed 64
+011010001100 #uknowyourexislosing 64
+011010001100 #youknowitsgoodsex 66
+011010001100 #youknowilikeyou 71
+011010001100 -made 71
+011010001100 excpet 71
+011010001100 f)ight 71
+011010001100 #doyouhateit 74
+011010001100 espicially 74
+011010001100 exspecially 77
+011010001100 ipray 77
+011010001100 #youknowyoufromthesouth 79
+011010001100 #youkilledthemood 82
+011010001100 #youknowusprung 82
+011010001100 #uknowufrombrooklyn 84
+011010001100 execpt 85
+011010001100 #uknowurajumpoff 86
+011010001100 #youknowyousprung 87
+011010001100 #youknowiloveyou 87
+011010001100 #uknowufromla 88
+011010001100 hense 88
+011010001100 #whoremember 90
+011010001100 #uknowtimesarehard 91
+011010001100 especailly 92
+011010001100 93
+011010001100 #thatawkmoment 93
+011010001100 #thefeelingyouget 99
+011010001100 #youknowuwinning 100
+011010001100 #knewshewasagroupie 100
+011010001100 #youknowursexgood 102
+011010001100 #ihatethatfeeling 105
+011010001100 #thatdepressingmoment 106
+011010001100 espcially 107
+011010001100 #itsakpopthing 108
+011010001100 #doyouremember 110
+011010001100 #iknewitwaslove 110
+011010001100 #youknowthesexgood 111
+011010001100 espesh 114
+011010001100 #thatannoyingfeeling 114
+011010001100 #youknowtheycheating 115
+011010001100 #sexisgreat 120
+011010001100 #uknowurathug 125
+011010001100 #statefarmwasntthere 126
+011010001100 #dontbeshocked 128
+011010001100 #uknowuhood 129
+011010001100 #uknowufromchicago 132
+011010001100 bsides 134
+011010001100 ihatee 134
+011010001100 #uknowuugly 135
+011010001100 #funnymartinmoment 138
+011010001100 usingtwitter 141
+011010001100 #wakemeup 143
+011010001100 specialy 144
+011010001100 preferrably 145
+011010001100 #thatmoment 145
+011010001100 #uknowuneedlotion 159
+011010001100 #itmakesmemad 163
+011010001100 saith 165
+011010001100 #sexisbetter 184
+011010001100 #uknowitsarecession 189
+011010001100 #dontuhate 192
+011010001100 iremember 194
+011010001100 #uknowubroke 195
+011010001100 #uknowurhigh 206
+011010001100 #iswearithurts 207
+011010001100 #thatakwardmoment 208
+011010001100 #itsucks 209
+011010001100 211
+011010001100 espec 222
+011010001100 #itreallymakesmemad 227
+011010001100 expecially 230
+011010001100 #youknowyoughetto 243
+011010001100 #whatdoyoudo 249
+011010001100 #youlostmyrespect 258
+011010001100 espically 261
+011010001100 especialy 262
+011010001100 #thathighmoment 283
+011010001100 #theawkwardmoment 288
+011010001100 xcept 299
+011010001100 #youknowyouinlove 309
+011010001100 #rememberbackndaday 311
+011010001100 #itslove 316
+011010001100 #youknowyourfat 318
+011010001100 exept 319
+011010001100 #itkillsme 367
+011010001100 #awkwardmoment 377
+011010001100 e.g 383
+011010001100 #itsreallyannoying 418
+011010001100 namely 519
+011010001100 #sexisbest 550
+011010001100 #youremember 581
+011010001100 691
+011010001100 i.e 747
+011010001100 #thingsihate 893
+011010001100 #dontyouhate 933
+011010001100 #iremember 1011
+011010001100 1083
+011010001100 whereas 1313
+011010001100 ihate 1505
+011010001100 albeit 1511
+011010001100 #ihate 1732
+011010001100 excluding 1904
+011010001100 formerly 1937
+011010001100 cept 2017
+011010001100 2265
+011010001100 e.g. 2822
+011010001100 #thatawkwardmoment 3158
+011010001100 preferably 3301
+011010001100 specially 4058
+011010001100 i.e. 4780
+011010001100 hence 5970
+011010001100 unlike 8819
+011010001100 esp 12813
+011010001100 besides 21128
+011010001100 including 28458
+011010001100 especially 64158
+011010001100 except 49133
+0110100011010 #ushouldnevertrust 40
+0110100011010 gimmme 41
+0110100011010 #agirljustwants 42
+0110100011010 #twitterhastaughtme 44
+0110100011010 here\'s 46
+0110100011010 #tebowgottradedfor 46
+0110100011010 #a90sbabyknows 46
+0110100011010 #ghettovdaygifts 47
+0110100011010 #realwomenwant 47
+0110100011010 revibe 47
+0110100011010 48
+0110100011010 jealousy's 53
+0110100011010 #whatsidechicksget4xmas 53
+0110100011010 collegetaughtme 55
+0110100011010 #agirldeserves 56
+0110100011010 hre's 59
+0110100011010 here´s 59
+0110100011010 #twerkfor 60
+0110100011010 #iwishihad 61
+0110100011010 #thingsiwantthemost 61
+0110100011010 here`s 63
+0110100011010 #twitterislike 66
+0110100011010 67
+0110100011010 #ivealwayswanted 67
+0110100011010 #whatssexwithout 67
+0110100011010 70
+0110100011010 #allgirlswantis 74
+0110100011010 #thingsthatineed 79
+0110100011010 #thingsthatiwant 80
+0110100011010 #icouldneverdate 82
+0110100011010 #newyorkis 84
+0110100011010 #somewhereintheghetto 90
+0110100011010 #mcnabbwastradedfor 91
+0110100011010 -need 99
+0110100011010 gimmee 102
+0110100011010 #ireallywant 105
+0110100011010 #iwanttobe 106
+0110100011010 #iwishyouknew 106
+0110100011010 #youshouldnevertrust 108
+0110100011010 108
+0110100011010 #ineed 111
+0110100011010 #everybodyhas 113
+0110100011010 ilost 114
+0110100011010 #stopbraggingabout 117
+0110100011010 gime 119
+0110100011010 #ibetyouneverseen 121
+0110100011010 #givemeareason 123
+0110100011010 gimmi 125
+0110100011010 #mjis 132
+0110100011010 -got 141
+0110100011010 #thingswomenwant 141
+0110100011010 -raises 142
+0110100011010 #weallneed 145
+0110100011010 usem 151
+0110100011010 #iwoulddoanythingfor 154
+0110100011010 154
+0110100011010 #youevernotice 167
+0110100011010 #youcanttrust 169
+0110100011010 236
+0110100011010 #dontcallyourself 243
+0110100011010 #inschooltheresalways 252
+0110100011010 -takes 267
+0110100011010 #iwannabe 272
+0110100011010 #alliwantis 295
+0110100011010 #18thingsiwant 337
+0110100011010 #iwant 343
+0110100011010 where’s 445
+0110100011010 #somewhererightnow 546
+0110100011010 sigan 718
+0110100011010 935
+0110100011010 now's 936
+0110100011010 iwant 1659
+0110100011010 gimmie 1756
+0110100011010 ineed 2124
+0110100011010 #nevertrust 2865
+0110100011010 here’s 3215
+0110100011010 #mentionto 3332
+0110100011010 heres 6055
+0110100011010 here's 69170
+0110100011010 gimme 12789
+0110100011011 //love 40
+0110100011011 how´s 40
+0110100011011 -hears 41
+0110100011011 whatabout 41
+0110100011011 //is 43
+0110100011011 where´s 43
+0110100011011 how'z 44
+0110100011011 -licks 44
+0110100011011 iloveeee 44
+0110100011011 -slaps 44
+0110100011011 owz 45
+0110100011011 #imgrateful4 45
+0110100011011 -sees 46
+0110100011011 -closes 47
+0110100011011 -pushes 51
+0110100011011 how`s 52
+0110100011011 iilove 52
+0110100011011 -kicks 53
+0110100011011 1-not 53
+0110100011011 wherz 53
+0110100011011 -eats 54
+0110100011011 whr's 55
+0110100011011 preshate 57
+0110100011011 where`s 58
+0110100011011 smh@ 61
+0110100011011 wheress 62
+0110100011011 -pats 65
+0110100011011 ppreciate 66
+0110100011011 -opens 67
+0110100011011 iloved 67
+0110100011011 69
+0110100011011 #gottagivepropsto 71
+0110100011011 howay 72
+0110100011011 -wraps 75
+0110100011011 -winnie 79
+0110100011011 ilikee 79
+0110100011011 -watches 82
+0110100011011 -rubs 91
+0110100011011 94
+0110100011011 whrs 95
+0110100011011 iloveee 101
+0110100011011 -bites 103
+0110100011011 (in 103
+0110100011011 #dbi 106
+0110100011011 111
+0110100011011 were's 118
+0110100011011 whers 124
+0110100011011 wherez 124
+0110100011011 wers 130
+0110100011011 -pokes 135
+0110100011011 -grabs 138
+0110100011011 153
+0110100011011 quoth 158
+0110100011011 #anybodyseen 160
+0110100011011 imissed 177
+0110100011011 how’s 190
+0110100011011 #shoutoutto 227
+0110100011011 hwz 265
+0110100011011 -shakes 286
+0110100011011 wens 299
+0110100011011 #iamthankfulfor 328
+0110100011011 weres 429
+0110100011011 -kisses 459
+0110100011011 ilovee 503
+0110100011011 #twittertime 595
+0110100011011 hws 599
+0110100011011 #twalue 799
+0110100011011 #imthankfulfor 863
+0110100011011 howz 940
+0110100011011 whys 1029
+0110100011011 imiss 1168
+0110100011011 1972
+0110100011011 why's 2235
+0110100011011 whens 2578
+0110100011011 preciate 2901
+0110100011011 ilove 4121
+0110100011011 when's 4520
+0110100011011 wheres 7760
+0110100011011 hows 15425
+0110100011011 where's 34315
+0110100011011 how's 38457
+011010001110 -cause 40
+011010001110 #pornpetpeeves 40
+011010001110 #dearfutureboyfriend 40
+011010001110 #ifthecondombreaks 40
+011010001110 #thosedayswhen 40
+011010001110 #textmessagesfromastalker 40
+011010001110 #thingsthatturnmeon 40
+011010001110 #tweetlikeanigga 40
+011010001110 #onethingihate 40
+011010001110 #stlrules 40
+011010001110 #sorryselena 40
+011010001110 sometymes 40
+011010001110 #ohyoudidntknow 40
+011010001110 #youknowyourea90skidif 40
+011010001110 #uknowwhat 41
+011010001110 #ilikewhen 41
+011010001110 #reasonsyoucantfindaman 41
+011010001110 #inaghettohousehold 41
+011010001110 #beforewegetmarried 41
+011010001110 #excusestodrink 41
+011010001110 #becauseofjustinbieber 42
+011010001110 #dumphisassif 42
+011010001110 #106sucksbecause 42
+011010001110 #bootycallrules 42
+011010001110 #iaintgonelie 42
+011010001110 #dearmom 42
+011010001110 #topliespeopletell 42
+011010001110 #ombretweetif 42
+011010001110 #truthfully 42
+011010001110 #lasttimeihadsex 42
+011010001110 #iwouldntmind 42
+011010001110 #saturdaynightconfessions 42
+011010001110 #dontthinkjustbecause 42
+011010001110 #asagirlfriend 43
+011010001110 #liesmentellwomen 43
+011010001110 #thingsaboutme 43
+011010001110 #musicwasbestwhen 43
+011010001110 #mymomwouldbeatmyassif 43
+011010001110 #duringsexihatewhen 43
+011010001110 #thingsidonthavetimefor 43
+011010001110 #reasonsiloveyou 44
+011010001110 #signsshesahoe 44
+011010001110 #freakyfacts 44
+011010001110 #icantbelieve 44
+011010001110 #ruleswhenhavinsex 44
+011010001110 #ihateschoolbecause 44
+011010001110 #thefuckyoumean 44
+011010001110 #whenigetdrunk 44
+011010001110 #4famouswords 44
+011010001110 #ifiwonthemegamillions 44
+011010001110 #imsotiredof 44
+011010001110 #note2males 44
+011010001110 #ialwayswish 45
+011010001110 #tomyfuturewife 45
+011010001110 #igetmadwhen 45
+011010001110 #okjokesover 45
+011010001110 #ifihadthreewishes 45
+011010001110 #letsbeblunt 45
+011010001110 #ijustwannasay 45
+011010001110 #relationship101 45
+011010001110 #in2012 45
+011010001110 #whenigoto7eleven 46
+011010001110 #collegeconfessions 46
+011010001110 #bitchsowhat 46
+011010001110 #idontknowwhy 46
+011010001110 #becauseofjonas 46
+011010001110 #iamagrownup 46
+011010001110 #ivenoticedthat 46
+011010001110 #1sttimeigothigh 46
+011010001110 #dearmama 46
+011010001110 #justcause 46
+011010001110 #signsyoursonmightbegay 46
+011010001110 #asaboyfriend 46
+011010001110 #alwaysremember 46
+011010001110 #dear14yearoldself 46
+011010001110 #10thingsihateaboutyou 47
+011010001110 #yomommasofat 47
+011010001110 #secondaryschoolconfessions 47
+011010001110 #awkwardmomentwhen 47
+011010001110 #dearfreshmen 47
+011010001110 #20factaboutme 47
+011010001110 2things 47
+011010001110 #thingsimscaredof 48
+011010001110 #thesexsogood 48
+011010001110 #majorturnoffwhen 48
+011010001110 #womanlaw 48
+011010001110 #sometimesigetsickof 48
+011010001110 #soyoureallythink 48
+011010001110 #webelongtogether 48
+011010001110 #tellthetruthtuesday 48
+011010001110 sometyms 49
+011010001110 #ifiwaspresident 49
+011010001110 #ialwayswonderif 49
+011010001110 #insouthafrica 49
+011010001110 #in2009 49
+011010001110 #ifyouweremine 49
+011010001110 #1thingaboutmyself 49
+011010001110 #yeaulookgoodbut 49
+011010001110 #wheniwakeup 49
+011010001110 #worstlie 49
+011010001110 #fuckedupthingstosayaftersex 49
+011010001110 #letsgetonethingstraight 49
+011010001110 #ifiwereaboy 50
+011010001110 #twitterconfession 50
+011010001110 #idislikeitwhen 50
+011010001110 #ifitwasntfortwitter 50
+011010001110 #ifwomendidnotexist 50
+011010001110 #lameclaimtofame 50
+011010001110 #ruleswhenhavingsex 50
+011010001110 #atayoungage 50
+011010001110 #breakuplines 50
+011010001110 #backinthedays 50
+011010001110 #womenlawviolation 51
+011010001110 #secretly 51
+011010001110 #itssohot 51
+011010001110 #thetruthis 51
+011010001110 #thingsihateinthemorning 51
+011010001110 magine 51
+011010001110 #ijustloveitwhen 52
+011010001110 #9timesoutta10 52
+011010001110 #whenithinkaboutoomf 52
+011010001110 iwishh 52
+011010001110 (∫˘▽˘) 52
+011010001110 #tipsforladies 52
+011010001110 #godmakesnomistakes 52
+011010001110 #confessiontweet 52
+011010001110 #youknowwhat 52
+011010001110 #liesblackgirlstell 53
+011010001110 #myfears 53
+011010001110 #itaintmyfault 53
+011010001110 #ifiwinthelottery 53
+011010001110 #idonthavetimefor 53
+011010001110 #trueorfalse 53
+011010001110 #atablackpersonfuneral 53
+011010001110 #dontgiveupbecause 53
+011010001110 #sinceeverybodylyin 53
+011010001110 #icantfront 54
+011010001110 #trueconfessions 54
+011010001110 #thingsyoudontsaybeforesex 54
+011010001110 #ifyouaresingle 54
+011010001110 #diduknow 54
+011010001110 somethimes 54
+011010001110 #mybiggestflaw 55
+011010001110 #guysshouldknow 55
+011010001110 #iusedtolikeyoubut 55
+011010001110 #whenithinkofyou 55
+011010001110 #immadbecause 55
+011010001110 everytym 55
+011010001110 #whenifirstjoinedtwitter 55
+011010001110 #whenwillyoulearn 55
+011010001110 #tenfactsaboutme 55
+011010001110 #maybeimtrippinbut 55
+011010001110 #hateitwhen 55
+011010001110 #justsouknow 55
+011010001110 #whathurtsmethemost 56
+011010001110 sumtimez 56
+011010001110 #surveysays 56
+011010001110 #sexualattraction 56
+011010001110 #ilovejustinbecause 56
+011010001110 #somefactsyoushouldknow 57
+011010001110 #itmakesmereallyhappywhen 57
+011010001110 #thethingis 57
+011010001110 #myheartdropswhen 57
+011010001110 every-time 57
+011010001110 #iunfollowedyoubecause 57
+011010001110 #uknowurcoolwhen 57
+011010001110 #ifyourpuertorican 58
+011010001110 #inmalaysia 58
+011010001110 #notetomales 58
+011010001110 #uknowhowiknowurgay 58
+011010001110 -sometimes 58
+011010001110 #betyoudidntknow 59
+011010001110 #mydumbsuperstition 59
+011010001110 #whyisit 59
+011010001110 #stuffthatpissesmeoff 59
+011010001110 -wish 59
+011010001110 #mythoughtsduringsex 59
+011010001110 #onlyif 60
+011010001110 #inmycity 60
+011010001110 #yourethereason 60
+011010001110 #nowthatimsingle 60
+011010001110 #livinginthedmv 61
+011010001110 #drakeoncesaid 61
+011010001110 #ifblackpeoplewereontitanic 61
+011010001110 sometimez 61
+011010001110 #icantlie 61
+011010001110 #witmyrefundcheck 61
+011010001110 #onlyontwitter 61
+011010001110 #liestoldduringsex 61
+011010001110 #itsbeenawhilesince 61
+011010001110 #thethingsihatemost 61
+011010001110 #waystoaskforhead 61
+011010001110 #firsttimeismoked 61
+011010001110 #thingsihateaboutfacebook 61
+011010001110 #thingsfathoessay 61
+011010001110 #istoppedbelievinginsantawhen 61
+011010001110 #youcuteandallbut 61
+011010001110 #dearyou 62
+011010001110 #worstbreakupexcuses 62
+011010001110 #hiphopconfessions 62
+011010001110 #iwillneverunderstandwhy 62
+011010001110 #ilovehow 62
+011010001110 #listentoyourheart 63
+011010001110 #thingsthaticantstand 63
+011010001110 #onmyspace 63
+011010001110 #10thingsiloveaboutyou 63
+011010001110 #waystoimpressme 64
+011010001110 #ihavetoconfess 64
+011010001110 64
+011010001110 #africankidproblems 64
+011010001110 #ifweedwerelegal 64
+011010001110 #nexttimewehavesex 64
+011010001110 #thoughtsduringterriblesex 65
+011010001110 #lolatpeoplewhothink 65
+011010001110 #importantfactsaboutme 65
+011010001110 #thingsthatguyslike 65
+011010001110 #nooffensebut 66
+011010001110 #onethingimsureof 66
+011010001110 #imissyouwhen 66
+011010001110 #inmidddleschool 66
+011010001110 #signsofcheating 66
+011010001110 #latenightconfessions 66
+011010001110 #ushouldbehappy 66
+011010001110 #liesihaveheard 66
+011010001110 #dearjonas 67
+011010001110 #thingsiregret 67
+011010001110 ∫ 67
+011010001110 #ifihadapenis 68
+011010001110 #signswomenshouldcarry 68
+011010001110 f.y.i 68
+011010001110 #ifweweretogetherrightnow 68
+011010001110 #tweetaboutyourselfandbehonest 69
+011010001110 #whatturnsmeoff 69
+011010001110 #ifihadthepower 69
+011010001110 becauseofhoes 69
+011010001110 #greatthingaboutfriends 69
+011010001110 #iwonderif 70
+011010001110 #thingsilovetosee 70
+011010001110 #backinthedaywheniwasakid 70
+011010001110 #onethingidontlike 70
+011010001110 #frommyobservation 71
+011010001110 #notbeingrudebut 71
+011010001110 #ilikeduuntil 71
+011010001110 -am 71
+011010001110 rememberwhen 71
+011010001110 #inthefuture 71
+011010001110 #sidechicktext 72
+011010001110 #becauseofgaga 72
+011010001110 #signsthatiloveyou 72
+011010001110 ertime 72
+011010001110 #inafreecountry 72
+011010001110 #whileinarelationship 72
+011010001110 #thingsthatmakemelol 72
+011010001110 #ifidieyoung 72
+011010001110 #2011remindedme 73
+011010001110 #turnoffs 73
+011010001110 #whathurtsthemost 73
+011010001110 #thingsialwaysavoid 73
+011010001110 /but 73
+011010001110 #iforgottotellyou 73
+011010001110 #itssadthat 74
+011010001110 #thingsihatethemost 74
+011010001110 #mefact 74
+011010001110 #withoutyou 74
+011010001110 #nowadays 75
+011010001110 #letsbeserious 75
+011010001110 #reason2haveguybestfriend 75
+011010001110 #whenigrowup 76
+011010001110 #funfactaboutme 76
+011010001110 #ifiwereapet 76
+011010001110 #dearhaters 76
+011010001110 #intwitterhighschool 77
+011010001110 #dayslikethis 77
+011010001110 #sexfact 77
+011010001110 #uknowublackwhen 77
+011010001110 #itsabeautifulworldbecause 77
+011010001110 #whydogirlsthink 77
+011010001110 #imustadmit 78
+011010001110 #stuffyousaywhenyoulosein2k 78
+011010001110 #ishouldhaveknown 78
+011010001110 everytimee 78
+011010001110 #tigershouldsay 78
+011010001110 #sorryimlatebut 79
+011010001110 #ireallycantstand 79
+011010001110 #imgettingtiredof 79
+011010001110 #whydo 79
+011010001110 #ifiwereu 79
+011010001110 #ifihadyou 80
+011010001110 #twitterpetpeeve 81
+011010001110 #thingsyoushouldknow 81
+011010001110 #inothernews 81
+011010001110 #iwonderwhy 81
+011010001110 #youhaveanicebodybut 81
+011010001110 #ifyouwanttodateme 81
+011010001110 #jonasbrothersare 81
+011010001110 #dearfreshman 81
+011010001110 #didyoujustsay 82
+011010001110 #idontassociatewith 82
+011010001110 #itsabaddaywhen 82
+011010001110 #ifmymomhadatwitter 82
+011010001110 #thatswhyyouhateme 82
+011010001110 #ifaliensattack 83
+011010001110 #dearcrush 83
+011010001110 #justremember 83
+011010001110 #reasonsthatimsingle 84
+011010001110 #10thingsaboutme 84
+011010001110 #thingsireallycantstand 85
+011010001110 #somebodyletmeknowwhen 85
+011010001110 #believeitornot 85
+011010001110 #whatmenshouldknow 86
+011010001110 sometime's 86
+011010001110 #youainthittinitrightif 86
+011010001110 eveytime 86
+011010001110 #youneedtounderstand 87
+011010001110 whenevr 87
+011010001110 #dontyouwish 87
+011010001110 #donttextmetalkingabout 88
+011010001110 #pornhastaughtme 88
+011010001110 #upinharlem 88
+011010001110 #ifyouknowmewell 88
+011010001110 #reasonswhyilovemyself 89
+011010001110 #icantrespect 89
+011010001110 #youjustmadbecause 89
+011010001110 #signstherelationshipisover 89
+011010001110 #wordofadvice 90
+011010001110 #inarelationship 90
+011010001110 #igetfreakywhen 90
+011010001110 #bestthingaboutbeingsingle 90
+011010001110 #thoughtswhilerunning 90
+011010001110 #beforesex 91
+011010001110 #5thingsthatannoyedmethisyear 91
+011010001110 #backinhighschool 91
+011010001110 #icantwaituntil 92
+011010001110 #biggestliethatworked 92
+011010001110 #canibehonestwithyou 92
+011010001110 #thisyear 93
+011010001110 #reasonswhyihateschool 93
+011010001110 #missedcallexcuses 93
+011010001110 #thingsthatneedtoend 93
+011010001110 #thingsthatshouldstop 93
+011010001110 #idontlike 93
+011010001110 #momsalwaystoldme 94
+011010001110 #myfreshmanyear 95
+011010001110 #ataghettowedding 95
+011010001110 #top100femalelies 96
+011010001110 #tweetyourfear 96
+011010001110 #attheendoftheday 96
+011010001110 #whatgetsmemad 97
+011010001110 #ifihaditmyway 98
+011010001110 #imsobored 99
+011010001110 #theresnowayinhell 99
+011010001110 #in8thgrade 99
+011010001110 #theyhatemebecause 99
+011010001110 #thingsialwaysseeonmytl 99
+011010001110 #youwerecuteuntil 99
+011010001110 #collegerules 99
+011010001110 #ihateitwhenimdrivingand 100
+011010001110 #4wordsyoudontwanttohear 100
+011010001110 #bedroomturnoffs 100
+011010001110 #imissthedayswhen 100
+011010001110 #cansomeoneexplaintomewhy 100
+011010001110 #wcgrid 100
+011010001110 erytime 100
+011010001110 #incaseyoudidntknow 101
+011010001110 #tbh 101
+011010001110 #iheard 101
+011010001110 #30factsaboutme 102
+011010001110 #tweetlikeaguy 103
+011010001110 #weirdfactaboutme 103
+011010001110 #ifihadonewish 104
+011010001110 #ifihadapennyforeverytime 104
+011010001110 #ifucheatonme 104
+011010001110 #fourwordsyoudontwanttohear 105
+011010001110 #ibetyou5dollars 105
+011010001110 #asakid 105
+011010001110 #3wordsthatwomenhate 105
+011010001110 #whileimgettinhead 106
+011010001110 #uknowhowiknowuregay 106
+011010001110 #idontrespect 106
+011010001110 #onethingweallhate 106
+011010001110 #thischristmas 106
+011010001110 #howtobeaman 107
+011010001110 #aintnoway 107
+011010001110 #signsyouweredrunk 108
+011010001110 #ilied 109
+011010001110 #funnybutnotcool 109
+011010001110 sumtymes 110
+011010001110 #itgetsmemadwhen 110
+011010001110 #ifihadanickeleverytime 110
+011010001110 #uknowyouuglywhen 110
+011010001110 #yourbioshouldsay 110
+011010001110 #youahoeif 111
+011010001110 #whenblackpeoplegetpaid 111
+011010001110 #thingsthatgrindmygears 112
+011010001110 #thingsthatpissmeoffingeneral 112
+011010001110 #howtoruinsex 112
+011010001110 #howtobeannoying 112
+011010001110 #iftwitterdidntexist 112
+011010001110 smetimes 113
+011010001110 smtimes 113
+011010001110 #iwishthat 113
+011010001110 #weliveinaworldwhere 114
+011010001110 #topliesmentell 114
+011010001110 #icandowithout 114
+011010001110 #icantevenlie 114
+011010001110 #whatmadeyouthink 115
+011010001110 #in10yrs 115
+011010001110 #youknowicarewhen 115
+011010001110 #whenyourblack 116
+011010001110 #10thingsthatannoyme 117
+011010001110 #thebestfeelingiswhen 117
+011010001110 #thethingihatemost 118
+011010001110 #imhappywhen 119
+011010001110 #2011regrets 119
+011010001110 #inthisgeneration 119
+011010001110 #myflaw 120
+011010001110 #becauseofchrisbrown 120
+011010001110 #itscrazyhow 120
+011010001110 #rulesofrelationships 121
+011010001110 #latenightthoughts 121
+011010001110 #loveis 122
+011010001110 #iusetothink 122
+011010001110 #ifiwasugly 123
+011010001110 #ifmydreamscametrue 124
+011010001110 #itscutewhen 124
+011010001110 #rulesformen 124
+011010001110 #ificouldwishforanything 126
+011010001110 ihear 127
+011010001110 #ifsexwasasport 127
+011010001110 #thingsthatpissmeoffinthemorning 128
+011010001110 #weedcommandments 128
+011010001110 #justrememberthat 130
+011010001110 #6wordstories 130
+011010001110 #thingsisaywhilereadingmytl 130
+011010001110 #afterwebrokeup 131
+011010001110 #5reasonsihatefacebook 131
+011010001110 #idislike 132
+011010001110 #ifyouloveme 132
+011010001110 #whenimbored 132
+011010001110 #tomyfuturehusband 133
+011010001110 #whywomencheat 133
+011010001110 #imnotbeingrudebut 133
+011010001110 #for65milliondollars 133
+011010001110 #ifiruledtheworld 134
+011010001110 #ificoulddoitoveragain 134
+011010001110 #whydopeoplethink 134
+011010001110 #youreajonasfan 134
+011010001110 #instantturnoff 135
+011010001110 #igethornywhen 135
+011010001110 #insecondaryschool 135
+011010001110 #signsuasidechick 136
+011010001110 #whenimalone 136
+011010001110 #iftwitterwashighschool 137
+011010001110 #youknowwhatannoysme 137
+011010001110 #secondaryschoolmemories 137
+011010001110 #ificouldgetawaywithit 137
+011010001110 #thingsthatfrustrateme 137
+011010001110 #idontwannasee 137
+011010001110 #imovedonbecause 137
+011010001110 #becauseofbieber 138
+011010001110 #backinelementaryschool 138
+011010001110 #mistakesmenmake 139
+011010001110 #fortherecord 139
+011010001110 #anydaynow 139
+011010001110 #ithoughtyouwerecuteuntil 139
+011010001110 #collegeconfession 140
+011010001110 #itsokaytocheatif 140
+011010001110 #randomfacts 141
+011010001110 #thelasttimeichecked 141
+011010001110 sumhow 141
+011010001110 #mybiggestproblem 143
+011010001110 #somethingilearnedlongago 143
+011010001110 #tomyex 144
+011010001110 #becauseofyou 145
+011010001110 evertime 145
+011010001110 #1factaboutme 145
+011010001110 errytime 145
+011010001110 #when 146
+011010001110 #ilaugheverytime 146
+011010001110 #wonderwhy 146
+011010001110 #imsoglad 147
+011010001110 #imsickof 148
+011010001110 #ifthesexisgood 148
+011010001110 #itmakesmehappywhen 149
+011010001110 #firstdayofschool 149
+011010001110 #youknowyouuglywhen 149
+011010001110 #igetsomadwhen 149
+011010001110 #whereimfrom 149
+011010001110 #in2011 150
+011010001110 #whenigetbored 150
+011010001110 #iftheyshutdowntwitter 152
+011010001110 #50thingsaboutmyboyfriend 152
+011010001110 #somewhereinthehood 152
+011010001110 #yourtextgotignoredbecause 152
+011010001110 #icheatedbecause 152
+011010001110 #cheatingisokayif 152
+011010001110 #inourgeneration 153
+011010001110 errtime 153
+011010001110 #800dollarsforaniphone 153
+011010001110 #iwonderifsheknows 153
+011010001110 #yeahyousexybut 154
+011010001110 #youknowitsrealwhen 154
+011010001110 sumtyms 155
+011010001110 #sorryjustin 155
+011010001110 #thingsyoushouldknowaboutme 156
+011010001110 #wheniwasyoung 157
+011010001110 #breakupexcuses 157
+011010001110 #becauseimblack 158
+011010001110 #dontbemadatmebecause 159
+011010001110 #whenimhigh 159
+011010001110 #toplieswomentell 159
+011010001110 #iftwitterwerehighschool 159
+011010001110 #thankstotwitter 160
+011010001110 #100confessions 160
+011010001110 #tttt 160
+011010001110 #everydayiwakeup 160
+011010001110 #inschool 162
+011010001110 #nowthatimolder 164
+011010001110 #liesitoldmyparents 165
+011010001110 #inaghettohouse 165
+011010001110 #becauseofnickiminaj 165
+011010001110 #reasonswedonttalkanymore 166
+011010001110 #2thingsiknow 166
+011010001110 #iwonderhow 167
+011010001110 #becauseoffacebook 169
+011010001110 #beforewehadjustin 169
+011010001110 #duringsex 169
+011010001110 #ihavetoadmit 170
+011010001110 #2behonest 171
+011010001110 #stuffthatpissmeoff 172
+011010001110 #ourfriendshipendedwhen 174
+011010001110 #dontbemad 174
+011010001110 #fuckyoumean 176
+011010001110 #sexisbetterwhen 176
+011010001110 #iusedtothink 177
+011010001110 #rememberthetime 177
+011010001110 #youlookrealstupid 177
+011010001110 #sometimes 178
+011010001110 #saynoto 178
+011010001110 #unlikeothergirls 178
+011010001110 #inanafricanhouse 179
+011010001110 #sexsogood 179
+011010001110 #ifweareinarelationship 179
+011010001110 #wheniminlove 179
+011010001110 #youlookedgooduntil 180
+011010001110 #newsflash 180
+011010001110 #bestthingsaboutbeingsingle 183
+011010001110 #iftheworldendsonsaturday 184
+011010001110 #iknewitwasoverwhen 184
+011010001110 #thingsiverealized 184
+011010001110 #highschoolconfessions 184
+011010001110 #randomfactaboutme 184
+011010001110 #ifyoureallylovedher 185
+011010001110 #wheniruletheworld 186
+011010001110 #itstimeforyoutorealize 186
+011010001110 #wheneverimbored 187
+011010001110 #thingswelearnedontwitter 188
+011010001110 #listenbitch 188
+011010001110 #sorrybowwow 189
+011010001110 189
+011010001110 #bottomlineis 189
+011010001110 #lifewaseasybefore 190
+011010001110 #endoftheworldconfessions 191
+011010001110 #afterinut 194
+011010001110 #imtiredofseeing 194
+011010001110 #drakecrieswhen 195
+011010001110 #icanadmit 196
+011010001110 #whenihadamyspace 196
+011010001110 #nothinghurtsmorethan 196
+011010001110 #justsoyouknow 197
+011010001110 #itsuckswhen 197
+011010001110 #somebodytellmewhy 198
+011010001110 #somewhereintheworld 198
+011010001110 #ifihadsuperpowers 198
+011010001110 #thingsthatpissgirlsoff 198
+011010001110 #lasttimeichecked 199
+011010001110 199
+011010001110 #thingsidislike 200
+011010001110 #areasonwhyimsingle 200
+011010001110 #sinceimbeinghonest 201
+011010001110 #whenyoursingle 202
+011010001110 #wheniwasyounger 202
+011010001110 #honestlyhour 202
+011010001110 #dontyoujusthateitwhen 202
+011010001110 #ilikeitwhen 204
+011010001110 #thingsthatannoyme 204
+011010001110 #okuprettybut 205
+011010001110 #whiletwitterwasdown 206
+011010001110 #ijustwannaknowwhy 207
+011010001110 #whatdowomenwant 207
+011010001110 #thankstomyex 208
+011010001110 #nodisrespectbut 208
+011010001110 #therewasatimewhen 209
+011010001110 #1thingaboutme 209
+011010001110 #myproblemis 209
+011010001110 #letsfacereality 210
+011010001110 #annoyingthings 210
+011010001110 #ifeellike 212
+011010001110 #youwassexyuntil 213
+011010001110 #fellaspleaserealize 214
+011010001110 #youknowdamnwell 214
+011010001110 #icantstandwhen 215
+011010001110 #igetrealmadwhen 215
+011010001110 #beforetwitter 215
+011010001110 #whatmakesablackgirlmad 215
+011010001110 sometimess 216
+011010001110 #thingsthatgetmepissed 217
+011010001110 #petpeeves 217
+011010001110 #imeasilyannoyedwhen 217
+011010001110 #thingsivelearned 218
+011010001110 #somethingaboutme 219
+011010001110 #becauseofmyex 220
+011010001110 #reasonswecantbetogether 221
+011010001110 #10thingsaboutmyself 221
+011010001110 #10thingsihate 222
+011010001110 #20petpeeves 226
+011010001110 #waystopissmeoff 228
+011010001110 #idontappreciate 229
+011010001110 #10randomthingsaboutme 229
+011010001110 #thewayiseeit 230
+011010001110 #inthe90s 232
+011010001110 #if 232
+011010001110 #dearyoungself 233
+011010001110 #iamsotiredof 233
+011010001110 #ifitwereuptome 234
+011010001110 #inelementaryschool 235
+011010001110 #becauseofweed 237
+011010001110 #dontyoujusthatewhen 237
+011010001110 #overthesummer 239
+011010001110 #itannoysmewhen 241
+011010001110 #liesguystell 244
+011010001110 #youknowwhatihatethemost 245
+011010001110 #20thingsaboutmybestfriend 245
+011010001110 #ireallywishthat 245
+011010001110 #makesmesomad 247
+011010001110 #whenihavekids 247
+011010001110 #20thingsidontlike 248
+011010001110 #lieswetell 248
+011010001110 #15thingsgirlshate 253
+011010001110 #worstthingintheworld 254
+011010001110 #becauseofhoes 257
+011010001110 #whymencheat 257
+011010001110 #messagetomyex 263
+011010001110 #thingsthatyoushouldknow 269
+011010001110 #imhappiestwhen 270
+011010001110 #littleknownfactaboutme 270
+011010001110 #itmakesmesmilewhen 271
+011010001110 #truefactsaboutme 271
+011010001110 #15thingsaboutmybestfriend 273
+011010001110 #in10years 273
+011010001110 #icantstand 276
+011010001110 #10basicfactsaboutme 280
+011010001110 #inaperfectworld 283
+011010001110 #aftersex 285
+011010001110 #50thingsaboutme 286
+011010001110 #getsonmynerves 287
+011010001110 #ihungupbecause 289
+011010001110 #1day 290
+011010001110 #becauseofjustin 290
+011010001110 #alljokesaside 293
+011010001110 #ilovelifebecause 293
+011010001110 #waystoirritateme 293
+011010001110 #youneedtorealize 293
+011010001110 #ithurtswhen 295
+011010001110 #youknowyouruglyif 299
+011010001110 iknew 301
+011010001110 #onethingaboutme 302
+011010001110 #5thingsicantstand 302
+011010001110 #ireallythink 305
+011010001110 #beforeidie 306
+011010001110 #dearex 315
+011010001110 #mentionsomethingaboutyourself 319
+011010001110 #9timesoutof10 321
+011010001110 #thingsicantstand 322
+011010001110 #truthbetold 322
+011010001110 #westoppedtalkingbecause 323
+011010001110 #backwheniwasakid 326
+011010001110 #intheclub 327
+011010001110 #imisswhen 328
+011010001110 #ismilewhen 331
+011010001110 #dontyouhateitwhen 335
+011010001110 #youlookgoodbut 337
+011010001110 #note2females 339
+011010001110 #10factsaboutme 343
+011010001110 #ladiespleaserealize 343
+011010001110 #tomyfuturekids 345
+011010001110 #thingsthatgetmeupset 347
+011010001110 #liesivetoldmyparents 353
+011010001110 #whyimsingle 355
+011010001110 evrytime 356
+011010001110 #wakemeupwhen 359
+011010001110 #cheatingexcuses 363
+011010001110 #confessions 368
+011010001110 #itsoverwhen 370
+011010001110 #wheniwas14 372
+011010001110 #howcome 372
+011010001110 #relationshipsendbecause 372
+011010001110 #becauseoftwitter 373
+011010001110 #notetofemales 373
+011010001110 #thissummer 374
+011010001110 #ireallymiss 378
+011010001110 #wheniwasalittlekid 379
+011010001110 #arentyoutiredof 379
+011010001110 #letsbeclear 380
+011010001110 #tellmewhy 386
+011010001110 #wheniwas13 391
+011010001110 #ifyoumarryme 392
+011010001110 #whatyoushouldknowaboutme 396
+011010001110 #letmefindout 406
+011010001110 #foramilliondollars 408
+011010001110 #everfeellike 416
+011010001110 #inmyhood 418
+011010001110 #didyoureallythink 419
+011010001110 #100thingsaboutme 422
+011010001110 #deepdowninside 422
+011010001110 #wecoolandallbut 423
+011010001110 #truthaboutme 432
+011010001110 #honestynight 434
+011010001110 #admitit 436
+011010001110 #itssadwhen 440
+011010001110 #pleasetellmewhy 442
+011010001110 #sincewerebeinghonest 443
+011010001110 #10confessions 445
+011010001110 #improudtosay 451
+011010001110 #ifyoureallyknewme 458
+011010001110 #sotellmewhy 470
+011010001110 #ireallycantstandwhen 471
+011010001110 #dearsomeone 472
+011010001110 #10worstfeelings 478
+011010001110 #iwannaslap 478
+011010001110 #irememberwhen 487
+011010001110 #ifitwasuptome 499
+011010001110 #whyrelationshipsdontlast 506
+011010001110 wholetime 508
+011010001110 #iadmit 511
+011010001110 #tomyunbornchild 511
+011010001110 #oneofthesedays 514
+011010001110 #ifyoucheatonme 519
+011010001110 #wheniwasafreshman 522
+011010001110 #ifyouknowmeyouknow 526
+011010001110 #iwannaknowwhy 527
+011010001110 #youknowiloveyouwhen 536
+011010001110 #ireallyhatewhen 536
+011010001110 #incollege 548
+011010001110 somtimes 549
+011010001110 oneday 551
+011010001110 #20thingsaboutme 561
+011010001110 #1thingicantstand 568
+011010001110 #thingsthatmakemesmh 579
+011010001110 #honesthour 586
+011010001110 #itsfunnyhow 601
+011010001110 #ilovewhen 609
+011010001110 #confessionnight 613
+011010001110 #pleaseexplainwhy 629
+011010001110 #100thingsihate 646
+011010001110 #whenwewereyoung 649
+011010001110 #confessiontime 658
+011010001110 #backintheday 672
+011010001110 #icanhonestlysay 691
+011010001110 #whentwitterwasdown 692
+011010001110 #ihateitwhen 698
+011010001110 #highschoolconfession 698
+011010001110 #whenimdrunk 703
+011010001110 #wheniwasakid 706
+011010001110 #youknowwhatsannoying 723
+011010001110 #randomfact 798
+011010001110 #imsinglebecause 804
+011010001110 iwish 805
+011010001110 #dearfuturewife 805
+011010001110 #dearoomf 823
+011010001110 #ifsantawasblack 836
+011010001110 #iamsinglebecause 843
+011010001110 somedays 855
+011010001110 #factaboutme 887
+011010001110 #dearfuturehusband 911
+011010001110 #somefactsaboutme 956
+011010001110 #thingsweallhate 1032
+011010001110 #whatif 1037
+011010001110 #sincewebeinghonest 1039
+011010001110 #10yearsago 1046
+011010001110 #imtiredof 1084
+011010001110 #confessionhour 1097
+011010001110 #20factsaboutme 1166
+011010001110 #thingsthatbotherme 1183
+011010001110 #honestly 1195
+011010001110 #idontunderstandwhy 1321
+011010001110 #tobehonest 1361
+011010001110 #inmiddleschool 1393
+011010001110 #truthis 1513
+011010001110 #iloveitwhen 1547
+011010001110 #thingsthatpissmeoff 1653
+011010001110 #letsbereal 1658
+011010001110 #justbecause 1673
+011010001110 #rememberwhen 1698
+011010001110 #factsaboutme 1759
+011010001110 #iwish 1777
+011010001110 #confession 1871
+011010001110 #someday 2204
+011010001110 #letsbehonest 2283
+011010001110 #in2010 2400
+011010001110 #iconfess 2422
+011010001110 sumtimes 2471
+011010001110 #inhighschool 2873
+011010001110 #honestyhour 3567
+011010001110 #wheniwaslittle 4004
+011010001110 someday 18045
+011010001110 somehow 24727
+011010001110 whenever 30401
+011010001110 sometimes 160141
+011010001110 everytime 34039
+0110100011110 mayyybe 40
+0110100011110 p'raps 43
+0110100011110 nah- 44
+0110100011110 praps 46
+0110100011110 meybe 46
+0110100011110 at-least 47
+0110100011110 maybeh 48
+0110100011110 ooor 49
+0110100011110 maaaaaybe 52
+0110100011110 mebe 53
+0110100011110 atlest 54
+0110100011110 maaybe 57
+0110100011110 atlease 62
+0110100011110 prehaps 63
+0110100011110 howabout 64
+0110100011110 myabe 64
+0110100011110 mayby 66
+0110100011110 hopefullyy 67
+0110100011110 mayhap 72
+0110100011110 maaaaybe 74
+0110100011110 tweetcha 93
+0110100011110 iquess 102
+0110100011110 maybs 109
+0110100011110 maaaybe 111
+0110100011110 -maybe 115
+0110100011110 @least 120
+0110100011110 ithinkk 124
+0110100011110 ipromise 140
+0110100011110 aleast 150
+0110100011110 159
+0110100011110 mayhaps 190
+0110100011110 #doyoumind 191
+0110100011110 howcome 237
+0110100011110 ibet 271
+0110100011110 myb 287
+0110100011110 mabe 309
+0110100011110 mabye 350
+0110100011110 mybe 353
+0110100011110 mabey 356
+0110100011110 mebbe 403
+0110100011110 maby 459
+0110100011110 idt 492
+0110100011110 ihope 728
+0110100011110 maybee 788
+0110100011110 iguess 1207
+0110100011110 lest 1593
+0110100011110 ithink 2284
+0110100011110 mayb 4989
+0110100011110 atleast 15491
+0110100011110 maybe 311475
+0110100011110 perhaps 33232
+0110100011111 annnnnnnnd 40
+0110100011111 960.0 42
+0110100011111 lither 42
+0110100011111 iand 43
+0110100011111 aaaaaaaaaaand 43
+0110100011111 s'what 43
+0110100011111 incidently 44
+0110100011111 unfortunatelly 45
+0110100011111 aaaaaaaaand 46
+0110100011111 -austin 46
+0110100011111 apparenly 47
+0110100011111 __3 47
+0110100011111 buuuuuuut 48
+0110100011111 unfortch 48
+0110100011111 warning- 49
+0110100011111 eitherway 49
+0110100011111 techincally 50
+0110100011111 aaaaaaaaaand 51
+0110100011111 appaz 52
+0110100011111 -denver 52
+0110100011111 _23 52
+0110100011111 still- 54
+0110100011111 basiclly 54
+0110100011111 pluse 54
+0110100011111 pistar$40 54
+0110100011111 cukafresca 54
+0110100011111 eduguedes 54
+0110100011111 avdoturismo 54
+0110100011111 antigocoracaoblue 54
+0110100011111 amazoncityhall 54
+0110100011111 casulo 56
+0110100011111 apparenty 57
+0110100011111 damn- 57
+0110100011111 58
+0110100011111 saddly 60
+0110100011111 aparantly 60
+0110100011111 silverthorne 61
+0110100011111 62
+0110100011111 allthough 63
+0110100011111 hopely 63
+0110100011111 thirdly 64
+0110100011111 -think 67
+0110100011111 959.8 69
+0110100011111 indivisible 73
+0110100011111 -houston 76
+0110100011111 hoepfully 76
+0110100011111 959.6 79
+0110100011111 80
+0110100011111 therfore 80
+0110100011111 82
+0110100011111 -phoenix 83
+0110100011111 there4 84
+0110100011111 annnnnnnd 84
+0110100011111 fittingly 86
+0110100011111 959.7 88
+0110100011111 12_ 92
+0110100011111 annnddd 94
+0110100011111 appearantly 94
+0110100011111 959.5 94
+0110100011111 #sworcery 99
+0110100011111 f.y.i. 100
+0110100011111 hopefullly 100
+0110100011111 unfortunetly 104
+0110100011111 aaaaaaaand 105
+0110100011111 _2_ 107
+0110100011111 missed/beaten 108
+0110100011111 wasteday 115
+0110100011111 seriously- 116
+0110100011111 tearsday 119
+0110100011111 regrettably 121
+0110100011111 showery 134
+0110100011111 appearently 136
+0110100011111 pluss 138
+0110100011111 mercifully 144
+0110100011111 paradoxically 151
+0110100011111 conversely 158
+0110100011111 thirstday 158
+0110100011111 2bad 164
+0110100011111 oftentimes 164
+0110100011111 unfortunatley 165
+0110100011111 unfort 166
+0110100011111 althought 181
+0110100011111 apperantly 190
+0110100011111 fyi- 213
+0110100011111 aaaaaaand 221
+0110100011111 1__ 226
+0110100011111 hopefull 254
+0110100011111 luckly 265
+0110100011111 #tweetatreasure 288
+0110100011111 294
+0110100011111 apprently 303
+0110100011111 unsurprisingly 317
+0110100011111 apperently 326
+0110100011111 btw- 331
+0110100011111 consequently 334
+0110100011111 annnnnd 342
+0110100011111 additionally 365
+0110100011111 therefor 366
+0110100011111 otoh 384
+0110100011111 verily 402
+0110100011111 6.81 416
+0110100011111 aaaaaand 420
+0110100011111 hopfully 420
+0110100011111 moreover 427
+0110100011111 hopefuly 429
+0110100011111 alternatively 431
+0110100011111 furthermore 485
+0110100011111 afaik 494
+0110100011111 statistically 515
+0110100011111 secondly 535
+0110100011111 iirc 549
+0110100011111 unfortunatly 550
+0110100011111 lastly 556
+0110100011111 coincidentally 558
+0110100011111 so's 560
+0110100011111 firstly 572
+0110100011111 annnnd 658
+0110100011111 6.78 671
+0110100011111 aparently 692
+0110100011111 incidentally 761
+0110100011111 763
+0110100011111 annnd 767
+0110100011111 apparantly 796
+0110100011111 interestingly 824
+0110100011111 ideally 826
+0110100011111 aaaaand 833
+0110100011111 ergo 841
+0110100011111 ngl 850
+0110100011111 aaand 919
+0110100011111 admittedly 990
+0110100011111 presumably 995
+0110100011111 aaaand 1200
+0110100011111 nevertheless 1292
+0110100011111 infact 1414
+0110100011111 evidently 1806
+0110100011111 altho 1956
+0110100011111 ironically 2243
+0110100011111 2427
+0110100011111 frankly 2957
+0110100011111 fortunately 2987
+0110100011111 methinks 3644
+0110100011111 meanwhile 4528
+0110100011111 alas 5415
+0110100011111 thankfully 6679
+0110100011111 technically 7122
+0110100011111 luckily 8366
+0110100011111 thus 10073
+0110100011111 therefore 10481
+0110100011111 sadly 17621
+0110100011111 unfortunately 21116
+0110100011111 otherwise 22068
+0110100011111 however 28361
+0110100011111 although 37555
+0110100011111 plus 72272
+0110100011111 apparently 71258
+0110100011111 hopefully 89681
+0110100100 whrn 46
+0110100100 #betmessedupwhen 63
+0110100100 whever 63
+0110100100 whenver 64
+0110100100 wh3n 88
+0110100100 #whenbrokepplgetmoney 90
+0110100100 whne 91
+0110100100 w/what 95
+0110100100 whan 95
+0110100100 #onlyintheghetto 115
+0110100100 -hope 127
+0110100100 #theway 148
+0110100100 whem 156
+0110100100 wheb 157
+0110100100 wehn 183
+0110100100 wheen 213
+0110100100 whereever 316
+0110100100 -when 329
+0110100100 wherein 432
+0110100100 wenn 495
+0110100100 #dontyouhatewhen 566
+0110100100 #ihatewhen 969
+0110100100 whenn 976
+0110100100 whn 5501
+0110100100 wherever 7744
+0110100100 when 1687450
+0110100100 wen 55800
+01101001010 b'c 52
+01101001010 #because 52
+01101001010 b\c 61
+01101001010 b'cos 63
+01101001010 `cause 75
+01101001010 -because 77
+01101001010 b'cause 80
+01101001010 bacause 88
+01101001010 b'cuz 95
+01101001010 becaue 105
+01101001010 anychance 125
+01101001010 beause 130
+01101001010 becase 144
+01101001010 b'coz 146
+01101001010 becuse 230
+01101001010 beacause 254
+01101001010 becouse 357
+01101001010 beacuse 483
+01101001010 becasue 576
+01101001010 becos 603
+01101001010 becoz 752
+01101001010 bcz 757
+01101001010 bcause 927
+01101001010 bcos 1414
+01101001010 becuase 1667
+01101001010 bcoz 1775
+01101001010 incase 3257
+01101001010 because 465418
+01101001010 b/c 23594
+01101001011 -thought 40
+01101001011 bekause 41
+01101001011 cozz 41
+01101001011 cusx 41
+01101001011 everytyme 43
+01101001011 bcuzz 44
+01101001011 bcuss 44
+01101001011 cuze 46
+01101001011 c0z 47
+01101001011 ihopee 50
+01101001011 inless 51
+01101001011 cuhhz 52
+01101001011 chuz 53
+01101001011 bcse 53
+01101001011 kuhs 54
+01101001011 becuzz 56
+01101001011 ciz 56
+01101001011 snice 56
+01101001011 caue 56
+01101001011 becuss 58
+01101001011 bkus 63
+01101001011 caause 66
+01101001011 ithnk 68
+01101001011 ´cause 74
+01101001011 becauseee 75
+01101001011 #helookgoodbut 76
+01101001011 #hecutebut 81
+01101001011 kusz 84
+01101001011 becz 90
+01101001011 cuuz 92
+01101001011 cose 100
+01101001011 cauze 103
+01101001011 coss 105
+01101001011 unles 109
+01101001011 kuhz 110
+01101001011 causeee 116
+01101001011 #shecutebut 117
+01101001011 fromt 125
+01101001011 bekuz 137
+01101001011 #shelookgoodbut 148
+01101001011 #chancesare 161
+01101001011 kuzz 172
+01101001011 kuss 192
+01101001011 b|c 194
+01101001011 ckuz 206
+01101001011 casue 226
+01101001011 cux 233
+01101001011 #shescutebut 236
+01101001011 bkuz 248
+01101001011 cauz 274
+01101001011 becausee 286
+01101001011 #shelooksgoodbut 312
+01101001011 eventho 314
+01101001011 cuase 326
+01101001011 cusz 331
+01101001011 wenever 339
+01101001011 b.c 401
+01101001011 kause 432
+01101001011 wheneva 458
+01101001011 becus 496
+01101001011 cuhs 560
+01101001011 caz 647
+01101001011 caus 685
+01101001011 #reallymeans 802
+01101001011 causee 816
+01101001011 kus 934
+01101001011 bcus 935
+01101001011 eventhough 999
+01101001011 cuhz 1211
+01101001011 cz 2502
+01101001011 cuzz 2504
+01101001011 kuz 3946
+01101001011 becuz 5720
+01101001011 bcuz 8039
+01101001011 cus 19088
+01101001011 coz 22658
+01101001011 cos 34685
+01101001011 bc 37804
+01101001011 cuz 181769
+01101001011 cause 252398
+0110100110 tlod 41
+0110100110 thenk 42
+0110100110 //thank 42
+0110100110 tahnk 47
+0110100110 s)ave 49
+0110100110 ithank 49
+0110100110 thabk 55
+0110100110 thannk 57
+0110100110 rt-if 62
+0110100110 howve 66
+0110100110 i)nvolve 68
+0110100110 d)eserve 68
+0110100110 e)ncourage 71
+0110100110 thaaaaank 74
+0110100110 thnak 75
+0110100110 n)eed 78
+0110100110 when're 82
+0110100110 r)espect 85
+0110100110 wickedlocalcapecod 88
+0110100110 howre 94
+0110100110 thankkkk 99
+0110100110 thankn 105
+0110100110 insya 112
+0110100110 #thank 136
+0110100110 insha 141
+0110100110 thaaaank 147
+0110100110 why're 157
+0110100110 -gives 160
+0110100110 whatre 196
+0110100110 where've 220
+0110100110 where're 231
+0110100110 fank 236
+0110100110 thak 237
+0110100110 thaaank 238
+0110100110 -thank 240
+0110100110 thankkk 242
+0110100110 1005# 244
+0110100110 thaank 259
+0110100110 -hugs 410
+0110100110 whered 452
+0110100110 thankk 721
+0110100110 how've 803
+0110100110 what're 1292
+0110100110 how're 1377
+0110100110 what'll 2441
+0110100110 thank 402435
+0110100110 thanking 6547
+0110100111 #thatawkardmomentwhen 40
+0110100111 #youknowyoureinloveif 41
+0110100111 #shewonttakeyouseriousif 41
+0110100111 rtif 42
+0110100111 (if 42
+0110100111 #youstupidashellif 42
+0110100111 unlesss 43
+0110100111 #youmightbestupidif 44
+0110100111 #thingsjustgotrealwhen 44
+0110100111 #youknowyoubrokewhen 44
+0110100111 #dontfollowmeontwitterif 45
+0110100111 #uknowyoulyingwhen 47
+0110100111 #idontlikeyoubecause 49
+0110100111 #itsallfunandgamestil 51
+0110100111 #youneedtobreakupif 52
+0110100111 #ilostrespectforyouwhen 53
+0110100111 #wecantbefriendsif 54
+0110100111 #wecantbetogetherif 54
+0110100111 #iroastedyoubecause 55
+0110100111 #dontwifethatchickif 55
+0110100111 ifff 60
+0110100111 #yourea90skidif 64
+0110100111 #youainttheoneif 64
+0110100111 if'n 70
+0110100111 #youdontbelongontwitterif 71
+0110100111 i'f 74
+0110100111 #stfuif 75
+0110100111 #whathappenswhen 77
+0110100111 #donthollaatmeif 79
+0110100111 #youmightbeghettoif 79
+0110100111 #yougottabekiddingif 80
+0110100111 #youknowyouredrunkwhen 81
+0110100111 #wecantdateif 82
+0110100111 #makeheryourwifeif 83
+0110100111 #wewerecooluntil 83
+0110100111 #yoursinglebecause 86
+0110100111 #losemynumberif 87
+0110100111 #youbeblownwhen 88
+0110100111 #rtthisif 89
+0110100111 #unfollowmeif 93
+0110100111 #youknowurboredwhen 96
+0110100111 #itsawkwardwhen 101
+0110100111 #sheleftyoubecause 101
+0110100111 #wewasgooduntil 102
+0110100111 #youdidntwantmeuntil 102
+0110100111 #youhavenofriendsbecause 104
+0110100111 #imnotsaying 104
+0110100111 #uknowlifehardwhen 105
+0110100111 #donttalktomeif 107
+0110100111 #youknowyouhungrywhen 107
+0110100111 #whybeinarelationshipif 108
+0110100111 #youknowyoughettowhen 109
+0110100111 #thedatewasoverwhen 115
+0110100111 #shedidntcallbecause 118
+0110100111 when'd 119
+0110100111 #dontactlike 121
+0110100111 #thatfeelingyougetwhen 123
+0110100111 -did 125
+0110100111 #youcanthollaif 126
+0110100111 -are 126
+0110100111 #uknoyoughettowhen 128
+0110100111 #urdoing2muchif 129
+0110100111 #togetwithme 130
+0110100111 #theawkwardmomentwhen 131
+0110100111 #sadmomentwhen 134
+0110100111 #icantrespectyouif 137
+0110100111 #urnotmytypeif 139
+0110100111 #itsnotcheatingif 140
+0110100111 #itsbetterwhen 144
+0110100111 #uknowurblackwhen 145
+0110100111 #deletemynumberif 146
+0110100111 #breakupif 146
+0110100111 #girlsloveitwhen 146
+0110100111 #dontlookatmeif 147
+0110100111 #thesexwasgooduntil 148
+0110100111 #uknowurajumpoffwhen 149
+0110100111 #pleaseshutupif 149
+0110100111 #noonelikesyoubecause 153
+0110100111 #youreakeeperif 153
+0110100111 #uknowuhungrywhen 153
+0110100111 #no1likesubecause 159
+0110100111 #deleteyourtwitterif 161
+0110100111 #omjretweetif 166
+0110100111 #lemmegetthisstr8 166
+0110100111 #dontfollowmeif 166
+0110100111 #wewontworkoutif 169
+0110100111 #youknowurahoeif 170
+0110100111 #lifeisgoodwhen 177
+0110100111 #icantbeinarelationshipwithyouif 178
+0110100111 #rtif 180
+0110100111 #wtfyoumean 183
+0110100111 #uwascooluntil 184
+0110100111 #thatmomentwhen 185
+0110100111 #yougottaloveitwhen 193
+0110100111 what've 193
+0110100111 #ileftyoubecause 194
+0110100111 #itsallfunandgamesuntil 200
+0110100111 #icantdateyouif 204
+0110100111 #girlslovewhen 205
+0110100111 #icanttrustyouif 213
+0110100111 #dontcallmeif 227
+0110100111 #stayawayfrommeif 236
+0110100111 #youknowitslovewhen 245
+0110100111 #unotfromthehoodif 246
+0110100111 #thatakwardmomentwhen 251
+0110100111 -do 266
+0110100111 #ilikeyoubecause 275
+0110100111 #uknowubrokewhen 284
+0110100111 #thatminiheartattackwhen 289
+0110100111 #wewontlastif 289
+0110100111 #yougetpointsif 296
+0110100111 #lemmeguess 297
+0110100111 when/if 309
+0110100111 #retweetif 312
+0110100111 #youshouldbeashamedif 318
+0110100111 #thehellyoumean 335
+0110100111 #itshardwhen 346
+0110100111 #handsupif 352
+0110100111 #ilikedyouuntil 382
+0110100111 #iloveyoubecause 387
+0110100111 whyd 388
+0110100111 #yougetmajorpointsif 424
+0110100111 if/when 508
+0110100111 whatd 520
+0110100111 -if 553
+0110100111 #youwerecooluntil 779
+0110100111 iif 779
+0110100111 iff 784
+0110100111 howd 896
+0110100111 #thatawkwardmomentwhen 1663
+0110100111 why'd 2345
+0110100111 #retweetthisif 2718
+0110100111 what'd 3021
+0110100111 where'd 3415
+0110100111 how'd 5635
+0110100111 if 2171264
+0110100111 unless 52102
+011010100 thath 40
+011010100 another- 40
+011010100 rhat 46
+011010100 tjat 49
+011010100 -that- 49
+011010100 htat 77
+011010100 really- 80
+011010100 tgat 82
+011010100 /that/ 91
+011010100 thhat 112
+011010100 _that_ 114
+011010100 thaaaaat 133
+011010100 thta 160
+011010100 thst 258
+011010100 thet 411
+011010100 that- 569
+011010100 taht 723
+011010100 that 4842561
+011010100 it- 1899
+011010101 thaatt 40
+011010101 dissss 41
+011010101 disx 41
+011010101 w/tht 42
+011010101 thyss 42
+011010101 thisssssssss 43
+011010101 #katstacks 43
+011010101 daaat 43
+011010101 w|a 43
+011010101 it// 45
+011010101 di$ 46
+011010101 thissssssss 53
+011010101 dhisz 58
+011010101 diiz 60
+011010101 @onlinethug 62
+011010101 this1 63
+011010101 thaaaaaat 64
+011010101 dhiis 65
+011010101 this/ 65
+011010101 thah 66
+011010101 datttt 68
+011010101 that1 68
+011010101 thatttttt 68
+011010101 thadd 69
+011010101 dhiz 70
+011010101 @05starbarbie 71
+011010101 thiiiiis 71
+011010101 that/ 78
+011010101 thi$ 78
+011010101 thisssssss 83
+011010101 thiiss 92
+011010101 thiiiis 94
+011010101 daat 96
+011010101 thiiis 98
+011010101 dhet 98
+011010101 nann 99
+011010101 disss 109
+011010101 dattt 139
+011010101 dizz 148
+011010101 tthat 149
+011010101 thattttt 154
+011010101 thissssss 157
+011010101 iyt 162
+011010101 thtt 189
+011010101 thisz 233
+011010101 thss 236
+011010101 disz 242
+011010101 dhiss 256
+011010101 allat 260
+011010101 thaaaat 274
+011010101 thisssss 293
+011010101 th@ 294
+011010101 d@ 294
+011010101 thz 298
+011010101 thys 301
+011010101 thatttt 315
+011010101 diis 327
+011010101 dhatt 333
+011010101 daht 335
+011010101 dht 383
+011010101 thaaat 507
+011010101 thissss 582
+011010101 thattt 620
+011010101 thiz 854
+011010101 datt 884
+011010101 thiis 1042
+011010101 thisss 1069
+011010101 dhis 1348
+011010101 thaat 1510
+011010101 thatt 1974
+011010101 diz 2503
+011010101 dhat 4121
+011010101 thiss 4535
+011010101 tht 62580
+011010101 dat 125853
+011010101 dis 76032
+011010110 how/when 40
+011010110 hhow 51
+011010110 if/how 53
+011010110 when/how 56
+011010110 /how 56
+011010110 hpw 60
+011010110 how/where 78
+011010110 where/how 98
+011010110 hiw 101
+011010110 hoow 177
+011010110 h0w 476
+011010110 -how 494
+011010110 how 1673711
+011010110 howw 830
+0110101110 #instgain 42
+0110101110 /why 46
+0110101110 #whythefuck 47
+0110101110 #isitjustmeor 50
+0110101110 why- 60
+0110101110 #manwhy 65
+0110101110 whytf 68
+0110101110 why/how 93
+0110101110 #grandmawhy 105
+0110101110 #sincewhen 161
+0110101110 whhy 210
+0110101110 ytf 227
+0110101110 -why 258
+0110101110 #why 2192
+0110101110 why 986747
+0110101110 whyy 4009
+01101011110 whst 51
+01101011110 wgat 54
+01101011110 ¿what 56
+01101011110 where/what 68
+01101011110 //what 71
+01101011110 hwat 72
+01101011110 ehat 75
+01101011110 whta 83
+01101011110 what- 85
+01101011110 /what 95
+01101011110 whar 129
+01101011110 where/when 148
+01101011110 173
+01101011110 how/why 176
+01101011110 what/who 207
+01101011110 who/what 281
+01101011110 whay 417
+01101011110 what 2280851
+01101011110 -what 714
+011010111110 blathermouth 41
+011010111110 whcih 41
+011010111110 /that 45
+011010111110 00th 48
+011010111110 what&apos 49
+011010111110 /it 49
+011010111110 n3radio 50
+011010111110 //that 50
+011010111110 //this 52
+011010111110 tcpx 53
+011010111110 55
+011010111110 whichh 56
+011010111110 oooth 58
+011010111110 whick 60
+011010111110 runmeter 71
+011010111110 that&apos 79
+011010111110 beck/arnley 84
+011010111110 khlong 85
+011010111110 plos 86
+011010111110 cyclemeter 90
+011010111110 vgl 92
+011010111110 whitch 101
+011010111110 dcmis 101
+011010111110 #alliwantforchristmas 105
+011010111110 -which 110
+011010111110 -there 111
+011010111110 wch 133
+011010111110 @fanchecker 140
+011010111110 @meanbot 152
+011010111110 w/c 203
+011010111110 p_emr_community 204
+011010111110 it&apos 231
+011010111110 baitbot 237
+011010111110 whch 272
+011010111110 335
+011010111110 -that 364
+011010111110 #alliwant 558
+011010111110 whichever 1550
+011010111110 which 255461
+011010111110 wich 2285
+0110101111110 whare 62
+0110101111110 what/where 71
+0110101111110 wheere 78
+0110101111110 wherre 87
+0110101111110 wheaa 102
+0110101111110 #where 120
+0110101111110 #onlyinatl 124
+0110101111110 weaa 125
+0110101111110 -where 194
+0110101111110 whence 201
+0110101111110 when/where 262
+0110101111110 whre 403
+0110101111110 wheree 686
+0110101111110 where 578743
+0110101111110 whr 2678
+01101011111110 whatr 44
+01101011111110 nunna 45
+01101011111110 wh3r3 46
+01101011111110 wjat 49
+01101011111110 w3n 49
+01101011111110 werin 49
+01101011111110 wurr 50
+01101011111110 makesure 55
+01101011111110 watd 58
+01101011111110 wuhh 61
+01101011111110 ithouqht 62
+01101011111110 whurr 68
+01101011111110 ihf 70
+01101011111110 whereva 77
+01101011111110 wwhat 80
+01101011111110 whutt 88
+01101011111110 whadd 90
+01101011111110 keak 93
+01101011111110 wuht 95
+01101011111110 w@ 96
+01101011111110 wherr 101
+01101011111110 wutt 105
+01101011111110 whtt 107
+01101011111110 whud 112
+01101011111110 choa 116
+01101011111110 whot 116
+01101011111110 whhat 118
+01101011111110 hw's 137
+01101011111110 whur 144
+01101011111110 waat 154
+01101011111110 howa 185
+01101011111110 wath 215
+01101011111110 wadd 217
+01101011111110 wur 251
+01101011111110 whad 260
+01101011111110 weneva 312
+01101011111110 wuh 354
+01101011111110 ithought 553
+01101011111110 wetin 902
+01101011111110 whea 902
+01101011111110 waht 1404
+01101011111110 whatt 1800
+01101011111110 wea 2262
+01101011111110 wher 2347
+01101011111110 whut 2659
+01101011111110 wad 2876
+01101011111110 wt 4581
+01101011111110 wot 5756
+01101011111110 wha 7543
+01101011111110 wut 13128
+01101011111110 wat 128074
+01101011111110 wht 18363
+01101011111111 41
+01101011111111 2)release 43
+01101011111111 bonde 43
+01101011111111 antigas 43
+01101011111111 watr 45
+01101011111111 21.75 46
+01101011111111 awz 47
+01101011111111 1-41 47
+01101011111111 mp3/divx) 47
+01101011111111 dacht 50
+01101011111111 vond 50
+01101011111111 letras 56
+01101011111111 cntd 58
+01101011111111 (s 58
+01101011111111 c) 60
+01101011111111 18.18 64
+01101011111111 leef 65
+01101011111111 lembrei 69
+01101011111111 weda 69
+01101011111111 prr 77
+01101011111111 shebi 80
+01101011111111 yyyyy 80
+01101011111111 ˘ 81
+01101011111111 haat 82
+01101011111111 zie 86
+01101011111111 a) 89
+01101011111111 6.21 94
+01101011111111 hons 96
+01101011111111 esqueci 105
+01101011111111 yyyy 113
+01101011111111 tta 130
+01101011111111 l) 134
+01101011111111 sne 135
+01101011111111 bedoel 159
+01101011111111 #whyursingle 163
+01101011111111 wia 170
+01101011111111 y) 187
+01101011111111 8) 196
+01101011111111 again) 200
+01101011111111 hwo 209
+01101011111111 htf 212
+01101011111111 yyy 213
+01101011111111 lol) 237
+01101011111111 6600 268
+01101011111111 1313 328
+01101011111111 yhoo 389
+01101011111111 4400 491
+01101011111111 #whywebrokeup 532
+01101011111111 gbr 537
+01101011111111 lll 561
+01101011111111 contd 706
+01101011111111 vind 836
+01101011111111 shey 869
+01101011111111 yy 875
+01101011111111 y 124905
+01101011111111 heb 2324
+01101100000 veeeeeery 41
+01101100000 veryveryvery 41
+01101100000 vewwy 42
+01101100000 verryy 42
+01101100000 reeeeeal 44
+01101100000 _very_ 56
+01101100000 veddy 63
+01101100000 veryvery 64
+01101100000 wery 68
+01101100000 vair 68
+01101100000 verrrrrry 70
+01101100000 veryyyyy 71
+01101100000 vewi 79
+01101100000 veeeeery 82
+01101100000 vitally 83
+01101100000 oh-so 93
+01101100000 veery 104
+01101100000 106
+01101100000 -very 134
+01101100000 bery 143
+01101100000 strikingly 148
+01101100000 veeery 150
+01101100000 veeeery 151
+01101100000 veryyyy 153
+01101100000 verrrrry 165
+01101100000 veri 173
+01101100000 196
+01101100000 vewy 197
+01101100000 frighteningly 211
+01101100000 refreshingly 214
+01101100000 verrrry 279
+01101100000 281
+01101100000 veryyy 306
+01101100000 verrry 326
+01101100000 veryy 502
+01101100000 verry 941
+01101100000 vry 1189
+01101100000 relatively 3370
+01101100000 very 525356
+01101100000 fairly 8327
+01101100001 smashingly 40
+01101100001 purtty 40
+01101100001 wingardium 40
+01101100001 preeety 41
+01101100001 preddy 43
+01101100001 prettay 44
+01101100001 suchaa 46
+01101100001 pretttyyy 47
+01101100001 pretttyy 48
+01101100001 mind-blowingly 48
+01101100001 prettyyyyy 51
+01101100001 pretttttty 53
+01101100001 prettt 53
+01101100001 preeeetty 63
+01101100001 preeetty 76
+01101100001 pertty 78
+01101100001 reyt 82
+01101100001 prettttty 89
+01101100001 perdy 91
+01101100001 prtty 91
+01101100001 preetty 94
+01101100001 pweety 97
+01101100001 -pretty 97
+01101100001 beary 97
+01101100001 prettyyyy 110
+01101100001 sinfully 120
+01101100001 pretti 122
+01101100001 pretttty 169
+01101100001 perty 180
+01101100001 pritty 241
+01101100001 prety 298
+01101100001 pwetty 306
+01101100001 prettyy 360
+01101100001 prettty 522
+01101100001 preety 529
+01101100001 pree 621
+01101100001 suprisingly 878
+01101100001 surprisingly 8876
+01101100001 pretty 330248
+01101100001 perfectly 14029
+011011000100 abso-fucking-lutely 40
+011011000100 octavian 41
+011011000100 absofuckinglutely 46
+011011000100 absoulutely 46
+011011000100 absoutely 48
+011011000100 absoloutley 48
+011011000100 absolutey 49
+011011000100 51
+011011000100 truelly 53
+011011000100 oracular 64
+011011000100 certifiably 73
+011011000100 absoloutly 73
+011011000100 absoloutely 78
+011011000100 absoultely 79
+011011000100 breathtakingly 130
+011011000100 hauntingly 153
+011011000100 abso 164
+011011000100 unquestionably 211
+011011000100 truley 249
+011011000100 mistah 268
+011011000100 trully 429
+011011000100 absolutley 714
+011011000100 absolutly 1395
+011011000100 purely 2194
+011011000100 truely 3032
+011011000100 merely 3905
+011011000100 simply 32454
+011011000100 truly 42888
+011011000100 absolutely 55697
+011011000101 rigorously 40
+011011000101 physicaly 40
+011011000101 statically 40
+011011000101 colorfully 40
+011011000101 1000000% 40
+011011000101 supernaturally 41
+011011000101 sloppily 41
+011011000101 entertainingly 42
+011011000101 rabidly 42
+011011000101 obliviously 42
+011011000101 contextually 42
+011011000101 nominally 42
+011011000101 permenantly 43
+011011000101 toootally 43
+011011000101 attractively 43
+011011000101 cheekily 43
+011011000101 cynically 43
+011011000101 brazenly 43
+011011000101 crudely 43
+011011000101 studiously 44
+011011000101 juuuuuust 44
+011011000101 crucially 44
+011011000101 uselessly 44
+011011000101 theologically 44
+011011000101 clumsily 45
+011011000101 akwardly 45
+011011000101 inconveniently 45
+011011000101 invisibly 46
+011011000101 sonically 46
+011011000101 guiltily 46
+011011000101 pitifully 46
+011011000101 conventionally 46
+011011000101 confusingly 46
+011011000101 ideologically 47
+011011000101 honorably 47
+011011000101 immaculately 47
+011011000101 completey 48
+011011000101 semantically 48
+011011000101 diametrically 48
+011011000101 higly 48
+011011000101 mortally 49
+011011000101 lamely 50
+011011000101 100000% 50
+011011000101 hitherto 51
+011011000101 stilled 51
+011011000101 justifiably 52
+011011000101 superficially 52
+011011000101 breathlessly 52
+011011000101 perversely 52
+011011000101 coolly 53
+011011000101 adamantly 53
+011011000101 psychically 54
+011011000101 totz 54
+011011000101 insufficiently 54
+011011000101 conditionally 54
+011011000101 staunchly 54
+011011000101 immensly 55
+011011000101 toats 55
+011011000101 humorously 55
+011011000101 boringly 55
+011011000101 totallyy 56
+011011000101 heretofore 56
+011011000101 steadfastly 56
+011011000101 emotionaly 56
+011011000101 arrogantly 58
+011011000101 intricately 58
+011011000101 ably 59
+011011000101 ergonomically 59
+011011000101 heroically 60
+011011000101 symbolically 60
+011011000101 resolutely 61
+011011000101 sparsely 62
+011011000101 compleatly 64
+011011000101 unceremoniously 65
+011011000101 toally 66
+011011000101 maliciously 66
+011011000101 mentaly 67
+011011000101 thouroughly 67
+011011000101 nutritionally 68
+011011000101 dutifully 68
+011011000101 surreptitiously 69
+011011000101 facially 69
+011011000101 competely 69
+011011000101 uniformly 69
+011011000101 10000% 70
+011011000101 gramatically 70
+011011000101 structurally 71
+011011000101 unashamedly 71
+011011000101 ethnically 72
+011011000101 poetically 73
+011011000101 masterfully 76
+011011000101 hurriedly 76
+011011000101 childishly 77
+011011000101 contractually 77
+011011000101 stealthily 77
+011011000101 unironically 78
+011011000101 singularly 78
+011011000101 joyously 79
+011011000101 impeccably 80
+011011000101 ignorantly 80
+011011000101 electrically 81
+011011000101 conspicuously 81
+011011000101 provisionally 81
+011011000101 covertly 82
+011011000101 unapologetically 82
+011011000101 democratically 82
+011011000101 expressly 83
+011011000101 textually 83
+011011000101 1oo% 84
+011011000101 optimistically 84
+011011000101 fraudulently 86
+011011000101 deftly 88
+011011000101 stylishly 90
+011011000101 tactically 92
+011011000101 magnificently 93
+011011000101 savagely 93
+011011000101 unlawfully 95
+011011000101 purportedly 95
+011011000101 artfully 97
+011011000101 whole-heartedly 98
+011011000101 painstakingly 100
+011011000101 irrevocably 100
+011011000101 gainfully 103
+011011000101 categorically 104
+011011000101 unhappily 104
+011011000101 ferociously 104
+011011000101 unjustly 105
+011011000101 keenly 105
+011011000101 unabashedly 107
+011011000101 preemptively 107
+011011000101 anatomically 108
+011011000101 factually 108
+011011000101 constitutionally 109
+011011000101 regretfully 112
+011011000101 acutely 112
+011011000101 persistently 113
+011011000101 sleepily 113
+011011000101 strangly 114
+011011000101 audibly 115
+011011000101 divinely 117
+011011000101 impulsively 117
+011011000101 pointlessly 120
+011011000101 norahs 120
+011011000101 totallly 121
+011011000101 retroactively 123
+011011000101 expertly 124
+011011000101 meticulously 125
+011011000101 101% 127
+011011000101 mechanically 127
+011011000101 classically 128
+011011000101 biblically 129
+011011000101 amusingly 130
+011011000101 fervently 131
+011011000101 unequivocally 133
+011011000101 %100 136
+011011000101 hotly 137
+011011000101 cruelly 137
+011011000101 functionally 142
+011011000101 seasonally 144
+011011000101 hotfunnygirls 148
+011011000101 arbitrarily 148
+011011000101 ruthlessly 148
+011011000101 totall 151
+011011000101 flat-out 151
+011011000101 willfully 152
+011011000101 federally 152
+011011000101 centrally 155
+011011000101 passively 155
+011011000101 gravely 161
+011011000101 stubbornly 164
+011011000101 graphically 165
+011011000101 minimally 167
+011011000101 biologically 169
+011011000101 selfishly 170
+011011000101 authentically 171
+011011000101 lazily 172
+011011000101 gleefully 172
+011011000101 vehemently 177
+011011000101 artistically 184
+011011000101 throughly 185
+011011000101 tottally 188
+011011000101 unwittingly 188
+011011000101 faintly 191
+011011000101 anally 198
+011011000101 hastily 198
+011011000101 geographically 198
+011011000101 chemically 199
+011011000101 tastefully 203
+011011000101 severly 205
+011011000101 mindlessly 208
+011011000101 shamefully 220
+011011000101 forcefully 220
+011011000101 viciously 221
+011011000101 plainly 224
+011011000101 mightily 226
+011011000101 academically 236
+011011000101 bizarrely 237
+011011000101 irrationally 237
+011011000101 criminally 239
+011011000101 ethically 239
+011011000101 thinly 239
+011011000101 artificially 240
+011011000101 aesthetically 240
+011011000101 solidly 243
+011011000101 completley 245
+011011000101 needlessly 251
+011011000101 elegantly 252
+011011000101 gratefully 252
+011011000101 selectively 255
+011011000101 mathematically 256
+011011000101 powerfully 257
+011011000101 forcibly 258
+011011000101 systematically 258
+011011000101 creepily 258
+011011000101 fiscally 265
+011011000101 visibly 267
+011011000101 commercially 275
+011011000101 surgically 279
+011011000101 psychologically 280
+011011000101 tottaly 280
+011011000101 ttly 285
+011011000101 famously 286
+011011000101 richly 296
+011011000101 relentlessly 310
+011011000101 terminally 310
+011011000101 presumed 343
+011011000101 medically 346
+011011000101 graciously 350
+011011000101 romantically 350
+011011000101 tentatively 355
+011011000101 clinically 359
+011011000101 wrongfully 367
+011011000101 unfairly 368
+011011000101 predictably 370
+011011000101 adequately 377
+011011000101 subtly 378
+011011000101 fiercely 391
+011011000101 finely 397
+011011000101 culturally 405
+011011000101 heartily 405
+011011000101 racially 406
+011011000101 technologically 409
+011011000101 excitedly 409
+011011000101 unofficially 410
+011011000101 universally 413
+011011000101 grammatically 420
+011011000101 cleverly 450
+011011000101 consciously 454
+011011000101 1000% 455
+011011000101 radically 461
+011011000101 curiously 469
+011011000101 distinctly 469
+011011000101 intellectually 477
+011011000101 economically 479
+011011000101 rudely 502
+011011000101 perpetually 505
+011011000101 profoundly 511
+011011000101 humbly 526
+011011000101 overwhelmingly 533
+011011000101 strategically 536
+011011000101 duly 537
+011011000101 lovingly 540
+011011000101 uniquely 544
+011011000101 shamelessly 546
+011011000101 inexplicably 550
+011011000101 obsessively 554
+011011000101 scientifically 579
+011011000101 respectfully 581
+011011000101 falsely 590
+011011000101 cautiously 592
+011011000101 tragically 646
+011011000101 fundamentally 651
+011011000101 mutually 653
+011011000101 narrowly 673
+011011000101 creatively 680
+011011000101 similarly 683
+011011000101 royally 697
+011011000101 conveniently 699
+011011000101 110% 705
+011011000101 hopelessly 722
+011011000101 sufficiently 727
+011011000101 vastly 728
+011011000101 sorely 739
+011011000101 historically 766
+011011000101 morally 769
+011011000101 wholly 785
+011011000101 wholeheartedly 800
+011011000101 intensely 841
+011011000101 unintentionally 857
+011011000101 verbally 872
+011011000101 frantically 913
+011011000101 legitimately 920
+011011000101 genetically 929
+011011000101 critically 935
+011011000101 spiritually 949
+011011000101 violently 970
+011011000101 digitally 973
+011011000101 mysteriously 1014
+011011000101 musically 1017
+011011000101 promptly 1022
+011011000101 blatantly 1038
+011011000101 brutally 1081
+011011000101 totaly 1085
+011011000101 completly 1215
+011011000101 formally 1221
+011011000101 visually 1344
+011011000101 firmly 1440
+011011000101 majorly 1445
+011011000101 awkwardly 1507
+011011000101 vaguely 1613
+011011000101 largely 1616
+011011000101 anxiously 1648
+011011000101 continually 1662
+011011000101 eagerly 1681
+011011000101 financially 1763
+011011000101 seemingly 1866
+011011000101 severely 1939
+011011000101 openly 1971
+011011000101 politically 2024
+011011000101 positively 2214
+011011000101 partially 2248
+011011000101 consistently 2791
+011011000101 permanently 2799
+011011000101 freshly 2945
+011011000101 totes 3157
+011011000101 publicly 3317
+011011000101 potentially 3437
+011011000101 temporarily 3569
+011011000101 thoroughly 4167
+011011000101 sexually 4232
+011011000101 emotionally 4335
+011011000101 strongly 4377
+011011000101 legally 4418
+011011000101 greatly 5189
+011011000101 physically 6331
+011011000101 happily 6742
+011011000101 deeply 7109
+011011000101 mentally 8014
+011011000101 highly 20233
+011011000101 fully 20645
+011011000101 completely 49580
+011011000101 totally 129559
+011011000110 ferntree 40
+011011000110 abysmally 40
+011011000110 sublimely 41
+011011000110 tediously 41
+011011000110 geekily 41
+011011000110 unimaginably 42
+011011000110 embarassingly 43
+011011000110 ambiguously 43
+011011000110 glaringly 43
+011011000110 enjoyably 44
+011011000110 questionably 44
+011011000110 c&l's 44
+011011000110 satisfyingly 46
+011011000110 hellishly 46
+011011000110 pleasingly 46
+011011000110 ruggedly 46
+011011000110 13-month 46
+011011000110 noticably 47
+011011000110 awfa 47
+011011000110 extrememly 48
+011011000110 insufferably 48
+011011000110 extemely 49
+011011000110 #onewordthatdescribesme 50
+011011000110 excitingly 50
+011011000110 awesomly 50
+011011000110 blessedly 51
+011011000110 mindblowingly 51
+011011000110 stupendously 51
+011011000110 infuriatingly 52
+011011000110 megga 52
+011011000110 perilously 53
+011011000110 mildy 53
+011011000110 enfant 54
+011011000110 pleasently 54
+011011000110 unhealthily 54
+011011000110 uper 54
+011011000110 supaa 54
+011011000110 unrealistically 56
+011011000110 startlingly 56
+011011000110 extraaa 56
+011011000110 a406 56
+011011000110 stereotypically 57
+011011000110 très 57
+011011000110 suppper 58
+011011000110 terrifically 58
+011011000110 sibeh 59
+011011000110 mind-numbingly 59
+011011000110 heartbreakingly 60
+011011000110 proppa 61
+011011000110 velly 61
+011011000110 agonizingly 62
+011011000110 semi- 62
+011011000110 enola 62
+011011000110 slighly 62
+011011000110 marvelously 62
+011011000110 ecologically 63
+011011000110 35x 63
+011011000110 outstandingly 65
+011011000110 udderly 65
+011011000110 drop-dead 65
+011011000110 monumentally 68
+011011000110 awefully 69
+011011000110 achingly 70
+011011000110 verra 70
+011011000110 supeer 71
+011011000110 horrifyingly 73
+011011000110 suuuuuper 73
+011011000110 garrulous 73
+011011000110 uberly 73
+011011000110 staggeringly 74
+011011000110 frightfully 75
+011011000110 extremley 76
+011011000110 irritatingly 76
+011011000110 26-year 77
+011011000110 charmingly 79
+011011000110 -super 79
+011011000110 not-so 84
+011011000110 indescribably 84
+011011000110 inordinately 84
+011011000110 appallingly 84
+011011000110 markedly 86
+011011000110 blindingly 88
+011011000110 developmentally 88
+011011000110 unbelieveably 89
+011011000110 sopping 95
+011011000110 astoundingly 97
+011011000110 devilishly 99
+011011000110 sibei 99
+011011000110 unspeakably 99
+011011000110 terrifyingly 100
+011011000110 uncommonly 101
+011011000110 xtremely 101
+011011000110 philthy 102
+011011000110 ludicrously 105
+011011000110 extraa 105
+011011000110 sickeningly 106
+011011000110 devastatingly 107
+011011000110 exquisitely 116
+011011000110 laughably 117
+011011000110 dooper 120
+011011000110 patently 120
+011011000110 delmon 122
+011011000110 supr 127
+011011000110 disappointingly 127
+011011000110 unnaturally 128
+011011000110 irresistibly 128
+011011000110 disproportionately 128
+011011000110 phenomenally 132
+011011000110 deliriously 135
+011011000110 super-duper 139
+011011000110 oober 139
+011011000110 blazingly 143
+011011000110 comically 146
+011011000110 uncharacteristically 146
+011011000110 overtly 148
+011011000110 sooper 149
+011011000110 retardedly 154
+011011000110 alarmingly 158
+011011000110 extreamly 162
+011011000110 ubber 162
+011011000110 gorgeously 162
+011011000110 excruciatingly 163
+011011000110 horrifically 168
+011011000110 suuuuper 171
+011011000110 frustratingly 171
+011011000110 suppa 175
+011011000110 suuper 175
+011011000110 comparatively 179
+011011000110 brigham 181
+011011000110 horrendously 183
+011011000110 piggly 184
+011011000110 unseasonably 187
+011011000110 inferiority 197
+011011000110 depressingly 198
+011011000110 deceptively 203
+011011000110 astonishingly 207
+011011000110 obscenely 211
+011011000110 chronically 212
+011011000110 epik 213
+011011000110 unreasonably 214
+011011000110 hideously 214
+011011000110 dreadfully 216
+011011000110 rediculously 223
+011011000110 impressively 224
+011011000110 enormously 231
+011011000110 adorably 234
+011011000110 unbearably 238
+011011000110 suuuper 238
+011011000110 slighty 244
+011011000110 supah 249
+011011000110 pathetically 262
+011011000110 noticeably 262
+011011000110 notoriously 268
+011011000110 woefully 268
+011011000110 superbly 275
+011011000110 embarrassingly 291
+011011000110 wickedly 294
+011011000110 gloriously 302
+011011000110 superr 306
+011011000110 crazily 318
+011011000110 disturbingly 321
+011011000110 epicly 328
+011011000110 morbidly 330
+011011000110 über 333
+011011000110 bitterly 349
+011011000110 grossly 357
+011011000110 impossibly 361
+011011000110 supremely 393
+011011000110 uncomfortably 397
+011011000110 absurdly 399
+011011000110 spectacularly 400
+011011000110 outrageously 403
+011011000110 abnormally 415
+011011000110 obnoxiously 445
+011011000110 suitably 447
+011011000110 blissfully 449
+011011000110 stunningly 460
+011011000110 exceedingly 463
+011011000110 extraordinarily 487
+011011000110 fabulously 498
+011011000110 delightfully 509
+011011000110 disgustingly 512
+011011000110 excessively 542
+011011000110 marginally 544
+011011000110 extremly 567
+011011000110 fantastically 599
+011011000110 freakishly 611
+011011000110 epically 642
+011011000110 fashionably 670
+011011000110 deliciously 700
+011011000110 annoyingly 711
+011011000110 moderately 749
+011011000110 considerably 794
+011011000110 eternally 806
+011011000110 environmentally 811
+011011000110 hilariously 961
+011011000110 shockingly 972
+011011000110 infinitely 1065
+011011000110 downright 1117
+011011000110 unusually 1140
+011011000110 exceptionally 1210
+011011000110 wildly 1276
+011011000110 hugely 1278
+011011000110 borderline 1402
+011011000110 reasonably 1448
+011011000110 dangerously 1530
+011011000110 pleasantly 1562
+011011000110 awesomely 1614
+011011000110 massively 1654
+011011000110 stupidly 1692
+011011000110 painfully 1770
+011011000110 tres 1900
+011011000110 mildly 2129
+011011000110 wonderfully 2193
+011011000110 duper 2254
+011011000110 supa 2299
+011011000110 unbelievably 2584
+011011000110 awfully 2630
+011011000110 socially 2736
+011011000110 insanely 4077
+011011000110 overly 4094
+011011000110 utterly 4429
+011011000110 amazingly 6213
+011011000110 ridiculously 6250
+011011000110 uber 6596
+011011000110 ultra 6792
+011011000110 mega 9293
+011011000110 somewhat 9474
+011011000110 mighty 10880
+011011000110 incredibly 11708
+011011000110 slightly 21917
+011011000110 super 147835
+011011000110 extremely 22513
+0110110001110 somewat 43
+0110110001110 strangley 53
+0110110001110 wierdly 54
+0110110001110 unpleasantly 56
+0110110001110 unduly 56
+0110110001110 innately 56
+0110110001110 particulary 75
+0110110001110 eminently 76
+0110110001110 uncannily 77
+0110110001110 intrinsically 108
+0110110001110 worryingly 151
+0110110001110 undeniably 287
+0110110001110 scarily 353
+0110110001110 decently 377
+0110110001110 doubly 413
+0110110001110 inherently 575
+0110110001110 eerily 629
+0110110001110 suspiciously 632
+0110110001110 unnecessarily 638
+0110110001110 decidedly 681
+0110110001110 bode 936
+0110110001110 remarkably 1001
+0110110001110 weirdly 1207
+0110110001110 alil 1371
+0110110001110 alittle 2032
+0110110001110 remotely 2449
+0110110001110 increasingly 2681
+0110110001110 horribly 3319
+0110110001110 abit 3728
+0110110001110 strangely 3973
+0110110001110 equally 4365
+0110110001110 oddly 4441
+0110110001110 terribly 5051
+0110110001110 particularly 6698
+0110110001110 quite 95528
+0110110001110 entirely 9498
+0110110001111 jussa 40
+0110110001111 rle 44
+0110110001111 hellaaaa 44
+0110110001111 kidna 45
+0110110001111 baree 45
+0110110001111 kind've 47
+0110110001111 ohde 49
+0110110001111 sorda 53
+0110110001111 heka 54
+0110110001111 kiinda 55
+0110110001111 odhee 56
+0110110001111 kinnda 58
+0110110001111 jye 61
+0110110001111 jih 64
+0110110001111 helllllla 67
+0110110001111 wiggidy 68
+0110110001111 slicc 75
+0110110001111 kind-of 78
+0110110001111 knda 84
+0110110001111 kindah 85
+0110110001111 hellaaa 90
+0110110001111 kindaaa 94
+0110110001111 hellah 103
+0110110001111 hekka 110
+0110110001111 hellllla 117
+0110110001111 wiggity 123
+0110110001111 kida 128
+0110110001111 hellaa 131
+0110110001111 sortof 136
+0110110001111 jii 141
+0110110001111 hela 158
+0110110001111 helllla 179
+0110110001111 #slick 201
+0110110001111 justa 222
+0110110001111 kindda 263
+0110110001111 helluh 292
+0110110001111 propa 347
+0110110001111 hellla 385
+0110110001111 kinna 403
+0110110001111 kindaa 486
+0110110001111 kindof 580
+0110110001111 hecka 670
+0110110001111 sorta 8622
+0110110001111 kinda 128570
+0110110001111 hella 29767
+0110110010 heppi 41
+0110110010 /happy 41
+0110110010 happppyyy 41
+0110110010 happyyyyyy 43
+0110110010 hapyy 43
+0110110010 haaaaappy 45
+0110110010 happpyyyy 45
+0110110010 #ariaaquotes 48
+0110110010 happu 49
+0110110010 phuza 49
+0110110010 #brfutebol 52
+0110110010 habby 58
+0110110010 haaappy 58
+0110110010 60
+0110110010 haaaappy 70
+0110110010 happpppppy 71
+0110110010 happee 77
+0110110010 happt 81
+0110110010 happyyyyy 83
+0110110010 happpyy 91
+0110110010 heppy 93
+0110110010 haapy 103
+0110110010 happii 116
+0110110010 happppppy 123
+0110110010 happeh 130
+0110110010 happpyyy 134
+0110110010 haappy 135
+0110110010 156
+0110110010 happyyyy 166
+0110110010 happie 196
+0110110010 hpy 205
+0110110010 -happy 215
+0110110010 happpppy 233
+0110110010 happyyy 294
+0110110010 appy 300
+0110110010 hppy 378
+0110110010 hepi 412
+0110110010 happppy 440
+0110110010 hoppy 453
+0110110010 happi 505
+0110110010 hapi 607
+0110110010 hapy 608
+0110110010 happyy 638
+0110110010 wordless 701
+0110110010 happpy 1442
+0110110010 happy 630095
+0110110010 belated 4636
+01101100110 cotdamn 40
+01101100110 darm 42
+01101100110 gottdamn 45
+01101100110 daggum 46
+01101100110 damnt 46
+01101100110 /throws 47
+01101100110 dawm 49
+01101100110 daaaam 57
+01101100110 gotdam 61
+01101100110 dahm 62
+01101100110 goodthing 67
+01101100110 gahdamn 68
+01101100110 dadgum 71
+01101100110 daggone 71
+01101100110 gorram 78
+01101100110 daaam 91
+01101100110 dammmnn 91
+01101100110 danqq 92
+01101100110 zamn 95
+01101100110 danged 107
+01101100110 daam 110
+01101100110 damns 143
+01101100110 daymn 159
+01101100110 godamn 179
+01101100110 durn 195
+01101100110 sall 203
+01101100110 dxmn 208
+01101100110 damb 223
+01101100110 d*mn 226
+01101100110 dammmn 239
+01101100110 watta 289
+01101100110 dern 318
+01101100110 dammmm 343
+01101100110 daym 359
+01101100110 doggone 363
+01101100110 daamn 449
+01101100110 goddam 456
+01101100110 danm 473
+01101100110 dayumm 478
+01101100110 dammn 554
+01101100110 darned 706
+01101100110 gotdamn 716
+01101100110 dammm 854
+01101100110 whatta 1393
+01101100110 dayum 3495
+01101100110 damnn 3824
+01101100110 damm 4356
+01101100110 goddamn 6360
+01101100110 darn 15090
+01101100110 dam 20263
+01101100110 dang 33459
+01101100110 damn 361992
+01101100111 blady 40
+01101100111 freakiin 40
+01101100111 muthafukkin 41
+01101100111 fxkn 41
+01101100111 f_cking 41
+01101100111 frelling 42
+01101100111 fuc*ing 42
+01101100111 fuckkn 42
+01101100111 god-damned 42
+01101100111 mofuckin 43
+01101100111 fuching 43
+01101100111 flucking 43
+01101100111 f'kin 43
+01101100111 fxckinq 43
+01101100111 fuhkn 44
+01101100111 fckkin 44
+01101100111 freckin 44
+01101100111 fukcing 44
+01101100111 muthaf*ckin 44
+01101100111 f'ng 45
+01101100111 blooody 45
+01101100111 f*kin 46
+01101100111 fokin 46
+01101100111 fickin 46
+01101100111 fqkn 46
+01101100111 f***in 47
+01101100111 friking 48
+01101100111 uckin 48
+01101100111 fuckin` 48
+01101100111 fu**in 48
+01101100111 efing 48
+01101100111 fuxing 48
+01101100111 fuucking 49
+01101100111 freking 49
+01101100111 fukcin 49
+01101100111 flacking 49
+01101100111 chuffin 49
+01101100111 fucknn 49
+01101100111 efin 50
+01101100111 mfkn 50
+01101100111 f-n 51
+01101100111 #fuckin 51
+01101100111 mf'ing 51
+01101100111 fockin 51
+01101100111 efffing 51
+01101100111 mutherfucking 52
+01101100111 f*king 52
+01101100111 fkkin 52
+01101100111 f**cking 52
+01101100111 fuckinh 52
+01101100111 ucking 53
+01101100111 f*in 53
+01101100111 fudgin 53
+01101100111 blardy 54
+01101100111 fuccen 54
+01101100111 fk'n 54
+01101100111 efffin 55
+01101100111 fkg 55
+01101100111 fucc'n 56
+01101100111 fuckingggg 57
+01101100111 efn 57
+01101100111 freakkin 58
+01101100111 fuhkin 59
+01101100111 ficking 59
+01101100111 mfin 60
+01101100111 fuckenn 60
+01101100111 fuqkn 60
+01101100111 mf'in 61
+01101100111 fkng 61
+01101100111 muthafckin 61
+01101100111 fucing 61
+01101100111 muthafckn 62
+01101100111 way2 62
+01101100111 mutherfuckin 63
+01101100111 fuckiing 63
+01101100111 fuckinnnn 64
+01101100111 flipin 64
+01101100111 farkin 66
+01101100111 fcukn 66
+01101100111 muhfuggin 68
+01101100111 blimmin 69
+01101100111 freakingg 69
+01101100111 bladdy 69
+01101100111 f*n 70
+01101100111 flippn 71
+01101100111 fcknn 71
+01101100111 fckinn 72
+01101100111 frikking 73
+01101100111 fucckin 74
+01101100111 bleepin 74
+01101100111 f*ckn 75
+01101100111 god-damn 75
+01101100111 fuggn 79
+01101100111 bluddy 79
+01101100111 fuk'n 81
+01101100111 mafuckin 85
+01101100111 freakinq 85
+01101100111 chuffing 86
+01101100111 fuxxin 90
+01101100111 fawking 92
+01101100111 frickn 94
+01101100111 fucin 94
+01101100111 fuqkin 94
+01101100111 fscking 95
+01101100111 fu**ing 100
+01101100111 funking 101
+01101100111 mfing 101
+01101100111 fuckign 102
+01101100111 fuxin 102
+01101100111 fckng 105
+01101100111 phucking 108
+01101100111 fuckking 108
+01101100111 fugging 111
+01101100111 frigin 111
+01101100111 fu*kin 113
+01101100111 muthafukin 114
+01101100111 fawkin 116
+01101100111 freggin 116
+01101100111 fuqqin 116
+01101100111 fvckin 116
+01101100111 fuckng 117
+01101100111 fckinq 117
+01101100111 friggn 118
+01101100111 fuccing 120
+01101100111 fuckig 121
+01101100111 f-cking 121
+01101100111 fuckinqq 122
+01101100111 fcken 123
+01101100111 #ing 123
+01101100111 fuckinnn 123
+01101100111 muthafuckn 124
+01101100111 fvcking 127
+01101100111 fuckinggg 129
+01101100111 blinkin 129
+01101100111 fck'n 134
+01101100111 funkin 137
+01101100111 freak'n 137
+01101100111 phuckin 141
+01101100111 freakinn 141
+01101100111 fukking 141
+01101100111 frekin 143
+01101100111 cunting 145
+01101100111 fucn 146
+01101100111 ckin 147
+01101100111 fuqn 149
+01101100111 fukken 150
+01101100111 frakin 156
+01101100111 havea 160
+01101100111 bloddy 160
+01101100111 fuqin 161
+01101100111 focking 163
+01101100111 cking 164
+01101100111 mothafucking 167
+01101100111 fxckn 170
+01101100111 flippen 172
+01101100111 freeking 174
+01101100111 fu*king 175
+01101100111 farking 179
+01101100111 eff'n 180
+01101100111 frackin 182
+01101100111 mufuckin 199
+01101100111 mfn 199
+01101100111 fuckiin 202
+01101100111 friken 206
+01101100111 fkkn 209
+01101100111 frkn 210
+01101100111 frikken 215
+01101100111 fuxking 218
+01101100111 fraking 221
+01101100111 fuckkin 222
+01101100111 f-in 225
+01101100111 effen 226
+01101100111 f***ing 227
+01101100111 geta 233
+01101100111 bleeping 235
+01101100111 fackin 239
+01101100111 fuxkin 240
+01101100111 fuken 241
+01101100111 freekin 245
+01101100111 fudging 248
+01101100111 f*ing 255
+01101100111 fooking 276
+01101100111 fookin 300
+01101100111 fcukin 300
+01101100111 effn 305
+01101100111 mf'n 307
+01101100111 muthafucking 319
+01101100111 fuckingg 364
+01101100111 frakking 365
+01101100111 fcuking 369
+01101100111 frakkin 372
+01101100111 fukkn 372
+01101100111 f**kin 382
+01101100111 fuck'n 383
+01101100111 fuccn 386
+01101100111 frikin 396
+01101100111 sodding 409
+01101100111 flamin 421
+01101100111 ruddy 422
+01101100111 facking 433
+01101100111 goddamned 484
+01101100111 fkin 507
+01101100111 fuckinn 518
+01101100111 feckin 532
+01101100111 fxcking 545
+01101100111 fking 570
+01101100111 fracking 589
+01101100111 bloomin 604
+01101100111 fuckinq 614
+01101100111 fecking 641
+01101100111 fxckin 673
+01101100111 fing 701
+01101100111 frikkin 721
+01101100111 f'in 751
+01101100111 fuking 772
+01101100111 mothafuckin 776
+01101100111 freakn 789
+01101100111 freaken 803
+01101100111 f**king 1047
+01101100111 motherfuckin 1087
+01101100111 f*ckin 1112
+01101100111 frigging 1126
+01101100111 friggen 1147
+01101100111 fn 1190
+01101100111 fricking 1192
+01101100111 fuggin 1380
+01101100111 stinkin 1399
+01101100111 f-ing 1420
+01101100111 f'ing 1447
+01101100111 stinking 1659
+01101100111 muthafuckin 1685
+01101100111 fukkin 1705
+01101100111 fcking 1786
+01101100111 fuccin 1831
+01101100111 fukn 1917
+01101100111 fricken 2189
+01101100111 f*cking 2226
+01101100111 fckin 2620
+01101100111 motherfucking 2816
+01101100111 fkn 3024
+01101100111 flippin 3320
+01101100111 fckn 3388
+01101100111 f'n 3641
+01101100111 fukin 3946
+01101100111 frickin 3957
+01101100111 fucken 5008
+01101100111 fuckn 5123
+01101100111 effing 7743
+01101100111 effin 7795
+01101100111 friggin 7806
+01101100111 freakin 25507
+01101100111 bloody 30849
+01101100111 freaking 41226
+01101100111 fucking 218527
+01101100111 fuckin 81801
+011011010 to0o 43
+011011010 w/so 43
+011011010 tooooooooooooooo 46
+011011010 rull 50
+011011010 ttoo 59
+011011010 attttt 66
+011011010 toooooooooooooo 66
+011011010 tooooooooooooo 87
+011011010 -too 100
+011011010 toooooooooooo 111
+011011010 someeee 129
+011011010 tooooooooooo 149
+011011010 t0o 182
+011011010 to0 207
+011011010 toooooooooo 209
+011011010 t00 334
+011011010 tooooooooo 355
+011011010 toooooooo 606
+011011010 tremendously 676
+011011010 tooooooo 1069
+011011010 immensely 1080
+011011010 toooooo 2197
+011011010 tooooo 4340
+011011010 toooo 7294
+011011010 too 1267301
+011011010 tooo 14624
+0110110110 //so 64
+0110110110 /so 83
+0110110110 $o 110
+0110110110 so- 205
+0110110110 -so 497
+0110110110 so 3183833
+0110110110 s0 1196
+0110110111 ohso 40
+0110110111 superly 42
+0110110111 ssssoooo 42
+0110110111 sssooooo 43
+0110110111 sosososososo 43
+0110110111 /so/ 48
+0110110111 soooooooooooooooooooooooooo 49
+0110110111 _so_ 56
+0110110111 sooooooooooooooooooooooooo 60
+0110110111 sooooooooooooooooooooooo 60
+0110110111 soooooooooooooooooooooooo 61
+0110110111 s000 62
+0110110111 very2 64
+0110110111 superrrrr 68
+0110110111 ssooooo 73
+0110110111 sssoooo 76
+0110110111 soooooooooooooooooooooo 77
+0110110111 sososososo 82
+0110110111 so0o0o 87
+0110110111 sooooooooooooooooooooo 89
+0110110111 s00 91
+0110110111 s0o 95
+0110110111 ssoooo 95
+0110110111 #too 112
+0110110111 soooooooooooooooooooo 116
+0110110111 sssooo 125
+0110110111 ssoo 131
+0110110111 sooooooooooooooooooo 133
+0110110111 sosososo 143
+0110110111 soooooooooooooooooo 157
+0110110111 so0 171
+0110110111 superrrr 178
+0110110111 so0o 187
+0110110111 ssooo 191
+0110110111 sooooooooooooooooo 216
+0110110111 superrr 222
+0110110111 sososo 232
+0110110111 soooooooooooooooo 252
+0110110111 sooooooooooooooo 364
+0110110111 soooooooooooooo 428
+0110110111 soso 431
+0110110111 sooooooooooooo 594
+0110110111 soooooooooooo 815
+0110110111 sooooooooooo 1122
+0110110111 soooooooooo 1504
+0110110111 sooooooooo 2231
+0110110111 soooooooo 3487
+0110110111 sooooooo 6060
+0110110111 soooooo 12056
+0110110111 sooooo 25983
+0110110111 soooo 53790
+0110110111 soo 87460
+0110110111 sooo 86158
+011011100 lije 45
+011011100 likethe 47
+011011100 lkie 48
+011011100 liik3 55
+011011100 morethan 58
+011011100 slike 58
+011011100 l1k3 62
+011011100 liikee 65
+011011100 laik 67
+011011100 ilke 75
+011011100 aethalometer 83
+011011100 lilke 85
+011011100 leik 89
+011011100 liik 91
+011011100 likd 93
+011011100 liks 95
+011011100 lyk3 100
+011011100 lykk 106
+011011100 likr 107
+011011100 likw 108
+011011100 lykee 109
+011011100 iike 163
+011011100 loke 171
+011011100 likea 178
+011011100 liiike 181
+011011100 lile 188
+011011100 likke 206
+011011100 lik3 230
+011011100 like- 251
+011011100 llike 252
+011011100 likk 313
+011011100 lika 398
+011011100 likeee 955
+011011100 liike 1134
+011011100 lke 1498
+011011100 liek 1567
+011011100 lyke 1965
+011011100 lk 3167
+011011100 likee 5139
+011011100 lyk 8945
+011011100 like 2682178
+011011100 lik 12617
+0110111010 abouy 41
+0110111010 aboud 45
+0110111010 @biztools 45
+0110111010 abaut 47
+0110111010 sbout 47
+0110111010 abouth 48
+0110111010 aabout 50
+0110111010 baout 54
+0110111010 abbout 54
+0110111010 abiut 57
+0110111010 aboit 57
+0110111010 abput 65
+0110111010 anout 95
+0110111010 abuot 97
+0110111010 about- 120
+0110111010 aobut 122
+0110111010 abour 146
+0110111010 abwt 149
+0110111010 aboout 155
+0110111010 abotu 175
+0110111010 aout 221
+0110111010 abot 420
+0110111010 aboot 489
+0110111010 abut 629
+0110111010 a/b 636
+0110111010 about 1795996
+0110111010 abt 39626
+0110111011 #bout 40
+0110111011 bouht 46
+0110111011 boutchu 49
+0110111011 abtt 50
+0110111011 boutcha 55
+0110111011 biut 55
+0110111011 ineeded 55
+0110111011 boout 55
+0110111011 splaining 60
+0110111011 boudd 60
+0110111011 aboutttt 62
+0110111011 bouttt 65
+0110111011 6out 67
+0110111011 -about 75
+0110111011 bouu 76
+0110111011 bouut 110
+0110111011 bouh 111
+0110111011 abowt 126
+0110111011 abouttt 132
+0110111011 rabbids 165
+0110111011 iwanted 188
+0110111011 abouut 195
+0110111011 boud 204
+0110111011 #youlooklikethetype 232
+0110111011 ab0ut 246
+0110111011 bowt 291
+0110111011 b0ut 385
+0110111011 aboutt 640
+0110111011 boutt 643
+0110111011 #imthetype 652
+0110111011 bouts 1060
+0110111011 bout 257868
+0110111011 bou 1140
+011011110 alllllllllllllll 42
+011011110 aaaalll 42
+011011110 _all_ 43
+011011110 all/ 43
+011011110 oneof 45
+011011110 homefield 46
+011011110 aaallll 48
+011011110 allllllllllllll 51
+011011110 aaaaaall 55
+011011110 clobbering 59
+011011110 parappa 60
+011011110 -142 64
+011011110 aaalll 66
+011011110 somma 69
+011011110 alllllllllllll 75
+011011110 aaall 82
+011011110 allllllllllll 93
+011011110 aaaaall 108
+011011110 aaaall 121
+011011110 aall 132
+011011110 alllllllllll 139
+011011110 #fansgroup 157
+011011110 beedle 219
+011011110 allllllllll 225
+011011110 wads 289
+011011110 -all 363
+011011110 alllllllll 387
+011011110 all- 404
+011011110 allllllll 566
+011011110 alla 848
+011011110 alllllll 1003
+011011110 allllll 1854
+011011110 alllll 2782
+011011110 allll 3453
+011011110 all 2387900
+011011110 alll 5939
+011011111000 haing 42
+011011111000 hav'n 44
+011011111000 haviing 50
+011011111000 havig 52
+011011111000 hvg 56
+011011111000 havinqq 58
+011011111000 instituting 59
+011011111000 haviin 62
+011011111000 disecting 70
+011011111000 have'n 83
+011011111000 hvng 97
+011011111000 havinn 125
+011011111000 havng 126
+011011111000 aving 137
+011011111000 hvin 148
+011011111000 hvn 158
+011011111000 havingg 167
+011011111000 havein 185
+011011111000 avin 321
+011011111000 hving 331
+011011111000 havinq 358
+011011111000 needin 388
+011011111000 haveing 764
+011011111000 havn 914
+011011111000 needing 7663
+011011111000 having 307675
+011011111000 havin 20491
+011011111001 suuch 41
+011011111001 ibas 43
+011011111001 #collectivenouns 43
+011011111001 olor 53
+011011111001 huele 54
+011011111001 bisphenol 64
+011011111001 rumbo 65
+011011111001 prefieres 69
+011011111001 suchhhh 70
+011011111001 suuuuch 71
+011011111001 suuuch 74
+011011111001 87
+011011111001 83.140.241.8 98
+011011111001 83.140.241.7 103
+011011111001 suchhh 109
+011011111001 conoces 110
+011011111001 daki 138
+011011111001 paybacks 175
+011011111001 nary 198
+011011111001 suchh 215
+011011111001 daqui 222
+011011111001 folie 226
+011011111001 vas 1867
+011011111001 fil 2725
+011011111001 such 195682
+011011111001 voy 3747
+011011111010 beenin 54
+011011111010 be'n 56
+011011111010 beiing 57
+011011111010 #kexp 58
+011011111010 beig 69
+011011111010 b'n 71
+011011111010 numbingly 72
+011011111010 beinqq 74
+011011111010 beening 80
+011011111010 beign 91
+011011111010 beiin 99
+011011111010 beinn 105
+011011111010 bieng 136
+011011111010 beingg 219
+011011111010 beeing 512
+011011111010 beinq 620
+011011111010 kexp 3237
+011011111010 being 459665
+011011111010 bein 17637
+011011111011 gettinng 40
+011011111011 etting 42
+011011111011 geddin 43
+011011111011 gettimg 43
+011011111011 qettinqq 44
+011011111011 /gets 45
+011011111011 getitng 47
+011011111011 gerrin 47
+011011111011 gtin 48
+011011111011 getttting 49
+011011111011 #getting 54
+011011111011 gtting 67
+011011111011 -getting 70
+011011111011 gettinqq 72
+011011111011 qettn 82
+011011111011 gettiing 86
+011011111011 geeting 90
+011011111011 getiing 97
+011011111011 gettign 103
+011011111011 gettiin 109
+011011111011 gttin 111
+011011111011 gettinn 153
+011011111011 gettig 154
+011011111011 gittin 189
+011011111011 gett'n 198
+011011111011 getten 209
+011011111011 gttn 236
+011011111011 gettingg 258
+011011111011 getttin 260
+011011111011 gettng 276
+011011111011 -get 311
+011011111011 gtn 336
+011011111011 gettinq 355
+011011111011 get'n 411
+011011111011 qettinq 477
+011011111011 qettin 488
+011011111011 gettting 717
+011011111011 getin 1256
+011011111011 geting 1559
+011011111011 getn 2647
+011011111011 gettn 5223
+011011111011 getting 554163
+011011111011 gettin 81061
+0110111111000 followig 41
+0110111111000 ffin 44
+0110111111000 following- 47
+0110111111000 follwin 54
+0110111111000 twugging 55
+0110111111000 folowin 59
+0110111111000 re-following 61
+0110111111000 followinqq 62
+0110111111000 follow'n 65
+0110111111000 folloing 67
+0110111111000 followen 69
+0110111111000 followinggg 84
+0110111111000 ffing 90
+0110111111000 follwoing 99
+0110111111000 followng 100
+0110111111000 folling 102
+0110111111000 allowin 147
+0110111111000 fallowing 165
+0110111111000 f0ll0wing 200
+0110111111000 folllowing 204
+0110111111000 followingg 295
+0110111111000 folowing 312
+0110111111000 followinq 367
+0110111111000 follown 377
+0110111111000 follwing 396
+0110111111000 #following 786
+0110111111000 following 186119
+0110111111000 followin 7853
+0110111111001 killingg 40
+0110111111001 curvin 40
+0110111111001 pissen 40
+0110111111001 kalln 42
+0110111111001 tellinn 43
+0110111111001 sassing 43
+0110111111001 askinn 43
+0110111111001 pissinq 43
+0110111111001 reacquainting 43
+0110111111001 urking 44
+0110111111001 deluding 44
+0110111111001 kalling 45
+0110111111001 txtinq 46
+0110111111001 emailin 46
+0110111111001 booin 46
+0110111111001 misin 47
+0110111111001 controllin 47
+0110111111001 teachn 47
+0110111111001 askng 48
+0110111111001 letin 48
+0110111111001 dawgin 48
+0110111111001 familiarizing 48
+0110111111001 costin 49
+0110111111001 calling/texting 49
+0110111111001 defriending 49
+0110111111001 teln 51
+0110111111001 callingg 51
+0110111111001 @replying 51
+0110111111001 textinqq 51
+0110111111001 outdoing 52
+0110111111001 sicin 52
+0110111111001 chastising 52
+0110111111001 retweetn 53
+0110111111001 askingg 53
+0110111111001 stalkn 53
+0110111111001 correctin 53
+0110111111001 suporting 55
+0110111111001 threatenin 55
+0110111111001 introducin 57
+0110111111001 telin 57
+0110111111001 urkin 58
+0110111111001 threatin 59
+0110111111001 humoring 60
+0110111111001 expressin 60
+0110111111001 telephoning 61
+0110111111001 denyin 61
+0110111111001 marryin 61
+0110111111001 distractin 62
+0110111111001 callling 62
+0110111111001 scarying 62
+0110111111001 lettinq 62
+0110111111001 requestin 63
+0110111111001 messagin 63
+0110111111001 exposin 64
+0110111111001 babying 64
+0110111111001 erkin 64
+0110111111001 tellling 64
+0110111111001 abusin 64
+0110111111001 eyein 65
+0110111111001 calin 65
+0110111111001 harrasing 65
+0110111111001 touchn 67
+0110111111001 subbin 68
+0110111111001 indirecting 68
+0110111111001 teling 68
+0110111111001 oppressing 68
+0110111111001 mockin 70
+0110111111001 threatning 70
+0110111111001 texin 70
+0110111111001 neglectin 71
+0110111111001 rt'in 71
+0110111111001 avoidin 71
+0110111111001 call'n 73
+0110111111001 refollowing 74
+0110111111001 spoilin 75
+0110111111001 questionin 75
+0110111111001 textinn 79
+0110111111001 dm-ing 79
+0110111111001 bbm'n 80
+0110111111001 erking 80
+0110111111001 protectin 81
+0110111111001 tell'n 82
+0110111111001 mistreating 82
+0110111111001 doubtin 82
+0110111111001 snubbing 84
+0110111111001 killinq 84
+0110111111001 violatin 84
+0110111111001 leting 85
+0110111111001 @'ing 86
+0110111111001 @'n 87
+0110111111001 irkin 89
+0110111111001 comparin 90
+0110111111001 #unfollowing 91
+0110111111001 inboxing 91
+0110111111001 repeatin 94
+0110111111001 treatn 96
+0110111111001 disturbin 96
+0110111111001 immersing 96
+0110111111001 txt'n 97
+0110111111001 eluding 98
+0110111111001 copyin 100
+0110111111001 lulling 104
+0110111111001 disrespectin 105
+0110111111001 provin 105
+0110111111001 invitin 106
+0110111111001 mentionin 108
+0110111111001 iggin 110
+0110111111001 excusing 111
+0110111111001 dm'n 111
+0110111111001 letn 115
+0110111111001 trustin 117
+0110111111001 attackin 117
+0110111111001 remindin 121
+0110111111001 interupting 123
+0110111111001 threating 123
+0110111111001 forcin 125
+0110111111001 askinq 127
+0110111111001 helpn 131
+0110111111001 crediting 133
+0110111111001 weirding 134
+0110111111001 pleasuring 136
+0110111111001 hassling 139
+0110111111001 dickin 145
+0110111111001 subjecting 145
+0110111111001 disowning 146
+0110111111001 blamin 156
+0110111111001 callinq 157
+0110111111001 pissn 159
+0110111111001 kallin 161
+0110111111001 scarin 162
+0110111111001 distancing 164
+0110111111001 hounding 165
+0110111111001 tellinq 166
+0110111111001 bombarding 168
+0110111111001 msging 170
+0110111111001 un-following 172
+0110111111001 bossing 184
+0110111111001 irking 184
+0110111111001 spammin 192
+0110111111001 rapin 196
+0110111111001 depriving 202
+0110111111001 jinxing 209
+0110111111001 lettn 215
+0110111111001 spaming 215
+0110111111001 tormenting 242
+0110111111001 harrassing 244
+0110111111001 notifying 246
+0110111111001 joinin 254
+0110111111001 hoeing 265
+0110111111001 pranking 281
+0110111111001 nudging 283
+0110111111001 botherin 285
+0110111111001 serenading 292
+0110111111001 gassin 305
+0110111111001 ignorin 307
+0110111111001 judgin 311
+0110111111001 pestering 322
+0110111111001 teasin 334
+0110111111001 alerting 334
+0110111111001 pressuring 345
+0110111111001 killen 345
+0110111111001 doggin 351
+0110111111001 unfollowin 355
+0110111111001 dm'ing 358
+0110111111001 rt'n 375
+0110111111001 rt-ing 384
+0110111111001 mistaking 389
+0110111111001 testin 401
+0110111111001 complimenting 409
+0110111111001 supportin 423
+0110111111001 nominating 428
+0110111111001 iming 448
+0110111111001 killn 480
+0110111111001 impressing 491
+0110111111001 congratulating 500
+0110111111001 textn 508
+0110111111001 answerin 509
+0110111111001 teachin 536
+0110111111001 retweetin 612
+0110111111001 stalkin 640
+0110111111001 calln 653
+0110111111001 disrespecting 658
+0110111111001 askn 668
+0110111111001 tricking 703
+0110111111001 informing 785
+0110111111001 taunting 790
+0110111111001 dissin 798
+0110111111001 punishing 817
+0110111111001 telln 878
+0110111111001 accusing 988
+0110111111001 treatin 1061
+0110111111001 doubting 1106
+0110111111001 harassing 1144
+0110111111001 dming 1176
+0110111111001 contacting 1220
+0110111111001 torturing 1271
+0110111111001 txtin 1408
+0110111111001 txtn 1504
+0110111111001 neglecting 1587
+0110111111001 helpin 1646
+0110111111001 pissin 2203
+0110111111001 fooling 2241
+0110111111001 rting 2427
+0110111111001 bugging 3027
+0110111111001 scaring 3100
+0110111111001 lettin 3281
+0110111111001 teasing 3604
+0110111111001 textin 3975
+0110111111001 inviting 4290
+0110111111001 bothering 4307
+0110111111001 blaming 4397
+0110111111001 mentioning 4419
+0110111111001 forcing 4453
+0110111111001 unfollowing 4942
+0110111111001 reminding 5908
+0110111111001 allowing 6278
+0110111111001 begging 6330
+0110111111001 askin 7285
+0110111111001 pissing 8644
+0110111111001 stalking 8800
+0110111111001 treating 9064
+0110111111001 ignoring 9639
+0110111111001 callin 10582
+0110111111001 tellin 11612
+0110111111001 letting 29485
+0110111111001 telling 57848
+0110111111001 asking 59426
+01101111110100 retrying 40
+01101111110100 slaming 40
+01101111110100 stoppn 40
+01101111110100 untying 40
+01101111110100 crucifying 41
+01101111110100 enterin 41
+01101111110100 chionging 41
+01101111110100 dampening 41
+01101111110100 losinq 41
+01101111110100 dabbing 41
+01101111110100 shafting 41
+01101111110100 receivin 41
+01101111110100 micromanaging 42
+01101111110100 overnighting 42
+01101111110100 overplaying 42
+01101111110100 mutilating 42
+01101111110100 elfing 42
+01101111110100 smushing 42
+01101111110100 vaccinating 42
+01101111110100 reuploading 43
+01101111110100 bonking 43
+01101111110100 palming 43
+01101111110100 swamping 43
+01101111110100 braidin 43
+01101111110100 pursing 44
+01101111110100 marring 45
+01101111110100 markin 45
+01101111110100 two-timing 46
+01101111110100 pinchin 46
+01101111110100 patroling 46
+01101111110100 aping 46
+01101111110100 subletting 46
+01101111110100 infesting 47
+01101111110100 peppering 47
+01101111110100 jeopardizing 47
+01101111110100 parroting 47
+01101111110100 objectifying 48
+01101111110100 googleing 48
+01101111110100 restringing 48
+01101111110100 draging 49
+01101111110100 indoctrinating 49
+01101111110100 chancing 49
+01101111110100 motorboating 49
+01101111110100 outplaying 49
+01101111110100 pawning 50
+01101111110100 tonguing 50
+01101111110100 ferrying 51
+01101111110100 discrediting 51
+01101111110100 reseting 52
+01101111110100 shirking 52
+01101111110100 detaching 52
+01101111110100 google-ing 52
+01101111110100 unbuttoning 53
+01101111110100 overanalyzing 54
+01101111110100 repressing 54
+01101111110100 missingg 54
+01101111110100 binning 55
+01101111110100 antagonizing 55
+01101111110100 vacating 55
+01101111110100 overworking 55
+01101111110100 reprinting 55
+01101111110100 re-uploading 57
+01101111110100 badmouthing 57
+01101111110100 impregnating 58
+01101111110100 flunking 58
+01101111110100 soiling 58
+01101111110100 pattin 58
+01101111110100 discharging 60
+01101111110100 terrorising 60
+01101111110100 propelling 60
+01101111110100 enslaving 60
+01101111110100 swindling 61
+01101111110100 murking 61
+01101111110100 second-guessing 61
+01101111110100 smudging 61
+01101111110100 worming 61
+01101111110100 persuing 62
+01101111110100 dropn 62
+01101111110100 bedazzling 62
+01101111110100 despising 62
+01101111110100 rep'n 63
+01101111110100 girding 63
+01101111110100 defendin 63
+01101111110100 updateing 63
+01101111110100 reactivating 64
+01101111110100 ravaging 64
+01101111110100 solidifying 64
+01101111110100 teching 64
+01101111110100 pitying 64
+01101111110100 harshing 64
+01101111110100 assassinating 65
+01101111110100 disobeying 65
+01101111110100 pummeling 66
+01101111110100 prostituting 66
+01101111110100 approachin 66
+01101111110100 faving 66
+01101111110100 washn 66
+01101111110100 pegging 67
+01101111110100 mispronouncing 67
+01101111110100 conning 68
+01101111110100 deading 68
+01101111110100 parodying 69
+01101111110100 loseing 70
+01101111110100 misquoting 71
+01101111110100 evicting 71
+01101111110100 perming 71
+01101111110100 reprising 71
+01101111110100 retracting 72
+01101111110100 forsaking 72
+01101111110100 blacklisting 72
+01101111110100 hording 72
+01101111110100 handcuffing 72
+01101111110100 carding 72
+01101111110100 unzipping 72
+01101111110100 imprisoning 73
+01101111110100 dousing 73
+01101111110100 tarnishing 73
+01101111110100 intercepting 74
+01101111110100 cradling 74
+01101111110100 re-airing 74
+01101111110100 agitating 75
+01101111110100 plagiarizing 75
+01101111110100 shakn 75
+01101111110100 baptizing 75
+01101111110100 ditchin 76
+01101111110100 idolizing 76
+01101111110100 misinterpreting 76
+01101111110100 ileft 77
+01101111110100 changeing 78
+01101111110100 chaning 79
+01101111110100 mising 79
+01101111110100 caling 80
+01101111110100 hemorrhaging 80
+01101111110100 deleteing 81
+01101111110100 smiting 83
+01101111110100 ridiculing 84
+01101111110100 gone- 84
+01101111110100 coddling 85
+01101111110100 misssing 85
+01101111110100 high-fiving 86
+01101111110100 unblocking 87
+01101111110100 seperating 88
+01101111110100 rationalizing 88
+01101111110100 jabbing 89
+01101111110100 abducting 89
+01101111110100 overcharging 89
+01101111110100 blitzing 89
+01101111110100 nuzzling 90
+01101111110100 appeasing 91
+01101111110100 sapping 92
+01101111110100 #suspending 92
+01101111110100 quenching 94
+01101111110100 ousting 95
+01101111110100 repainting 95
+01101111110100 complementing 96
+01101111110100 impeding 97
+01101111110100 missen 97
+01101111110100 badgering 97
+01101111110100 categorizing 99
+01101111110100 cornering 99
+01101111110100 disciplining 99
+01101111110100 headbutting 99
+01101111110100 blowdrying 99
+01101111110100 visitng 100
+01101111110100 gainin 101
+01101111110100 interrogating 101
+01101111110100 coaxing 101
+01101111110100 controling 102
+01101111110100 acceptin 103
+01101111110100 unfriending 103
+01101111110100 stopin 104
+01101111110100 droppn 105
+01101111110100 aborting 105
+01101111110100 curving 108
+01101111110100 fining 108
+01101111110100 torching 108
+01101111110100 professing 108
+01101111110100 slating 111
+01101111110100 petitioning 112
+01101111110100 deporting 112
+01101111110100 favouriting 114
+01101111110100 twitpicing 117
+01101111110100 berating 118
+01101111110100 blackmailing 119
+01101111110100 reevaluating 120
+01101111110100 leaveing 120
+01101111110100 misreading 121
+01101111110100 skiving 124
+01101111110100 salting 124
+01101111110100 instructing 125
+01101111110100 lossing 126
+01101111110100 elbowing 127
+01101111110100 videotaping 128
+01101111110100 disguising 131
+01101111110100 videoing 131
+01101111110100 leavinq 133
+01101111110100 belittling 134
+01101111110100 shavin 134
+01101111110100 angering 135
+01101111110100 arching 135
+01101111110100 sueing 136
+01101111110100 steeling 136
+01101111110100 quizzing 137
+01101111110100 enlisting 138
+01101111110100 rekindling 141
+01101111110100 nicking 141
+01101111110100 re-evaluating 142
+01101111110100 zapping 143
+01101111110100 floodin 144
+01101111110100 befriending 149
+01101111110100 slitting 149
+01101111110100 paining 150
+01101111110100 creaming 150
+01101111110100 channelling 150
+01101111110100 leaven 150
+01101111110100 assuring 150
+01101111110100 shielding 151
+01101111110100 livetweeting 153
+01101111110100 feigning 154
+01101111110100 disputing 155
+01101111110100 honing 155
+01101111110100 inputting 157
+01101111110100 re-arranging 158
+01101111110100 squishing 159
+01101111110100 alienating 161
+01101111110100 visting 162
+01101111110100 envying 164
+01101111110100 resending 165
+01101111110100 ogling 166
+01101111110100 gritting 166
+01101111110100 nuking 166
+01101111110100 drugging 174
+01101111110100 refilling 174
+01101111110100 updatin 174
+01101111110100 eyeballing 176
+01101111110100 slurring 178
+01101111110100 textinq 178
+01101111110100 conceding 179
+01101111110100 dissolving 182
+01101111110100 dropin 182
+01101111110100 gauging 183
+01101111110100 yanking 183
+01101111110100 pitting 185
+01101111110100 slandering 186
+01101111110100 mimicking 186
+01101111110100 shunning 187
+01101111110100 prying 188
+01101111110100 fondling 188
+01101111110100 clenching 189
+01101111110100 wooing 190
+01101111110100 ramming 191
+01101111110100 payn 191
+01101111110100 escorting 191
+01101111110100 jocking 194
+01101111110100 egging 195
+01101111110100 smothering 195
+01101111110100 shadowing 195
+01101111110100 deactivating 196
+01101111110100 elevating 196
+01101111110100 sunning 196
+01101111110100 weaning 197
+01101111110100 benefitting 197
+01101111110100 hindering 198
+01101111110100 droping 199
+01101111110100 diverting 205
+01101111110100 bitting 205
+01101111110100 rearing 206
+01101111110100 saluting 207
+01101111110100 affirming 214
+01101111110100 caressing 214
+01101111110100 bookin 214
+01101111110100 flaunting 217
+01101111110100 consoling 218
+01101111110100 shaming 219
+01101111110100 rewinding 220
+01101111110100 clawing 222
+01101111110100 tolerating 224
+01101111110100 smearing 225
+01101111110100 fouling 227
+01101111110100 overloading 228
+01101111110100 muting 232
+01101111110100 sabotaging 236
+01101111110100 baring 239
+01101111110100 betraying 241
+01101111110100 downgrading 249
+01101111110100 terrorizing 251
+01101111110100 criticising 251
+01101111110100 spiking 256
+01101111110100 scamming 258
+01101111110100 luring 259
+01101111110100 critiquing 259
+01101111110100 enriching 259
+01101111110100 patrolling 259
+01101111110100 sparing 261
+01101111110100 underestimating 262
+01101111110100 infecting 267
+01101111110100 undressing 268
+01101111110100 dismissing 272
+01101111110100 applauding 273
+01101111110100 narrating 274
+01101111110100 deletin 276
+01101111110100 penetrating 277
+01101111110100 persuading 277
+01101111110100 effecting 284
+01101111110100 redirecting 286
+01101111110100 supervising 291
+01101111110100 stoping 292
+01101111110100 slaughtering 295
+01101111110100 strangling 296
+01101111110100 twiddling 301
+01101111110100 overtaking 301
+01101111110100 friending 307
+01101111110100 evacuating 313
+01101111110100 quiting 314
+01101111110100 butchering 316
+01101111110100 swiping 320
+01101111110100 ridding 323
+01101111110100 leavn 328
+01101111110100 prompting 328
+01101111110100 polluting 330
+01101111110100 groping 333
+01101111110100 e-mailing 333
+01101111110100 confessing 334
+01101111110100 live-tweeting 335
+01101111110100 bribing 339
+01101111110100 loosin 339
+01101111110100 tooting 353
+01101111110100 corrupting 359
+01101111110100 contradicting 363
+01101111110100 wagging 369
+01101111110100 basing 369
+01101111110100 favoriting 373
+01101111110100 flagging 373
+01101111110100 shagging 378
+01101111110100 pinging 381
+01101111110100 clutching 383
+01101111110100 injuring 384
+01101111110100 tilting 385
+01101111110100 adoring 386
+01101111110100 wetting 388
+01101111110100 voicing 388
+01101111110100 withdrawing 389
+01101111110100 disconnecting 390
+01101111110100 braiding 393
+01101111110100 harming 395
+01101111110100 dogging 395
+01101111110100 combing 399
+01101111110100 bucking 400
+01101111110100 plucking 405
+01101111110100 trapping 406
+01101111110100 herding 408
+01101111110100 411
+01101111110100 scolding 415
+01101111110100 pinning 416
+01101111110100 reblogging 422
+01101111110100 unplugging 425
+01101111110100 reloading 427
+01101111110100 chargin 432
+01101111110100 seducing 432
+01101111110100 compromising 433
+01101111110100 patting 436
+01101111110100 postponing 439
+01101111110100 divorcing 457
+01101111110100 disliking 462
+01101111110100 pwning 463
+01101111110100 grasping 470
+01101111110100 skippin 472
+01101111110100 molesting 477
+01101111110100 arresting 510
+01101111110100 dividing 515
+01101111110100 relieving 520
+01101111110100 assaulting 538
+01101111110100 dyeing 540
+01101111110100 re-tweeting 549
+01101111110100 influencing 551
+01101111110100 pausing 555
+01101111110100 massaging 557
+01101111110100 burying 557
+01101111110100 resetting 557
+01101111110100 emptying 568
+01101111110100 advocating 577
+01101111110100 whoring 593
+01101111110100 fingering 598
+01101111110100 bleaching 598
+01101111110100 trashing 610
+01101111110100 pinching 613
+01101111110100 freeing 614
+01101111110100 fetching 616
+01101111110100 phoning 626
+01101111110100 sacrificing 632
+01101111110100 decreasing 638
+01101111110100 rescuing 646
+01101111110100 altering 667
+01101111110100 erasing 675
+01101111110100 separating 686
+01101111110100 imitating 693
+01101111110100 repping 722
+01101111110100 tickling 726
+01101111110100 gripping 739
+01101111110100 guarding 742
+01101111110100 endorsing 755
+01101111110100 raiding 782
+01101111110100 hogging 796
+01101111110100 offending 801
+01101111110100 rebooting 802
+01101111110100 referencing 814
+01101111110100 redoing 816
+01101111110100 stroking 816
+01101111110100 peeping 820
+01101111110100 risking 837
+01101111110100 advising 858
+01101111110100 spraying 859
+01101111110100 respecting 863
+01101111110100 renewing 869
+01101111110100 booing 871
+01101111110100 replaying 886
+01101111110100 rejecting 890
+01101111110100 rearranging 891
+01101111110100 rt'ing 910
+01101111110100 stealin 935
+01101111110100 criticizing 963
+01101111110100 restarting 1000
+01101111110100 dodging 1010
+01101111110100 stoppin 1034
+01101111110100 interrupting 1046
+01101111110100 exiting 1053
+01101111110100 educating 1056
+01101111110100 taxing 1070
+01101111110100 urging 1074
+01101111110100 minding 1100
+01101111110100 invading 1105
+01101111110100 channeling 1118
+01101111110100 swallowing 1161
+01101111110100 robbing 1244
+01101111110100 chasin 1249
+01101111110100 smacking 1310
+01101111110100 limiting 1323
+01101111110100 fearing 1325
+01101111110100 slamming 1381
+01101111110100 humping 1406
+01101111110100 ditching 1409
+01101111110100 spoiling 1425
+01101111110100 sniffing 1425
+01101111110100 pimping 1433
+01101111110100 losin 1440
+01101111110100 dissing 1453
+01101111110100 changin 1493
+01101111110100 murdering 1573
+01101111110100 draining 1599
+01101111110100 dominating 1629
+01101111110100 correcting 1671
+01101111110100 exposing 1674
+01101111110100 abusing 1745
+01101111110100 borrowing 1762
+01101111110100 pleasing 1833
+01101111110100 dumping 1854
+01101111110100 raping 2051
+01101111110100 directing 2094
+01101111110100 denying 2130
+01101111110100 slapping 2138
+01101111110100 revealing 2180
+01101111110100 mocking 2187
+01101111110100 payin 2390
+01101111110100 marrying 2395
+01101111110100 poking 2470
+01101111110100 insulting 2546
+01101111110100 bashing 2592
+01101111110100 controlling 2617
+01101111110100 faking 2669
+01101111110100 convincing 2799
+01101111110100 scratching 2821
+01101111110100 emailing 2851
+01101111110100 welcoming 2990
+01101111110100 questioning 3016
+01101111110100 hugging 3226
+01101111110100 destroying 3232
+01101111110100 demanding 3235
+01101111110100 droppin 3311
+01101111110100 pressing 3353
+01101111110100 punching 3396
+01101111110100 copying 3542
+01101111110100 naming 3612
+01101111110100 quoting 3633
+01101111110100 repeating 3653
+01101111110100 quitting 3804
+01101111110100 shaving 3857
+01101111110100 loosing 4017
+01101111110100 gaining 4060
+01101111110100 attacking 4132
+01101111110100 defending 4144
+01101111110100 dragging 4152
+01101111110100 interviewing 4169
+01101111110100 licking 4233
+01101111110100 encouraging 4255
+01101111110100 biting 5088
+01101111110100 spamming 5238
+01101111110100 ruining 5261
+01101111110100 skipping 5473
+01101111110100 leavin 6118
+01101111110100 avoiding 6405
+01101111110100 deleting 6591
+01101111110100 blocking 6884
+01101111110100 reaching 6904
+01101111110100 judging 7173
+01101111110100 blasting 7569
+01101111110100 charging 7846
+01101111110100 feeding 8319
+01101111110100 touching 8966
+01101111110100 crossing 9002
+01101111110100 answering 9821
+01101111110100 stopping 10402
+01101111110100 shaking 10595
+01101111110100 stealing 10780
+01101111110100 chasing 10952
+01101111110100 dropping 14900
+01101111110100 beating 15506
+01101111110100 hurting 15624
+01101111110100 visiting 16895
+01101111110100 updating 17510
+01101111110100 teaching 22506
+01101111110100 paying 29227
+01101111110100 changing 32160
+01101111110100 losing 39148
+01101111110100 missing 86718
+01101111110100 calling 65785
+01101111110100 leaving 73387
+01101111110101 puttting 40
+01101111110101 givein 40
+01101111110101 cheffin 40
+01101111110101 spottin 41
+01101111110101 keepinq 41
+01101111110101 thowing 41
+01101111110101 usinq 41
+01101111110101 holdinq 42
+01101111110101 stirrin 42
+01101111110101 blowingg 42
+01101111110101 givingg 42
+01101111110101 frittered 43
+01101111110101 losen 43
+01101111110101 shovin 43
+01101111110101 grabin 43
+01101111110101 bustn 44
+01101111110101 hoofing 44
+01101111110101 hit'n 45
+01101111110101 put'n 46
+01101111110101 qivin 46
+01101111110101 tuckin 46
+01101111110101 -put 46
+01101111110101 givinq 47
+01101111110101 merking 48
+01101111110101 cloggin 49
+01101111110101 pluckin 50
+01101111110101 trowing 50
+01101111110101 hittinq 50
+01101111110101 tapin 51
+01101111110101 bittin 51
+01101111110101 sicing 51
+01101111110101 speading 51
+01101111110101 2bring 52
+01101111110101 shooing 53
+01101111110101 shying 54
+01101111110101 lickn 55
+01101111110101 slutting 55
+01101111110101 socking 55
+01101111110101 keep'n 55
+01101111110101 slathering 56
+01101111110101 cutin 57
+01101111110101 cutn 58
+01101111110101 glueing 58
+01101111110101 gasin 58
+01101111110101 changn 58
+01101111110101 wettin 58
+01101111110101 replacin 60
+01101111110101 tattin 60
+01101111110101 igave 61
+01101111110101 whiling 61
+01101111110101 deserting 61
+01101111110101 scopin 62
+01101111110101 splittin 64
+01101111110101 firin 64
+01101111110101 rentin 64
+01101111110101 wipin 64
+01101111110101 cuting 65
+01101111110101 singling 65
+01101111110101 scoopin 65
+01101111110101 gvn 67
+01101111110101 gasing 68
+01101111110101 sprayin 70
+01101111110101 blowinq 73
+01101111110101 blowinn 74
+01101111110101 tailing 78
+01101111110101 qivinq 79
+01101111110101 giveing 81
+01101111110101 puttinq 84
+01101111110101 stashing 84
+01101111110101 squaring 84
+01101111110101 kick'n 87
+01101111110101 lumping 87
+01101111110101 toppin 87
+01101111110101 pushn 92
+01101111110101 pulln 93
+01101111110101 tieing 94
+01101111110101 wacking 96
+01101111110101 givng 98
+01101111110101 teeing 99
+01101111110101 breakn 100
+01101111110101 buttering 103
+01101111110101 dodgin 104
+01101111110101 wifing 104
+01101111110101 sparkin 111
+01101111110101 clearin 112
+01101111110101 raffling 113
+01101111110101 ruinin 114
+01101111110101 sendn 115
+01101111110101 hiting 118
+01101111110101 bigging 122
+01101111110101 chaining 123
+01101111110101 pluggin 124
+01101111110101 handin 124
+01101111110101 returnin 124
+01101111110101 hitin 126
+01101111110101 coverin 130
+01101111110101 beatn 132
+01101111110101 catchn 135
+01101111110101 pickn 136
+01101111110101 swatting 141
+01101111110101 bringn 144
+01101111110101 punking 144
+01101111110101 cuttn 145
+01101111110101 hitten 147
+01101111110101 chuckin 149
+01101111110101 blanking 156
+01101111110101 clouding 158
+01101111110101 plaguing 158
+01101111110101 brushin 168
+01101111110101 screwin 173
+01101111110101 gving 179
+01101111110101 hitn 183
+01101111110101 putn 185
+01101111110101 snatchin 186
+01101111110101 eying 196
+01101111110101 piecing 197
+01101111110101 -pulls 210
+01101111110101 holdn 212
+01101111110101 gluing 213
+01101111110101 twistin 219
+01101111110101 psyching 228
+01101111110101 punchin 234
+01101111110101 carryin 242
+01101111110101 stringing 242
+01101111110101 flinging 246
+01101111110101 pressin 254
+01101111110101 clockin 258
+01101111110101 whacking 258
+01101111110101 pokin 264
+01101111110101 lightin 266
+01101111110101 baggin 269
+01101111110101 backin 273
+01101111110101 tappin 280
+01101111110101 givn 281
+01101111110101 keepn 285
+01101111110101 gracing 286
+01101111110101 roughing 301
+01101111110101 bussing 308
+01101111110101 puting 311
+01101111110101 brining 334
+01101111110101 feedin 335
+01101111110101 spouting 344
+01101111110101 gassing 349
+01101111110101 mouthing 374
+01101111110101 slagging 381
+01101111110101 puttn 388
+01101111110101 auctioning 395
+01101111110101 shoutin 408
+01101111110101 snatching 421
+01101111110101 hittn 423
+01101111110101 shuttin 428
+01101111110101 hyping 429
+01101111110101 addin 456
+01101111110101 hookin 459
+01101111110101 sparking 466
+01101111110101 nailing 469
+01101111110101 scratchin 496
+01101111110101 switchin 515
+01101111110101 chucking 529
+01101111110101 impersonating 534
+01101111110101 choppin 539
+01101111110101 jackin 551
+01101111110101 tearin 613
+01101111110101 hauling 642
+01101111110101 rubbin 694
+01101111110101 settin 750
+01101111110101 lickin 758
+01101111110101 postin 774
+01101111110101 savin 828
+01101111110101 whippin 842
+01101111110101 shoving 904
+01101111110101 jacking 934
+01101111110101 touchin 949
+01101111110101 squeezing 1134
+01101111110101 plugging 1332
+01101111110101 eyeing 1429
+01101111110101 recommending 1541
+01101111110101 wiping 1548
+01101111110101 sendin 1598
+01101111110101 beatin 1631
+01101111110101 bustin 1697
+01101111110101 pushin 1749
+01101111110101 tying 1831
+01101111110101 usin 1834
+01101111110101 catchin 1997
+01101111110101 pullin 2063
+01101111110101 hooking 2129
+01101111110101 turnin 2192
+01101111110101 breakin 2249
+01101111110101 locking 2251
+01101111110101 bringin 2290
+01101111110101 cuttin 2321
+01101111110101 pickin 2334
+01101111110101 busting 2581
+01101111110101 brushing 2726
+01101111110101 screwing 2823
+01101111110101 shitting 2887
+01101111110101 holdin 3189
+01101111110101 throwin 3349
+01101111110101 showin 3559
+01101111110101 ripping 3591
+01101111110101 tearing 4146
+01101111110101 rubbing 4265
+01101111110101 keepin 4637
+01101111110101 blowin 4783
+01101111110101 pointing 5428
+01101111110101 givin 6810
+01101111110101 puttin 7110
+01101111110101 hittin 8409
+01101111110101 fixing 10478
+01101111110101 pushing 13217
+01101111110101 pulling 14463
+01101111110101 joining 14475
+01101111110101 supporting 14610
+01101111110101 blowing 15205
+01101111110101 kicking 17211
+01101111110101 cutting 18391
+01101111110101 adding 20750
+01101111110101 throwing 20767
+01101111110101 bringing 25492
+01101111110101 hitting 26606
+01101111110101 holding 34008
+01101111110101 sending 38513
+01101111110101 helping 38670
+01101111110101 keeping 38832
+01101111110101 showing 41718
+01101111110101 giving 103184
+01101111110101 putting 55508
+01101111110110 weilding 40
+01101111110110 desecrating 40
+01101111110110 embodying 40
+01101111110110 obliterating 41
+01101111110110 overwriting 41
+01101111110110 lubricating 41
+01101111110110 pinpointing 41
+01101111110110 usng 41
+01101111110110 publicising 41
+01101111110110 re-making 42
+01101111110110 detaining 42
+01101111110110 relinquishing 42
+01101111110110 expending 42
+01101111110110 bulldozing 42
+01101111110110 penalizing 42
+01101111110110 prioritising 42
+01101111110110 unmasking 42
+01101111110110 massacring 43
+01101111110110 availing 43
+01101111110110 eclipsing 43
+01101111110110 chartering 43
+01101111110110 autographing 43
+01101111110110 outsmarting 43
+01101111110110 sanctioning 44
+01101111110110 forfeiting 44
+01101111110110 outrunning 44
+01101111110110 symbolizing 44
+01101111110110 espousing 45
+01101111110110 eliciting 45
+01101111110110 persecuting 45
+01101111110110 vetoing 45
+01101111110110 bilking 45
+01101111110110 likening 46
+01101111110110 cementing 46
+01101111110110 incurring 47
+01101111110110 deducting 47
+01101111110110 normalizing 47
+01101111110110 designating 47
+01101111110110 divulging 47
+01101111110110 disseminating 47
+01101111110110 virtualizing 47
+01101111110110 unclogging 47
+01101111110110 deterring 48
+01101111110110 replanting 48
+01101111110110 defaming 48
+01101111110110 perpetrating 48
+01101111110110 re-launching 48
+01101111110110 segmenting 48
+01101111110110 outgrowing 49
+01101111110110 displacing 49
+01101111110110 overshadowing 49
+01101111110110 republishing 49
+01101111110110 annoucing 49
+01101111110110 skewing 49
+01101111110110 subverting 49
+01101111110110 heralding 50
+01101111110110 conceptualizing 50
+01101111110110 overstating 50
+01101111110110 outfitting 50
+01101111110110 syndicating 50
+01101111110110 decrying 51
+01101111110110 rerunning 51
+01101111110110 derailing 51
+01101111110110 undercutting 51
+01101111110110 duping 51
+01101111110110 -use 52
+01101111110110 trialing 52
+01101111110110 manhandling 52
+01101111110110 adorning 52
+01101111110110 refurbishing 53
+01101111110110 re-running 53
+01101111110110 localizing 53
+01101111110110 certifying 53
+01101111110110 abetting 53
+01101111110110 deriving 54
+01101111110110 encrypting 54
+01101111110110 imparting 54
+01101111110110 circumventing 54
+01101111110110 fertilizing 55
+01101111110110 overthrowing 55
+01101111110110 maximising 56
+01101111110110 test-driving 56
+01101111110110 transplanting 56
+01101111110110 defusing 56
+01101111110110 spearheading 56
+01101111110110 bolstering 56
+01101111110110 obscuring 56
+01101111110110 negating 57
+01101111110110 devaluing 57
+01101111110110 monopolizing 57
+01101111110110 re-using 57
+01101111110110 redrawing 58
+01101111110110 falsifying 58
+01101111110110 televising 58
+01101111110110 foiling 58
+01101111110110 combatting 59
+01101111110110 reassessing 59
+01101111110110 reprogramming 60
+01101111110110 funneling 60
+01101111110110 pri's 60
+01101111110110 discarding 60
+01101111110110 dispersing 60
+01101111110110 modernizing 60
+01101111110110 fortifying 61
+01101111110110 politicizing 62
+01101111110110 inhibiting 63
+01101111110110 pocketing 63
+01101111110110 usingg 63
+01101111110110 retracing 63
+01101111110110 affording 63
+01101111110110 erecting 64
+01101111110110 contaminating 64
+01101111110110 trademarking 64
+01101111110110 expelling 64
+01101111110110 tainting 65
+01101111110110 re-creating 65
+01101111110110 nabbing 65
+01101111110110 mediating 65
+01101111110110 criminalizing 65
+01101111110110 evoking 66
+01101111110110 amplifying 66
+01101111110110 reframing 66
+01101111110110 ejecting 66
+01101111110110 re-inventing 66
+01101111110110 reinstating 67
+01101111110110 quantifying 67
+01101111110110 foregoing 67
+01101111110110 deflecting 67
+01101111110110 garnering 67
+01101111110110 confiscating 68
+01101111110110 re-releasing 68
+01101111110110 voiding 68
+01101111110110 re-entering 68
+01101111110110 fashioning 68
+01101111110110 shuttering 69
+01101111110110 repositioning 69
+01101111110110 offloading 69
+01101111110110 attributing 69
+01101111110110 downplaying 69
+01101111110110 re-enacting 69
+01101111110110 outperforming 70
+01101111110110 overusing 70
+01101111110110 frequenting 70
+01101111110110 regurgitating 70
+01101111110110 visualising 70
+01101111110110 severing 71
+01101111110110 redownloading 71
+01101111110110 allocating 71
+01101111110110 procuring 72
+01101111110110 nixing 72
+01101111110110 defacing 73
+01101111110110 mangling 73
+01101111110110 scrutinizing 73
+01101111110110 disassembling 73
+01101111110110 euthanizing 74
+01101111110110 averting 74
+01101111110110 enacting 74
+01101111110110 trumping 75
+01101111110110 omitting 76
+01101111110110 vandalizing 76
+01101111110110 heeding 76
+01101111110110 calibrating 76
+01101111110110 amassing 77
+01101111110110 reaffirming 77
+01101111110110 banishing 77
+01101111110110 infusing 77
+01101111110110 reconstructing 78
+01101111110110 redistributing 78
+01101111110110 supplementing 78
+01101111110110 favouring 78
+01101111110110 demonizing 78
+01101111110110 personalizing 78
+01101111110110 dotting 79
+01101111110110 refuting 79
+01101111110110 outpacing 80
+01101111110110 unearthing 80
+01101111110110 exerting 80
+01101111110110 reenacting 82
+01101111110110 optimising 82
+01101111110110 legislating 82
+01101111110110 extolling 82
+01101111110110 utilising 84
+01101111110110 spurring 85
+01101111110110 orchestrating 85
+01101111110110 diluting 85
+01101111110110 propagating 85
+01101111110110 tripling 85
+01101111110110 spotlighting 85
+01101111110110 publicizing 86
+01101111110110 re-designing 86
+01101111110110 conceiving 86
+01101111110110 squandering 87
+01101111110110 outlawing 87
+01101111110110 salvaging 87
+01101111110110 instilling 87
+01101111110110 nationalizing 88
+01101111110110 trialling 89
+01101111110110 forgoing 89
+01101111110110 equipping 90
+01101111110110 eradicating 90
+01101111110110 condensing 91
+01101111110110 enlarging 93
+01101111110110 dispelling 94
+01101111110110 liquidating 95
+01101111110110 synchronizing 95
+01101111110110 diversifying 95
+01101111110110 misrepresenting 95
+01101111110110 avenging 95
+01101111110110 populating 95
+01101111110110 transcending 96
+01101111110110 championing 99
+01101111110110 classifying 99
+01101111110110 fathering 99
+01101111110110 inheriting 99
+01101111110110 authorizing 100
+01101111110110 revitalizing 100
+01101111110110 depleting 100
+01101111110110 reconfiguring 100
+01101111110110 revoking 101
+01101111110110 insulating 101
+01101111110110 preordering 102
+01101111110110 hampering 104
+01101111110110 traversing 104
+01101111110110 mandating 104
+01101111110110 dispatching 105
+01101111110110 overturning 105
+01101111110110 subsidizing 106
+01101111110110 thwarting 107
+01101111110110 hoisting 107
+01101111110110 repaying 108
+01101111110110 bankrupting 108
+01101111110110 defrauding 110
+01101111110110 forbidding 111
+01101111110110 safeguarding 112
+01101111110110 fuelling 112
+01101111110110 chosing 112
+01101111110110 privatizing 112
+01101111110110 toppling 114
+01101111110110 equating 114
+01101111110110 overhauling 117
+01101111110110 chairing 117
+01101111110110 terminating 117
+01101111110110 targetting 118
+01101111110110 denouncing 120
+01101111110110 righting 120
+01101111110110 obstructing 121
+01101111110110 countering 121
+01101111110110 specifying 122
+01101111110110 demystifying 124
+01101111110110 simulating 125
+01101111110110 chronicling 126
+01101111110110 stockpiling 126
+01101111110110 furthering 126
+01101111110110 disregarding 127
+01101111110110 emulating 127
+01101111110110 straddling 128
+01101111110110 coining 128
+01101111110110 conveying 130
+01101111110110 fabricating 130
+01101111110110 upholding 131
+01101111110110 differentiating 131
+01101111110110 igniting 132
+01101111110110 stoking 133
+01101111110110 asserting 134
+01101111110110 harboring 134
+01101111110110 broadening 135
+01101111110110 insuring 136
+01101111110110 amending 136
+01101111110110 acing 137
+01101111110110 infiltrating 138
+01101111110110 honouring 138
+01101111110110 abolishing 139
+01101111110110 contesting 139
+01101111110110 rejoining 140
+01101111110110 relaying 141
+01101111110110 glorifying 142
+01101111110110 comprising 142
+01101111110110 misusing 143
+01101111110110 prolonging 144
+01101111110110 perpetuating 144
+01101111110110 uttering 146
+01101111110110 outselling 146
+01101111110110 reselling 147
+01101111110110 discontinuing 148
+01101111110110 distorting 148
+01101111110110 replicating 148
+01101111110110 inflating 148
+01101111110110 inflicting 148
+01101111110110 prescribing 150
+01101111110110 eroding 151
+01101111110110 mobilizing 153
+01101111110110 transmitting 154
+01101111110110 curating 154
+01101111110110 endangering 155
+01101111110110 breaching 158
+01101111110110 piloting 160
+01101111110110 guaranteeing 160
+01101111110110 administering 161
+01101111110110 discounting 161
+01101111110110 duplicating 163
+01101111110110 disclosing 164
+01101111110110 attaining 164
+01101111110110 aggregating 165
+01101111110110 substituting 166
+01101111110110 relaunching 166
+01101111110110 reconciling 169
+01101111110110 untangling 170
+01101111110110 dictating 172
+01101111110110 streamlining 173
+01101111110110 weathering 174
+01101111110110 reshaping 175
+01101111110110 evading 175
+01101111110110 clinching 178
+01101111110110 arming 183
+01101111110110 summarizing 183
+01101111110110 emitting 183
+01101111110110 #nextdoornerd 187
+01101111110110 waiving 190
+01101111110110 deconstructing 190
+01101111110110 suppressing 191
+01101111110110 concealing 194
+01101111110110 commiting 197
+01101111110110 re-installing 197
+01101111110110 overseeing 197
+01101111110110 minimizing 197
+01101111110110 reinforcing 197
+01101111110110 axing 199
+01101111110110 conserving 199
+01101111110110 demolishing 200
+01101111110110 prosecuting 200
+01101111110110 finalising 201
+01101111110110 silencing 201
+01101111110110 deciphering 202
+01101111110110 resurrecting 202
+01101111110110 reusing 202
+01101111110110 excepting 202
+01101111110110 emphasizing 204
+01101111110110 invoking 205
+01101111110110 appointing 207
+01101111110110 surpassing 207
+01101111110110 valuing 209
+01101111110110 preferring 217
+01101111110110 favoring 219
+01101111110110 formulating 219
+01101111110110 isolating 220
+01101111110110 curbing 223
+01101111110110 useing 226
+01101111110110 bypassing 226
+01101111110110 revolutionizing 227
+01101111110110 undermining 231
+01101111110110 stifling 235
+01101111110110 automating 238
+01101111110110 yielding 241
+01101111110110 envisioning 241
+01101111110110 encountering 241
+01101111110110 triggering 246
+01101111110110 live-blogging 247
+01101111110110 romancing 247
+01101111110110 initiating 247
+01101111110110 pre-ordering 250
+01101111110110 retrieving 252
+01101111110110 inciting 254
+01101111110110 diagnosing 254
+01101111110110 inspecting 254
+01101111110110 validating 256
+01101111110110 repealing 261
+01101111110110 aligning 264
+01101111110110 portraying 266
+01101111110110 verifying 270
+01101111110110 uncovering 272
+01101111110110 orbiting 273
+01101111110110 reserving 273
+01101111110110 regaining 276
+01101111110110 forging 283
+01101111110110 obeying 285
+01101111110110 combating 288
+01101111110110 awarding 290
+01101111110110 extracting 292
+01101111110110 seizing 298
+01101111110110 simplifying 299
+01101111110110 proclaiming 302
+01101111110110 assigning 305
+01101111110110 injecting 305
+01101111110110 reclaiming 308
+01101111110110 waging 311
+01101111110110 demoing 312
+01101111110110 peddling 312
+01101111110110 co-hosting 316
+01101111110110 harnessing 318
+01101111110110 reforming 319
+01101111110110 attaching 323
+01101111110110 possessing 326
+01101111110110 facilitating 326
+01101111110110 analysing 327
+01101111110110 renovating 327
+01101111110110 reaping 329
+01101111110110 condemning 329
+01101111110110 dissecting 330
+01101111110110 disrupting 331
+01101111110110 transporting 331
+01101111110110 sustaining 332
+01101111110110 cultivating 335
+01101111110110 restricting 341
+01101111110110 uninstalling 343
+01101111110110 touting 345
+01101111110110 shorting 349
+01101111110110 withholding 351
+01101111110110 activating 352
+01101111110110 recreating 355
+01101111110110 justifying 355
+01101111110110 scouring 367
+01101111110110 imposing 368
+01101111110110 wielding 369
+01101111110110 consolidating 369
+01101111110110 interpreting 371
+01101111110110 fostering 372
+01101111110110 soliciting 372
+01101111110110 regulating 377
+01101111110110 accelerating 385
+01101111110110 manipulating 385
+01101111110110 aiding 390
+01101111110110 monetizing 391
+01101111110110 enforcing 391
+01101111110110 unleashing 392
+01101111110110 debunking 401
+01101111110110 electing 404
+01101111110110 exceeding 406
+01101111110110 modifying 408
+01101111110110 constructing 413
+01101111110110 pronouncing 414
+01101111110110 disabling 431
+01101111110110 upping 434
+01101111110110 inserting 443
+01101111110110 probing 445
+01101111110110 executing 448
+01101111110110 approving 450
+01101111110110 absorbing 455
+01101111110110 impacting 460
+01101111110110 resuming 461
+01101111110110 recieving 462
+01101111110110 previewing 468
+01101111110110 redefining 473
+01101111110110 retaining 474
+01101111110110 locating 474
+01101111110110 confronting 475
+01101111110110 revamping 477
+01101111110110 perusing 477
+01101111110110 maximizing 483
+01101111110110 reversing 484
+01101111110110 reviving 488
+01101111110110 paving 492
+01101111110110 employing 506
+01101111110110 reciting 506
+01101111110110 perfecting 507
+01101111110110 visualizing 511
+01101111110110 projecting 517
+01101111110110 occupying 522
+01101111110110 slashing 525
+01101111110110 reinventing 554
+01101111110110 bridging 557
+01101111110110 exploiting 560
+01101111110110 incorporating 561
+01101111110110 tracing 561
+01101111110110 resolving 569
+01101111110110 redesigning 571
+01101111110110 customizing 572
+01101111110110 renaming 576
+01101111110110 ensuring 580
+01101111110110 strengthening 582
+01101111110110 readying 582
+01101111110110 barring 600
+01101111110110 supplying 603
+01101111110110 milking 616
+01101111110110 assessing 618
+01101111110110 conquering 620
+01101111110110 preserving 623
+01101111110110 distributing 628
+01101111110110 suspending 629
+01101111110110 censoring 641
+01101111110110 issuing 642
+01101111110110 documenting 642
+01101111110110 remaking 652
+01101111110110 obtaining 657
+01101111110110 leveraging 658
+01101111110110 deploying 663
+01101111110110 curing 694
+01101111110110 fleeing 714
+01101111110110 defeating 715
+01101111110110 configuring 716
+01101111110110 examining 727
+01101111110110 assembling 729
+01101111110110 calculating 735
+01101111110110 determining 736
+01101111110110 demonstrating 745
+01101111110110 optimizing 754
+01101111110110 showcasing 756
+01101111110110 inventing 767
+01101111110110 reinstalling 775
+01101111110110 recalling 775
+01101111110110 undergoing 777
+01101111110110 advancing 788
+01101111110110 repairing 804
+01101111110110 establishing 810
+01101111110110 revisiting 814
+01101111110110 exchanging 824
+01101111110110 enhancing 833
+01101111110110 abandoning 837
+01101111110110 navigating 847
+01101111110110 arguably 853
+01101111110110 accessing 864
+01101111110110 securing 884
+01101111110110 enabling 905
+01101111110110 utilizing 909
+01101111110110 storing 910
+01101111110110 unlocking 948
+01101111110110 acquiring 993
+01101111110110 eliminating 998
+01101111110110 evaluating 1000
+01101111110110 delaying 1006
+01101111110110 finalizing 1006
+01101111110110 violating 1015
+01101111110110 shedding 1039
+01101111110110 identifying 1040
+01101111110110 highlighting 1056
+01101111110110 integrating 1077
+01101111110110 boycotting 1084
+01101111110110 citing 1084
+01101111110110 photographing 1119
+01101111110110 transforming 1136
+01101111110110 cancelling 1152
+01101111110110 witnessing 1153
+01101111110110 lowering 1169
+01101111110110 recognizing 1183
+01101111110110 capturing 1232
+01101111110110 requiring 1237
+01101111110110 displaying 1244
+01101111110110 confirming 1250
+01101111110110 conducting 1270
+01101111110110 rethinking 1275
+01101111110110 declaring 1279
+01101111110110 overcoming 1298
+01101111110110 combining 1327
+01101111110110 attracting 1329
+01101111110110 boosting 1338
+01101111110110 canceling 1344
+01101111110110 committing 1361
+01101111110110 organising 1361
+01101111110110 honoring 1419
+01101111110110 adopting 1451
+01101111110110 pursuing 1458
+01101111110110 implementing 1488
+01101111110110 analyzing 1522
+01101111110110 restoring 1547
+01101111110110 extending 1601
+01101111110110 addressing 1625
+01101111110110 selecting 1646
+01101111110110 tackling 1706
+01101111110110 submitting 1726
+01101111110110 suing 1790
+01101111110110 mastering 1837
+01101111110110 placing 1846
+01101111110110 predicting 1875
+01101111110110 embracing 1883
+01101111110110 generating 1904
+01101111110110 achieving 1911
+01101111110110 sponsoring 1936
+01101111110110 banning 2040
+01101111110110 maintaining 2076
+01101111110110 describing 2081
+01101111110110 forming 2082
+01101111110110 requesting 2113
+01101111110110 completing 2251
+01101111110110 renting 2357
+01101111110110 reducing 2381
+01101111110110 measuring 2392
+01101111110110 representing 2432
+01101111110110 targeting 2505
+01101111110110 solving 2561
+01101111110110 battling 3230
+01101111110110 owning 3230
+01101111110110 expanding 3254
+01101111110110 delivering 3476
+01101111110110 purchasing 3597
+01101111110110 producing 3599
+01101111110110 converting 3700
+01101111110110 protecting 3809
+01101111110110 removing 3816
+01101111110110 investigating 4034
+01101111110110 donating 4151
+01101111110110 replacing 4222
+01101111110110 collecting 4483
+01101111110110 comparing 4526
+01101111110110 experiencing 4847
+01101111110110 announcing 4938
+01101111110110 improving 5247
+01101111110110 exploring 5320
+01101111110110 increasing 5433
+01101111110110 releasing 5681
+01101111110110 providing 5725
+01101111110110 accepting 6063
+01101111110110 managing 6208
+01101111110110 entering 6282
+01101111110110 receiving 6740
+01101111110110 launching 7391
+01101111110110 spreading 7866
+01101111110110 promoting 8179
+01101111110110 covering 8435
+01101111110110 developing 8804
+01101111110110 discussing 8828
+01101111110110 facing 9108
+01101111110110 choosing 9374
+01101111110110 installing 9666
+01101111110110 attending 12549
+01101111110110 seeking 15018
+01101111110110 offering 15328
+01101111110110 selling 36453
+01101111110110 using 162865
+011011111101110 takiin 46
+011011111101110 take'n 47
+011011111101110 takinqq 48
+011011111101110 wearingg 48
+011011111101110 -taking 49
+011011111101110 wear'n 51
+011011111101110 keeling 55
+011011111101110 proctoring 61
+011011111101110 lobbing 62
+011011111101110 takng 62
+011011111101110 tkin 63
+011011111101110 bendin 66
+011011111101110 ruffling 67
+011011111101110 concocting 67
+011011111101110 tking 70
+011011111101110 itook 70
+011011111101110 brandishing 79
+011011111101110 carring 81
+011011111101110 takein 83
+011011111101110 takinn 88
+011011111101110 tkn 96
+011011111101110 chaperoning 98
+011011111101110 wearinq 99
+011011111101110 selln 103
+011011111101110 collectin 107
+011011111101110 becomming 122
+011011111101110 takingg 123
+011011111101110 tkng 133
+011011111101110 retaking 134
+011011111101110 #sagealert 153
+011011111101110 devoting 164
+011011111101110 devising 168
+011011111101110 uploadin 181
+011011111101110 wearn 200
+011011111101110 takinq 230
+011011111101110 donning 235
+011011111101110 takeing 278
+011011111101110 becomin 313
+011011111101110 copping 382
+011011111101110 expectin 399
+011011111101110 takn 629
+011011111101110 mulling 704
+011011111101110 sellin 1933
+011011111101110 wearin 4626
+011011111101110 carrying 9654
+011011111101110 takin 16398
+011011111101110 expecting 16459
+011011111101110 becoming 24682
+011011111101110 taking 162606
+011011111101110 wearing 75596
+011011111101111 -making 41
+011011111101111 spooking 41
+011011111101111 re-introducing 41
+011011111101111 makiing 43
+011011111101111 kilin 44
+011011111101111 reintroducing 44
+011011111101111 drainin 44
+011011111101111 extorting 53
+011011111101111 makinqq 56
+011011111101111 #twt 61
+011011111101111 maing 64
+011011111101111 diddy-dirty 67
+011011111101111 mking 68
+011011111101111 rasing 71
+011011111101111 makng 73
+011011111101111 killling 73
+011011111101111 makiin 73
+011011111101111 kill'n 76
+011011111101111 @ing 80
+011011111101111 make'n 82
+011011111101111 kiling 86
+011011111101111 -makes 95
+011011111101111 refunding 97
+011011111101111 dispicable 109
+011011111101111 imake 110
+011011111101111 makingg 114
+011011111101111 buyn 115
+011011111101111 makinn 136
+011011111101111 squashing 145
+011011111101111 makein 147
+011011111101111 wreaks 149
+011011111101111 creatin 153
+011011111101111 bettering 164
+011011111101111 depositing 179
+011011111101111 wreaking 184
+011011111101111 loaning 190
+011011111101111 snagging 196
+011011111101111 unwrapping 225
+011011111101111 makinq 316
+011011111101111 granting 359
+011011111101111 devouring 460
+011011111101111 makeing 468
+011011111101111 makn 638
+011011111101111 accompanying 648
+011011111101111 maken 699
+011011111101111 costing 1334
+011011111101111 despicable 1368
+011011111101111 preventing 1919
+011011111101111 buyin 2340
+011011111101111 earning 4346
+011011111101111 causing 6932
+011011111101111 introducing 7421
+011011111101111 raising 9487
+011011111101111 killin 11567
+011011111101111 creating 20680
+011011111101111 saving 21612
+011011111101111 makin 23811
+011011111101111 killing 48185
+011011111101111 making 251188
+011011111101111 buying 50613
+0110111111100 watchinnn 40
+0110111111100 watchinh 40
+0110111111100 waatching 41
+0110111111100 wathin 41
+0110111111100 haway 42
+0110111111100 wtchng 42
+0110111111100 watchnn 44
+0110111111100 rapidhare 44
+0110111111100 watchg 47
+0110111111100 watchimg 48
+0110111111100 watchinng 51
+0110111111100 d/ling 52
+0110111111100 #crapsuperpowers 53
+0110111111100 wathching 56
+0110111111100 listening/watching 56
+0110111111100 watchiinq 59
+0110111111100 visca 62
+0110111111100 watcin 65
+0110111111100 -rascal 68
+0110111111100 warching 75
+0110111111100 wtchn 75
+0110111111100 dl-ing 76
+0110111111100 wacthin 76
+0110111111100 wtaching 77
+0110111111100 wtchin 81
+0110111111100 tivoing 82
+0110111111100 dvr'ing 84
+0110111111100 dl'ing 102
+0110111111100 watchiing 108
+0110111111100 watchign 109
+0110111111100 watchinggg 112
+0110111111100 whatchin 122
+0110111111100 -watching 126
+0110111111100 wtching 131
+0110111111100 wachin 148
+0110111111100 watchig 151
+0110111111100 recapping 234
+0110111111100 wathcing 239
+0110111111100 watchinqq 272
+0110111111100 watchiin 286
+0110111111100 watch'n 314
+0110111111100 wathing 314
+0110111111100 watchng 331
+0110111111100 watchen 338
+0110111111100 wacthing 348
+0110111111100 watchinn 350
+0110111111100 watcing 354
+0110111111100 977 395
+0110111111100 whatching 528
+0110111111100 re-watching 653
+0110111111100 watchingg 657
+0110111111100 waching 708
+0110111111100 rereading 748
+0110111111100 braving 753
+0110111111100 #watching 862
+0110111111100 scrobbling 925
+0110111111100 #reading 1020
+0110111111100 rewatching 1026
+0110111111100 watchinq 1041
+0110111111100 defying 1042
+0110111111100 re-reading 1083
+0110111111100 watchn 4514
+0110111111100 watching 521438
+0110111111100 watchin 45493
+01101111111010 rembering 40
+01101111111010 seening 45
+01101111111010 retyping 52
+01101111111010 hearinq 55
+01101111111010 imet 55
+01101111111010 c'n 58
+01101111111010 rehabilitating 58
+01101111111010 reiterating 80
+01101111111010 seeeing 81
+01101111111010 remebering 90
+01101111111010 misplacing 96
+01101111111010 rememberin 103
+01101111111010 see'n 126
+01101111111010 stubbing 129
+01101111111010 seeinq 129
+01101111111010 comprehending 145
+01101111111010 condoning 153
+01101111111010 iseen 166
+01101111111010 recognising 195
+01101111111010 overhearing 248
+01101111111010 seing 265
+01101111111010 acknowledging 698
+01101111111010 findin 718
+01101111111010 picturing 1045
+01101111111010 hearin 1733
+01101111111010 expressing 1905
+01101111111010 imagining 2547
+01101111111010 trusting 3036
+01101111111010 discovering 3868
+01101111111010 noticing 4317
+01101111111010 seein 5345
+01101111111010 remembering 9525
+01101111111010 hearing 38107
+01101111111010 finding 42376
+01101111111010 seeing 105092
+01101111111011 googlin 40
+01101111111011 whipin 40
+01101111111011 lov'n 40
+01101111111011 livein 40
+01101111111011 reppn 40
+01101111111011 youtubin 41
+01101111111011 kikn 41
+01101111111011 dedicatin 41
+01101111111011 myspacin 41
+01101111111011 hotboxing 42
+01101111111011 destroyin 42
+01101111111011 loooving 42
+01101111111011 photoshoppin 42
+01101111111011 gymin 43
+01101111111011 lovinnn 43
+01101111111011 vazut 43
+01101111111011 ruing 43
+01101111111011 regrettin 44
+01101111111011 rokin 45
+01101111111011 fearin 45
+01101111111011 totin 45
+01101111111011 explorin 46
+01101111111011 trashin 46
+01101111111011 dvr-ing 46
+01101111111011 enjoyng 48
+01101111111011 treasuring 49
+01101111111011 waxin 49
+01101111111011 luv'n 49
+01101111111011 loviin 49
+01101111111011 looooving 49
+01101111111011 njoyin 50
+01101111111011 reelin 52
+01101111111011 awaitin 52
+01101111111011 bumpinn 52
+01101111111011 rockinn 53
+01101111111011 lovinggg 55
+01101111111011 yankin 55
+01101111111011 love'n 55
+01101111111011 praisin 57
+01101111111011 survivin 58
+01101111111011 scrapin 60
+01101111111011 wingin 60
+01101111111011 downin 60
+01101111111011 blastn 61
+01101111111011 enjoin 61
+01101111111011 cracklin 63
+01101111111011 miss'n 64
+01101111111011 overestimating 64
+01101111111011 churchin 64
+01101111111011 re-discovering 67
+01101111111011 dishin 67
+01101111111011 seconding 67
+01101111111011 slayin 70
+01101111111011 rawkin 72
+01101111111011 #thankfulfor 72
+01101111111011 pleasin 72
+01101111111011 milkin 74
+01101111111011 browsin 74
+01101111111011 murderin 77
+01101111111011 hamming 77
+01101111111011 lovinn 80
+01101111111011 lovingg 81
+01101111111011 kikin 82
+01101111111011 beachin 83
+01101111111011 struttin 84
+01101111111011 designin 84
+01101111111011 haulin 85
+01101111111011 enoying 85
+01101111111011 #loving 85
+01101111111011 hearting 87
+01101111111011 diggn 87
+01101111111011 sicka 87
+01101111111011 shreddin 89
+01101111111011 resenting 91
+01101111111011 sweepin 95
+01101111111011 savouring 95
+01101111111011 mowin 98
+01101111111011 nailin 98
+01101111111011 murkin 101
+01101111111011 repin 102
+01101111111011 njoying 108
+01101111111011 slingin 110
+01101111111011 re-living 111
+01101111111011 discussin 112
+01101111111011 roamin 115
+01101111111011 cherishing 118
+01101111111011 lovein 122
+01101111111011 lovn 126
+01101111111011 kicken 133
+01101111111011 lovinq 135
+01101111111011 imade 137
+01101111111011 likeing 138
+01101111111011 bumpn 139
+01101111111011 fancying 140
+01101111111011 bemoaning 141
+01101111111011 slumming 143
+01101111111011 ifound 145
+01101111111011 re-thinking 146
+01101111111011 sizzlin 148
+01101111111011 quotin 150
+01101111111011 missinq 151
+01101111111011 mindin 157
+01101111111011 enjoyn 157
+01101111111011 readn 159
+01101111111011 hoggin 165
+01101111111011 bricking 168
+01101111111011 enjoing 178
+01101111111011 ramblin 187
+01101111111011 crossin 191
+01101111111011 #iamproudof 192
+01101111111011 luvn 193
+01101111111011 dvring 201
+01101111111011 noddin 209
+01101111111011 re-doing 223
+01101111111011 stuffin 229
+01101111111011 coveting 233
+01101111111011 loveing 234
+01101111111011 quittin 234
+01101111111011 schoolin 234
+01101111111011 loven 242
+01101111111011 visitin 243
+01101111111011 overdoing 252
+01101111111011 sportin 256
+01101111111011 paintin 258
+01101111111011 hostin 264
+01101111111011 howlin 280
+01101111111011 luving 288
+01101111111011 representin 293
+01101111111011 servin 301
+01101111111011 kickn 320
+01101111111011 spreadin 321
+01101111111011 reconsidering 366
+01101111111011 downloadin 372
+01101111111011 winging 376
+01101111111011 hackin 380
+01101111111011 rockn 387
+01101111111011 savoring 392
+01101111111011 missn 397
+01101111111011 relishing 413
+01101111111011 bummin 417
+01101111111011 celebratin 478
+01101111111011 lamenting 484
+01101111111011 draggin 530
+01101111111011 rippin 609
+01101111111011 grabbin 614
+01101111111011 thankin 623
+01101111111011 coppin 701
+01101111111011 rediscovering 746
+01101111111011 smashin 756
+01101111111011 reliving 819
+01101111111011 dedicating 917
+01101111111011 likin 1032
+01101111111011 surfin 1044
+01101111111011 slappin 1205
+01101111111011 blastin 1348
+01101111111011 luvin 1354
+01101111111011 praising 1383
+01101111111011 appreciating 1440
+01101111111011 admiring 1541
+01101111111011 resisting 1617
+01101111111011 enjoyin 1833
+01101111111011 anticipating 2364
+01101111111011 reppin 2574
+01101111111011 readin 2574
+01101111111011 diggin 3983
+01101111111011 bumpin 4401
+01101111111011 awaiting 6175
+01101111111011 kickin 6606
+01101111111011 missin 7474
+01101111111011 livin 8334
+01101111111011 digging 9317
+01101111111011 rockin 16033
+01101111111011 lovin 17506
+01101111111011 celebrating 19163
+01101111111011 liking 19380
+01101111111011 loving 81533
+01101111111011 enjoying 67030
+0110111111110 dooooin 41
+0110111111110 doning 43
+0110111111110 -doing 46
+0110111111110 doooin 53
+0110111111110 doig 54
+0110111111110 doind 61
+0110111111110 doign 61
+0110111111110 doinng 62
+0110111111110 d0ing 62
+0110111111110 doinnnn 63
+0110111111110 duing 63
+0110111111110 doingggg 71
+0110111111110 doiinq 73
+0110111111110 releasin 74
+0110111111110 dooing 78
+0110111111110 copin 85
+0110111111110 hypin 107
+0110111111110 dooin 110
+0110111111110 dewin 120
+0110111111110 d0in 129
+0110111111110 doiing 131
+0110111111110 do'n 133
+0110111111110 doin' 141
+0110111111110 doinnn 153
+0110111111110 doinggg 155
+0110111111110 faring 186
+0110111111110 doinqq 199
+0110111111110 attt 220
+0110111111110 handlin 260
+0110111111110 up2 448
+0110111111110 duin 473
+0110111111110 doinn 497
+0110111111110 doiin 508
+0110111111110 doingg 575
+0110111111110 accomplishing 720
+0110111111110 doinq 970
+0110111111110 doing 411017
+0110111111110 doin 72889
+01101111111110 eatiing 40
+01101111111110 coooking 40
+01101111111110 plantin 43
+01101111111110 tatter 44
+01101111111110 drinkng 44
+01101111111110 photoshoping 45
+01101111111110 coking 46
+01101111111110 bbqin 46
+01101111111110 decoratin 47
+01101111111110 decanting 47
+01101111111110 rehydrating 48
+01101111111110 eating/drinking 49
+01101111111110 cook'n 49
+01101111111110 iate 49
+01101111111110 broiling 50
+01101111111110 yisrael 53
+01101111111110 smoke'n 54
+01101111111110 pealing 54
+01101111111110 eatng 54
+01101111111110 drink'n 55
+01101111111110 eatinggg 57
+01101111111110 #having 58
+01101111111110 shotgunning 59
+01101111111110 mc'd 59
+01101111111110 destressing 59
+01101111111110 quaffing 60
+01101111111110 eatiin 62
+01101111111110 swigging 64
+01101111111110 basted 66
+01101111111110 cookinq 66
+01101111111110 snortin 68
+01101111111110 ironin 68
+01101111111110 shucking 69
+01101111111110 braising 70
+01101111111110 dehydrating 72
+01101111111110 drinkinq 73
+01101111111110 swilling 74
+01101111111110 brined 82
+01101111111110 bbq'ing 85
+01101111111110 mainlining 86
+01101111111110 dranking 89
+01101111111110 boilin 90
+01101111111110 barbecuing 91
+01101111111110 pickling 92
+01101111111110 supping 95
+01101111111110 dicing 96
+01101111111110 grabing 98
+01101111111110 eatinqq 101
+01101111111110 imbibing 104
+01101111111110 eat'n 104
+01101111111110 dogsitting 110
+01101111111110 eatinn 111
+01101111111110 reheating 114
+01101111111110 kneading 122
+01101111111110 steamin 131
+01101111111110 #noweating 139
+01101111111110 browned 145
+01101111111110 spillin 156
+01101111111110 tator 156
+01101111111110 farmed 160
+01101111111110 gargling 161
+01101111111110 tastin 161
+01101111111110 fryin 164
+01101111111110 orderin 168
+01101111111110 scoffing 172
+01101111111110 ingesting 173
+01101111111110 slangin 205
+01101111111110 overcooked 223
+01101111111110 guzzling 227
+01101111111110 reheated 231
+01101111111110 microwaving 233
+01101111111110 nomming 246
+01101111111110 eatingg 261
+01101111111110 chewin 280
+01101111111110 cookn 285
+01101111111110 bbqing 312
+01101111111110 marinating 314
+01101111111110 slurping 325
+01101111111110 eatinq 325
+01101111111110 sweetened 350
+01101111111110 drankin 401
+01101111111110 microwaved 410
+01101111111110 stackin 410
+01101111111110 eattin 459
+01101111111110 bakin 462
+01101111111110 inhaling 483
+01101111111110 @having 490
+01101111111110 toasting 539
+01101111111110 digesting 604
+01101111111110 drinkn 615
+01101111111110 snorting 653
+01101111111110 cravin 681
+01101111111110 chugging 699
+01101111111110 tater 915
+01101111111110 eatting 1155
+01101111111110 eatn 1161
+01101111111110 brewed 1176
+01101111111110 spilling 1251
+01101111111110 frying 1802
+01101111111110 carving 2042
+01101111111110 roasting 2052
+01101111111110 grilling 2296
+01101111111110 sliced 2385
+01101111111110 dim 3088
+01101111111110 chewing 4562
+01101111111110 grabbing 4913
+01101111111110 sipping 5137
+01101111111110 cookin 5810
+01101111111110 ordering 7656
+01101111111110 drinkin 8347
+01101111111110 baked 10930
+01101111111110 baking 11709
+01101111111110 eatin 11844
+01101111111110 craving 19047
+01101111111110 cooking 39514
+01101111111110 eating 133654
+01101111111110 drinking 75855
+01101111111111 1*561*463*2147 40
+01101111111111 blastinq 41
+01101111111111 playinqq 55
+01101111111111 cohosting 62
+01101111111111 plyn 67
+01101111111111 plyin 68
+01101111111111 playing- 91
+01101111111111 playing| 104
+01101111111111 playiin 105
+01101111111111 plaing 107
+01101111111111 djn 135
+01101111111111 palying 136
+01101111111111 playen 145
+01101111111111 playng 160
+01101111111111 plying 165
+01101111111111 play'n 175
+01101111111111 playingg 233
+01101111111111 adays 252
+01101111111111 playinq 284
+01101111111111 #my6 301
+01101111111111 playn 1838
+01101111111111 playin 26587
+01101111111111 playing 286522
+01101111111111 hiring 26696
+01110000 $y 46
+01110000 tinys 46
+01110000 j-lo's 49
+01110000 54
+01110000 h3r 64
+01110000 leahs 65
+01110000 hayleys 73
+01110000 heer 237
+01110000 her 980447
+01110000 baited 264
+011100010 scoe 40
+011100010 maaah 43
+011100010 -crosses 43
+011100010 w/yo 47
+011100010 sitcho 48
+011100010 yeer 53
+011100010 urrrr 56
+011100010 ijaz 57
+011100010 yousa 61
+011100010 #c'mon 65
+011100010 -her 71
+011100010 gotti's 78
+011100010 #pleaseexcusemy 84
+011100010 maaaa 90
+011100010 necole 92
+011100010 -yo 92
+011100010 ura 111
+011100010 free's 112
+011100010 mesha 132
+011100010 hys 159
+011100010 -rolls 166
+011100010 braun's 177
+011100010 getcho 224
+011100010 irv 227
+011100010 chur 267
+011100010 witcho 291
+011100010 thata 357
+011100010 yerr 454
+011100010 y0 476
+011100010 1838
+011100010 yoo 9515
+011100010 yo 229122
+011100011 youand 40
+011100011 yuz 40
+011100011 muffet 41
+011100011 yeeew 42
+011100011 youx 44
+011100011 yoz 44
+011100011 you1 45
+011100011 youss 46
+011100011 yoooouu 46
+011100011 u@ 48
+011100011 yoouuuu 48
+011100011 myboy 48
+011100011 you+ 48
+011100011 youuuuuuuuuuu 48
+011100011 yuuuuu 48
+011100011 herrrrrrr 49
+011100011 yallllll 52
+011100011 chuuuu 52
+011100011 mmeee 53
+011100011 uuuuuuuuu 54
+011100011 yooooooooou 56
+011100011 j00 56
+011100011 h.e.r. 58
+011100011 yaaaaaaaaa 58
+011100011 #biebsonnml 58
+011100011 yhaa 59
+011100011 yoooh 60
+011100011 chaaaa 61
+011100011 #myteam 63
+011100011 youuuuuuuuuu 64
+011100011 iitt 65
+011100011 yoooooooou 67
+011100011 chya 68
+011100011 you2 70
+011100011 yoooouuuu 72
+011100011 yeew 72
+011100011 yot 72
+011100011 uuuuuuuu 73
+011100011 ɣ 73
+011100011 yoooouuu 74
+011100011 mybaby 74
+011100011 u^^ 75
+011100011 my- 78
+011100011 ya- 81
+011100011 emmmmm 85
+011100011 chaaa 85
+011100011 ў 85
+011100011 ya'! 87
+011100011 yewwww 87
+011100011 you:') 87
+011100011 youa 94
+011100011 juuu 94
+011100011 yooouuuu 95
+011100011 yoe 96
+011100011 yaaaaaaaa 96
+011100011 selfridge 107
+011100011 you) 107
+011100011 yooooooou 108
+011100011 yooouu 114
+011100011 yol 116
+011100011 yuuuu 127
+011100011 128
+011100011 chuuu 131
+011100011 yis 136
+011100011 uuuuuuu 137
+011100011 the- 137
+011100011 youuuuuuuuu 139
+011100011 yaaaaaaa 140
+011100011 yuhhh 152
+011100011 demm 156
+011100011 yoouuu 172
+011100011 yoooooou 179
+011100011 yooouuu 192
+011100011 yewww 193
+011100011 you^^ 200
+011100011 meeeh 211
+011100011 ya's 212
+011100011 youuuuuuuu 227
+011100011 chaa 229
+011100011 yourt 238
+011100011 uuuuuu 250
+011100011 yoouu 260
+011100011 yaaaaaa 287
+011100011 yooooou 323
+011100011 yeww 391
+011100011 yha 425
+011100011 chuu 425
+011100011 uuuuu 427
+011100011 u- 428
+011100011 youuuuuuu 455
+011100011 yuuu 460
+011100011 mert 506
+011100011 yaah 534
+011100011 yoooou 563
+011100011 yaaaaa 647
+011100011 kpopers 753
+011100011 yooou 843
+011100011 uuuu 873
+011100011 youuuuuu 873
+011100011 yas 1140
+011100011 uuu 1436
+011100011 yaaaa 1569
+011100011 yahh 1691
+011100011 herr 1793
+011100011 youuuuu 1915
+011100011 yaaa 3952
+011100011 youuuu 4459
+011100011 yaa 8721
+011100011 youuu 9019
+011100011 cha 9429
+011100011 ye 17525
+011100011 ya 308752
+011100011 yah 19211
+01110010 $374/h 42
+01110010 $355/hour 42
+01110010 @dj_cobra 42
+01110010 @kenia_araujo 44
+01110010 @nbarocksstc 44
+01110010 @platinumpublcty 45
+01110010 46
+01110010 meeeeeeeeeeeeeeeeeeee 47
+01110010 jumpfly 47
+01110010 708-524-1553 48
+01110010 meeeeeeeeeeeeeeeeeee 49
+01110010 me| 50
+01110010 me_ 53
+01110010 meeeeeeeeeeeeeeeeee 55
+01110010 me@ 55
+01110010 mmee 56
+01110010 me( 57
+01110010 m3h 63
+01110010 meeeeeeeeeeeeeeeee 64
+01110010 ♍ƺ 66
+01110010 me// 66
+01110010 212-697-9767 67
+01110010 me^ 68
+01110010 me/us 73
+01110010 meah 76
+01110010 @911 78
+01110010 meeeeeeeeeeeeeeee 84
+01110010 meehh 87
+01110010 me1 93
+01110010 meeeeeeeeeeeeeee 100
+01110010 me:'( 107
+01110010 @microsofttag 108
+01110010 me:') 111
+01110010 @amber_lily 114
+01110010 meeeeeeeeeeeeee 122
+01110010 me^^ 125
+01110010 ussss 132
+01110010 chocula 134
+01110010 meeeeeeeeeeeee 179
+01110010 me) 242
+01110010 meeeeeeeeeeee 247
+01110010 meeeeeeeeeee 278
+01110010 meeeeeeeeee 368
+01110010 mhee 413
+01110010 me/ 464
+01110010 meeeeeeeee 546
+01110010 meeeeeeee 787
+01110010 mhe 888
+01110010 meeeeeee 1224
+01110010 meeh 1315
+01110010 mehh 1851
+01110010 meeeeee 2106
+01110010 meeeee 3819
+01110010 meeee 7104
+01110010 meee 11038
+01110010 me 4804010
+01110010 mee 26641
+011100110 lgbtwitter 42
+011100110 topguest 43
+011100110 us) 44
+011100110 sakineh 45
+011100110 5¢ 46
+011100110 us/ 49
+011100110 porkies 52
+011100110 @singforacure 55
+011100110 jck 56
+011100110 fancite 56
+011100110 #churpchurp 61
+011100110 97
+011100110 embezzling 97
+011100110 #tetley 118
+011100110 @ocremix 214
+011100110 245
+011100110 @skate4cancer 287
+011100110 us- 340
+011100110 shikari 391
+011100110 us 618707
+011100110 653
+0111001110 myelf 40
+0111001110 yaselves 42
+0111001110 43
+0111001110 urslef 45
+0111001110 45
+0111001110 507-494-5169 45
+0111001110 urselfs 46
+0111001110 uself 46
+0111001110 blackenedruby 48
+0111001110 #yourself 49
+0111001110 itsself 49
+0111001110 themsleves 53
+0111001110 myselffff 54
+0111001110 yuhself 61
+0111001110 yourslef 62
+0111001110 ureself 63
+0111001110 theyselves 65
+0111001110 mysef 66
+0111001110 playmesh 67
+0111001110 him/herself 69
+0111001110 yourselff 70
+0111001110 myselfff 72
+0111001110 yourself- 74
+0111001110 hiself 78
+0111001110 ursef 79
+0111001110 @leenarao 82
+0111001110 themselve 85
+0111001110 masar 87
+0111001110 91
+0111001110 jove 92
+0111001110 demselves 96
+0111001110 ourselfs 96
+0111001110 theirself 97
+0111001110 100
+0111001110 yourselfs 103
+0111001110 miself 106
+0111001110 myside 107
+0111001110 yo'self 111
+0111001110 @jasonkincaid 116
+0111001110 mahself 120
+0111001110 mysel 122
+0111001110 yoursel 148
+0111001110 urslf 151
+0111001110 ykb2's 152
+0111001110 myself- 155
+0111001110 themselfs 159
+0111001110 myselff 179
+0111001110 myslf 182
+0111001110 theyself 212
+0111001110 theirselves 229
+0111001110 yerself 243
+0111001110 urselves 262
+0111001110 yrself 307
+0111001110 myslef 343
+0111001110 ourself 364
+0111001110 hisself 393
+0111001110 yurself 405
+0111001110 maself 468
+0111001110 meself 524
+0111001110 youself 538
+0111001110 thyself 538
+0111001110 673
+0111001110 themself 686
+0111001110 oneself 1425
+0111001110 yoself 1636
+0111001110 yaself 2471
+0111001110 yourselves 4372
+0111001110 ourselves 12836
+0111001110 urself 13144
+0111001110 herself 18272
+0111001110 itself 24183
+0111001110 himself 32958
+0111001110 themselves 34575
+0111001110 myself 232661
+0111001110 yourself 134335
+01110011110 yooooooooooou 40
+01110011110 r) 41
+01110011110 someone- 45
+01110011110 2)hug 50
+01110011110 heeer 51
+01110011110 theeem 51
+01110011110 1-888-652-3315 51
+01110011110 51
+01110011110 it:') 53
+01110011110 themmmmm 58
+01110011110 her/ 61
+01110011110 usssss 63
+01110011110 me!' 70
+01110011110 kittin 70
+01110011110 74
+01110011110 him/ 79
+01110011110 herrrrrr 85
+01110011110 you!' 88
+01110011110 himmmmm 90
+01110011110 it^^ 99
+01110011110 themmmm 130
+01110011110 eachotha 166
+01110011110 herrrrr 171
+01110011110 himmmm 181
+01110011110 usss 228
+01110011110 congeniality 244
+01110011110 themmm 309
+01110011110 her- 345
+01110011110 her/him 349
+01110011110 you/ 350
+01110011110 herrrr 351
+01110011110 hime 357
+01110011110 viggle 368
+01110011110 him- 409
+01110011110 himmm 423
+01110011110 hiim 540
+01110011110 herrr 589
+01110011110 hym 677
+01110011110 himm 1465
+01110011110 him/her 1939
+01110011110 you- 2959
+01110011110 him 607428
+01110011110 eachother 7558
+011100111110 thim 46
+011100111110 them) 46
+011100111110 them/ 52
+011100111110 it2 71
+011100111110 theem 137
+011100111110 dhem 202
+011100111110 it) 228
+011100111110 it/ 283
+011100111110 them- 350
+011100111110 themm 970
+011100111110 them 792495
+011100111110 thm 1356
+011100111111 emrt 41
+011100111111 werevertumorro 44
+011100111111 yersel 45
+011100111111 em- 46
+011100111111 shanedawsontv 63
+011100111111 it!' 69
+011100111111 vega4 74
+011100111111 `em 108
+011100111111 splainin 109
+011100111111 em'! 122
+011100111111 _' 138
+011100111111 em 132054
+011100111111 schmap 480
+01110100 yiou 42
+01110100 _you_ 43
+01110100 youguys 45
+01110100 you&i 55
+01110100 /you/ 57
+01110100 -you- 59
+01110100 you-i 60
+01110100 yopu 63
+01110100 y-you 86
+01110100 iever 87
+01110100 you'se 90
+01110100 youy 95
+01110100 me-i 122
+01110100 yoiu 123
+01110100 youi 142
+01110100 oyu 217
+01110100 ypu 429
+01110100 youse 475
+01110100 you's 1904
+01110100 yoou 1987
+01110100 yous 4160
+01110100 you 9358135
+01110100 youu 26507
+011101010 iiiiiiiiiiii 40
+011101010 #2ofmyfollowers 41
+011101010 yaull 41
+011101010 somthings 42
+011101010 you'all 44
+011101010 yins 44
+011101010 #2omfs 45
+011101010 shantell 45
+011101010 dheyy 46
+011101010 rhey 47
+011101010 th3y 47
+011101010 yiz 47
+011101010 dezz 51
+011101010 iain't 51
+011101010 yaall 51
+011101010 #myfollowers 53
+011101010 allyuh 53
+011101010 butchu 53
+011101010 yawll 58
+011101010 emani 58
+011101010 uall 60
+011101010 theys 61
+011101010 #teamspanishgirls 64
+011101010 2cu 65
+011101010 yoll 66
+011101010 yahll 67
+011101010 yean 69
+011101010 istart 69
+011101010 watu 73
+011101010 ised 75
+011101010 #aomf 80
+011101010 yalllll 81
+011101010 y`all 82
+011101010 #whyyobaby 84
+011101010 imeant 84
+011101010 #realthugs 84
+011101010 sh3 85
+011101010 unuh 86
+011101010 iwnt 87
+011101010 yallz 88
+011101010 ya’ll 91
+011101010 iwe 91
+011101010 somf 104
+011101010 #3omf 105
+011101010 ya'l 106
+011101010 sumthings 106
+011101010 #someofmyfollowers 108
+011101010 ya`ll 110
+011101010 #they 113
+011101010 thye 115
+011101010 theyyy 115
+011101010 yhall 116
+011101010 y'al 116
+011101010 unnu 121
+011101010 #twoofmyfollowers 128
+011101010 #drakeseyebrows 139
+011101010 #youcantbeuglyand 141
+011101010 yinz 142
+011101010 yallll 143
+011101010 ya'all 150
+011101010 y'll 172
+011101010 yll 173
+011101010 iiiiii 197
+011101010 juh 217
+011101010 uou 225
+011101010 #toomanypeople 270
+011101010 deyy 271
+011101010 tey 301
+011101010 2omf 304
+011101010 chall 307
+011101010 thems 313
+011101010 y’all 340
+011101010 isay 346
+011101010 dhey 400
+011101010 -u 412
+011101010 uz 441
+011101010 #somf 532
+011101010 idid 538
+011101010 isaid 548
+011101010 yawl 661
+011101010 yalll 738
+011101010 #2omf 822
+011101010 #you 872
+011101010 ido 917
+011101010 yeen 966
+011101010 abouts 992
+011101010 thay 1452
+011101010 yaw 2486
+011101010 somethings 4502
+011101010 yal 6054
+011101010 chu 7262
+011101010 ya'll 21811
+011101010 dey 35038
+011101010 y'all 81271
+011101010 yall 137200
+011101011 ʊ 40
+011101011 ypou 41
+011101011 me&i 43
+011101011 uue 47
+011101011 yuou 47
+011101011 び 48
+011101011 whenu 48
+011101011 youuh 52
+011101011 yhuuu 57
+011101011 yhou 60
+011101011 you'on 60
+011101011 υ 61
+011101011 it-i 63
+011101011 tyou 68
+011101011 ileave 74
+011101011 eyou 74
+011101011 yewh 77
+011101011 yhue 78
+011101011 somepeople 98
+011101011 icome 103
+011101011 yuee 115
+011101011 yhew 117
+011101011 yyu 126
+011101011 u.i 148
+011101011 ʋ 159
+011101011 ΰ 186
+011101011 yuuh 207
+011101011 yiu 219
+011101011 youhh 229
+011101011 dyu 232
+011101011 yyou 236
+011101011 youz 365
+011101011 dya 460
+011101011 ʊ 474
+011101011 juu 485
+011101011 yue 487
+011101011 u̶̲̥̅̊ 525
+011101011 yuo 576
+011101011 yooh 687
+011101011 yoy 871
+011101011 iget 1054
+011101011 yhuu 1056
+011101011 youh 1104
+011101011 yuhh 1164
+011101011 y0u 1715
+011101011 yew 5316
+011101011 yuu 6587
+011101011 uu 10647
+011101011 yhu 10869
+011101011 yuh 14163
+011101011 u 2356331
+011101011 yu 133725
+01110110 #sandraroseface 41
+01110110 zebedee 42
+01110110 ehtt 44
+01110110 eeeet 45
+01110110 myday 45
+01110110 imove 49
+01110110 myhair 50
+01110110 50
+01110110 53
+01110110 iiiiiit 55
+01110110 iot 56
+01110110 itttttttttt 56
+01110110 eeet 62
+01110110 spinrite 66
+01110110 70
+01110110 iiiiit 80
+01110110 iiht 87
+01110110 ittttttttt 88
+01110110 igaf 96
+01110110 iiiit 97
+01110110 ihtt 101
+01110110 109
+01110110 neatlysaid 125
+01110110 itttttttt 131
+01110110 iiit 134
+01110110 ittttttt 190
+01110110 eht 271
+01110110 itttttt 376
+01110110 ittttt 761
+01110110 iht 1296
+01110110 itttt 1336
+01110110 ittt 1933
+01110110 iit 2473
+01110110 it 6306462
+01110110 itt 4063
+01110111000 urss 41
+01110111000 falcor 43
+01110111000 mudkipz 44
+01110111000 45
+01110111000 45
+01110111000 miiiine 48
+01110111000 queefing 48
+01110111000 48
+01110111000 para-para-paradise 49
+01110111000 #7millionbeliebers 51
+01110111000 punk'd! 52
+01110111000 ures 54
+01110111000 gimmes 58
+01110111000 sinzu 58
+01110111000 minesss 61
+01110111000 #gottabeyou 61
+01110111000 that) 61
+01110111000 yourz 63
+01110111000 miine 64
+01110111000 yoursss 65
+01110111000 mineeeee 66
+01110111000 me&you 70
+01110111000 myheart 74
+01110111000 y-o-u 86
+01110111000 myne 94
+01110111000 constantinople 96
+01110111000 thiers 100
+01110111000 #onyourside 103
+01110111000 our's 109
+01110111000 sauron 112
+01110111000 mineeee 124
+01110111000 yers 130
+01110111000 yourss 141
+01110111000 mine- 158
+01110111000 minez 166
+01110111000 you-know-who 177
+01110111000 ur's 178
+01110111000 miness 208
+01110111000 ww3 225
+01110111000 mineee 237
+01110111000 their's 244
+01110111000 alphabetically 265
+01110111000 myn 284
+01110111000 urz 315
+01110111000 her's 417
+01110111000 yurs 454
+01110111000 minee 470
+01110111000 your's 906
+01110111000 puberty 1284
+01110111000 mankind 2265
+01110111000 hers 5841
+01110111000 theirs 6127
+01110111000 urs 9258
+01110111000 ours 10570
+01110111000 mines 14914
+01110111000 mine 148049
+01110111000 yours 71831
+01110111001 everysong 40
+01110111001 er'thing 40
+01110111001 evreything 42
+01110111001 everyword 43
+01110111001 everythg 49
+01110111001 everythinggggg 52
+01110111001 errrthang 52
+01110111001 everythiing 60
+01110111001 everything- 63
+01110111001 erythang 71
+01110111001 everyhting 74
+01110111001 everythinqq 74
+01110111001 everythink 74
+01110111001 everythn 75
+01110111001 everythign 80
+01110111001 everithing 85
+01110111001 everyhing 96
+01110111001 everytin 101
+01110111001 everythig 102
+01110111001 jony 110
+01110111001 everythingggg 114
+01110111001 erthing 122
+01110111001 1thing 133
+01110111001 erthang 152
+01110111001 evrythin 164
+01110111001 errythang 194
+01110111001 everythinggg 209
+01110111001 erything 251
+01110111001 errthing 269
+01110111001 #everything 273
+01110111001 errything 317
+01110111001 errthang 349
+01110111001 evrythng 368
+01110111001 everyting 369
+01110111001 everythingg 402
+01110111001 eveything 433
+01110111001 everythng 445
+01110111001 everythinq 458
+01110111001 everythang 917
+01110111001 evrything 1114
+01110111001 everthing 1198
+01110111001 everything 271318
+01110111001 everythin 1956
+01110111010 #wecoolandall 40
+01110111010 #nothin 40
+01110111010 100000x 41
+01110111010 nathing 41
+01110111010 nothink 41
+01110111010 noffin 43
+01110111010 nonthing 44
+01110111010 nothinnnn 46
+01110111010 #helooksgood 46
+01110111010 nunthin 47
+01110111010 notthing 47
+01110111010 10000x 48
+01110111010 nuffink 51
+01110111010 noin 52
+01110111010 nu10 54
+01110111010 nothinng 54
+01110111010 nuthen 55
+01110111010 10xs 55
+01110111010 nuthinq 56
+01110111010 nfn 56
+01110111010 fuckall 60
+01110111010 nthg 63
+01110111010 nothinggggg 66
+01110111010 nuthinn 66
+01110111010 nutthin 69
+01110111010 nuffing 71
+01110111010 #shelookgood 72
+01110111010 nothiing 75
+01110111010 nutten 75
+01110111010 nuffen 78
+01110111010 -nothing 79
+01110111010 nothiin 83
+01110111010 nadda 83
+01110111010 immeasurably 84
+01110111010 nothin'! 84
+01110111010 nothig 85
+01110111010 nothign 87
+01110111010 n0thing 87
+01110111010 nothinnn 89
+01110111010 nought 99
+01110111010 ntg 99
+01110111010 nttn 110
+01110111010 nottin 111
+01110111010 nthin 122
+01110111010 nothen 123
+01110111010 nofin 129
+01110111010 nufn 140
+01110111010 nothingggg 145
+01110111010 nthing 148
+01110111010 nthng 149
+01110111010 nothinqq 165
+01110111010 nout 166
+01110111010 nuin 168
+01110111010 nufin 217
+01110111010 nutting 226
+01110111010 nothng 233
+01110111010 #nothing 254
+01110111010 nothinn 268
+01110111010 zilch 270
+01110111010 1000x 271
+01110111010 nothinggg 274
+01110111010 #dontmeantobrag 274
+01110111010 nuttn 278
+01110111010 #nodisrespect 304
+01110111010 whatevers 309
+01110111010 nutn 318
+01110111010 nuffn 332
+01110111010 notin 421
+01110111010 nutin 491
+01110111010 nothinq 660
+01110111010 nothn 677
+01110111010 nothingg 718
+01110111010 100x 759
+01110111010 nuthing 766
+01110111010 nuthn 781
+01110111010 nowt 782
+01110111010 nthn 886
+01110111010 noting 1242
+01110111010 10x 2766
+01110111010 nuffin 3205
+01110111010 nuttin 3776
+01110111010 nuthin 5600
+01110111010 nun 9403
+01110111010 nothing 296377
+01110111010 nothin 30971
+011101110110 sumthinn 41
+011101110110 somethinnn 41
+011101110110 s/thing 41
+011101110110 sommat 42
+011101110110 som'n 43
+011101110110 sumpn 44
+011101110110 somethan 44
+011101110110 sumpthin 44
+011101110110 sumthyn 46
+011101110110 somethin'! 46
+011101110110 sumthg 47
+011101110110 somethiin 47
+011101110110 somethinng 48
+011101110110 sumthinqq 48
+011101110110 sthing 49
+011101110110 sutten 52
+011101110110 sumfing 53
+011101110110 supm 58
+011101110110 somefin 58
+011101110110 smtn 60
+011101110110 summm 60
+011101110110 somethen 60
+011101110110 smtin 63
+011101110110 someeeee 65
+011101110110 s'thing 65
+011101110110 summet 66
+011101110110 summink 66
+011101110110 sumfn 68
+011101110110 somthng 70
+011101110110 sumat 70
+011101110110 somethang 70
+011101110110 some'n 71
+011101110110 s0mething 72
+011101110110 somehing 72
+011101110110 2talk 73
+011101110110 smethn 73
+011101110110 somfin 78
+011101110110 somethg 78
+011101110110 somethiing 81
+011101110110 someone/something 82
+011101110110 sumthen 84
+011101110110 somen 89
+011101110110 sutin 89
+011101110110 suttn 92
+011101110110 sumthan 96
+011101110110 somethink 97
+011101110110 summn 98
+011101110110 sumthang 99
+011101110110 smethin 99
+011101110110 somethinqq 104
+011101110110 treater 106
+011101110110 suin 108
+011101110110 smthin 111
+011101110110 smethng 113
+011101110110 sthg 115
+011101110110 sonething 116
+011101110110 suntin 120
+011101110110 sumthinq 121
+011101110110 smtg 123
+011101110110 thereabouts 123
+011101110110 something- 125
+011101110110 sumptin 128
+011101110110 someshit 139
+011101110110 somthn 151
+011101110110 somehting 158
+011101110110 somtin 159
+011101110110 something/someone 162
+011101110110 sumting 163
+011101110110 somin 168
+011101110110 sumpin 184
+011101110110 somethig 189
+011101110110 somethinggg 201
+011101110110 somethinn 202
+011101110110 soemthing 213
+011101110110 sum10 235
+011101110110 somethign 237
+011101110110 sometin 245
+011101110110 smething 246
+011101110110 sumtn 258
+011101110110 somn 259
+011101110110 smthg 275
+011101110110 sumthng 277
+011101110110 sum'n 303
+011101110110 smthing 336
+011101110110 smthng 381
+011101110110 summat 431
+011101110110 somethng 440
+011101110110 somethn 476
+011101110110 smthn 482
+011101110110 sumfin 489
+011101110110 someting 536
+011101110110 somethingg 551
+011101110110 treaters 657
+011101110110 summin 658
+011101110110 somethinq 730
+011101110110 sumin 764
+011101110110 suttin 972
+011101110110 somthin 994
+011101110110 smth 1315
+011101110110 sumtin 1412
+011101110110 sumthn 1656
+011101110110 sth 2371
+011101110110 somthing 2641
+011101110110 sumn 3638
+011101110110 sumthing 3674
+011101110110 sumthin 9173
+011101110110 something 486606
+011101110110 somethin 23122
+011101110111 enything 40
+011101110111 anythiing 43
+011101110111 aything 44
+011101110111 anything/anyone 48
+011101110111 endsmeat 50
+011101110111 woodsen 53
+011101110111 anyhing 56
+011101110111 nethng 59
+011101110111 somethingggg 60
+011101110111 anythinqq 62
+011101110111 anythig 66
+011101110111 anythink 67
+011101110111 nothing- 69
+011101110111 anythingggg 72
+011101110111 anythg 73
+011101110111 anything- 95
+011101110111 #anything 96
+011101110111 anyhting 100
+011101110111 nything 102
+011101110111 nethin 103
+011101110111 anythign 104
+011101110111 anythn 118
+011101110111 vaart 134
+011101110111 anyfin 135
+011101110111 anythinggg 159
+011101110111 anthing 164
+011101110111 anytin 176
+011101110111 anyth 213
+011101110111 anythang 222
+011101110111 anyting 259
+011101110111 anythinq 358
+011101110111 anythingg 380
+011101110111 anythng 424
+011101110111 nething 733
+011101110111 anything 241180
+011101110111 anythin 1990
+0111011110 #anybody 40
+0111011110 #folding 41
+0111011110 enyone 44
+0111011110 #icantbetheonlyperson 50
+0111011110 anbody 60
+0111011110 nyone 72
+0111011110 anybodyy 75
+0111011110 -anyone 79
+0111011110 anyoneee 86
+0111011110 #anyone 113
+0111011110 anybdy 190
+0111011110 neone 213
+0111011110 nebody 217
+0111011110 anyonee 279
+0111011110 #amitheonlyone 767
+0111011110 ne1 784
+0111011110 any1 6815
+0111011110 anyone 302546
+0111011110 anybody 54048
+01110111110 some-one 41
+01110111110 #somebody 41
+01110111110 someboy 41
+01110111110 someone/thing 42
+01110111110 #everybodyhasthat1friend 44
+01110111110 somebodii 46
+01110111110 somebodyyy 50
+01110111110 #shoutouttothegirls 50
+01110111110 sumbodyy 51
+01110111110 3ppl 52
+01110111110 soemone 52
+01110111110 sombdy 57
+01110111110 #iloveagirl 60
+01110111110 #livenationultimateaccess 62
+01110111110 #icantdateaguy 63
+01110111110 66
+01110111110 #thatonepersoninschool 67
+01110111110 soneone 67
+01110111110 70
+01110111110 -someone 71
+01110111110 sumbodii 72
+01110111110 #iknowthisonegirl 74
+01110111110 somebodi 75
+01110111110 #thatonefriend 80
+01110111110 someoneee 84
+01110111110 #iwantsomebody 84
+01110111110 #someone 87
+01110111110 smone 90
+01110111110 somene 91
+01110111110 smebody 113
+01110111110 smebdy 113
+01110111110 #icantstandpeople 114
+01110111110 someome 130
+01110111110 #girlslikeboys 139
+01110111110 #ihatefemales 142
+01110111110 jiabao 146
+01110111110 #imoneofthosepeople 155
+01110111110 smeone 166
+01110111110 smbdy 166
+01110111110 sumbodi 174
+01110111110 sme1 176
+01110111110 #nevertrustagirl 217
+01110111110 #icantbewithsomeone 226
+01110111110 #ihaveafriend 232
+01110111110 #icantdateagirl 233
+01110111110 #iwasthatkid 237
+01110111110 #thatoneperson 256
+01110111110 somebodyy 261
+01110111110 #iloveaboy 296
+01110111110 someonee 345
+01110111110 #weallhavethatonefollower 355
+01110111110 sm1 443
+01110111110 somebdy 468
+01110111110 som1 509
+01110111110 #imthekindofperson 531
+01110111110 #iwasthekid 650
+01110111110 sumbdy 714
+01110111110 #that1friend 795
+01110111110 sombody 836
+01110111110 #weallgotthatonefriend 874
+01110111110 somone 1253
+01110111110 sumone 2158
+01110111110 sumbody 4918
+01110111110 sum1 7342
+01110111110 some1 9927
+01110111110 someone 440756
+01110111110 somebody 95538
+011101111110 everybodyyyy 40
+011101111110 eerbody 42
+011101111110 makael 44
+011101111110 eeryone 44
+011101111110 @djpeachez 44
+011101111110 afroborike 46
+011101111110 swmbo 48
+011101111110 veryone 49
+011101111110 evey1 50
+011101111110 everybuddy 52
+011101111110 everyb0dy 53
+011101111110 evreyone 55
+011101111110 errrybody 55
+011101111110 erybdy 56
+011101111110 everyoneeeee 57
+011101111110 eveyrone 58
+011101111110 everyboy 58
+011101111110 er1 58
+011101111110 kennedi 60
+011101111110 everybodii 63
+011101111110 -everyone 64
+011101111110 errrrbody 75
+011101111110 aundrea 78
+011101111110 errone 79
+011101111110 every0ne 82
+011101111110 erry1 89
+011101111110 err'body 92
+011101111110 ery1 100
+011101111110 everybodyyy 102
+011101111110 eryone 106
+011101111110 erebody 109
+011101111110 everybodi 126
+011101111110 ev1 134
+011101111110 err1 143
+011101111110 everyone- 143
+011101111110 er'body 147
+011101111110 ever1 162
+011101111110 #everybody 168
+011101111110 eveybody 212
+011101111110 everygirl 216
+011101111110 errrbody 216
+011101111110 erryone 220
+011101111110 #everyone 274
+011101111110 everyoneee 282
+011101111110 evrybdy 346
+011101111110 everybodyy 365
+011101111110 erybody 638
+011101111110 everyonee 652
+011101111110 eveyone 673
+011101111110 everybdy 679
+011101111110 everone 712
+011101111110 evrybody 790
+011101111110 errybody 1053
+011101111110 erbody 1080
+011101111110 evryone 1101
+011101111110 evry1 1152
+011101111110 everbody 1297
+011101111110 errbody 2004
+011101111110 every1 11634
+011101111110 everyone 370469
+011101111110 everybody 116730
+011101111111 nobady 40
+011101111111 n0b0dy 40
+011101111111 daijah 40
+011101111111 lesha 41
+011101111111 #yourbiggestproblem 41
+011101111111 homeontheridge 41
+011101111111 vante 41
+011101111111 @sublimedreamer 41
+011101111111 -everybody 41
+011101111111 dria 41
+011101111111 nobodyyy 42
+011101111111 dajah 42
+011101111111 #mydick 42
+011101111111 harriz 42
+011101111111 thibs 42
+011101111111 nastasia 43
+011101111111 crulejustice 43
+011101111111 vonna 43
+011101111111 #tilashead 43
+011101111111 jaylyn 44
+011101111111 beno1066 44
+011101111111 arbalest270 44
+011101111111 mindwalker 44
+011101111111 #souljaboyslyrics 45
+011101111111 3omf 45
+011101111111 #ahater 45
+011101111111 #ihatewhenmywaiter 46
+011101111111 whoso 46
+011101111111 jacen 46
+011101111111 #lilwaynesbreath 46
+011101111111 tyesha 46
+011101111111 knowone 47
+011101111111 #anyonethatreplieswithk 47
+011101111111 #mybiggestfear 47
+011101111111 stonyarc 47
+011101111111 #1omfs 48
+011101111111 #ommf 48
+011101111111 #mynextgirlfriend 48
+011101111111 #sometimesallagirlwants 49
+011101111111 ooyf 49
+011101111111 #agoodwoman 49
+011101111111 jasz 49
+011101111111 dadditude1994 50
+011101111111 #mypastrelationships 50
+011101111111 #souljascokehabit 50
+011101111111 whoelse 50
+011101111111 myesha 51
+011101111111 nobodii 51
+011101111111 myia 51
+011101111111 #05starbarbie 52
+011101111111 dineo 52
+011101111111 lashay 52
+011101111111 #travisclarkshair 53
+011101111111 #mygreatestfear 53
+011101111111 jaylon 54
+011101111111 #amitheonlyonethat 54
+011101111111 #mynextboyfriend 55
+011101111111 anigga 55
+011101111111 jamonek93 56
+011101111111 lilmama 56
+011101111111 dejah 56
+011101111111 donjazzy 56
+011101111111 #hornyforjustin 57
+011101111111 #ithinkoomf 57
+011101111111 jakobb 57
+011101111111 mothernature 58
+011101111111 #mexicanparents 58
+011101111111 #thirstychicks 59
+011101111111 #somehoesomewhere 59
+011101111111 #wehavethatonefriendwho 60
+011101111111 whoevr 61
+011101111111 allcoldinside 61
+011101111111 jalisa 61
+011101111111 #hoesouthere 62
+011101111111 s0ab 63
+011101111111 #arealwoman 63
+011101111111 janai 63
+011101111111 quana 64
+011101111111 aniyah 64
+011101111111 yezzy 67
+011101111111 daisha 67
+011101111111 daija 67
+011101111111 #grindmejustin 68
+011101111111 #greatsex 68
+011101111111 #amitheonlypersonthat 68
+011101111111 londyn 70
+011101111111 #onlyalame 71
+011101111111 unhappymatt1 71
+011101111111 #myresolution 73
+011101111111 #freeass 73
+011101111111 mymom 73
+011101111111 #thebestfeelinginarelationship 74
+011101111111 #ibetsomebodyonmytl 74
+011101111111 harryindulgence 75
+011101111111 maltina 76
+011101111111 bryz 77
+011101111111 #girlswithnoass 78
+011101111111 #everyblackneighborhood 79
+011101111111 falen 80
+011101111111 bbiaj 81
+011101111111 #abestfriend 82
+011101111111 maestr0efectiv0 84
+011101111111 #icantdatesomeonethat 84
+011101111111 nobodi 85
+011101111111 errbdy 85
+011101111111 noooobody 86
+011101111111 oneofmyfollowers 90
+011101111111 neisha 90
+011101111111 #imthatpersonwho 90
+011101111111 miyah 90
+011101111111 psychedelicbabe 90
+011101111111 anithen 92
+011101111111 #yungbergshead 92
+011101111111 atomicow 93
+011101111111 #ihopemyex 93
+011101111111 #onlyrealjamaicans 94
+011101111111 #arealfriend 94
+011101111111 lightsup55 94
+011101111111 #whyyoweave 95
+011101111111 #mygrandma 96
+011101111111 #mymomma 97
+011101111111 #oneofmyfollwers 98
+011101111111 perfectvirus 99
+011101111111 bahja 99
+011101111111 dasia 100
+011101111111 #typicalfemale 101
+011101111111 erbdy 101
+011101111111 #nevertrustagirlthat 102
+011101111111 miller/coors 104
+011101111111 #arealbitch 104
+011101111111 #arealman 105
+011101111111 #rememberwhenjustin 105
+011101111111 #lilmama 105
+011101111111 #bestsex 105
+011101111111 #arealnigga 106
+011101111111 #iloveitwhenjustin 110
+011101111111 #nevertrustaguywho 111
+011101111111 #findsomeonewho 111
+011101111111 drita 114
+011101111111 nbdy 115
+011101111111 tyrion 116
+011101111111 #onethingyoushouldntdo 116
+011101111111 #tigerwoodswife 119
+011101111111 #natalieschin 119
+011101111111 #ooyf 120
+011101111111 #arealhusband 121
+011101111111 rosci 123
+011101111111 #immadoit 124
+011101111111 #thebestsex 125
+011101111111 #undernocircumstances 126
+011101111111 #peoplealways 127
+011101111111 #thatonepersonwho 129
+011101111111 #she 130
+011101111111 #typicalmale 135
+011101111111 #thebrokefriend 136
+011101111111 #therealme 138
+011101111111 #1ofmyfollowers 138
+011101111111 #someoneonmytimeline 143
+011101111111 #goodhead 144
+011101111111 #somebodyonmytimeline 146
+011101111111 #agoodrelationship 147
+011101111111 oomf's 149
+011101111111 #iwantsome1that 151
+011101111111 #mynextboo 165
+011101111111 liyah 167
+011101111111 razb 168
+011101111111 #crazybabymamas 169
+011101111111 whosoever 173
+011101111111 1omf 183
+011101111111 #that1friendthat 183
+011101111111 #yomomma 191
+011101111111 benzino 192
+011101111111 draya 192
+011101111111 elease 196
+011101111111 #neverinamillionyears 198
+011101111111 #onethingiveneverdone 199
+011101111111 #fabsteeth 201
+011101111111 #thatonefriendwho 202
+011101111111 #iknowsomeonethat 204
+011101111111 #goodsex 205
+011101111111 210
+011101111111 #myex 215
+011101111111 #chrisbrownsbowtie 216
+011101111111 #arealgirlfriend 221
+011101111111 nobodyy 222
+011101111111 #gooddick 223
+011101111111 #agoodgirlfriend 223
+011101111111 #arealwife 244
+011101111111 #chucknorriz 249
+011101111111 kimbella 265
+011101111111 #rihannasforehead 291
+011101111111 #oomf's 311
+011101111111 #goodpussy 315
+011101111111 #1waytopissmeoff 328
+011101111111 #hardestthingtodo 331
+011101111111 yandy 362
+011101111111 #arealwifey 364
+011101111111 oomfs 367
+011101111111 meeka 373
+011101111111 #whoeverimarry 429
+011101111111 #everygirl 490
+011101111111 joseline 538
+011101111111 nobdy 574
+011101111111 #arealboyfriend 599
+011101111111 whoeva 628
+011101111111 #agoodboyfriend 737
+011101111111 #theuglyfriend 822
+011101111111 #oomfs 880
+011101111111 rocsi 884
+011101111111 whomever 981
+011101111111 #1omf 1638
+011101111111 no1 4696
+011101111111 noone 5870
+011101111111 #oneofmyfollowers 5964
+011101111111 oomf 10883
+011101111111 whoever 20943
+011101111111 nobody 79692
+011101111111 #oomf 40031
+0111100000 r3ady 41
+0111100000 prep'd 42
+0111100000 readt 45
+0111100000 prepaired 51
+0111100000 readddy 52
+0111100000 reday 54
+0111100000 reay 71
+0111100000 reaady 91
+0111100000 acclimated 95
+0111100000 rady 102
+0111100000 readyyyy 137
+0111100000 redi 143
+0111100000 readdy 182
+0111100000 readii 205
+0111100000 readi 248
+0111100000 readyyy 295
+0111100000 redy 322
+0111100000 liable 744
+0111100000 prepped 816
+0111100000 readyy 1047
+0111100000 rdy 1182
+0111100000 destined 2097
+0111100000 ready 347719
+0111100000 prepared 15086
+01111000010 waitiing 40
+01111000010 -waits 41
+01111000010 #socialoop 41
+01111000010 fiening 42
+01111000010 waithing 44
+01111000010 vouching 45
+01111000010 searchn 45
+01111000010 casiotone 46
+01111000010 #ihaveathing 47
+01111000010 gluttons 47
+01111000010 routin 47
+01111000010 jostling 50
+01111000010 -waiting 50
+01111000010 -ready 51
+01111000010 serching 51
+01111000010 feining 54
+01111000010 girds 55
+01111000010 waitig 56
+01111000010 rsvping 56
+01111000010 fienin 58
+01111000010 #hoesoutheretwerking 59
+01111000010 seaching 61
+01111000010 #thankinggod 62
+01111000010 intime 62
+01111000010 w8in 63
+01111000010 thirsting 64
+01111000010 waitinn 67
+01111000010 witing 67
+01111000010 wainting 68
+01111000010 waitinqq 70
+01111000010 feinin 72
+01111000010 jockeying 74
+01111000010 waitinggg 80
+01111000010 prepairing 86
+01111000010 cm-wait 86
+01111000010 $260+ 94
+01111000010 w8n 101
+01111000010 fiendin 102
+01111000010 applyin 104
+01111000010 #ithankgod 117
+01111000010 unaccounted 118
+01111000010 w8ing 120
+01111000010 wait'n 121
+01111000010 clamoring 125
+01111000010 prayn 133
+01111000010 waiten 141
+01111000010 yearns 142
+01111000010 preparin 165
+01111000010 #blamediddy 165
+01111000010 compensating 167
+01111000010 fiending 170
+01111000010 preppin 189
+01111000010 specials/events 190
+01111000010 #amomentofsilence 199
+01111000010 waitingg 204
+01111000010 watin 209
+01111000010 th*nks 219
+01111000010 feening 220
+01111000010 #imthankful 221
+01111000010 groveling 222
+01111000010 225
+01111000010 waitting 228
+01111000010 #thankugod 261
+01111000010 preping 266
+01111000010 vying 313
+01111000010 #ihavenotolerance 329
+01111000010 waitinq 351
+01111000010 pining 363
+01111000010 braced 379
+01111000010 jonesing 418
+01111000010 waitng 426
+01111000010 gasping 443
+01111000010 accounted 444
+01111000010 #ihavenorespect 448
+01111000010 rootin 455
+01111000010 shortlisted 473
+01111000010 gunning 540
+01111000010 feenin 566
+01111000010 yearning 593
+01111000010 wating 728
+01111000010 searchin 735
+01111000010 impatiently 763
+01111000010 uncalled 773
+01111000010 requiem 893
+01111000010 bracing 945
+01111000010 auditioning 998
+01111000010 striving 1069
+01111000010 waitn 1446
+01111000010 longing 1483
+01111000010 prayin 1654
+01111000010 aiming 3088
+01111000010 patiently 4013
+01111000010 prepping 5251
+01111000010 rooting 5337
+01111000010 applying 5574
+01111000010 waitin 14917
+01111000010 searching 19952
+01111000010 preparing 22354
+01111000010 waiting 215652
+01111000010 praying 25368
+01111000011 stareing 40
+01111000011 lookg 41
+01111000011 lookign 42
+01111000011 ooking 42
+01111000011 lookinf 43
+01111000011 lking 44
+01111000011 lucking 46
+01111000011 webchick 49
+01111000011 l00kin 53
+01111000011 lkg 53
+01111000011 lookiing 57
+01111000011 lookinqq 61
+01111000011 lookig 63
+01111000011 /looks 65
+01111000011 lokin 65
+01111000011 looing 81
+01111000011 lokking 91
+01111000011 lookiin 95
+01111000011 lookinn 101
+01111000011 -looking 114
+01111000011 117
+01111000011 loookin 121
+01111000011 lookingg 125
+01111000011 luking 152
+01111000011 lookng 154
+01111000011 marvelling 192
+01111000011 looken 204
+01111000011 loooking 211
+01111000011 loking 216
+01111000011 lukn 238
+01111000011 look'n 293
+01111000011 marveling 380
+01111000011 lookinq 440
+01111000011 lukin 513
+01111000011 opting 565
+01111000011 mq 1921
+01111000011 aimed 2705
+01111000011 lookn 2831
+01111000011 looking 393303
+01111000011 lookin 48534
+01111000100 c0ming 40
+01111000100 cum'n 42
+01111000100 commn 43
+01111000100 comimg 48
+01111000100 cooming 53
+01111000100 cmng 54
+01111000100 comiing 54
+01111000100 comign 63
+01111000100 comig 66
+01111000100 comiin 67
+01111000100 cominqq 74
+01111000100 comng 77
+01111000100 kumn 93
+01111000100 come'n 95
+01111000100 kummin 111
+01111000100 koming 115
+01111000100 cominggg 120
+01111000100 runneth 135
+01111000100 cming 144
+01111000100 cmin 149
+01111000100 cominn 152
+01111000100 comein 152
+01111000100 kumin 166
+01111000100 indistinguishable 186
+01111000100 comen 188
+01111000100 komin 194
+01111000100 comingg 308
+01111000100 cominq 386
+01111000100 cuming 437
+01111000100 comeing 475
+01111000100 comn 499
+01111000100 cumn 662
+01111000100 derived 692
+01111000100 cummin 925
+01111000100 commin 1440
+01111000100 cumin 2375
+01111000100 comming 3772
+01111000100 coming 282253
+01111000100 comin 29443
+0111100010100 superadded 43
+0111100010100 ladette 45
+0111100010100 purporting 46
+0111100010100 ilisten 48
+0111100010100 conforms 66
+0111100010100 accdg 71
+0111100010100 attributable 78
+0111100010100 pursuant 81
+0111100010100 compaired 82
+0111100010100 analogous 84
+0111100010100 unbeknownst 106
+0111100010100 112
+0111100010100 inorder 114
+0111100010100 acording 127
+0111100010100 averse 147
+0111100010100 proportionate 150
+0111100010100 correlated 191
+0111100010100 indebted 193
+0111100010100 accordin 201
+0111100010100 rying 213
+0111100010100 rumoured 453
+0111100010100 pertaining 460
+0111100010100 belonging 648
+0111100010100 652
+0111100010100 proportional 656
+0111100010100 confined 699
+0111100010100 comparable 825
+0111100010100 stairway 831
+0111100010100 reacting 991
+0111100010100 akin 1051
+0111100010100 resistant 1206
+0111100010100 relating 1262
+0111100010100 prone 1488
+0111100010100 rumored 1717
+0111100010100 devoted 2225
+0111100010100 poised 2272
+0111100010100 gusting 2557
+0111100010100 urged 2802
+0111100010100 entitled 3896
+0111100010100 sentenced 4007
+0111100010100 aims 4307
+0111100010100 prior 5157
+0111100010100 dedicated 13295
+0111100010100 compared 14711
+0111100010100 related 25444
+0111100010100 due 67183
+0111100010100 according 31394
+0111100010101 gowing 41
+0111100010101 startng 47
+0111100010101 starten 47
+0111100010101 strting 54
+0111100010101 stuggling 54
+0111100010101 strtn 55
+0111100010101 start'n 56
+0111100010101 emigrating 59
+0111100010101 defecting 70
+0111100010101 roadtripping 78
+0111100010101 deferring 79
+0111100010101 keynoting 81
+0111100010101 readjusting 83
+0111100010101 destine 93
+0111100010101 -points 101
+0111100010101 adhering 117
+0111100010101 taxiing 126
+0111100010101 defaulting 129
+0111100010101 unsubscribing 176
+0111100010101 ministering 194
+0111100010101 surrendering 224
+0111100010101 trin 261
+0111100010101 pandering 363
+0111100010101 pledging 367
+0111100010101 proceeding 387
+0111100010101 owing 416
+0111100010101 flocking 417
+0111100010101 conspiring 432
+0111100010101 startn 489
+0111100010101 relocating 490
+0111100010101 transitioning 506
+0111100010101 adapting 550
+0111100010101 debuting 574
+0111100010101 grooving 593
+0111100010101 premiering 765
+0111100010101 scrambling 777
+0111100010101 tending 804
+0111100010101 departing 847
+0111100010101 proposing 898
+0111100010101 planing 952
+0111100010101 migrating 962
+0111100010101 plannin 994
+0111100010101 projected 1331
+0111100010101 contributing 1534
+0111100010101 adjusting 1547
+0111100010101 gong 1909
+0111100010101 plotting 2796
+0111100010101 threatening 3472
+0111100010101 upgrading 3574
+0111100010101 jamming 5378
+0111100010101 startin 5441
+0111100010101 continuing 5736
+0111100010101 switching 8192
+0111100010101 returning 8394
+0111100010101 struggling 10796
+0111100010101 planning 50805
+0111100010101 starting 117272
+0111100010110 kwart 45
+0111100010110 headinq 52
+0111100010110 /goes 68
+0111100010110 onmyway 89
+0111100010110 #omw 107
+0111100010110 -going 114
+0111100010110 en-route 134
+0111100010110 ontheway 223
+0111100010110 headn 299
+0111100010110 venturing 735
+0111100010110 enroute 815
+0111100010110 headin 4926
+0111100010110 otw 6204
+0111100010110 omw 10629
+0111100010110 heading 89655
+0111100010110 headed 51919
+0111100010111 #sundayshoutout 40
+0111100010111 shotuout 40
+0111100010111 @candiesbrand 41
+0111100010111 #yoloisnotanexcuse 41
+0111100010111 #itstoohot 41
+0111100010111 s|o's 41
+0111100010111 #birthdayshoutout 42
+0111100010111 #hugeshoutout 43
+0111100010111 #happyfriendshipday 43
+0111100010111 shoutiee 44
+0111100010111 #shootout 48
+0111100010111 #jedkiss 50
+0111100010111 #youshouldknowbetterthan 51
+0111100010111 shououts 51
+0111100010111 shoutoutz 51
+0111100010111 shoutouttt 52
+0111100010111 #shoutoutz 53
+0111100010111 -bout 54
+0111100010111 #ps3_fans 55
+0111100010111 shotouts 57
+0111100010111 irefuse 57
+0111100010111 shoutou 58
+0111100010111 #lifeistooshort 59
+0111100010111 #s_u_p_e_r_s_h_o_u_t_o_u_t 61
+0111100010111 #theresnoreason 62
+0111100010111 $/o 64
+0111100010111 cngrts 64
+0111100010111 cudos 65
+0111100010111 #irefuse 66
+0111100010111 #clubshoutouts 66
+0111100010111 #s_h_o_u_t_o_u_t 69
+0111100010111 #imnotthetype 69
+0111100010111 #sometimesijustwant 70
+0111100010111 #idedicatethiscupofhenny 71
+0111100010111 #bigup 74
+0111100010111 3rt 75
+0111100010111 #whateverhappened 75
+0111100010111 #theresnoneedforyou 79
+0111100010111 bigups 81
+0111100010111 shoutoutss 87
+0111100010111 #itsnotok 87
+0111100010111 #bigshoutout 96
+0111100010111 #middlefingerup 99
+0111100010111 #shouout 103
+0111100010111 #specialshoutout 105
+0111100010111 #youretooold 105
+0111100010111 #randomshoutout 106
+0111100010111 s/os 107
+0111100010111 #sometimesitsbetter 110
+0111100010111 #myaugustwish 118
+0111100010111 #imoldenough 119
+0111100010111 #cantsayno 120
+0111100010111 123
+0111100010111 #itwasnevercool 139
+0111100010111 #imattracted 148
+0111100010111 shoutsout 152
+0111100010111 #dontbescared 153
+0111100010111 #letshaveatoast 167
+0111100010111 shoutoutt 171
+0111100010111 #whenwasitokay 172
+0111100010111 #bigups 173
+0111100010111 #imaddicted 174
+0111100010111 #uglygirlsarenotallowed 180
+0111100010111 #weallhavetried 182
+0111100010111 #whosaiditwasok 185
+0111100010111 2rt 198
+0111100010111 #toast 199
+0111100010111 #shotout 215
+0111100010111 shouout 216
+0111100010111 #itsnotcool 231
+0111100010111 #isayno 235
+0111100010111 #shouldbeillegal 238
+0111100010111 #ihaveatendency 258
+0111100010111 s.o 280
+0111100010111 #whendiditbecomecool 297
+0111100010111 shout-outs 298
+0111100010111 shouties 321
+0111100010111 shotout 342
+0111100010111 #shoutsout 374
+0111100010111 s\o 428
+0111100010111 #shouts 446
+0111100010111 #whenwasitcool 543
+0111100010111 s/o's 562
+0111100010111 #itsnotokay 654
+0111100010111 #itshouldbeillegal 748
+0111100010111 s|o 792
+0111100010111 shoutie 796
+0111100010111 #so 866
+0111100010111 s/0 957
+0111100010111 shout-out 1725
+0111100010111 #shoutouts 2523
+0111100010111 shoutouts 7883
+0111100010111 #shoutout 27126
+0111100010111 shoutout 42800
+0111100010111 s/o 49320
+011110001100 foing 41
+011110001100 goung 50
+011110001100 gping 55
+011110001100 goimg 81
+011110001100 stooping 94
+011110001100 goning 129
+011110001100 goinng 150
+011110001100 giong 170
+011110001100 gooing 180
+011110001100 gonig 182
+011110001100 goint 186
+011110001100 iwent 197
+011110001100 goig 212
+011110001100 reverting 272
+011110001100 goiing 317
+011110001100 going 1199430
+011110001100 goign 344
+011110001101 leavinn 40
+011110001101 replyn 40
+011110001101 crackinn 40
+011110001101 gowin 41
+011110001101 goind 42
+011110001101 hoin 43
+011110001101 goiinq 43
+011110001101 tyin 44
+011110001101 goinnnn 45
+011110001101 trekkin 46
+011110001101 zippin 46
+011110001101 jammn 49
+011110001101 bumpinq 50
+011110001101 walkinn 51
+011110001101 trien 53
+011110001101 sliden 54
+011110001101 smashn 54
+011110001101 startingg 55
+011110001101 qoinn 55
+011110001101 cummn 55
+011110001101 gooin 56
+011110001101 qoiin 57
+011110001101 shittn 59
+011110001101 tryinggg 60
+011110001101 hoing 61
+011110001101 roccin 63
+011110001101 chompin 63
+011110001101 zoomin 66
+011110001101 misbehavin 67
+011110001101 a-comin 70
+011110001101 stickn 71
+011110001101 movingg 78
+011110001101 moveing 82
+011110001101 goingggg 84
+011110001101 blackin 88
+011110001101 moven 88
+011110001101 movn 89
+011110001101 driftin 91
+011110001101 movinq 92
+011110001101 crakin 93
+011110001101 settlin 94
+011110001101 viben 106
+011110001101 startinq 109
+011110001101 tryinn 112
+011110001101 qoinqq 114
+011110001101 planin 117
+011110001101 jaming 126
+011110001101 scrollin 127
+011110001101 goinnn 138
+011110001101 jumpn 143
+011110001101 oing 143
+011110001101 gawn 146
+011110001101 g0ing 151
+011110001101 goinqq 158
+011110001101 bossin 169
+011110001101 respondin 170
+011110001101 gunnin 179
+011110001101 rolln 183
+011110001101 jonesin 199
+011110001101 g0in 210
+011110001101 goinggg 221
+011110001101 goen 230
+011110001101 fittin 232
+011110001101 crackn 248
+011110001101 go'n 254
+011110001101 rushin 338
+011110001101 jamin 343
+011110001101 slidin 363
+011110001101 replyin 383
+011110001101 crankin 477
+011110001101 drippin 492
+011110001101 bouncin 513
+011110001101 vibing 537
+011110001101 goiin 554
+011110001101 groovin 616
+011110001101 goinq 617
+011110001101 gng 690
+011110001101 goinn 796
+011110001101 qoin 841
+011110001101 stickin 882
+011110001101 vibin 957
+011110001101 qoinq 1069
+011110001101 goingg 1077
+011110001101 hoppin 1130
+011110001101 fixin 1456
+011110001101 jumpin 2700
+011110001101 shakin 3240
+011110001101 tryn 3642
+011110001101 crackin 4579
+011110001101 jammin 6226
+011110001101 movin 6239
+011110001101 goin 126748
+0111100011100 fixen 42
+0111100011100 triying 42
+0111100011100 listenen 47
+0111100011100 lisnin 47
+0111100011100 -trying 50
+0111100011100 tryiing 50
+0111100011100 tryiin 53
+0111100011100 listinin 59
+0111100011100 tryig 63
+0111100011100 -tries 64
+0111100011100 attemptin 65
+0111100011100 determind 69
+0111100011100 fixn 78
+0111100011100 tryen 87
+0111100011100 itried 92
+0111100011100 listen'n 109
+0111100011100 itry 120
+0111100011100 listnin 123
+0111100011100 iuse 134
+0111100011100 iused 141
+0111100011100 wantn 146
+0111100011100 tyring 151
+0111100011100 succumbing 174
+0111100011100 vowing 191
+0111100011100 try'n 227
+0111100011100 tryng 228
+0111100011100 tryinq 259
+0111100011100 raring 277
+0111100011100 tryingg 304
+0111100011100 resorting 462
+0111100011100 intending 473
+0111100011100 tring 597
+0111100011100 clinging 646
+0111100011100 subscribing 781
+0111100011100 wantin 1790
+0111100011100 refusing 2625
+0111100011100 responding 6363
+0111100011100 unable 6486
+0111100011100 replying 7196
+0111100011100 attempting 8468
+0111100011100 pretending 8928
+0111100011100 listenin 9350
+0111100011100 wanting 27732
+0111100011100 trying 329666
+0111100011100 tryin 28246
+0111100011101 -listening 41
+0111100011101 listeninqq 43
+0111100011101 listeng 45
+0111100011101 lstening 45
+0111100011101 relistening 46
+0111100011101 listenign 46
+0111100011101 litening 48
+0111100011101 #twittypop 57
+0111100011101 re-listening 67
+0111100011101 lisning 74
+0111100011101 listerning 83
+0111100011101 listenting 95
+0111100011101 listenig 114
+0111100011101 listeningg 131
+0111100011101 watching/listening 133
+0111100011101 #lookingforward 139
+0111100011101 lisening 144
+0111100011101 listeing 227
+0111100011101 listenning 227
+0111100011101 listining 227
+0111100011101 #slightlyaddicted 228
+0111100011101 listeninq 293
+0111100011101 listning 379
+0111100011101 klick 422
+0111100011101 #listening 695
+0111100011101 listening 242515
+0111100011101 needless 1896
+0111100011110 hard-pressed 56
+0111100011110 www[dot]tweetall[dot] 70
+0111100011110 104
+0111100011110 105
+0111100011110 129
+0111100011110 154
+0111100011110 www[dot]shipa[dot]mobi 202
+0111100011110 authenticated 595
+0111100011110 subjected 604
+0111100011110 able 93830
+0111100011110 6047
+0111100011111 addictd 40
+0111100011111 supposee 41
+0111100011111 disinclined 42
+0111100011111 susposed 43
+0111100011111 surpose 49
+0111100011111 suppos 49
+0111100011111 sopposed 49
+0111100011111 hard-wired 51
+0111100011111 sapose 51
+0111100011111 suppposed 53
+0111100011111 well-suited 54
+0111100011111 amenable 56
+0111100011111 beholden 56
+0111100011111 temped 58
+0111100011111 reffered 59
+0111100011111 condusive 61
+0111100011111 suppsed 67
+0111100011111 allowd 70
+0111100011111 suspose 75
+0111100011111 predisposed 76
+0111100011111 alluding 77
+0111100011111 possed 82
+0111100011111 attuned 82
+0111100011111 alowed 93
+0111100011111 objecting 94
+0111100011111 tantamount 98
+0111100011111 supposd 98
+0111100011111 wiling 106
+0111100011111 adicted 116
+0111100011111 referrin 118
+0111100011111 impervious 119
+0111100011111 supossed 155
+0111100011111 thisclose 167
+0111100011111 reffering 180
+0111100011111 privy 187
+0111100011111 suppossed 191
+0111100011111 alergic 196
+0111100011111 s'posed 212
+0111100011111 fated 237
+0111100011111 susceptible 300
+0111100011111 suppost 309
+0111100011111 suposed 344
+0111100011111 supose 438
+0111100011111 conducive 533
+0111100011111 willin 555
+0111100011111 accustomed 630
+0111100011111 unwilling 635
+0111100011111 permitted 647
+0111100011111 sposed 815
+0111100011111 refering 829
+0111100011111 obligated 1111
+0111100011111 compelled 1167
+0111100011111 spose 1176
+0111100011111 inclined 1607
+0111100011111 glued 2568
+0111100011111 delighted 3278
+0111100011111 eager 3781
+0111100011111 attracted 4869
+0111100011111 allergic 6289
+0111100011111 determined 8435
+0111100011111 referring 8693
+0111100011111 tempted 9584
+0111100011111 forced 14825
+0111100011111 invited 18724
+0111100011111 willing 21084
+0111100011111 addicted 27299
+0111100011111 allowed 27650
+0111100011111 suppose 36926
+0111100011111 supposed 64323
+0111100100000 losed 40
+0111100100000 mulched 40
+0111100100000 repacked 40
+0111100100000 recked 40
+0111100100000 up'd 41
+0111100100000 overfilled 41
+0111100100000 burnd 41
+0111100100000 e-filed 41
+0111100100000 dirtied 42
+0111100100000 ashed 42
+0111100100000 reordered 42
+0111100100000 refinished 42
+0111100100000 winterized 42
+0111100100000 overfed 42
+0111100100000 brokeee 42
+0111100100000 chgd 42
+0111100100000 brke 42
+0111100100000 flatted 42
+0111100100000 snarfed 42
+0111100100000 burrowed 42
+0111100100000 showerd 43
+0111100100000 retraced 43
+0111100100000 disinfected 44
+0111100100000 delted 45
+0111100100000 rechecked 45
+0111100100000 cleand 45
+0111100100000 chaged 46
+0111100100000 editted 46
+0111100100000 decluttered 46
+0111100100000 jocked 47
+0111100100000 papered 47
+0111100100000 brokes 47
+0111100100000 dislodged 48
+0111100100000 re-started 48
+0111100100000 unhooked 48
+0111100100000 bobbed 48
+0111100100000 fixxed 48
+0111100100000 slurped 49
+0111100100000 paniced 49
+0111100100000 crackd 49
+0111100100000 refinanced 49
+0111100100000 re-made 49
+0111100100000 heaved 50
+0111100100000 restrung 50
+0111100100000 pearled 51
+0111100100000 exfoliated 51
+0111100100000 wagged 51
+0111100100000 jailbreaked 51
+0111100100000 reassembled 52
+0111100100000 chnged 52
+0111100100000 pouted 52
+0111100100000 stold 53
+0111100100000 rockd 53
+0111100100000 broadened 54
+0111100100000 chngd 54
+0111100100000 quitted 54
+0111100100000 smackd 54
+0111100100000 drinked 54
+0111100100000 rawked 55
+0111100100000 washd 56
+0111100100000 touchd 56
+0111100100000 junked 57
+0111100100000 freezed 57
+0111100100000 overnighted 58
+0111100100000 striked 59
+0111100100000 streched 60
+0111100100000 unclogged 60
+0111100100000 chunked 60
+0111100100000 renounced 61
+0111100100000 superglued 61
+0111100100000 cutted 62
+0111100100000 re-uploaded 63
+0111100100000 bedded 65
+0111100100000 changedd 66
+0111100100000 shovelled 66
+0111100100000 photocopied 68
+0111100100000 takenn 68
+0111100100000 gulped 69
+0111100100000 itched 69
+0111100100000 clutched 69
+0111100100000 exhaled 71
+0111100100000 dropd 72
+0111100100000 whiped 72
+0111100100000 fixd 73
+0111100100000 quieted 73
+0111100100000 grabed 74
+0111100100000 muffed 74
+0111100100000 memorised 74
+0111100100000 wrenched 75
+0111100100000 redecorated 76
+0111100100000 bonked 78
+0111100100000 squatted 79
+0111100100000 wiggled 79
+0111100100000 shaked 81
+0111100100000 rethought 82
+0111100100000 sapped 83
+0111100100000 droppd 85
+0111100100000 whittled 86
+0111100100000 trew 89
+0111100100000 flubbed 89
+0111100100000 hogged 90
+0111100100000 disintegrated 90
+0111100100000 quenched 92
+0111100100000 poofed 95
+0111100100000 shampooed 95
+0111100100000 re-arranged 95
+0111100100000 flossed 95
+0111100100000 suckd 96
+0111100100000 scalded 96
+0111100100000 pricked 100
+0111100100000 stoled 100
+0111100100000 whupped 101
+0111100100000 navigated 101
+0111100100000 twitched 102
+0111100100000 dulled 103
+0111100100000 digged 108
+0111100100000 notched 109
+0111100100000 gelled 110
+0111100100000 glitched 110
+0111100100000 pawned 111
+0111100100000 undid 112
+0111100100000 gauged 112
+0111100100000 clamped 115
+0111100100000 sync'd 117
+0111100100000 tweeked 119
+0111100100000 repainted 119
+0111100100000 pruned 119
+0111100100000 hoovered 122
+0111100100000 snipped 123
+0111100100000 changd 126
+0111100100000 fluffed 127
+0111100100000 sowed 127
+0111100100000 chanqed 128
+0111100100000 sanded 128
+0111100100000 overflowed 132
+0111100100000 binned 133
+0111100100000 grinded 134
+0111100100000 bared 135
+0111100100000 lightened 136
+0111100100000 answerd 142
+0111100100000 proofed 142
+0111100100000 relived 147
+0111100100000 broked 148
+0111100100000 smudged 152
+0111100100000 cemented 153
+0111100100000 clawed 155
+0111100100000 overestimated 155
+0111100100000 bullshitted 155
+0111100100000 tooted 156
+0111100100000 brokee 158
+0111100100000 smushed 160
+0111100100000 numbed 164
+0111100100000 grazed 172
+0111100100000 synched 179
+0111100100000 reformatted 179
+0111100100000 solidified 185
+0111100100000 totalled 190
+0111100100000 re-did 194
+0111100100000 piqued 195
+0111100100000 vibrated 196
+0111100100000 sussed 201
+0111100100000 patted 202
+0111100100000 mended 203
+0111100100000 reorganized 207
+0111100100000 defrosted 210
+0111100100000 crunched 213
+0111100100000 stapled 218
+0111100100000 petted 220
+0111100100000 refilled 223
+0111100100000 rinsed 224
+0111100100000 twatted 233
+0111100100000 stroked 247
+0111100100000 buckled 254
+0111100100000 reactivated 259
+0111100100000 bawled 266
+0111100100000 soiled 276
+0111100100000 combed 295
+0111100100000 singed 296
+0111100100000 jailbroke 301
+0111100100000 keyed 325
+0111100100000 opend 328
+0111100100000 bricked 334
+0111100100000 skimmed 340
+0111100100000 sharpened 344
+0111100100000 stubbed 345
+0111100100000 sewed 347
+0111100100000 overheated 349
+0111100100000 mopped 355
+0111100100000 shagged 359
+0111100100000 shined 372
+0111100100000 plucked 386
+0111100100000 swiped 387
+0111100100000 tidied 391
+0111100100000 unloaded 397
+0111100100000 tripled 410
+0111100100000 inspected 435
+0111100100000 droped 442
+0111100100000 cocked 451
+0111100100000 tightened 463
+0111100100000 gagged 472
+0111100100000 scrubbed 484
+0111100100000 buggered 488
+0111100100000 totaled 492
+0111100100000 butchered 500
+0111100100000 tanked 508
+0111100100000 vacuumed 514
+0111100100000 narrowed 533
+0111100100000 patched 565
+0111100100000 clapped 569
+0111100100000 rammed 572
+0111100100000 flopped 573
+0111100100000 bleached 585
+0111100100000 squished 590
+0111100100000 nicked 590
+0111100100000 shoveled 606
+0111100100000 upped 617
+0111100100000 brightened 621
+0111100100000 rung 633
+0111100100000 redone 640
+0111100100000 rebooted 655
+0111100100000 bled 662
+0111100100000 stirred 680
+0111100100000 cooled 689
+0111100100000 ironed 693
+0111100100000 rearranged 724
+0111100100000 brightens 731
+0111100100000 scraped 744
+0111100100000 emptied 753
+0111100100000 shrunk 755
+0111100100000 pasted 768
+0111100100000 pinched 786
+0111100100000 stamped 808
+0111100100000 paused 843
+0111100100000 flushed 859
+0111100100000 mowed 863
+0111100100000 synced 880
+0111100100000 swapped 915
+0111100100000 coded 915
+0111100100000 memorized 924
+0111100100000 dusted 924
+0111100100000 deactivated 926
+0111100100000 tweaked 927
+0111100100000 restarted 937
+0111100100000 grinds 991
+0111100100000 snatched 1016
+0111100100000 unpacked 1031
+0111100100000 straightened 1124
+0111100100000 chipped 1149
+0111100100000 boarded 1175
+0111100100000 trimmed 1283
+0111100100000 squeezed 1315
+0111100100000 carved 1543
+0111100100000 sprung 1577
+0111100100000 shat 1613
+0111100100000 jammed 1711
+0111100100000 slowed 1720
+0111100100000 rubbed 1730
+0111100100000 folded 1730
+0111100100000 erased 1827
+0111100100000 doubled 1996
+0111100100000 licked 2042
+0111100100000 mastered 2065
+0111100100000 decorated 2083
+0111100100000 wrecked 2194
+0111100100000 brushed 2200
+0111100100000 scratched 2328
+0111100100000 copied 2636
+0111100100000 dyed 2711
+0111100100000 nailed 2851
+0111100100000 pooped 2861
+0111100100000 hid 2917
+0111100100000 rang 3013
+0111100100000 froze 3367
+0111100100000 shook 3568
+0111100100000 showered 3692
+0111100100000 melted 3812
+0111100100000 pressed 4392
+0111100100000 shaved 5392
+0111100100000 smashed 6342
+0111100100000 painted 7811
+0111100100000 sorted 8130
+0111100100000 cracked 8572
+0111100100000 crashed 9501
+0111100100000 washed 9516
+0111100100000 burnt 9574
+0111100100000 busted 9579
+0111100100000 rocked 10325
+0111100100000 touched 10346
+0111100100000 burned 10980
+0111100100000 cleaned 12349
+0111100100000 booked 12842
+0111100100000 ruined 13400
+0111100100000 deleted 17017
+0111100100000 stole 17824
+0111100100000 opened 21088
+0111100100000 fixed 31840
+0111100100000 broke 64940
+0111100100000 changed 66326
+01111001000010 wreaked 67
+01111001000010 waistin 67
+01111001000010 spendn 94
+01111001000010 elapsed 118
+01111001000010 biding 161
+01111001000010 waisting 330
+01111001000010 wastin 643
+01111001000010 spendin 1315
+01111001000010 wasting 10986
+01111001000010 spending 41699
+01111001000010 spent 58783
+01111001000011 fufilled 41
+01111001000011 recanted 42
+01111001000011 bouth 42
+01111001000011 lossed 43
+01111001000011 mishandled 43
+01111001000011 tivo'ed 44
+01111001000011 cando 44
+01111001000011 losttt 45
+01111001000011 rehabbed 46
+01111001000011 relinquished 46
+01111001000011 overspent 46
+01111001000011 nexted 46
+01111001000011 overstepped 47
+01111001000011 typo'd 49
+01111001000011 mortgaged 49
+01111001000011 mis-spelled 49
+01111001000011 l0st 50
+01111001000011 registerd 50
+01111001000011 reachd 52
+01111001000011 mislaid 52
+01111001000011 internalized 53
+01111001000011 massed 53
+01111001000011 treed 54
+01111001000011 denys 56
+01111001000011 overextended 57
+01111001000011 pleasure's 57
+01111001000011 misbehaved 58
+01111001000011 lost- 60
+01111001000011 overstayed 63
+01111001000011 miscarried 64
+01111001000011 dialled 64
+01111001000011 hedged 65
+01111001000011 missunderstood 66
+01111001000011 preffered 71
+01111001000011 outlasted 71
+01111001000011 reinvigorated 72
+01111001000011 hads 75
+01111001000011 mimed 75
+01111001000011 wone 77
+01111001000011 mismanaged 78
+01111001000011 misspelt 78
+01111001000011 faild 78
+01111001000011 bort 79
+01111001000011 miscalculated 87
+01111001000011 dvrd 88
+01111001000011 outlived 89
+01111001000011 doodled 91
+01111001000011 untangled 93
+01111001000011 mispronounced 97
+01111001000011 dvr'ed 98
+01111001000011 overshot 99
+01111001000011 forfeited 99
+01111001000011 regurgitated 102
+01111001000011 losted 103
+01111001000011 lostt 103
+01111001000011 obstructed 104
+01111001000011 scalped 114
+01111001000011 fasted 118
+01111001000011 bootlegged 124
+01111001000011 professed 126
+01111001000011 tivoed 133
+01111001000011 goy 134
+01111001000011 dvred 166
+01111001000011 punctured 167
+01111001000011 squandered 182
+01111001000011 allotted 186
+01111001000011 rote 189
+01111001000011 defected 216
+01111001000011 misheard 224
+01111001000011 mispelled 229
+01111001000011 goot 263
+01111001000011 alienated 279
+01111001000011 weathered 302
+01111001000011 rehearsed 306
+01111001000011 despised 309
+01111001000011 risked 319
+01111001000011 tivo'd 338
+01111001000011 enlarged 359
+01111001000011 reclaimed 374
+01111001000011 vented 374
+01111001000011 regained 384
+01111001000011 surrendered 443
+01111001000011 unwrapped 550
+01111001000011 lacked 557
+01111001000011 conceded 603
+01111001000011 matured 627
+01111001000011 dvr'd 633
+01111001000011 rtd 677
+01111001000011 hrd 683
+01111001000011 waisted 732
+01111001000011 panicked 807
+01111001000011 inherited 893
+01111001000011 muted 955
+01111001000011 misplaced 1405
+01111001000011 misspelled 1484
+01111001000011 gat 1797
+01111001000011 violated 1920
+01111001000011 overslept 2099
+01111001000011 neglected 2484
+01111001000011 borrowed 2744
+01111001000011 preferred 3805
+01111001000011 abandoned 4665
+01111001000011 aged 4782
+01111001000011 increased 6685
+01111001000011 improved 7487
+01111001000011 gained 8166
+01111001000011 experienced 10301
+01111001000011 drew 15751
+01111001000011 wasted 21787
+01111001000011 lost 187707
+01111001000011 failed 27619
+0111100100010 lefttt 73
+0111100100010 chanced 77
+0111100100010 left- 82
+0111100100010 leaved 85
+0111100100010 leff 123
+0111100100010 lefted 128
+0111100100010 leftt 180
+0111100100010 lft 290
+0111100100010 dislocated 560
+0111100100010 sprained 1673
+0111100100010 left 228519
+0111100100010 handed 7877
+0111100100011 test-fired 40
+0111100100011 receded 41
+0111100100011 vommed 41
+0111100100011 resided 41
+0111100100011 concurred 44
+0111100100011 hyperventilated 45
+0111100100011 equalized 45
+0111100100011 wailed 46
+0111100100011 flourished 48
+0111100100011 hiccuped 49
+0111100100011 withstood 50
+0111100100011 prospered 52
+0111100100011 succeded 53
+0111100100011 relented 55
+0111100100011 wonnn 57
+0111100100011 grunted 58
+0111100100011 abstained 59
+0111100100011 equalised 59
+0111100100011 orgasmed 60
+0111100100011 birdied 62
+0111100100011 shuddered 62
+0111100100011 rioted 63
+0111100100011 erred 66
+0111100100011 repented 67
+0111100100011 joind 68
+0111100100011 diedd 69
+0111100100011 croaked 77
+0111100100011 eloped 79
+0111100100011 arived 89
+0111100100011 dissappeared 93
+0111100100011 loafed 94
+0111100100011 thrived 95
+0111100100011 blossomed 99
+0111100100011 disapeared 102
+0111100100011 cooperated 105
+0111100100011 howled 108
+0111100100011 rebelled 110
+0111100100011 profited 110
+0111100100011 wonn 111
+0111100100011 quadrupled 113
+0111100100011 benefitted 113
+0111100100011 excelled 116
+0111100100011 triumphed 120
+0111100100011 pooted 125
+0111100100011 sharted 125
+0111100100011 intervened 126
+0111100100011 reappeared 127
+0111100100011 bloomed 130
+0111100100011 relapsed 130
+0111100100011 resurfaced 137
+0111100100011 rejoiced 142
+0111100100011 beens 145
+0111100100011 rejoined 148
+0111100100011 perished 150
+0111100100011 chimed 156
+0111100100011 imploded 178
+0111100100011 flickered 187
+0111100100011 skyrocketed 188
+0111100100011 scoffed 189
+0111100100011 testified 207
+0111100100011 homered 215
+0111100100011 prevailed 234
+0111100100011 arose 249
+0111100100011 sighed 287
+0111100100011 barfed 290
+0111100100011 fumbled 291
+0111100100011 dissapeared 302
+0111100100011 wokeup 306
+0111100100011 subsided 308
+0111100100011 competed 320
+0111100100011 withdrew 339
+0111100100011 clinched 340
+0111100100011 surfed 345
+0111100100011 commenced 363
+0111100100011 averaged 394
+0111100100011 sinned 398
+0111100100011 hinted 409
+0111100100011 surfaced 424
+0111100100011 yawned 428
+0111100100011 breathed 434
+0111100100011 erupted 455
+0111100100011 protested 495
+0111100100011 blinked 503
+0111100100011 wept 525
+0111100100011 burped 526
+0111100100011 vomited 571
+0111100100011 endured 597
+0111100100011 peaked 636
+0111100100011 fled 704
+0111100100011 debuted 746
+0111100100011 surpassed 825
+0111100100011 emerged 1036
+0111100100011 remained 1070
+0111100100011 vanished 1155
+0111100100011 fainted 1190
+0111100100011 succeeded 1314
+0111100100011 caved 1337
+0111100100011 participated 1458
+0111100100011 collapsed 1753
+0111100100011 sneezed 1836
+0111100100011 exploded 3028
+0111100100011 escaped 3034
+0111100100011 suffered 3462
+0111100100011 farted 3766
+0111100100011 disappeared 4712
+0111100100011 graduated 5059
+0111100100011 begun 8162
+0111100100011 landed 12695
+0111100100011 reached 15502
+0111100100011 scored 18242
+0111100100011 joined 31130
+0111100100011 arrived 31724
+0111100100011 died 53835
+0111100100011 won 94540
+011110010010 degenerated 40
+011110010010 passsed 40
+011110010010 lept 40
+011110010010 turn'd 40
+011110010010 kayaked 41
+011110010010 bammed 41
+011110010010 siphoned 42
+011110010010 maneuvered 42
+011110010010 pussied 42
+011110010010 slobbered 42
+011110010010 popd 42
+011110010010 poo'd 43
+011110010010 lopped 43
+011110010010 snowballed 43
+011110010010 snaped 43
+011110010010 lounged 44
+011110010010 moshed 44
+011110010010 doled 45
+011110010010 slinks 45
+011110010010 flapped 45
+011110010010 waddled 46
+011110010010 slithered 46
+011110010010 plunked 47
+011110010010 scurried 47
+011110010010 keeled 47
+011110010010 waffled 47
+011110010010 pluged 47
+011110010010 grafted 48
+011110010010 wee'd 49
+011110010010 p'd 50
+011110010010 strode 50
+011110010010 slutted 50
+011110010010 pased 50
+011110010010 trickled 51
+011110010010 wipped 52
+011110010010 sifted 52
+011110010010 fluttered 52
+011110010010 grubbed 53
+011110010010 pried 54
+011110010010 riped 54
+011110010010 twirled 54
+011110010010 delved 54
+011110010010 thumbed 54
+011110010010 lazed 55
+011110010010 loged 55
+011110010010 backtracked 55
+011110010010 shited 56
+011110010010 whizzed 56
+011110010010 thundered 56
+011110010010 fliped 56
+011110010010 spiraled 57
+011110010010 seeped 57
+011110010010 darted 58
+011110010010 zeroed 58
+011110010010 peered 60
+011110010010 wlked 62
+011110010010 sheared 62
+011110010010 chomped 62
+011110010010 scooted 63
+011110010010 gushed 64
+011110010010 runned 65
+011110010010 paddled 65
+011110010010 blurts 66
+011110010010 drummed 67
+011110010010 jumpd 67
+011110010010 trotted 68
+011110010010 wanked 68
+011110010010 spanned 68
+011110010010 shooed 68
+011110010010 trekked 68
+011110010010 chowed 69
+011110010010 spreaded 69
+011110010010 fleshed 69
+011110010010 glowed 70
+011110010010 peaced 71
+011110010010 streaked 71
+011110010010 sticked 72
+011110010010 hashed 72
+011110010010 branched 73
+011110010010 whored 74
+011110010010 wrangled 74
+011110010010 inched 75
+011110010010 evened 75
+011110010010 paraded 76
+011110010010 rambled 76
+011110010010 binged 77
+011110010010 stowed 77
+011110010010 kirked 77
+011110010010 kitted 77
+011110010010 boomed 78
+011110010010 gouged 78
+011110010010 waded 79
+011110010010 wigged 82
+011110010010 presided 82
+011110010010 planked 83
+011110010010 wrung 83
+011110010010 leant 83
+011110010010 tugged 84
+011110010010 jetted 84
+011110010010 veered 84
+011110010010 obsesses 85
+011110010010 wlkd 85
+011110010010 glossed 86
+011110010010 slaved 87
+011110010010 latched 87
+011110010010 mellowed 94
+011110010010 steped 95
+011110010010 urinated 96
+011110010010 guilted 97
+011110010010 rocketed 97
+011110010010 cummed 97
+011110010010 smoothed 98
+011110010010 delves 98
+011110010010 coaxed 100
+011110010010 lingered 100
+011110010010 plopped 104
+011110010010 wrked 105
+011110010010 bursted 105
+011110010010 nibbled 106
+011110010010 leaped 107
+011110010010 churned 108
+011110010010 conked 112
+011110010010 dribbled 112
+011110010010 barged 113
+011110010010 slagged 114
+011110010010 vomitted 114
+011110010010 bopped 116
+011110010010 fizzled 117
+011110010010 lurked 118
+011110010010 limped 118
+011110010010 scoped 119
+011110010010 skidded 120
+011110010010 morphs 122
+011110010010 devolved 123
+011110010010 wrkd 123
+011110010010 whisked 125
+011110010010 pulld 125
+011110010010 squeaked 125
+011110010010 lulled 126
+011110010010 kickd 126
+011110010010 pooed 127
+011110010010 passd 130
+011110010010 transitioned 131
+011110010010 ratted 131
+011110010010 slung 132
+011110010010 ushered 132
+011110010010 knockd 139
+011110010010 hovered 139
+011110010010 gazed 140
+011110010010 staked 144
+011110010010 lumped 152
+011110010010 snuffed 154
+011110010010 thinned 156
+011110010010 gambled 157
+011110010010 strayed 157
+011110010010 bleeped 158
+011110010010 carted 165
+011110010010 weeded 166
+011110010010 sprang 170
+011110010010 swerved 174
+011110010010 nipped 179
+011110010010 roared 182
+011110010010 dished 182
+011110010010 swooped 183
+011110010010 sprinted 189
+011110010010 beamed 196
+011110010010 munched 200
+011110010010 sprawled 205
+011110010010 fished 207
+011110010010 strolled 211
+011110010010 piped 214
+011110010010 bussed 217
+011110010010 turnd 223
+011110010010 dripped 224
+011110010010 panned 224
+011110010010 lashed 229
+011110010010 poped 233
+011110010010 scribbled 235
+011110010010 splattered 235
+011110010010 spewed 238
+011110010010 squirted 243
+011110010010 cruised 245
+011110010010 dived 257
+011110010010 slacked 265
+011110010010 flowed 270
+011110010010 thawed 276
+011110010010 shorted 282
+011110010010 shelled 282
+011110010010 walkd 282
+011110010010 workd 289
+011110010010 bolted 293
+011110010010 -walks 295
+011110010010 sketched 308
+011110010010 blanked 317
+011110010010 shuffled 326
+011110010010 nutted 327
+011110010010 singled 335
+011110010010 morphed 337
+011110010010 jerked 348
+011110010010 hauled 358
+011110010010 flaked 359
+011110010010 pee'd 360
+011110010010 flung 360
+011110010010 zoomed 362
+011110010010 drooled 367
+011110010010 jogged 373
+011110010010 stashed 374
+011110010010 bowed 377
+011110010010 smeared 380
+011110010010 crept 390
+011110010010 roped 390
+011110010010 suckered 393
+011110010010 sneaked 394
+011110010010 sweated 399
+011110010010 evens 402
+011110010010 marched 411
+011110010010 descended 418
+011110010010 spazzed 434
+011110010010 drifted 437
+011110010010 splashed 438
+011110010010 flicked 442
+011110010010 sailed 456
+011110010010 cycled 460
+011110010010 yanked 466
+011110010010 nodded 468
+011110010010 ventured 503
+011110010010 floated 513
+011110010010 lucked 514
+011110010010 hiked 519
+011110010010 escorted 533
+011110010010 plunged 553
+011110010010 leaned 578
+011110010010 stormed 585
+011110010010 camped 599
+011110010010 chucked 604
+011110010010 zoned 615
+011110010010 maxed 634
+011110010010 crammed 637
+011110010010 cashed 661
+011110010010 fouled 668
+011110010010 crapped 684
+011110010010 swung 686
+011110010010 biked 692
+011110010010 inducted 694
+011110010010 stomped 700
+011110010010 wandered 705
+011110010010 decked 706
+011110010010 raced 770
+011110010010 strung 771
+011110010010 pimped 809
+011110010010 ducked 814
+011110010010 swagged 818
+011110010010 joked 839
+011110010010 dunked 891
+011110010010 pinned 915
+011110010010 bowled 915
+011110010010 grossed 942
+011110010010 bugged 1026
+011110010010 clocked 1117
+011110010010 crawled 1117
+011110010010 slid 1118
+011110010010 spun 1130
+011110010010 shoved 1292
+011110010010 blacked 1314
+011110010010 cussed 1340
+011110010010 chewed 1391
+011110010010 booted 1413
+011110010010 bounced 1421
+011110010010 puked 1433
+011110010010 weighed 1453
+011110010010 transformed 1458
+011110010010 layed 1495
+011110010010 tricked 1691
+011110010010 bailed 1782
+011110010010 tapped 1830
+011110010010 climbed 1929
+011110010010 stretched 1949
+011110010010 creeped 2004
+011110010010 tucked 2102
+011110010010 hopped 2109
+011110010010 snuck 2110
+011110010010 swept 2396
+011110010010 tossed 2405
+011110010010 dug 2589
+011110010010 poured 2666
+011110010010 tripped 2683
+011110010010 plugged 2762
+011110010010 rushed 3090
+011110010010 peed 3098
+011110010010 dragged 3226
+011110010010 flipped 3266
+011110010010 wiped 3434
+011110010010 bumped 3559
+011110010010 rained 3806
+011110010010 slipped 3909
+011110010010 ruled 4269
+011110010010 pointed 4277
+011110010010 clicked 4960
+011110010010 carried 5101
+011110010010 rode 5784
+011110010010 freaked 6149
+011110010010 stepped 6231
+011110010010 logged 6455
+011110010010 flew 6644
+011110010010 ripped 8215
+011110010010 popped 8371
+011110010010 switched 8390
+011110010010 rolled 8429
+011110010010 pushed 9177
+011110010010 thrown 9513
+011110010010 jumped 10561
+011110010010 drove 13608
+011110010010 knocked 13728
+011110010010 walks 17668
+011110010010 kicked 21392
+011110010010 pulled 24204
+011110010010 walked 32695
+011110010010 moved 33885
+011110010010 sold 40117
+011110010010 passed 40183
+011110010010 turns 40924
+011110010010 ran 42072
+011110010010 worked 47644
+011110010010 turned 57027
+0111100100110 facepalmed 43
+0111100100110 smellz 44
+0111100100110 luked 45
+0111100100110 laughd 47
+0111100100110 loked 47
+0111100100110 grumbled 50
+0111100100110 jeered 51
+0111100100110 look'd 51
+0111100100110 snickered 52
+0111100100110 screeched 53
+0111100100110 lunged 57
+0111100100110 winced 57
+0111100100110 huffed 58
+0111100100110 balked 61
+0111100100110 loooked 62
+0111100100110 shrieked 67
+0111100100110 lukd 68
+0111100100110 purred 68
+0111100100110 functioned 72
+0111100100110 flinched 76
+0111100100110 groaned 81
+0111100100110 stuttered 87
+0111100100110 meowed 92
+0111100100110 laffed 93
+0111100100110 lol-ed 99
+0111100100110 holla'd 103
+0111100100110 snored 121
+0111100100110 lolled 121
+0111100100110 hissed 125
+0111100100110 smirked 127
+0111100100110 grinned 129
+0111100100110 lold 151
+0111100100110 glared 165
+0111100100110 whined 168
+0111100100110 whistled 198
+0111100100110 cringed 201
+0111100100110 hollered 224
+0111100100110 gasped 225
+0111100100110 squealed 239
+0111100100110 lol'ed 253
+0111100100110 beeped 255
+0111100100110 blushed 261
+0111100100110 peeked 271
+0111100100110 growled 313
+0111100100110 moaned 321
+0111100100110 barked 350
+0111100100110 honked 384
+0111100100110 chuckled 392
+0111100100110 glanced 394
+0111100100110 behaves 432
+0111100100110 lookd 448
+0111100100110 loled 660
+0111100100110 winked 710
+0111100100110 giggled 723
+0111100100110 bitched 895
+0111100100110 smelt 914
+0111100100110 lol'd 1343
+0111100100110 waved 1760
+0111100100110 stared 1967
+0111100100110 shouted 2540
+0111100100110 acted 2975
+0111100100110 smelled 3130
+0111100100110 smiled 3886
+0111100100110 screamed 4053
+0111100100110 tasted 4807
+0111100100110 yelled 6121
+0111100100110 laughed 16097
+0111100100110 looked 66345
+0111100100110 felt 55749
+0111100100111 roomed 43
+0111100100111 snowboarded 44
+0111100100111 wavered 45
+0111100100111 persevered 45
+0111100100111 partyed 45
+0111100100111 slpt 48
+0111100100111 skiied 48
+0111100100111 confided 50
+0111100100111 tinkered 54
+0111100100111 twitterd 58
+0111100100111 sleeped 62
+0111100100111 betted 63
+0111100100111 facetimed 64
+0111100100111 djed 65
+0111100100111 snacked 71
+0111100100111 swum 71
+0111100100111 squeed 73
+0111100100111 conversed 73
+0111100100111 flailed 74
+0111100100111 shivered 78
+0111100100111 lusted 84
+0111100100111 swooned 87
+0111100100111 dj'd 91
+0111100100111 meditated 93
+0111100100111 sleept 98
+0111100100111 golfed 101
+0111100100111 interned 114
+0111100100111 fiddled 117
+0111100100111 interacted 127
+0111100100111 dabbled 128
+0111100100111 got'em 139
+0111100100111 sobbed 142
+0111100100111 snoozed 142
+0111100100111 hungout 143
+0111100100111 fangirled 148
+0111100100111 faught 159
+0111100100111 stayd 168
+0111100100111 majored 180
+0111100100111 splurged 197
+0111100100111 campaigned 204
+0111100100111 collaborated 219
+0111100100111 babysat 222
+0111100100111 coped 230
+0111100100111 experimented 237
+0111100100111 hooped 245
+0111100100111 indulged 272
+0111100100111 dined 296
+0111100100111 browsed 309
+0111100100111 cryed 323
+0111100100111 skyped 379
+0111100100111 wrestled 407
+0111100100111 skated 431
+0111100100111 procrastinated 453
+0111100100111 flirted 484
+0111100100111 exercised 544
+0111100100111 jizzed 607
+0111100100111 toured 637
+0111100100111 napped 968
+0111100100111 argued 1089
+0111100100111 swam 1339
+0111100100111 partied 1441
+0111100100111 chatted 1521
+0111100100111 shopped 1526
+0111100100111 prayed 2759
+0111100100111 danced 3873
+0111100100111 studied 3885
+0111100100111 dated 5060
+0111100100111 fought 7399
+0111100100111 waited 9425
+0111100100111 cried 17404
+0111100100111 stayed 21187
+0111100100111 lived 22550
+0111100100111 met 78759
+0111100100111 slept 34334
+011110010100 tebowed 40
+011110010100 indisposed 40
+011110010100 tazered 40
+011110010100 flayed 40
+011110010100 pubbed 40
+011110010100 non-committal 41
+011110010100 firebombed 41
+011110010100 creampied 41
+011110010100 blotto 42
+011110010100 #arrested 42
+011110010100 challanged 42
+011110010100 re-married 43
+011110010100 twaped 43
+011110010100 immortalised 43
+011110010100 immunized 44
+011110010100 beatup 44
+011110010100 broughten 44
+011110010100 re-born 45
+011110010100 dq'd 45
+011110010100 reappointed 45
+011110010100 runover 45
+011110010100 yatted 46
+011110010100 swabbed 47
+011110010100 microchipped 47
+011110010100 incinerated 47
+011110010100 injuried 47
+011110010100 brutalized 48
+011110010100 tangoed 48
+011110010100 furloughed 49
+011110010100 coddled 50
+011110010100 kidnaped 51
+011110010100 paralized 51
+011110010100 re-routed 51
+011110010100 electricuted 51
+011110010100 assasinated 51
+011110010100 overwritten 51
+011110010100 paroled 52
+011110010100 whitelisted 53
+011110010100 verpasst 53
+011110010100 revolted 57
+011110010100 refueled 57
+011110010100 conected 57
+011110010100 posterized 57
+011110010100 hackedd 57
+011110010100 suspened 58
+011110010100 swaddled 58
+011110010100 feted 58
+011110010100 consecrated 58
+011110010100 deluged 58
+011110010100 jobbed 59
+011110010100 refocused 59
+011110010100 pantsed 60
+011110010100 circumsized 61
+011110010100 shortchanged 62
+011110010100 borned 62
+011110010100 chauffeured 62
+011110010100 uninjured 62
+011110010100 railroaded 63
+011110010100 absolved 63
+011110010100 twitterized 63
+011110010100 ided 63
+011110010100 papped 63
+011110010100 emancipated 64
+011110010100 disengaged 65
+011110010100 vlouded 66
+011110010100 robed 67
+011110010100 excommunicated 68
+011110010100 maried 69
+011110010100 ⇧ 69
+011110010100 roofied 69
+011110010100 delisted 70
+011110010100 censured 70
+011110010100 babied 71
+011110010100 glassed 71
+011110010100 crunked 71
+011110010100 25%off 71
+011110010100 grieved 72
+011110010100 vilified 74
+011110010100 fleeced 75
+011110010100 goosed 76
+011110010100 declawed 76
+011110010100 carjacked 76
+011110010100 inseperable 77
+011110010100 rehabilitated 77
+011110010100 typecast 78
+011110010100 martyred 79
+011110010100 unbanned 80
+011110010100 rehired 80
+011110010100 nerfed 80
+011110010100 reassigned 81
+011110010100 fingerprinted 82
+011110010100 hazed 82
+011110010100 sequestered 82
+011110010100 sectioned 83
+011110010100 gored 83
+011110010100 spamed 83
+011110010100 tattd 83
+011110010100 #married 83
+011110010100 maced 85
+011110010100 yoked 85
+011110010100 exterminated 85
+011110010100 caned 88
+011110010100 penalised 89
+011110010100 muzzled 90
+011110010100 frisked 90
+011110010100 misdiagnosed 91
+011110010100 bludgeoned 91
+011110010100 shackled 92
+011110010100 tarred 93
+011110010100 beautified 95
+011110010100 unhurt 96
+011110010100 outfitted 97
+011110010100 intune 97
+011110010100 raptured 97
+011110010100 thinketh 99
+011110010100 breastfed 99
+011110010100 exonerated 100
+011110010100 reamed 101
+011110010100 indoctrinated 104
+011110010100 skunked 105
+011110010100 tazed 105
+011110010100 marooned 105
+011110010100 uprooted 106
+011110010100 tased 108
+011110010100 knifed 108
+011110010100 overthrown 109
+011110010100 gangbanged 110
+011110010100 pre-approved 112
+011110010100 rick-rolled 114
+011110010100 wined 118
+011110010100 rerouted 119
+011110010100 sterilized 119
+011110010100 maimed 123
+011110010100 jipped 124
+011110010100 baptised 125
+011110010100 remarried 128
+011110010100 reelected 129
+011110010100 throttled 131
+011110010100 clobbered 136
+011110010100 burglarized 137
+011110010100 stereotyped 138
+011110010100 burgled 139
+011110010100 punkd 143
+011110010100 waterboarded 146
+011110010100 pregant 147
+011110010100 subpoenaed 147
+011110010100 dressd 148
+011110010100 hassled 150
+011110010100 deposed 153
+011110010100 blitzed 153
+011110010100 castrated 155
+011110010100 airlifted 162
+011110010100 flogged 165
+011110010100 phished 166
+011110010100 hoodwinked 170
+011110010100 pummeled 171
+011110010100 circumcised 172
+011110010100 knighted 175
+011110010100 sloshed 177
+011110010100 lynched 192
+011110010100 pelted 193
+011110010100 paralysed 195
+011110010100 introuble 197
+011110010100 remanded 201
+011110010100 fisted 203
+011110010100 audited 203
+011110010100 reprimanded 205
+011110010100 commended 209
+011110010100 hospitalised 213
+011110010100 ko'd 214
+011110010100 harrassed 218
+011110010100 outbid 221
+011110010100 shanked 221
+011110010100 tasered 222
+011110010100 ticketed 229
+011110010100 spayed 233
+011110010100 arraigned 235
+011110010100 euthanized 241
+011110010100 blunted 241
+011110010100 compensated 261
+011110010100 quarantined 264
+011110010100 unstuck 265
+011110010100 penalized 268
+011110010100 vies 269
+011110010100 incarcerated 271
+011110010100 bamboozled 276
+011110010100 burried 277
+011110010100 vandalized 283
+011110010100 ridiculed 283
+011110010100 vaccinated 284
+011110010100 shafted 285
+011110010100 id'd 285
+011110010100 cleansed 285
+011110010100 cremated 291
+011110010100 ordained 294
+011110010100 impeached 296
+011110010100 afflicted 307
+011110010100 demoted 310
+011110010100 decapitated 316
+011110010100 beheaded 317
+011110010100 tormented 335
+011110010100 blacklisted 342
+011110010100 persecuted 351
+011110010100 reincarnated 354
+011110010100 exiled 372
+011110010100 electrocuted 380
+011110010100 handcuffed 381
+011110010100 neutered 392
+011110010100 mistreated 396
+011110010100 recharged 402
+011110010100 slumped 429
+011110010100 re-elected 433
+011110010100 prosecuted 439
+011110010100 undressed 452
+011110010100 scorned 456
+011110010100 mobbed 457
+011110010100 sidelined 459
+011110010100 stimulated 463
+011110010100 enslaved 469
+011110010100 seperated 469
+011110010100 overrun 473
+011110010100 benched 475
+011110010100 duped 490
+011110010100 assassinated 490
+011110010100 discharged 501
+011110010100 humiliated 506
+011110010100 disqualified 515
+011110010100 harmed 526
+011110010100 relegated 529
+011110010100 crucified 550
+011110010100 lusting 552
+011110010100 scammed 553
+011110010100 blazed 557
+011110010100 hitched 564
+011110010100 reimbursed 565
+011110010100 groomed 575
+011110010100 liberated 580
+011110010100 scolded 602
+011110010100 ejected 614
+011110010100 plastered 618
+011110010100 imprisoned 625
+011110010100 hosed 637
+011110010100 bombarded 640
+011110010100 excused 694
+011110010100 carded 716
+011110010100 conceived 728
+011110010100 taxed 736
+011110010100 punk'd 742
+011110010100 sidetracked 743
+011110010100 trampled 750
+011110010100 evicted 755
+011110010100 insured 757
+011110010100 deported 767
+011110010100 absorbed 770
+011110010100 hanged 775
+011110010100 displaced 778
+011110010100 brainwashed 786
+011110010100 clothed 793
+011110010100 expelled 796
+011110010100 baptized 802
+011110010100 credited 803
+011110010100 mugged 819
+011110010100 barred 835
+011110010100 excluded 837
+011110010100 pressured 848
+011110010100 slaughtered 864
+011110010100 bred 914
+011110010100 spanked 1032
+011110010100 cuffed 1033
+011110010100 towed 1051
+011110010100 schooled 1057
+011110010100 evaluated 1085
+011110010100 paralyzed 1101
+011110010100 rooted 1131
+011110010100 booed 1198
+011110010100 abducted 1215
+011110010100 indicted 1348
+011110010100 hospitalized 1591
+011110010100 strapped 1596
+011110010100 evacuated 1598
+011110010100 rewarded 1632
+011110010100 seated 1666
+011110010100 tortured 1713
+011110010100 trashed 1781
+011110010100 detained 1822
+011110010100 executed 1838
+011110010100 healed 1938
+011110010100 punished 1964
+011110010100 sacked 2009
+011110010100 organised 2039
+011110010100 eliminated 2128
+011110010100 disconnected 2155
+011110010100 bullied 2212
+011110010100 separated 2231
+011110010100 freed 2260
+011110010100 hammered 2302
+011110010100 divorced 2363
+011110010100 employed 2501
+011110010100 absent 2538
+011110010100 fined 2721
+011110010100 kidnapped 3187
+011110010100 infected 3470
+011110010100 soaked 3488
+011110010100 jailed 3509
+011110010100 sued 3532
+011110010100 promoted 3581
+011110010100 mistaken 3714
+011110010100 rescued 3887
+011110010100 stabbed 4066
+011110010100 robbed 5226
+011110010100 buried 5623
+011110010100 elected 5673
+011110010100 raped 6045
+011110010100 tatted 6466
+011110010100 organized 6900
+011110010100 engaged 7624
+011110010100 suspended 9384
+011110010100 nominated 9402
+011110010100 banned 11249
+011110010100 hacked 12490
+011110010100 injured 12564
+011110010100 charged 16426
+011110010100 fired 17285
+011110010100 arrested 23156
+011110010100 dressed 26494
+011110010100 pregnant 28711
+011110010100 born 48345
+011110010100 married 42335
+0111100101010 log-on 42
+0111100101010 qrv 44
+0111100101010 accesible 44
+0111100101010 avilable 45
+0111100101010 uninhabitable 46
+0111100101010 availiable 50
+0111100101010 oversubscribed 50
+0111100101010 findable 51
+0111100101010 credentialed 53
+0111100101010 avaialble 54
+0111100101010 aval 55
+0111100101010 levied 56
+0111100101010 in-stores 56
+0111100101010 thrombosis 59
+0111100101010 manuva 66
+0111100101010 obtainable 70
+0111100101010 responsable 70
+0111100101010 _up_ 71
+0111100101010 avaible 74
+0111100101010 off-limits 77
+0111100101010 percolating 78
+0111100101010 waitlisted 79
+0111100101010 4sale 79
+0111100101010 spotlighted 84
+0111100101010 availabe 88
+0111100101010 redeemable 116
+0111100101010 avaiable 119
+0111100101010 earmarked 123
+0111100101010 avalible 133
+0111100101010 on-sale 135
+0111100101010 in-progress 139
+0111100101010 deadlocked 140
+0111100101010 availble 140
+0111100101010 availible 141
+0111100101010 converging 155
+0111100101010 reqd 155
+0111100101010 required-redeem 156
+0111100101010 req'd 202
+0111100101010 angling 221
+0111100101010 ineligible 250
+0111100101010 avaliable 298
+0111100101010 viewable 316
+0111100101010 adrift 320
+0111100101010 encoded 328
+0111100101010 onsale 363
+0111100101010 payable 399
+0111100101010 afoot 644
+0111100101010 unchanged 781
+0111100101010 auctioned 787
+0111100101010 slated 973
+0111100101010 obsolete 1251
+0111100101010 abound 1334
+0111100101010 accountable 1583
+0111100101010 valued 1960
+0111100101010 unavailable 2013
+0111100101010 eligible 2579
+0111100101010 exclusively 2727
+0111100101010 avail 3411
+0111100101010 underway 4188
+0111100101010 arriving 5299
+0111100101010 ranked 6810
+0111100101010 responsible 11203
+0111100101010 required 15083
+0111100101010 available 76953
+0111100101010 featured 21025
+0111100101011 admissible 40
+0111100101011 -available 40
+0111100101011 interrested 40
+0111100101011 defrosts 43
+0111100101011 dabbles 45
+0111100101011 culminated 46
+0111100101011 well-versed 49
+0111100101011 enshrined 61
+0111100101011 outcalls 63
+0111100101011 pencilled 67
+0111100101011 #doors 69
+0111100101011 basks 70
+0111100101011 diverged 70
+0111100101011 grandfathered 72
+0111100101011 interestd 73
+0111100101011 specialises 76
+0111100101011 #distance 76
+0111100101011 invovled 80
+0111100101011 encapsulated 82
+0111100101011 entwined 82
+0111100101011 quaking 84
+0111100101011 revelling 87
+0111100101011 involed 88
+0111100101011 knee-deep 97
+0111100101011 exhilarated 100
+0111100101011 abounding 103
+0111100101011 enveloped 106
+0111100101011 factored 113
+0111100101011 delighting 121
+0111100101011 penciled 122
+0111100101011 slathered 125
+0111100101011 benvenuto 126
+0111100101011 specialising 129
+0111100101011 blanketed 138
+0111100101011 shrouded 143
+0111100101011 coverd 148
+0111100101011 specialise 153
+0111100101011 embroiled 154
+0111100101011 complicit 156
+0111100101011 immortalized 156
+0111100101011 remiss 163
+0111100101011 steeped 165
+0111100101011 chiming 172
+0111100101011 cashes 172
+0111100101011 encased 179
+0111100101011 ingrained 185
+0111100101011 entangled 194
+0111100101011 mired 195
+0111100101011 intersted 202
+0111100101011 implicated 219
+0111100101011 depicted 231
+0111100101011 deficient 236
+0111100101011 pales 238
+0111100101011 awash 255
+0111100101011 implanted 289
+0111100101011 proficient 302
+0111100101011 partaking 303
+0111100101011 submerged 320
+0111100101011 participates 328
+0111100101011 engulfed 341
+0111100101011 uninterested 351
+0111100101011 lodged 366
+0111100101011 engrossed 394
+0111100101011 immersed 397
+0111100101011 majoring 414
+0111100101011 specializing 456
+0111100101011 outlawed 488
+0111100101011 categorized 502
+0111100101011 tolerated 520
+0111100101011 cm_all 547
+0111100101011 intrested 550
+0111100101011 specializes 576
+0111100101011 aligned 737
+0111100101011 smothered 740
+0111100101011 reflected 768
+0111100101011 enrolled 842
+0111100101011 situated 884
+0111100101011 drenched 1090
+0111100101011 resulted 1137
+0111100101011 madly 1733
+0111100101011 fluent 1868
+0111100101011 invested 2084
+0111100101011 dipped 2241
+0111100101011 lacking 3713
+0111100101011 participating 3781
+0111100101011 snowed 4899
+0111100101011 included 12592
+0111100101011 covered 19750
+0111100101011 involved 23962
+0111100101011 interested 52574
+0111100101100 eye-fi'd 47
+0111100101100 submited 62
+0111100101100 yelped 76
+0111100101100 tributo 86
+0111100101100 gorged 99
+0111100101100 transposed 99
+0111100101100 faved 410
+0111100101100 dugg 631
+0111100101100 clipped 1355
+0111100101100 bookmarked 1741
+0111100101100 blogged 9640
+0111100101100 submitted 11346
+0111100101100 published 21334
+0111100101100 added 80188
+0111100101100 posted 120541
+0111100101101 idled 40
+0111100101101 outfoxed 40
+0111100101101 resuscitated 40
+0111100101101 torpedoed 40
+0111100101101 disbursed 40
+0111100101101 re-branded 41
+0111100101101 retried 41
+0111100101101 constituted 41
+0111100101101 excerpted 41
+0111100101101 catalogued 41
+0111100101101 reshuffled 41
+0111100101101 recouped 42
+0111100101101 typeset 42
+0111100101101 reg'd 42
+0111100101101 memorialized 42
+0111100101101 expunged 43
+0111100101101 re-used 43
+0111100101101 relased 43
+0111100101101 debugged 43
+0111100101101 livestreamed 43
+0111100101101 decommissioned 44
+0111100101101 imparted 44
+0111100101101 re-worked 44
+0111100101101 rephrased 44
+0111100101101 resubmitted 44
+0111100101101 decried 45
+0111100101101 repatriated 45
+0111100101101 outpaced 46
+0111100101101 retooled 46
+0111100101101 imbedded 47
+0111100101101 realigned 48
+0111100101101 decriminalized 48
+0111100101101 podcasted 49
+0111100101101 excavated 49
+0111100101101 tendered 49
+0111100101101 alleviated 50
+0111100101101 trialled 50
+0111100101101 innovated 51
+0111100101101 recertified 52
+0111100101101 formated 53
+0111100101101 overridden 53
+0111100101101 postmarked 54
+0111100101101 pilfered 54
+0111100101101 reveled 55
+0111100101101 intergrated 57
+0111100101101 lauched 57
+0111100101101 recaptured 58
+0111100101101 partitioned 58
+0111100101101 reuploaded 58
+0111100101101 rubbished 58
+0111100101101 invalidated 59
+0111100101101 re-vamped 59
+0111100101101 reprogrammed 60
+0111100101101 refactored 60
+0111100101101 scuttled 63
+0111100101101 vaporized 64
+0111100101101 dispelled 65
+0111100101101 downplayed 66
+0111100101101 kindled 66
+0111100101101 bastardized 66
+0111100101101 expended 68
+0111100101101 delievered 69
+0111100101101 buffered 69
+0111100101101 differed 70
+0111100101101 appropriated 70
+0111100101101 comfirmed 71
+0111100101101 quantified 71
+0111100101101 righted 71
+0111100101101 despatched 72
+0111100101101 mooted 73
+0111100101101 re-imagined 73
+0111100101101 re-recorded 74
+0111100101101 curtailed 74
+0111100101101 infringed 74
+0111100101101 re-scheduled 74
+0111100101101 signalled 75
+0111100101101 brokered 76
+0111100101101 reignited 77
+0111100101101 deepened 79
+0111100101101 gleaned 80
+0111100101101 sited 81
+0111100101101 prioritized 81
+0111100101101 nationalised 81
+0111100101101 quashed 83
+0111100101101 sequenced 83
+0111100101101 defiled 83
+0111100101101 greenlit 85
+0111100101101 anounced 86
+0111100101101 exhumed 87
+0111100101101 vandalised 87
+0111100101101 convened 89
+0111100101101 unsealed 89
+0111100101101 faulted 90
+0111100101101 reconfigured 90
+0111100101101 inferred 91
+0111100101101 rebuffed 91
+0111100101101 republished 91
+0111100101101 parsed 91
+0111100101101 asserted 92
+0111100101101 liquidated 92
+0111100101101 refuted 92
+0111100101101 harmonized 95
+0111100101101 reimagined 96
+0111100101101 emitted 96
+0111100101101 mobilized 96
+0111100101101 heralded 97
+0111100101101 embeded 98
+0111100101101 re-launched 99
+0111100101101 bolstered 101
+0111100101101 realeased 101
+0111100101101 replenished 102
+0111100101101 imaged 103
+0111100101101 dampened 103
+0111100101101 benchmarked 103
+0111100101101 reccomended 105
+0111100101101 unraveled 105
+0111100101101 bridged 105
+0111100101101 retouched 106
+0111100101101 ascended 108
+0111100101101 reconsidered 109
+0111100101101 foretold 109
+0111100101101 re-posted 110
+0111100101101 commuted 116
+0111100101101 calibrated 122
+0111100101101 rescinded 123
+0111100101101 optimised 123
+0111100101101 re-listed 123
+0111100101101 exempted 125
+0111100101101 reared 126
+0111100101101 restructured 126
+0111100101101 re-designed 127
+0111100101101 rewired 127
+0111100101101 monetized 128
+0111100101101 disassembled 129
+0111100101101 scrobbled 129
+0111100101101 reprinted 130
+0111100101101 plagiarized 131
+0111100101101 eradicated 132
+0111100101101 affirmed 133
+0111100101101 signaled 136
+0111100101101 ranged 136
+0111100101101 scrutinized 136
+0111100101101 annouced 137
+0111100101101 authorised 138
+0111100101101 abated 140
+0111100101101 inscribed 143
+0111100101101 originating 144
+0111100101101 dethroned 145
+0111100101101 reaffirmed 145
+0111100101101 appraised 146
+0111100101101 uncorked 146
+0111100101101 conveyed 147
+0111100101101 defaulted 148
+0111100101101 worsened 149
+0111100101101 ratified 152
+0111100101101 retold 153
+0111100101101 transcribed 156
+0111100101101 reissued 156
+0111100101101 tabled 159
+0111100101101 widened 160
+0111100101101 overstated 160
+0111100101101 digitized 161
+0111100101101 minimized 162
+0111100101101 retracted 163
+0111100101101 culled 164
+0111100101101 deducted 165
+0111100101101 overhauled 165
+0111100101101 extinguished 169
+0111100101101 curbed 172
+0111100101101 reworked 173
+0111100101101 defaced 175
+0111100101101 shielded 177
+0111100101101 reiterated 178
+0111100101101 procured 179
+0111100101101 intensified 182
+0111100101101 downsized 182
+0111100101101 remedied 186
+0111100101101 disbanded 186
+0111100101101 unzipped 190
+0111100101101 lauded 192
+0111100101101 vacated 194
+0111100101101 unfolded 195
+0111100101101 ok'd 196
+0111100101101 rectified 199
+0111100101101 rekindled 199
+0111100101101 disallowed 206
+0111100101101 plummeted 207
+0111100101101 enacted 209
+0111100101101 unmasked 211
+0111100101101 halved 212
+0111100101101 rebranded 213
+0111100101101 shrank 216
+0111100101101 dissected 221
+0111100101101 summarized 221
+0111100101101 restocked 225
+0111100101101 arising 225
+0111100101101 rebounded 231
+0111100101101 omitted 233
+0111100101101 finalised 238
+0111100101101 leased 239
+0111100101101 revolutionized 245
+0111100101101 demoed 248
+0111100101101 withheld 260
+0111100101101 dismantled 261
+0111100101101 aquired 265
+0111100101101 shelved 267
+0111100101101 salvaged 268
+0111100101101 surfacing 268
+0111100101101 suppressed 270
+0111100101101 inaugurated 277
+0111100101101 soared 284
+0111100101101 sanctioned 291
+0111100101101 repealed 292
+0111100101101 reinvented 295
+0111100101101 decoded 296
+0111100101101 abolished 297
+0111100101101 retrieved 297
+0111100101101 assimilated 301
+0111100101101 rotated 306
+0111100101101 benefited 308
+0111100101101 assessed 322
+0111100101101 relaunched 325
+0111100101101 purged 328
+0111100101101 breached 328
+0111100101101 redefined 329
+0111100101101 re-opened 332
+0111100101101 previewed 334
+0111100101101 exported 338
+0111100101101 unboxed 341
+0111100101101 dissolved 345
+0111100101101 docked 346
+0111100101101 reinforced 351
+0111100101101 enriched 352
+0111100101101 mandated 354
+0111100101101 strengthened 362
+0111100101101 surged 368
+0111100101101 showcased 369
+0111100101101 modded 372
+0111100101101 accessed 383
+0111100101101 extracted 390
+0111100101101 debunked 395
+0111100101101 reinstated 401
+0111100101101 disclosed 410
+0111100101101 hatched 411
+0111100101101 probed 416
+0111100101101 amended 433
+0111100101101 reposted 434
+0111100101101 validated 446
+0111100101101 remodeled 448
+0111100101101 clarified 451
+0111100101101 analyzed 457
+0111100101101 disrupted 465
+0111100101101 cheezburger 466
+0111100101101 transmitted 467
+0111100101101 outlined 474
+0111100101101 unearthed 484
+0111100101101 trademarked 484
+0111100101101 rallied 491
+0111100101101 inflicted 500
+0111100101101 formatted 502
+0111100101101 terminated 522
+0111100101101 resurrected 531
+0111100101101 dispatched 531
+0111100101101 upheld 531
+0111100101101 confiscated 534
+0111100101101 sourced 537
+0111100101101 sighted 548
+0111100101101 configured 550
+0111100101101 enforced 561
+0111100101101 forged 589
+0111100101101 tumbled 617
+0111100101101 revoked 625
+0111100101101 indexed 627
+0111100101101 premiered 639
+0111100101101 slimed 657
+0111100101101 decreased 673
+0111100101101 commissioned 679
+0111100101101 initiated 682
+0111100101101 benefiting 683
+0111100101101 imposed 696
+0111100101101 rebuilt 696
+0111100101101 legalized 707
+0111100101101 merged 733
+0111100101101 indicated 740
+0111100101101 withdrawn 741
+0111100101101 hailed 743
+0111100101101 halted 749
+0111100101101 scrapped 755
+0111100101101 reopened 770
+0111100101101 favrd 773
+0111100101101 demonstrated 785
+0111100101101 silenced 786
+0111100101101 revived 802
+0111100101101 discontinued 836
+0111100101101 axed 841
+0111100101101 slashed 852
+0111100101101 resumed 876
+0111100101101 assembled 890
+0111100101101 archived 911
+0111100101101 authorized 913
+0111100101101 subbed 922
+0111100101101 incorporated 937
+0111100101101 calculated 948
+0111100101101 downgraded 948
+0111100101101 finalized 969
+0111100101101 compromised 978
+0111100101101 averted 992
+0111100101101 remixed 1053
+0111100101101 compiled 1089
+0111100101101 revamped 1102
+0111100101101 streamed 1114
+0111100101101 reversed 1121
+0111100101101 uncovered 1132
+0111100101101 mapped 1149
+0111100101101 relisted 1164
+0111100101101 obtained 1172
+0111100101101 scanned 1184
+0111100101101 rescheduled 1252
+0111100101101 redesigned 1284
+0111100101101 shortened 1304
+0111100101101 lowered 1378
+0111100101101 deployed 1445
+0111100101101 altered 1449
+0111100101101 censored 1452
+0111100101101 cited 1457
+0111100101101 exceeded 1457
+0111100101101 implemented 1468
+0111100101101 detected 1509
+0111100101101 advertised 1511
+0111100101101 imported 1530
+0111100101101 contained 1658
+0111100101101 distributed 1730
+0111100101101 resigned 1768
+0111100101101 translated 1908
+0111100101101 recalled 1966
+0111100101101 funded 2047
+0111100101101 enabled 2060
+0111100101101 expanded 2065
+0111100101101 activated 2196
+0111100101101 secured 2204
+0111100101101 dismissed 2293
+0111100101101 unplugged 2318
+0111100101101 identified 2407
+0111100101101 aired 2670
+0111100101101 generated 2949
+0111100101101 unleashed 2987
+0111100101101 corrected 3261
+0111100101101 renewed 3263
+0111100101101 restored 3266
+0111100101101 resolved 3362
+0111100101101 noted 3388
+0111100101101 unveiled 3607
+0111100101101 expired 3710
+0111100101101 awarded 3785
+0111100101101 acquired 3795
+0111100101101 declared 3810
+0111100101101 recovered 3872
+0111100101101 viewed 4384
+0111100101101 reviewed 4384
+0111100101101 captured 4787
+0111100101101 edited 5814
+0111100101101 explained 6024
+0111100101101 shipped 6094
+0111100101101 reduced 6297
+0111100101101 exposed 6381
+0111100101101 solved 6555
+0111100101101 continued 6757
+0111100101101 leaked 7779
+0111100101101 issued 8171
+0111100101101 approved 8846
+0111100101101 removed 10123
+0111100101101 returned 10622
+0111100101101 recommended 10803
+0111100101101 delivered 10874
+0111100101101 registered 11888
+0111100101101 revealed 12024
+0111100101101 reported 13308
+0111100101101 installed 14288
+0111100101101 launched 14945
+0111100101101 shared 15136
+0111100101101 listed 17373
+0111100101101 confirmed 17641
+0111100101101 announced 27641
+0111100101101 updated 59198
+0111100101101 released 39805
+0111100101110 refereed 40
+0111100101110 partaken 40
+0111100101110 summarised 41
+0111100101110 legislated 42
+0111100101110 resold 43
+0111100101110 enumerated 45
+0111100101110 moonlights 46
+0111100101110 spec'd 46
+0111100101110 capitalised 50
+0111100101110 secreted 50
+0111100101110 ballooned 51
+0111100101110 ceded 51
+0111100101110 toughened 51
+0111100101110 collated 52
+0111100101110 pinpointed 52
+0111100101110 abstracted 53
+0111100101110 trodden 55
+0111100101110 supressed 56
+0111100101110 publicised 57
+0111100101110 colonized 58
+0111100101110 redistributed 59
+0111100101110 derided 59
+0111100101110 concieved 60
+0111100101110 forgetten 60
+0111100101110 propagated 60
+0111100101110 catapulted 61
+0111100101110 emulated 65
+0111100101110 ventilated 67
+0111100101110 controled 68
+0111100101110 taked 69
+0111100101110 transcended 71
+0111100101110 goten 71
+0111100101110 regenerated 71
+0111100101110 aten 72
+0111100101110 officiated 73
+0111100101110 forgoten 75
+0111100101110 dissipated 76
+0111100101110 dwindled 77
+0111100101110 sufficed 78
+0111100101110 accrued 82
+0111100101110 construed 88
+0111100101110 reviled 90
+0111100101110 materialized 91
+0111100101110 programed 95
+0111100101110 lessened 96
+0111100101110 rationed 99
+0111100101110 decreed 100
+0111100101110 eroded 101
+0111100101110 re-written 101
+0111100101110 fastened 102
+0111100101110 foreseen 102
+0111100101110 diffused 103
+0111100101110 reintroduced 112
+0111100101110 devalued 114
+0111100101110 bounded 115
+0111100101110 undertaken 116
+0111100101110 nourished 116
+0111100101110 deteriorated 120
+0111100101110 amassed 120
+0111100101110 acheived 122
+0111100101110 soured 131
+0111100101110 dimmed 132
+0111100101110 speculated 136
+0111100101110 entrusted 136
+0111100101110 garnered 147
+0111100101110 compounded 147
+0111100101110 afforded 152
+0111100101110 forgotton 152
+0111100101110 knwn 154
+0111100101110 softened 157
+0111100101110 reconciled 159
+0111100101110 dispersed 159
+0111100101110 analysed 160
+0111100101110 optioned 160
+0111100101110 publicized 165
+0111100101110 underlined 167
+0111100101110 replicated 170
+0111100101110 grasped 177
+0111100101110 articulated 186
+0111100101110 cultivated 190
+0111100101110 phrased 198
+0111100101110 degraded 201
+0111100101110 favoured 212
+0111100101110 tooken 213
+0111100101110 choosen 216
+0111100101110 anchored 217
+0111100101110 writen 222
+0111100101110 borne 244
+0111100101110 imprinted 254
+0111100101110 formulated 255
+0111100101110 sown 268
+0111100101110 devised 274
+0111100101110 yielded 276
+0111100101110 communicated 286
+0111100101110 escalated 288
+0111100101110 bestowed 301
+0111100101110 rewritten 303
+0111100101110 allocated 312
+0111100101110 misused 314
+0111100101110 phased 332
+0111100101110 duplicated 351
+0111100101110 arisen 354
+0111100101110 classed 393
+0111100101110 diminished 405
+0111100101110 touted 406
+0111100101110 progressed 410
+0111100101110 weakened 438
+0111100101110 scaled 460
+0111100101110 attained 474
+0111100101110 instructed 476
+0111100101110 transported 478
+0111100101110 banished 486
+0111100101110 catered 496
+0111100101110 interpreted 511
+0111100101110 populated 523
+0111100101110 parted 532
+0111100101110 eased 533
+0111100101110 preserved 536
+0111100101110 billed 538
+0111100101110 accumulated 538
+0111100101110 diverted 555
+0111100101110 manipulated 562
+0111100101110 regarded 565
+0111100101110 marketed 570
+0111100101110 awoken 581
+0111100101110 regulated 587
+0111100101110 contracted 610
+0111100101110 positioned 614
+0111100101110 forsaken 695
+0111100101110 adapted 732
+0111100101110 worded 758
+0111100101110 engraved 849
+0111100101110 engineered 872
+0111100101110 constructed 874
+0111100101110 documented 879
+0111100101110 ridden 883
+0111100101110 maintained 962
+0111100101110 travelled 991
+0111100101110 condemned 1007
+0111100101110 crafted 1047
+0111100101110 favored 1089
+0111100101110 perceived 1112
+0111100101110 disguised 1130
+0111100101110 shifted 1224
+0111100101110 rounded 1259
+0111100101110 adjusted 1290
+0111100101110 timed 1410
+0111100101110 overlooked 1426
+0111100101110 equipped 1503
+0111100101110 assured 1537
+0111100101110 shaken 1676
+0111100101110 evolved 1773
+0111100101110 expressed 1795
+0111100101110 addressed 1846
+0111100101110 flown 1848
+0111100101110 stored 1886
+0111100101110 advised 2065
+0111100101110 risen 2072
+0111100101110 traveled 2223
+0111100101110 respected 2284
+0111100101110 repeated 2437
+0111100101110 converted 2587
+0111100101110 appointed 2597
+0111100101110 defined 3078
+0111100101110 sworn 3125
+0111100101110 established 3595
+0111100101110 achieved 4123
+0111100101110 marked 4185
+0111100101110 trusted 4640
+0111100101110 beaten 5368
+0111100101110 drawn 6044
+0111100101110 driven 6118
+0111100101110 developed 6393
+0111100101110 selected 6501
+0111100101110 printed 6543
+0111100101110 proven 7174
+0111100101110 chosen 7848
+0111100101110 worn 8070
+0111100101110 spoken 8329
+0111100101110 shown 10011
+0111100101110 fallen 10935
+0111100101110 forgotten 15699
+0111100101110 led 17741
+0111100101110 written 29014
+0111100101110 known 39357
+0111100101110 given 45467
+0111100101110 taken 63149
+01111001011110 telt 40
+01111001011110 kiddinggg 40
+01111001011110 pacified 41
+01111001011110 policed 41
+01111001011110 buffeted 41
+01111001011110 mixxed&mastered 41
+01111001011110 keeding 41
+01111001011110 assulted 42
+01111001011110 hamstrung 42
+01111001011110 impeded 43
+01111001011110 -inspired 43
+01111001011110 powerd 44
+01111001011110 wracked 45
+01111001011110 untainted 46
+01111001011110 #listed 48
+01111001011110 superseded 48
+01111001011110 supplemented 49
+01111001011110 fallowed 50
+01111001011110 romanced 50
+01111001011110 rivaled 51
+01111001011110 surronded 51
+01111001011110 smarted 52
+01111001011110 //powered 53
+01111001011110 humored 54
+01111001011110 spearheaded 55
+01111001011110 powned 56
+01111001011110 followeed 56
+01111001011110 unhindered 57
+01111001011110 deafened 57
+01111001011110 co-produced 61
+01111001011110 co-sponsored 62
+01111001011110 dwarfed 63
+01111001011110 emboldened 63
+01111001011110 fazed 64
+01111001011110 sexted 64
+01111001011110 outshined 64
+01111001011110 decieved 66
+01111001011110 divisible 66
+01111001011110 kidden 67
+01111001011110 waylaid 68
+01111001011110 kiddingg 69
+01111001011110 flanked 72
+01111001011110 kiddding 74
+01111001011110 /powered 75
+01111001011110 undaunted 75
+01111001011110 mitigated 75
+01111001011110 75
+01111001011110 unmoved 78
+01111001011110 exacerbated 78
+01111001011110 mesmerised 79
+01111001011110 cockblocked 81
+01111001011110 undeterred 84
+01111001011110 co-hosted 84
+01111001011110 kiddn 85
+01111001011110 joshing 86
+01111001011110 consoled 94
+01111001011110 pwnt 95
+01111001011110 cosigned 99
+01111001011110 posessed 102
+01111001011110 confounded 104
+01111001011110 co-written 107
+01111001011110 folllowed 108
+01111001011110 hypnotised 108
+01111001011110 chaired 109
+01111001011110 deterred 110
+01111001011110 co-signed 113
+01111001011110 upstaged 121
+01111001011110 soothed 125
+01111001011110 125
+01111001011110 stymied 126
+01111001011110 beset 128
+01111001011110 kiding 132
+01111001011110 sadden 132
+01111001011110 folowed 132
+01111001011110 enticed 139
+01111001011110 entranced 142
+01111001011110 inhabited 149
+01111001011110 hindered 151
+01111001011110 followedd 153
+01111001011110 sponsered 156
+01111001011110 #cantkeepasecret 157
+01111001011110 constrained 160
+01111001011110 mentored 164
+01111001011110 hampered 167
+01111001011110 punctuated 172
+01111001011110 accosted 183
+01111001011110 overpowered 183
+01111001011110 propelled 186
+01111001011110 obscured 196
+01111001011110 buoyed 198
+01111001011110 evidenced 202
+01111001011110 blindsided 207
+01111001011110 followd 213
+01111001011110 fuelled 214
+01111001011110 discriminated 218
+01111001011110 characterized 219
+01111001011110 recomended 224
+01111001011110 hipped 225
+01111001011110 punishable 226
+01111001011110 unfazed 229
+01111001011110 authored 232
+01111001011110 dictated 234
+01111001011110 victimized 248
+01111001011110 follwed 272
+01111001011110 marred 277
+01111001011110 dazzled 283
+01111001011110 serenaded 311
+01111001011110 unaffected 317
+01111001011110 overshadowed 336
+01111001011110 preceded 352
+01111001011110 sickened 369
+01111001011110 multiplied 369
+01111001011110 wowed 371
+01111001011110 moderated 379
+01111001011110 captivated 388
+01111001011110 swayed 393
+01111001011110 governed 405
+01111001011110 pwnd 411
+01111001011110 aided 417
+01111001011110 narrated 449
+01111001011110 seduced 454
+01111001011110 curated 493
+01111001011110 deceived 522
+01111001011110 plagued 541
+01111001011110 startled 566
+01111001011110 mesmerized 588
+01111001011110 effected 632
+01111001011110 awakened 749
+01111001011110 749
+01111001011110 foiled 939
+01111001011110 fueled 1103
+01111001011110 accompanied 1197
+01111001011110 greeted 1288
+01111001011110 possessed 1522
+01111001011110 req 1602
+01111001011110 betrayed 1607
+01111001011110 blinded 1676
+01111001011110 influenced 2077
+01111001011110 kiddin 2212
+01111001011110 encouraged 2706
+01111001011110 controlled 3313
+01111001011110 fooled 3665
+01111001011110 surrounded 6447
+01111001011110 sponsored 6667
+01111001011110 informed 7065
+01111001011110 directed 7144
+01111001011110 powered 7151
+01111001011110 affected 7238
+01111001011110 produced 9849
+01111001011110 hosted 12118
+01111001011110 inspired 21777
+01111001011110 followed 59863
+01111001011110 kidding 36322
+01111001011111 interviewd 40
+01111001011111 beaned 40
+01111001011111 spoted 40
+01111001011111 counseled 41
+01111001011111 rasied 41
+01111001011111 sonned 41
+01111001011111 masterminded 41
+01111001011111 alternated 42
+01111001011111 elaborated 42
+01111001011111 outwitted 42
+01111001011111 mased 42
+01111001011111 kiled 43
+01111001011111 comprehended 43
+01111001011111 exerted 43
+01111001011111 subverted 43
+01111001011111 deflowered 44
+01111001011111 specced 44
+01111001011111 merited 44
+01111001011111 depreciated 44
+01111001011111 condoned 45
+01111001011111 extorted 45
+01111001011111 eviscerated 45
+01111001011111 spouted 45
+01111001011111 rationalized 45
+01111001011111 highjacked 45
+01111001011111 rereleased 45
+01111001011111 murderd 45
+01111001011111 bilked 45
+01111001011111 blackballed 45
+01111001011111 nom'd 45
+01111001011111 symbolized 45
+01111001011111 pwn'd 46
+01111001011111 spinned 46
+01111001011111 defamed 47
+01111001011111 outted 47
+01111001011111 reconized 47
+01111001011111 bitch-slapped 47
+01111001011111 captained 47
+01111001011111 plied 47
+01111001011111 bartered 47
+01111001011111 shooted 47
+01111001011111 peddled 47
+01111001011111 rearended 47
+01111001011111 hitted 47
+01111001011111 walloped 47
+01111001011111 sired 48
+01111001011111 meshed 48
+01111001011111 bordered 48
+01111001011111 re-introduced 49
+01111001011111 funneled 49
+01111001011111 pulverized 49
+01111001011111 biten 49
+01111001011111 ownd 49
+01111001011111 live-tweeted 49
+01111001011111 tailgated 49
+01111001011111 offerd 49
+01111001011111 mentiond 49
+01111001011111 threatned 50
+01111001011111 gargled 50
+01111001011111 juked 50
+01111001011111 jeopardized 50
+01111001011111 neutralized 50
+01111001011111 petitioned 50
+01111001011111 dishonored 50
+01111001011111 pillaged 50
+01111001011111 imbibed 51
+01111001011111 ko'ed 51
+01111001011111 outperformed 51
+01111001011111 absconded 51
+01111001011111 unliked 52
+01111001011111 equalled 52
+01111001011111 canvassed 52
+01111001011111 juggled 52
+01111001011111 raffled 52
+01111001011111 assailed 53
+01111001011111 exemplified 53
+01111001011111 ethered 54
+01111001011111 hackd 54
+01111001011111 play'd 54
+01111001011111 overlapped 54
+01111001011111 pwn3d 54
+01111001011111 re-invented 54
+01111001011111 desecrated 55
+01111001011111 pipped 55
+01111001011111 reenacted 55
+01111001011111 re-enacted 56
+01111001011111 intimated 56
+01111001011111 ghosted 56
+01111001011111 speared 56
+01111001011111 retaliated 56
+01111001011111 chirped 57
+01111001011111 okayed 57
+01111001011111 subtracted 57
+01111001011111 bettered 57
+01111001011111 wielded 58
+01111001011111 outshot 58
+01111001011111 commemorated 58
+01111001011111 admonished 58
+01111001011111 sideswiped 58
+01111001011111 harrased 58
+01111001011111 nullified 58
+01111001011111 drawed 59
+01111001011111 deliverd 59
+01111001011111 reshaped 59
+01111001011111 t-boned 60
+01111001011111 cradled 60
+01111001011111 evoked 60
+01111001011111 k'd 60
+01111001011111 beheld 60
+01111001011111 terrorised 60
+01111001011111 savored 61
+01111001011111 re-created 61
+01111001011111 piloted 61
+01111001011111 faltered 62
+01111001011111 chronicled 62
+01111001011111 stockpiled 62
+01111001011111 smote 63
+01111001011111 chided 64
+01111001011111 lambasted 64
+01111001011111 recounted 65
+01111001011111 incited 66
+01111001011111 impersonated 66
+01111001011111 bitchslapped 66
+01111001011111 deciphered 66
+01111001011111 snogged 66
+01111001011111 glimpsed 67
+01111001011111 defrauded 67
+01111001011111 persisted 67
+01111001011111 relished 68
+01111001011111 backstabbed 68
+01111001011111 prophesied 68
+01111001011111 mused 69
+01111001011111 ejaculated 69
+01111001011111 lobbed 69
+01111001011111 sparkled 69
+01111001011111 parodied 69
+01111001011111 roused 69
+01111001011111 sodomized 70
+01111001011111 caressed 70
+01111001011111 outweighed 70
+01111001011111 scuppered 71
+01111001011111 usurped 71
+01111001011111 bluffed 71
+01111001011111 berated 72
+01111001011111 #killed 72
+01111001011111 high-fived 73
+01111001011111 spliced 73
+01111001011111 demonized 74
+01111001011111 reaped 74
+01111001011111 popularized 74
+01111001011111 conferred 74
+01111001011111 snared 74
+01111001011111 championed 75
+01111001011111 beckoned 75
+01111001011111 sullied 76
+01111001011111 hoarded 76
+01111001011111 rickroll'd 76
+01111001011111 heeded 76
+01111001011111 prefaced 76
+01111001011111 repelled 78
+01111001011111 equaled 78
+01111001011111 pocketed 79
+01111001011111 dispensed 79
+01111001011111 savaged 80
+01111001011111 herded 80
+01111001011111 shushed 81
+01111001011111 pitied 81
+01111001011111 co-authored 81
+01111001011111 rebooked 82
+01111001011111 defused 82
+01111001011111 commandeered 82
+01111001011111 blockd 82
+01111001011111 moulded 82
+01111001011111 detoured 83
+01111001011111 pre-empted 83
+01111001011111 spooned 83
+01111001011111 plundered 84
+01111001011111 disarmed 84
+01111001011111 dangled 84
+01111001011111 queried 85
+01111001011111 teabagged 86
+01111001011111 cc'd 86
+01111001011111 hummed 87
+01111001011111 pecked 87
+01111001011111 lamented 87
+01111001011111 ganked 87
+01111001011111 preempted 88
+01111001011111 weaned 88
+01111001011111 razed 88
+01111001011111 defriended 89
+01111001011111 complemented 89
+01111001011111 videoed 89
+01111001011111 trucked 89
+01111001011111 perpetuated 91
+01111001011111 frequented 91
+01111001011111 bused 91
+01111001011111 perpetrated 92
+01111001011111 reeled 92
+01111001011111 propositioned 92
+01111001011111 slaped 93
+01111001011111 readied 94
+01111001011111 utilised 95
+01111001011111 bulldozed 95
+01111001011111 stiffed 95
+01111001011111 complied 97
+01111001011111 shadowed 97
+01111001011111 distanced 97
+01111001011111 swatted 97
+01111001011111 offed 98
+01111001011111 pestered 98
+01111001011111 twatched 99
+01111001011111 sported 99
+01111001011111 ransacked 100
+01111001011111 disproved 100
+01111001011111 demo'd 100
+01111001011111 evaded 100
+01111001011111 spake 101
+01111001011111 hashtagged 102
+01111001011111 detonated 102
+01111001011111 concocted 102
+01111001011111 beated 102
+01111001011111 skewered 103
+01111001011111 co-founded 103
+01111001011111 nommed 103
+01111001011111 instigated 103
+01111001011111 saluted 103
+01111001011111 fostered 104
+01111001011111 spoofed 104
+01111001011111 courted 105
+01111001011111 cautioned 105
+01111001011111 sniped 106
+01111001011111 parred 106
+01111001011111 hoisted 107
+01111001011111 overruled 107
+01111001011111 bankrupted 108
+01111001011111 loosed 109
+01111001011111 modelled 110
+01111001011111 slandered 110
+01111001011111 solicited 110
+01111001011111 scouted 111
+01111001011111 trounced 111
+01111001011111 incurred 111
+01111001011111 wooed 112
+01111001011111 roamed 112
+01111001011111 manhandled 113
+01111001011111 rumbled 114
+01111001011111 critiqued 114
+01111001011111 misrepresented 116
+01111001011111 reigned 116
+01111001011111 instituted 116
+01111001011111 spurned 116
+01111001011111 jabbed 117
+01111001011111 railed 119
+01111001011111 rebuked 119
+01111001011111 instilled 119
+01111001011111 tallied 120
+01111001011111 pioneered 120
+01111001011111 barricaded 120
+01111001011111 disregarded 120
+01111001011111 relayed 121
+01111001011111 rt-ed 121
+01111001011111 negated 122
+01111001011111 fondled 123
+01111001011111 reproduced 123
+01111001011111 outsold 123
+01111001011111 outsmarted 124
+01111001011111 mated 124
+01111001011111 thumped 124
+01111001011111 jolted 124
+01111001011111 prodded 125
+01111001011111 blackmailed 125
+01111001011111 honed 127
+01111001011111 embodied 128
+01111001011111 punted 129
+01111001011111 comped 130
+01111001011111 hounded 131
+01111001011111 hobbled 132
+01111001011111 tutored 134
+01111001011111 headlined 135
+01111001011111 practised 136
+01111001011111 countered 136
+01111001011111 terrorized 136
+01111001011111 pitted 137
+01111001011111 outclassed 138
+01111001011111 stifled 138
+01111001011111 overcharged 138
+01111001011111 contradicted 138
+01111001011111 felled 140
+01111001011111 bested 141
+01111001011111 harnessed 141
+01111001011111 repped 141
+01111001011111 preformed 141
+01111001011111 swindled 142
+01111001011111 nagged 142
+01111001011111 lobbied 144
+01111001011111 fielded 144
+01111001011111 idolized 144
+01111001011111 worshiped 145
+01111001011111 coerced 146
+01111001011111 fanned 150
+01111001011111 deflected 151
+01111001011111 outscored 152
+01111001011111 chastised 152
+01111001011111 recited 153
+01111001011111 trailed 155
+01111001011111 headbutted 156
+01111001011111 advocated 156
+01111001011111 denounced 160
+01111001011111 facilitated 160
+01111001011111 taunted 161
+01111001011111 echoed 161
+01111001011111 undermined 163
+01111001011111 teleported 164
+01111001011111 nurtured 165
+01111001011111 interrogated 166
+01111001011111 invoked 169
+01111001011111 faxed 169
+01111001011111 doused 170
+01111001011111 clubbed 170
+01111001011111 apprehended 170
+01111001011111 obeyed 172
+01111001011111 circulated 174
+01111001011111 merked 175
+01111001011111 reused 175
+01111001011111 charted 175
+01111001011111 emphasized 178
+01111001011111 banked 178
+01111001011111 gamed 179
+01111001011111 christened 179
+01111001011111 videotaped 179
+01111001011111 waged 180
+01111001011111 annihilated 181
+01111001011111 ensured 181
+01111001011111 mourned 182
+01111001011111 rear-ended 184
+01111001011111 vetted 186
+01111001011111 nursed 186
+01111001011111 boycotted 187
+01111001011111 exhibited 187
+01111001011111 impregnated 189
+01111001011111 re-released 191
+01111001011111 batted 191
+01111001011111 defied 192
+01111001011111 toppled 193
+01111001011111 milked 195
+01111001011111 bypassed 195
+01111001011111 skied 195
+01111001011111 raged 197
+01111001011111 groped 198
+01111001011111 penetrated 200
+01111001011111 kneed 201
+01111001011111 stunted 201
+01111001011111 quizzed 201
+01111001011111 impaled 202
+01111001011111 fathered 202
+01111001011111 obliterated 204
+01111001011111 sabotaged 206
+01111001011111 heckled 206
+01111001011111 decimated 210
+01111001011111 chanted 210
+01111001011111 hustled 211
+01111001011111 massacred 211
+01111001011111 outplayed 212
+01111001011111 eclipsed 213
+01111001011111 misquoted 213
+01111001011111 grouped 216
+01111001011111 swarmed 216
+01111001011111 ravaged 217
+01111001011111 pardoned 220
+01111001011111 worshipped 221
+01111001011111 re-signed 222
+01111001011111 substituted 223
+01111001011111 vetoed 223
+01111001011111 ingested 224
+01111001011111 channeled 226
+01111001011111 nixed 231
+01111001011111 paged 232
+01111001011111 imitated 232
+01111001011111 brough 233
+01111001011111 repaid 233
+01111001011111 interupted 233
+01111001011111 massaged 234
+01111001011111 envied 235
+01111001011111 administered 236
+01111001011111 circled 237
+01111001011111 manifested 240
+01111001011111 orchestrated 240
+01111001011111 netted 242
+01111001011111 fared 243
+01111001011111 digested 245
+01111001011111 clowned 247
+01111001011111 ignited 247
+01111001011111 deaded 248
+01111001011111 excepted 249
+01111001011111 egged 250
+01111001011111 erected 253
+01111001011111 beasted 253
+01111001011111 financed 254
+01111001011111 penned 255
+01111001011111 elbowed 259
+01111001011111 trumped 261
+01111001011111 spurred 262
+01111001011111 suffocated 266
+01111001011111 flattened 267
+01111001011111 routed 268
+01111001011111 polled 270
+01111001011111 plotted 274
+01111001011111 unfriended 276
+01111001011111 raked 276
+01111001011111 ambushed 285
+01111001011111 fronted 287
+01111001011111 enlisted 289
+01111001011111 nuked 294
+01111001011111 torched 295
+01111001011111 choreographed 296
+01111001011111 gripped 296
+01111001011111 consulted 297
+01111001011111 infiltrated 298
+01111001011111 commanded 298
+01111001011111 housed 299
+01111001011111 applauded 299
+01111001011111 briefed 300
+01111001011111 socked 301
+01111001011111 trolled 302
+01111001011111 zapped 304
+01111001011111 birthed 306
+01111001011111 looted 307
+01111001011111 hurled 308
+01111001011111 playd 309
+01111001011111 refunded 313
+01111001011111 utilized 314
+01111001011111 misinterpreted 315
+01111001011111 spawned 324
+01111001011111 re-tweeted 327
+01111001011111 capitalized 334
+01111001011111 murked 336
+01111001011111 replayed 337
+01111001011111 casted 339
+01111001011111 negotiated 340
+01111001011111 thrashed 345
+01111001011111 recreated 347
+01111001011111 conned 347
+01111001011111 smuggled 349
+01111001011111 disowned 355
+01111001011111 wronged 360
+01111001011111 congratulated 361
+01111001011111 harvested 361
+01111001011111 shunned 368
+01111001011111 misled 373
+01111001011111 graced 378
+01111001011111 bribed 383
+01111001011111 outdone 385
+01111001011111 hoed 393
+01111001011111 overtaken 399
+01111001011111 lectured 400
+01111001011111 #signedtoyoungmoney 402
+01111001011111 surveyed 417
+01111001011111 pegged 418
+01111001011111 unblocked 418
+01111001011111 retained 426
+01111001011111 profiled 428
+01111001011111 intercepted 428
+01111001011111 modeled 436
+01111001011111 lured 436
+01111001011111 dogged 441
+01111001011111 cornered 445
+01111001011111 derailed 448
+01111001011111 strangled 453
+01111001011111 humped 464
+01111001011111 provoked 465
+01111001011111 dashed 468
+01111001011111 uttered 470
+01111001011111 snubbed 474
+01111001011111 subtweeted 476
+01111001011111 cloned 482
+01111001011111 waived 482
+01111001011111 alerted 486
+01111001011111 broadcasted 487
+01111001011111 spied 496
+01111001011111 outed 497
+01111001011111 mauled 498
+01111001011111 pursued 499
+01111001011111 deposited 500
+01111001011111 monitored 512
+01111001011111 thwarted 533
+01111001011111 criticised 536
+01111001011111 summoned 544
+01111001011111 injected 551
+01111001011111 rattled 557
+01111001011111 slayed 559
+01111001011111 plowed 560
+01111001011111 rickrolled 560
+01111001011111 portrayed 566
+01111001011111 exploited 576
+01111001011111 inserted 587
+01111001011111 angered 591
+01111001011111 remade 613
+01111001011111 voiced 622
+01111001011111 fingered 627
+01111001011111 battled 632
+01111001011111 devoured 643
+01111001011111 nabbed 657
+01111001011111 flagged 665
+01111001011111 persuaded 666
+01111001011111 bonded 670
+01111001011111 coached 691
+01111001011111 squashed 692
+01111001011111 pranked 692
+01111001011111 dialed 693
+01111001011111 molested 707
+01111001011111 punked 708
+01111001011111 examined 716
+01111001011111 supplied 717
+01111001011111 bashed 720
+01111001011111 recruited 726
+01111001011111 researched 730
+01111001011111 mocked 736
+01111001011111 embraced 741
+01111001011111 drilled 742
+01111001011111 preached 742
+01111001011111 sampled 745
+01111001011111 trended 755
+01111001011111 paved 764
+01111001011111 graded 764
+01111001011111 screened 767
+01111001011111 spared 773
+01111001011111 explored 775
+01111001011111 debated 785
+01111001011111 coined 788
+01111001011111 referenced 809
+01111001011111 sacrificed 820
+01111001011111 sank 824
+01111001011111 impacted 825
+01111001011111 complimented 829
+01111001011111 rendered 849
+01111001011111 perfected 856
+01111001011111 redeemed 865
+01111001011111 confronted 867
+01111001011111 harassed 867
+01111001011111 exchanged 875
+01111001011111 rapped 883
+01111001011111 demolished 892
+01111001011111 prescribed 900
+01111001011111 recognised 912
+01111001011111 bathed 920
+01111001011111 raided 922
+01111001011111 teased 939
+01111001011111 tackled 942
+01111001011111 boosted 946
+01111001011111 operated 955
+01111001011111 acknowledged 958
+01111001011111 pounded 959
+01111001011111 triggered 991
+01111001011111 starred 997
+01111001011111 styled 1009
+01111001011111 disrespected 1010
+01111001011111 capped 1017
+01111001011111 highlighted 1027
+01111001011111 prevented 1034
+01111001011111 spat 1086
+01111001011111 criticized 1088
+01111001011111 poisoned 1094
+01111001011111 owed 1111
+01111001011111 bagged 1123
+01111001011111 sunk 1124
+01111001011111 stung 1128
+01111001011111 demanded 1129
+01111001011111 assaulted 1163
+01111001011111 flashed 1172
+01111001011111 dissed 1205
+01111001011111 notified 1245
+01111001011111 faked 1246
+01111001011111 invaded 1267
+01111001011111 investigated 1267
+01111001011111 photographed 1280
+01111001011111 conducted 1286
+01111001011111 dubbed 1311
+01111001011111 approached 1374
+01111001011111 practiced 1377
+01111001011111 matched 1435
+01111001011111 pwned 1435
+01111001011111 conquered 1436
+01111001011111 praised 1438
+01111001011111 represented 1481
+01111001011111 defended 1500
+01111001011111 displayed 1514
+01111001011111 hijacked 1532
+01111001011111 endorsed 1570
+01111001011111 sprayed 1579
+01111001011111 bombed 1603
+01111001011111 observed 1622
+01111001011111 tipped 1648
+01111001011111 poked 1687
+01111001011111 pictured 1689
+01111001011111 stalked 1715
+01111001011111 spammed 1735
+01111001011111 cured 1743
+01111001011111 declined 1749
+01111001011111 tracked 1763
+01111001011111 drafted 1783
+01111001011111 arranged 1803
+01111001011111 drowned 1817
+01111001011111 pitched 1858
+01111001011111 seized 1859
+01111001011111 bitten 1888
+01111001011111 questioned 1963
+01111001011111 dominated 1990
+01111001011111 contacted 2005
+01111001011111 ditched 2029
+01111001011111 gathered 2095
+01111001011111 founded 2098
+01111001011111 swallowed 2169
+01111001011111 taped 2256
+01111001011111 interrupted 2265
+01111001011111 framed 2306
+01111001011111 rt'd 2351
+01111001011111 blasted 2387
+01111001011111 planted 2465
+01111001011111 measured 2505
+01111001011111 judged 2606
+01111001011111 handled 2700
+01111001011111 slammed 2722
+01111001011111 avoided 2801
+01111001011111 formed 2809
+01111001011111 collected 2866
+01111001011111 sought 2886
+01111001011111 welcomed 2905
+01111001011111 chased 3000
+01111001011111 blamed 3061
+01111001011111 cursed 3079
+01111001011111 consumed 3148
+01111001011111 quoted 3262
+01111001011111 abused 3286
+01111001011111 snapped 3436
+01111001011111 sung 3523
+01111001011111 challenged 3669
+01111001011111 counted 3771
+01111001011111 described 3859
+01111001011111 celebrated 3890
+01111001011111 threatened 3929
+01111001011111 claimed 4145
+01111001011111 adopted 4316
+01111001011111 dumped 4336
+01111001011111 lifted 4344
+01111001011111 recognized 4390
+01111001011111 discussed 4548
+01111001011111 filmed 4554
+01111001011111 traded 4629
+01111001011111 trained 4720
+01111001011111 murdered 4759
+01111001011111 crushed 4960
+01111001011111 denied 5193
+01111001011111 rejected 5208
+01111001011111 slapped 5289
+01111001011111 punched 5362
+01111001011111 struck 5697
+01111001011111 supported 5726
+01111001011111 performed 5727
+01111001011111 hired 5800
+01111001011111 interviewed 5968
+01111001011111 provided 6042
+01111001011111 requested 6045
+01111001011111 presented 6103
+01111001011111 placed 6428
+01111001011111 warned 6755
+01111001011111 introduced 6881
+01111001011111 destroyed 6984
+01111001011111 defeated 7076
+01111001011111 tested 7188
+01111001011111 retweeted 7617
+01111001011111 ignored 7957
+01111001011111 owned 9242
+01111001011111 served 9325
+01111001011111 spotted 9722
+01111001011111 attacked 9761
+01111001011111 replaced 9767
+01111001011111 invented 10427
+01111001011111 treated 10513
+01111001011111 accepted 10768
+01111001011111 sang 10818
+01111001011111 caused 10835
+01111001011111 offered 12227
+01111001011111 answered 12594
+01111001011111 recorded 13037
+01111001011111 raised 14763
+01111001011111 blocked 17667
+01111001011111 built 21177
+01111001011111 held 22988
+01111001011111 saved 24536
+01111001011111 dropped 31222
+01111001011111 created 32311
+01111001011111 killed 59104
+01111001011111 played 81717
+01111001100 forcasted 46
+01111001100 xpected 52
+01111001100 promissed 56
+01111001100 neeeded 60
+01111001100 apposed 66
+01111001100 needed- 80
+01111001100 budgeted 108
+01111001100 maligned 110
+01111001100 overreacted 138
+01111001100 mean't 143
+01111001100 neede 148
+01111001100 longed 186
+01111001100 warranted 279
+01111001100 envisioned 291
+01111001100 forecasted 297
+01111001100 planed 482
+01111001100 obliged 718
+01111001100 implied 786
+01111001100 apologized 1407
+01111001100 feared 1968
+01111001100 stated 2940
+01111001100 hoped 4057
+01111001100 opposed 4187
+01111001100 predicted 4199
+01111001100 ment 4394
+01111001100 believed 6293
+01111001100 intended 6315
+01111001100 deserved 9684
+01111001100 scheduled 10102
+01111001100 promised 11866
+01111001100 designed 14325
+01111001100 planned 23541
+01111001100 expected 30796
+01111001100 needed 78838
+01111001100 meant 67538
+011110011010 sub'd 41
+011110011010 adhered 47
+011110011010 adressed 49
+011110011010 affixed 55
+011110011010 consigned 56
+011110011010 threatend 60
+011110011010 usedd 69
+011110011010 ministered 83
+011110011010 amounted 87
+011110011010 purposed 87
+011110011010 equated 93
+011110011010 delegated 110
+011110011010 conformed 123
+011110011010 comitted 126
+011110011010 aught 126
+011110011010 promo'd 151
+011110011010 likened 172
+011110011010 flocked 182
+011110011010 refered 183
+011110011010 tended 193
+011110011010 extradited 236
+011110011010 resized 250
+011110011010 redirected 317
+011110011010 appealed 358
+011110011010 transfered 407
+011110011010 attributed 473
+011110011010 traced 479
+011110011010 migrated 500
+011110011010 relocated 515
+011110011010 ported 523
+011110011010 belonged 678
+011110011010 programmed 858
+011110011010 commited 1003
+011110011010 volunteered 1106
+011110011010 contributed 1489
+011110011010 transferred 1733
+011110011010 posed 1929
+011110011010 assigned 2020
+011110011010 referred 3321
+011110011010 attempted 3854
+011110011010 refused 4248
+011110011010 upgraded 5843
+011110011010 donated 6079
+011110011010 applied 7090
+011110011010 committed 7591
+011110011010 linked 10014
+011110011010 used 194247
+011110011010 entered 14712
+0111100110110 wanned 44
+0111100110110 wnated 45
+0111100110110 wated 60
+0111100110110 aspired 76
+0111100110110 triedd 84
+0111100110110 wantedd 110
+0111100110110 wante 145
+0111100110110 tryd 149
+0111100110110 hesitated 168
+0111100110110 wnted 187
+0111100110110 wntd 286
+0111100110110 replyed 290
+0111100110110 pinged 620
+0111100110110 wantd 721
+0111100110110 tryed 1260
+0111100110110 chose 11394
+0111100110110 refuse 15606
+0111100110110 replied 16790
+0111100110110 subscribed 22846
+0111100110110 wanted 144865
+0111100110110 tried 96413
+0111100110111 rsvp'ed 41
+0111100110111 corresponded 43
+0111100110111 enquired 43
+0111100110111 consented 44
+0111100110111 talkedd 50
+0111100110111 reminisced 52
+0111100110111 emigrated 58
+0111100110111 desided 60
+0111100110111 clung 77
+0111100110111 alluded 86
+0111100110111 regressed 93
+0111100110111 manged 97
+0111100110111 waned 107
+0111100110111 stooped 154
+0111100110111 objected 158
+0111100110111 inquired 168
+0111100110111 conspired 177
+0111100110111 bragged 184
+0111100110111 ranted 197
+0111100110111 raved 213
+0111100110111 listend 223
+0111100110111 masturbated 257
+0111100110111 retreated 260
+0111100110111 talkd 293
+0111100110111 tlkd 307
+0111100110111 tlked 333
+0111100110111 reverted 340
+0111100110111 apologised 395
+0111100110111 succumbed 509
+0111100110111 ceased 515
+0111100110111 resorted 619
+0111100110111 proceeded 678
+0111100110111 reacted 715
+0111100110111 vowed 756
+0111100110111 confessed 764
+0111100110111 pledged 872
+0111100110111 pretended 1060
+0111100110111 #shazam 1153
+0111100110111 ceases 1303
+0111100110111 struggled 1312
+0111100110111 complained 1776
+0111100110111 admitted 4360
+0111100110111 responded 4968
+0111100110111 lied 13596
+0111100110111 spoke 13772
+0111100110111 managed 18414
+0111100110111 listened 21066
+0111100110111 decided 54841
+0111100110111 talked 33359
+0111100111000 comez 42
+0111100111000 kums 45
+0111100111000 cames 46
+0111100111000 komes 58
+0111100111000 detracts 61
+0111100111000 goeth 64
+0111100111000 cmes 81
+0111100111000 comess 87
+0111100111000 cumz 87
+0111100111000 corresponds 89
+0111100111000 seeps 125
+0111100111000 derives 127
+0111100111000 reverts 132
+0111100111000 come's 140
+0111100111000 originates 142
+0111100111000 radiates 150
+0111100111000 dwells 276
+0111100111000 differs 376
+0111100111000 cums 979
+0111100111000 comes 135470
+0111100111000 belongs 5604
+0111100111001 g0es 41
+0111100111001 crouches 41
+0111100111001 scampers 45
+0111100111001 prances 47
+0111100111001 prowls 47
+0111100111001 scurries 53
+0111100111001 slithers 54
+0111100111001 goez 58
+0111100111001 applys 58
+0111100111001 ->♥<- 65
+0111100111001 waddles 67
+0111100111001 dwindles 67
+0111100111001 goesss 74
+0111100111001 veers 85
+0111100111001 plops 88
+0111100111001 trickles 113
+0111100111001 glides 123
+0111100111001 gose 130
+0111100111001 limps 141
+0111100111001 kneels 190
+0111100111001 goess 191
+0111100111001 qoes 235
+0111100111001 hovers 259
+0111100111001 descends 268
+0111100111001 lurks 323
+0111100111001 bodes 327
+0111100111001 go's 370
+0111100111001 wanders 566
+0111100111001 crawls 728
+0111100111001 boils 737
+0111100111001 cools 738
+0111100111001 dries 840
+0111100111001 revolves 898
+0111100111001 translates 1012
+0111100111001 leans 1371
+0111100111001 slows 1962
+0111100111001 applies 3157
+0111100111001 shines 3321
+0111100111001 shuts 3427
+0111100111001 hangs 3596
+0111100111001 sits 7264
+0111100111001 grows 7442
+0111100111001 goes 155490
+0111100111001 stays 12515
+0111100111010 immigrated 51
+0111100111010 believeth 75
+0111100111010 leapt 216
+0111100111010 camee 226
+0111100111010 kame 536
+0111100111010 originated 639
+0111100111010 stumbled 3153
+0111100111010 came 155741
+0111100111010 appeared 4705
+0111100111011 trudged 41
+0111100111011 faired 46
+0111100111011 wen't 59
+0111100111011 knelt 69
+0111100111011 wnet 71
+0111100111011 breezed 101
+0111100111011 wentt 107
+0111100111011 whent 136
+0111100111011 -goes 169
+0111100111011 scrolled 324
+0111100111011 went 249558
+0111100111011 opted 1307
+011110011110 frwrd 41
+011110011110 froward 50
+011110011110 fwrd 57
+011110011110 forwad 59
+011110011110 forwrd 62
+011110011110 forword 69
+011110011110 forwar 74
+011110011110 frwd 88
+011110011110 alikes 93
+011110011110 4wrd 98
+011110011110 foreward 119
+011110011110 4ward 1310
+011110011110 foward 2160
+011110011110 forward 133046
+011110011110 fwd 5854
+0111100111110 seeem 52
+0111100111110 pertain 174
+0111100111110 ought 4820
+0111100111110 tend 12759
+0111100111110 seem 73843
+0111100111110 belong 12828
+0111100111111 #hasalwaysbeenmydream 46
+0111100111111 seeems 50
+0111100111111 seemd 51
+0111100111111 seemz 57
+0111100111111 -want 67
+0111100111111 seem's 74
+0111100111111 seens 81
+0111100111111 pertains 181
+0111100111111 relates 1034
+0111100111111 seemed 12764
+0111100111111 seems 125709
+0111100111111 appears 13905
+011110100000 exhausteddd 40
+011110100000 knackerd 48
+011110100000 knacked 51
+011110100000 exhaused 51
+011110100000 fullllll 51
+011110100000 exhasted 52
+011110100000 exhuasted 59
+011110100000 tirred 61
+011110100000 tyred 71
+011110100000 fulllll 79
+011110100000 nackered 80
+011110100000 fullll 86
+011110100000 tird 95
+011110100000 tiiired 114
+011110100000 tiiiired 118
+011110100000 headachey 135
+011110100000 tiired 227
+011110100000 exausted 306
+011110100000 unmotivated 754
+011110100000 tierd 1009
+011110100000 tiredd 1437
+011110100000 knackered 2407
+011110100000 drained 3333
+011110100000 tired 232683
+011110100000 exhausted 19368
+011110100001 hunry 40
+011110100001 tiyad 40
+011110100001 bordd 40
+011110100001 goneeeeee 40
+011110100001 tired/ 40
+011110100001 hungrrry 41
+011110100001 sleeeeeeping 41
+011110100001 angryy 42
+011110100001 phone-less 42
+011110100001 sleeppy 42
+011110100001 sleepyyyyy 42
+011110100001 booooooooored 42
+011110100001 pisssssed 43
+011110100001 confusd 43
+011110100001 shatterd 43
+011110100001 b0r3d 43
+011110100001 boreeeeed 43
+011110100001 singleeeeee 43
+011110100001 horngry 43
+011110100001 boredddddddddd 44
+011110100001 annoyedd 45
+011110100001 drunkkkkk 45
+011110100001 hungray 45
+011110100001 sleeeeeeeeepy 45
+011110100001 borrrred 45
+011110100001 borredd 46
+011110100001 nervouss 46
+011110100001 borded 46
+011110100001 moodless 46
+011110100001 hornyy 46
+011110100001 exhaustedd 46
+011110100001 borrred 46
+011110100001 baaaaaaaaaack 47
+011110100001 b-o-r-i-n-g 48
+011110100001 bor3d 48
+011110100001 confusedddd 49
+011110100001 hungova 49
+011110100001 seepy 49
+011110100001 freeeeeeeeeee 49
+011110100001 bored- 49
+011110100001 hypeee 50
+011110100001 thirstyy 50
+011110100001 baffed 50
+011110100001 sleepie 50
+011110100001 sleeeeeeeepy 51
+011110100001 saaaaad 53
+011110100001 mindblown 53
+011110100001 borad 53
+011110100001 confuzed 54
+011110100001 tiiiiiired 54
+011110100001 boooooooored 55
+011110100001 starvinggggg 55
+011110100001 relaxingg 56
+011110100001 weaak 56
+011110100001 tireddddddd 57
+011110100001 shleepy 58
+011110100001 hungryyyyyy 58
+011110100001 readyyyyy 59
+011110100001 boreeddd 60
+011110100001 hippp 61
+011110100001 wastedddd 61
+011110100001 jealousssss 62
+011110100001 starvingg 62
+011110100001 upsett 62
+011110100001 boreddddddddd 63
+011110100001 sleepyyyy 63
+011110100001 stressd 64
+011110100001 sleepi 64
+011110100001 @hot1079 64
+011110100001 b-o-r-e-d 64
+011110100001 drubk 64
+011110100001 comingggg 64
+011110100001 freeeeeeeeee 64
+011110100001 booooooored 65
+011110100001 boreedd 66
+011110100001 dulan 67
+011110100001 scaredddd 68
+011110100001 offthis 68
+011110100001 sinqlee 70
+011110100001 boredddddddd 71
+011110100001 confuseddd 71
+011110100001 tireeeed 72
+011110100001 tired- 73
+011110100001 fskw 74
+011110100001 drunkkkk 74
+011110100001 starvingggg 76
+011110100001 lazyyyy 76
+011110100001 dyinggggg 76
+011110100001 hugry 78
+011110100001 singleeee 81
+011110100001 weakkkk 81
+011110100001 tireeed 82
+011110100001 boreeeed 83
+011110100001 fungry 87
+011110100001 boerd 91
+011110100001 straving 91
+011110100001 smacced 96
+011110100001 tiiiiired 97
+011110100001 freeeeeeeee 102
+011110100001 jialat 107
+011110100001 scareddd 110
+011110100001 aggrivated 112
+011110100001 boared 115
+011110100001 hungrey 115
+011110100001 starvinggg 116
+011110100001 tiredddddd 117
+011110100001 sleeply 117
+011110100001 jealousss 117
+011110100001 jealoussss 118
+011110100001 boreddddddd 120
+011110100001 singleee 121
+011110100001 boooooored 121
+011110100001 goneeee 123
+011110100001 homy 126
+011110100001 homealone 127
+011110100001 sleepyyy 127
+011110100001 freeeeeeee 128
+011110100001 drunkkk 128
+011110100001 weakkk 129
+011110100001 freshhh 130
+011110100001 sleeeeeeepy 131
+011110100001 boreeed 135
+011110100001 jealouss 136
+011110100001 sweepy 137
+011110100001 lazyyy 138
+011110100001 highhh 139
+011110100001 dyingggg 142
+011110100001 bushed 142
+011110100001 tireed 144
+011110100001 hungryyyyy 146
+011110100001 confusedd 147
+011110100001 sleppy 150
+011110100001 speachless 156
+011110100001 hungery 158
+011110100001 booooored 168
+011110100001 irratated 169
+011110100001 b0red 169
+011110100001 sleeeeeepy 178
+011110100001 dyinggg 180
+011110100001 boredddddd 182
+011110100001 weakk 184
+011110100001 freeeeeee 190
+011110100001 hungy 199
+011110100001 ungrounded 199
+011110100001 boored 202
+011110100001 outty 203
+011110100001 slpy 204
+011110100001 tireddddd 211
+011110100001 borred 213
+011110100001 booored 215
+011110100001 scaredd 227
+011110100001 boooored 242
+011110100001 singlee 250
+011110100001 sleepyy 251
+011110100001 famished 262
+011110100001 zooted 266
+011110100001 hungryyyy 269
+011110100001 boreed 292
+011110100001 hongry 304
+011110100001 sleeeeepy 307
+011110100001 hunqry 328
+011110100001 confuzzled 340
+011110100001 boreddddd 351
+011110100001 sloww 357
+011110100001 sleeeepy 386
+011110100001 tiredddd 425
+011110100001 outtie 450
+011110100001 hungryyy 473
+011110100001 sleeepy 507
+011110100001 hungryy 529
+011110100001 boredddd 635
+011110100001 skint 641
+011110100001 tireddd 761
+011110100001 #offthis 864
+011110100001 boreddd 1077
+011110100001 starvin 1185
+011110100001 bord 1510
+011110100001 boredd 2417
+011110100001 speechless 5609
+011110100001 stressed 13369
+011110100001 starving 13469
+011110100001 sleepy 55978
+011110100001 bored 149332
+011110100001 hungry 86950
+011110100010 buzzn 40
+011110100010 handsy 40
+011110100010 twitterfied 41
+011110100010 unsick 41
+011110100010 over-protective 42
+011110100010 shmacked 42
+011110100010 nautious 43
+011110100010 pilt 43
+011110100010 edumacated 44
+011110100010 naseous 44
+011110100010 sickkkkkkk 44
+011110100010 zombiefied 44
+011110100010 off-kilter 44
+011110100010 schwasted 45
+011110100010 tireds 45
+011110100010 tipsey 45
+011110100010 wankered 46
+011110100010 aggrieved 46
+011110100010 lugubrious 46
+011110100010 frunk 47
+011110100010 gypped 47
+011110100010 off-balance 47
+011110100010 dislexic 47
+011110100010 druuunk 48
+011110100010 pregnate 48
+011110100010 abstinent 49
+011110100010 fluey 50
+011110100010 tispy 51
+011110100010 constricted 52
+011110100010 typsy 52
+011110100010 heart-broken 52
+011110100010 ready- 53
+011110100010 pregos 54
+011110100010 rejuvinated 54
+011110100010 pregnent 54
+011110100010 squirrelly 55
+011110100010 guity 55
+011110100010 pregnet 56
+011110100010 drunked 57
+011110100010 thowed 58
+011110100010 unsupportive 59
+011110100010 pregs 59
+011110100010 4given 59
+011110100010 hiiiigh 60
+011110100010 wastedd 60
+011110100010 shit-faced 61
+011110100010 bright-eyed 61
+011110100010 preqnant 62
+011110100010 highhhhh 62
+011110100010 gulity 63
+011110100010 drunk/high 63
+011110100010 furred 64
+011110100010 pansexual 64
+011110100010 outy 65
+011110100010 wasteddd 65
+011110100010 hung-over 66
+011110100010 slizzard 67
+011110100010 quilty 68
+011110100010 sick- 69
+011110100010 sicck 69
+011110100010 unaccomplished 70
+011110100010 tongue-tied 70
+011110100010 pregnat 71
+011110100010 squiffy 71
+011110100010 shyy 72
+011110100010 misty-eyed 72
+011110100010 possesive 73
+011110100010 barfy 74
+011110100010 car-less 75
+011110100010 moded 76
+011110100010 #baked 77
+011110100010 fadded 78
+011110100010 verklempt 78
+011110100010 fedup 78
+011110100010 mwi 80
+011110100010 delerious 82
+011110100010 shwasted 82
+011110100010 sickish 83
+011110100010 highhhh 84
+011110100010 fed-up 86
+011110100010 siq 86
+011110100010 saucey 87
+011110100010 housebound 88
+011110100010 hangry 88
+011110100010 pished 92
+011110100010 shorn 93
+011110100010 friendzoned 94
+011110100010 half-asleep 95
+011110100010 fearfully 95
+011110100010 wonderstruck 96
+011110100010 re-energized 97
+011110100010 dateless 103
+011110100010 slighted 107
+011110100010 concussed 107
+011110100010 overconfident 109
+011110100010 headachy 110
+011110100010 energised 111
+011110100010 mavericky 113
+011110100010 light-headed 115
+011110100010 jet-lagged 118
+011110100010 queezy 119
+011110100010 #whitegirlwasted 120
+011110100010 carsick 121
+011110100010 unpretty 123
+011110100010 despairing 124
+011110100010 bedridden 125
+011110100010 zombified 134
+011110100010 fooked 134
+011110100010 immobile 137
+011110100010 neglectful 139
+011110100010 morose 145
+011110100010 dejected 149
+011110100010 well-rested 151
+011110100010 nauseas 161
+011110100010 snippy 162
+011110100010 fidgety 162
+011110100010 mopey 164
+011110100010 peckish 164
+011110100010 presumptuous 167
+011110100010 pukey 171
+011110100010 dismissive 172
+011110100010 sniffly 172
+011110100010 sleep-deprived 185
+011110100010 carless 192
+011110100010 broody 192
+011110100010 drunkk 195
+011110100010 resentful 208
+011110100010 unfocused 209
+011110100010 discombobulated 209
+011110100010 krunk 211
+011110100010 overtired 214
+011110100010 friendless 224
+011110100010 undeserving 226
+011110100010 highh 231
+011110100010 tweetless 235
+011110100010 panicky 252
+011110100010 drunky 255
+011110100010 siick 256
+011110100010 facetious 264
+011110100010 punchy 265
+011110100010 teary-eyed 269
+011110100010 overprotective 283
+011110100010 lightheaded 297
+011110100010 homeschooled 310
+011110100010 fatigued 313
+011110100010 twitterpated 322
+011110100010 inebriated 329
+011110100010 jetlagged 335
+011110100010 hyphy 335
+011110100010 anemic 340
+011110100010 hoarse 342
+011110100010 disoriented 351
+011110100010 sicc 351
+011110100010 parched 353
+011110100010 rejuvenated 353
+011110100010 gassy 371
+011110100010 frazzled 372
+011110100010 shitfaced 383
+011110100010 nauseated 390
+011110100010 unworthy 413
+011110100010 complacent 413
+011110100010 claustrophobic 415
+011110100010 stabby 416
+011110100010 weepy 416
+011110100010 unappreciated 434
+011110100010 sauced 438
+011110100010 petrified 450
+011110100010 woozy 492
+011110100010 feverish 520
+011110100010 lethargic 548
+011110100010 sickkk 558
+011110100010 sicky 573
+011110100010 queasy 581
+011110100010 possessive 609
+011110100010 #high 640
+011110100010 preg 642
+011110100010 constipated 690
+011110100010 jittery 700
+011110100010 antsy 727
+011110100010 tolerant 752
+011110100010 sik 770
+011110100010 powerless 773
+011110100010 starstruck 777
+011110100010 unloved 794
+011110100010 sunburned 805
+011110100010 celibate 821
+011110100010 congested 827
+011110100010 throwed 843
+011110100010 grouchy 845
+011110100010 jaded 853
+011110100010 pampered 901
+011110100010 delirious 902
+011110100010 aggy 918
+011110100010 breathless 927
+011110100010 blowed 943
+011110100010 drowsy 946
+011110100010 loopy 950
+011110100010 frisky 958
+011110100010 fearful 959
+011110100010 dazed 961
+011110100010 unwell 974
+011110100010 fussy 996
+011110100010 sunburnt 999
+011110100010 sickk 1006
+011110100010 groggy 1047
+011110100010 preggers 1062
+011110100010 starved 1101
+011110100010 energized 1166
+011110100010 dehydrated 1207
+011110100010 preggo 1229
+011110100010 intoxicated 1402
+011110100010 homesick 1499
+011110100010 deserving 1509
+011110100010 bloated 1517
+011110100010 helpless 1576
+011110100010 nauseous 1664
+011110100010 pissy 1757
+011110100010 buzzed 1796
+011110100010 prego 1881
+011110100010 weary 1955
+011110100010 deprived 2072
+011110100010 goosebumps 2280
+011110100010 nostalgic 2387
+011110100010 crunk 2487
+011110100010 supportive 2662
+011110100010 tense 3080
+011110100010 giddy 3149
+011110100010 refreshed 3193
+011110100010 stoned 3529
+011110100010 grounded 4198
+011110100010 chills 4269
+011110100010 tipsy 4598
+011110100010 cranky 4961
+011110100010 dizzy 5164
+011110100010 faded 5164
+011110100010 paranoid 5711
+011110100010 hungover 5782
+011110100010 grumpy 5831
+011110100010 hyper 6228
+011110100010 worthy 8433
+011110100010 sober 9971
+011110100010 shy 12150
+011110100010 guilty 22448
+011110100010 sick 163097
+011110100010 drunk 79406
+011110100011 mhad 40
+011110100011 maaaddd 42
+011110100011 mhadd 42
+011110100011 odddd 43
+011110100011 #katyperryfreetix 44
+011110100011 s.o.l 46
+011110100011 hiiigh 48
+011110100011 titee 49
+011110100011 demandin 50
+011110100011 madddddddd 53
+011110100011 slickk 53
+011110100011 #chocolatewasted 56
+011110100011 odeeeee 57
+011110100011 oddd 58
+011110100011 sawdy 63
+011110100011 maaaaaad 73
+011110100011 close- 73
+011110100011 maddddddd 94
+011110100011 happy- 99
+011110100011 mahd 107
+011110100011 tiqht 121
+011110100011 #hoesonmydick 136
+011110100011 maaaaad 136
+011110100011 madddddd 137
+011110100011 odeeee 141
+011110100011 hypee 142
+011110100011 #9gagreader 199
+011110100011 o.d 222
+011110100011 maaaad 228
+011110100011 #wenottogether 237
+011110100011 maddddd 278
+011110100011 maaad 296
+011110100011 odeee 335
+011110100011 maad 352
+011110100011 ohdee 399
+011110100011 hipp 502
+011110100011 madddd 559
+011110100011 tite 1007
+011110100011 vex 1019
+011110100011 maddd 1026
+011110100011 odee 1742
+011110100011 od 5807
+011110100011 mad 161583
+011110100011 madd 6658
+01111010010 warded 40
+01111010010 jesting 40
+01111010010 contended 40
+01111010010 over-caffeinated 41
+01111010010 overburdened 41
+01111010010 unobservant 41
+01111010010 colourblind 42
+01111010010 overmatched 42
+01111010010 sad/mad 42
+01111010010 nearsighted 43
+01111010010 indenial 43
+01111010010 confuddled 44
+01111010010 bandied 44
+01111010010 crestfallen 44
+01111010010 stupefied 45
+01111010010 urked 45
+01111010010 p*ssed 46
+01111010010 piss'd 46
+01111010010 standoffish 46
+01111010010 shockd 46
+01111010010 spolied 47
+01111010010 woried 47
+01111010010 irrated 48
+01111010010 suprized 48
+01111010010 smackedd 49
+01111010010 scandalized 49
+01111010010 mesmorized 49
+01111010010 excited- 49
+01111010010 disconcerted 50
+01111010010 star-struck 51
+01111010010 confused- 51
+01111010010 disapponted 51
+01111010010 exorcised 52
+01111010010 inhibited 52
+01111010010 demoralised 52
+01111010010 nonplussed 53
+01111010010 apalled 54
+01111010010 belittled 54
+01111010010 unhip 55
+01111010010 besotted 55
+01111010010 heartsick 56
+01111010010 emasculated 58
+01111010010 angery 59
+01111010010 pre-occupied 61
+01111010010 aggrevated 61
+01111010010 mad/sad 61
+01111010010 enraptured 62
+01111010010 cagey 62
+01111010010 daunted 62
+01111010010 offened 62
+01111010010 embarresed 63
+01111010010 agog 64
+01111010010 overstimulated 65
+01111010010 conviced 65
+01111010010 cised 65
+01111010010 devistated 65
+01111010010 heartened 65
+01111010010 syced 65
+01111010010 pissssed 65
+01111010010 ostracized 67
+01111010010 extatic 68
+01111010010 supprised 68
+01111010010 gratified 68
+01111010010 arsey 68
+01111010010 optomistic 70
+01111010010 pissedd 73
+01111010010 reticent 73
+01111010010 enamoured 73
+01111010010 chummy 77
+01111010010 demotivated 79
+01111010010 appeased 79
+01111010010 facinated 79
+01111010010 disorientated 79
+01111010010 embrassed 79
+01111010010 devasted 80
+01111010010 bumbed 82
+01111010010 overpopulated 82
+01111010010 embarressed 87
+01111010010 demoralized 87
+01111010010 invigorated 88
+01111010010 blase 88
+01111010010 appauled 89
+01111010010 nervouse 91
+01111010010 over-excited 91
+01111010010 unnerved 92
+01111010010 remorseful 93
+01111010010 mindfucked 98
+01111010010 flummoxed 99
+01111010010 unamused 101
+01111010010 satiated 101
+01111010010 embaressed 102
+01111010010 frusterated 102
+01111010010 unsurprised 106
+01111010010 inconvenienced 108
+01111010010 curios 109
+01111010010 overexcited 109
+01111010010 desensitized 110
+01111010010 surprized 111
+01111010010 anoyed 112
+01111010010 understaffed 112
+01111010010 incapacitated 113
+01111010010 nervious 116
+01111010010 unconvinced 116
+01111010010 frustated 116
+01111010010 incensed 117
+01111010010 despondent 117
+01111010010 sated 121
+01111010010 devestated 123
+01111010010 skittish 124
+01111010010 unconcerned 124
+01111010010 estatic 130
+01111010010 transfixed 131
+01111010010 insistent 132
+01111010010 riveted 134
+01111010010 possesed 138
+01111010010 boggled 141
+01111010010 repulsed 145
+01111010010 awestruck 145
+01111010010 erked 146
+01111010010 po'd 148
+01111010010 disbarred 151
+01111010010 underdressed 152
+01111010010 botherd 153
+01111010010 misconstrued 153
+01111010010 surpised 160
+01111010010 indignant 161
+01111010010 befuddled 166
+01111010010 uplifted 169
+01111010010 incredulous 173
+01111010010 confussed 174
+01111010010 exasperated 176
+01111010010 aghast 178
+01111010010 disenchanted 179
+01111010010 disheartened 185
+01111010010 mystified 193
+01111010010 pisssed 199
+01111010010 prejudiced 201
+01111010010 entertainin 204
+01111010010 overdressed 206
+01111010010 infuriated 212
+01111010010 gobsmacked 216
+01111010010 perturbed 220
+01111010010 burdened 224
+01111010010 squeamish 232
+01111010010 traumatised 235
+01111010010 choosy 251
+01111010010 self-conscious 262
+01111010010 bemused 281
+01111010010 enamored 288
+01111010010 sceptical 294
+01111010010 enthused 294
+01111010010 disillusioned 309
+01111010010 adept 310
+01111010010 apprehensive 312
+01111010010 pist 313
+01111010010 reassured 319
+01111010010 fustrated 319
+01111010010 flabbergasted 323
+01111010010 ambivalent 323
+01111010010 awed 324
+01111010010 displeased 326
+01111010010 pissd 332
+01111010010 vindicated 342
+01111010010 adamant 348
+01111010010 enthralled 348
+01111010010 dumbfounded 349
+01111010010 unsatisfied 360
+01111010010 vexed 362
+01111010010 bewildered 373
+01111010010 restrained 388
+01111010010 enraged 396
+01111010010 dissappointed 401
+01111010010 dismayed 402
+01111010010 flustered 404
+01111010010 cheesed 413
+01111010010 fussed 420
+01111010010 astounded 423
+01111010010 misinformed 424
+01111010010 preoccupied 444
+01111010010 comforted 445
+01111010010 mortified 450
+01111010010 butthurt 461
+01111010010 contented 466
+01111010010 siced 470
+01111010010 overjoyed 472
+01111010010 peeved 514
+01111010010 floored 528
+01111010010 astonished 528
+01111010010 agitated 529
+01111010010 embarrased 536
+01111010010 hypnotized 536
+01111010010 distraught 542
+01111010010 spooked 542
+01111010010 shamed 557
+01111010010 miffed 576
+01111010010 aroused 579
+01111010010 perplexed 614
+01111010010 underwhelmed 628
+01111010010 elated 640
+01111010010 irked 662
+01111010010 disapointed 684
+01111010010 hesitant 722
+01111010010 smitten 730
+01111010010 traumatized 742
+01111010010 livid 761
+01111010010 alarmed 769
+01111010010 fuming 773
+01111010010 indifferent 802
+01111010010 unimpressed 917
+01111010010 conflicted 933
+01111010010 dgaf 952
+01111010010 stumped 956
+01111010010 uneasy 993
+01111010010 iffy 1022
+01111010010 overloaded 1041
+01111010010 puzzled 1042
+01111010010 horrified 1113
+01111010010 embarassed 1189
+01111010010 indecisive 1214
+01111010010 tickled 1236
+01111010010 swamped 1238
+01111010010 outraged 1274
+01111010010 intimidated 1276
+01111010010 discouraged 1280
+01111010010 appalled 1289
+01111010010 ticked 1295
+01111010010 spoilt 1313
+01111010010 baffled 1325
+01111010010 honoured 1351
+01111010010 saddened 1506
+01111010010 insulted 1526
+01111010010 scarred 1549
+01111010010 ecstatic 1578
+01111010010 humbled 1655
+01111010010 frightened 1718
+01111010010 aggravated 1737
+01111010010 devastated 1759
+01111010010 heartbroken 2047
+01111010010 skeptical 2061
+01111010010 flattered 2101
+01111010010 undecided 2104
+01111010010 fascinated 2213
+01111010010 stunned 2251
+01111010010 dissapointed 2272
+01111010010 occupied 2416
+01111010010 misunderstood 2652
+01111010010 doomed 3143
+01111010010 intrigued 3147
+01111010010 disgusted 3169
+01111010010 disturbed 3257
+01111010010 suprised 3276
+01111010010 biased 3413
+01111010010 impatient 3643
+01111010010 picky 3675
+01111010010 clueless 4333
+01111010010 relieved 4358
+01111010010 hopeful 4372
+01111010010 entertained 4460
+01111010010 optimistic 4743
+01111010010 overwhelmed 4849
+01111010010 amused 5738
+01111010010 thrilled 6138
+01111010010 embarrassed 6141
+01111010010 unhappy 6354
+01111010010 honored 7216
+01111010010 satisfied 7254
+01111010010 irritated 7265
+01111010010 bummed 7459
+01111010010 spoiled 7562
+01111010010 offended 7611
+01111010010 distracted 7693
+01111010010 confident 9411
+01111010010 bothered 9477
+01111010010 convinced 11256
+01111010010 joking 11346
+01111010010 amazed 11405
+01111010010 frustrated 12302
+01111010010 concerned 12408
+01111010010 pleased 13304
+01111010010 depressed 13937
+01111010010 shocked 15250
+01111010010 impressed 20092
+01111010010 annoyed 20731
+01111010010 disappointed 20928
+01111010010 curious 22827
+01111010010 nervous 25754
+01111010010 worried 31482
+01111010010 upset 33178
+01111010010 surprised 34531
+01111010010 angry 38566
+01111010010 confused 42358
+01111010010 pissed 48897
+011110100110 jelious 48
+011110100110 desirous 52
+011110100110 skared 56
+011110100110 disapproved 63
+011110100110 proudd 64
+011110100110 jelaous 71
+011110100110 skeered 88
+011110100110 jealouse 98
+011110100110 scard 149
+011110100110 bereft 169
+011110100110 leery 189
+011110100110 jelouse 190
+011110100110 unafraid 202
+011110100110 disposed 203
+011110100110 pround 224
+011110100110 jeal 226
+011110100110 afriad 229
+011110100110 prouder 254
+011110100110 apropos 361
+011110100110 affraid 373
+011110100110 scurred 402
+011110100110 mindful 792
+011110100110 considerate 903
+011110100110 appreciative 1031
+011110100110 jel 1073
+011110100110 incapable 1168
+011110100110 jelous 1247
+011110100110 wary 1670
+011110100110 unaware 1760
+011110100110 envious 2218
+011110100110 terrified 3758
+011110100110 capable 5501
+011110100110 ashamed 8812
+011110100110 aware 13397
+011110100110 afraid 41746
+011110100110 proud 79955
+011110100110 scared 65324
+011110100110 jealous 58194
+011110100111 ecxited 41
+011110100111 exciteed 46
+011110100111 ill-prepared 46
+011110100111 excitedddddd 48
+011110100111 pysched 50
+011110100111 thnkful 52
+011110100111 re-pissed 54
+011110100111 essited 55
+011110100111 super-excited 56
+011110100111 gung-ho 62
+011110100111 unexcited 63
+011110100111 exctied 66
+011110100111 excitd 67
+011110100111 exicited 71
+011110100111 nervous/excited 73
+011110100111 stoaked 76
+011110100111 greatfull 80
+011110100111 excited/nervous 82
+011110100111 exciteddddd 88
+011110100111 amp'd 92
+011110100111 syked 94
+011110100111 tamad 103
+011110100111 gr8ful 104
+011110100111 gratefull 117
+011110100111 tensed 147
+011110100111 excitied 151
+011110100111 excitedddd 203
+011110100111 thankfull 293
+011110100111 exciteddd 301
+011110100111 siked 312
+011110100111 exicted 313
+011110100111 excitedd 403
+011110100111 xcited 444
+011110100111 jazzed 605
+011110100111 unprepared 910
+011110100111 greatful 924
+011110100111 chuffed 1269
+011110100111 amped 1600
+011110100111 geeked 1730
+011110100111 exited 2537
+011110100111 psyched 3758
+011110100111 hyped 5588
+011110100111 anxious 6681
+011110100111 pumped 12041
+011110100111 stoked 13182
+011110100111 grateful 15416
+011110100111 excited 171288
+011110100111 thankful 25170
+01111010100 worryn 40
+01111010100 tallking 42
+01111010100 rantin 42
+01111010100 talikng 44
+01111010100 fantasizes 52
+01111010100 takling 54
+01111010100 fantasising 54
+01111010100 tlk'n 58
+01111010100 talkig 59
+01111010100 complaning 65
+01111010100 talkign 65
+01111010100 talkinggg 65
+01111010100 talkiing 69
+01111010100 tlaking 72
+01111010100 taling 76
+01111010100 tawking 78
+01111010100 tlkinq 79
+01111010100 tlkng 89
+01111010100 worring 114
+01111010100 pretendin 118
+01111010100 talkinqq 124
+01111010100 talkng 152
+01111010100 talkiin 152
+01111010100 complaing 161
+01111010100 griping 195
+01111010100 tawkn 213
+01111010100 talk'n 267
+01111010100 talken 300
+01111010100 talkinn 325
+01111010100 talkingg 382
+01111010100 worryin 427
+01111010100 tawkin 517
+01111010100 braggin 539
+01111010100 talkinq 764
+01111010100 complainin 808
+01111010100 tlking 998
+01111010100 talm 1075
+01111010100 +k 1256
+01111010100 raving 1781
+01111010100 bragging 2505
+01111010100 tlkin 3541
+01111010100 tlkn 3736
+01111010100 bitching 4124
+01111010100 talkn 4980
+01111010100 complaining 14168
+01111010100 talkin 54982
+01111010100 talking 215313
+011110101010 thinkiin 43
+011110101010 thinkinggg 46
+011110101010 thiinkiin 50
+011110101010 -thinking 51
+011110101010 thinging 51
+011110101010 finking 56
+011110101010 thinkig 57
+011110101010 thinking- 60
+011110101010 thnkng 67
+011110101010 thinkinqq 80
+011110101010 thiking 83
+011110101010 thinken 87
+011110101010 thining 94
+011110101010 thinkg 101
+011110101010 tinking 127
+011110101010 thnking 135
+011110101010 tinkin 142
+011110101010 thinkinn 144
+011110101010 thnkin 152
+011110101010 speakn 156
+011110101010 finkin 170
+011110101010 thingking 171
+011110101010 thinkng 172
+011110101010 thinkingg 174
+011110101010 think'n 188
+011110101010 fretting 341
+011110101010 boasting 421
+011110101010 thinkinq 426
+011110101010 thnkn 429
+011110101010 fantasizing 467
+011110101010 daydreaming 1283
+011110101010 dreamin 1589
+011110101010 reminiscing 1777
+011110101010 speakin 2139
+011110101010 thinkn 2741
+011110101010 worrying 8496
+011110101010 dreaming 15276
+011110101010 thinking 226345
+011110101010 thinkin 26772
+011110101011 jokeing 40
+011110101011 twitpicin 42
+011110101011 trippin'! 43
+011110101011 admittin 43
+011110101011 tambout 50
+011110101011 sayinqq 51
+011110101011 saing 59
+011110101011 noticin 61
+011110101011 saying- 62
+011110101011 4'9 69
+011110101011 inferring 72
+011110101011 rtin 76
+011110101011 sayinnnn 78
+011110101011 sayyin 80
+011110101011 exclaiming 85
+011110101011 sayinggg 89
+011110101011 4gettin 90
+011110101011 4'10 92
+011110101011 a-changin 101
+011110101011 6'9 103
+011110101011 joshin 112
+011110101011 sayiin 112
+011110101011 sayng 123
+011110101011 realizin 125
+011110101011 sayinnn 130
+011110101011 assumin 138
+011110101011 sayin'! 157
+011110101011 tombout 158
+011110101011 insinuating 178
+011110101011 @followermonitor 182
+011110101011 6'6 191
+011110101011 sayen 199
+011110101011 say'n 207
+011110101011 sayingg 228
+011110101011 sayinn 322
+011110101011 sayinq 327
+011110101011 5'8 401
+011110101011 forgettin 451
+011110101011 claimin 454
+011110101011 5'6 470
+011110101011 5'3 486
+011110101011 5'2 533
+011110101011 insisting 766
+011110101011 implying 986
+011110101011 talmbout 1213
+011110101011 jokin 1265
+011110101011 sayn 2167
+011110101011 stating 2538
+011110101011 suggesting 2681
+011110101011 saying 148085
+011110101011 sayin 34637
+011110101100 wndr 46
+011110101100 wonderd 47
+011110101100 dunnno 48
+011110101100 dnno 51
+011110101100 dontknow 68
+011110101100 #wonder 73
+011110101100 dunoo 73
+011110101100 wondr 73
+011110101100 dunnoo 74
+011110101100 wnder 81
+011110101100 overvalue 93
+011110101100 wonderr 104
+011110101100 wunder 120
+011110101100 dunnoe 147
+011110101100 wounder 338
+011110101100 wonda 367
+011110101100 dono 402
+011110101100 dno 532
+011110101100 donno 760
+011110101100 duno 1072
+011110101100 wondered 8573
+011110101100 wonder 153451
+011110101100 dunno 28334
+011110101101 wondrin 42
+011110101101 wonderingg 47
+011110101101 wondring 50
+011110101101 1*what 56
+011110101101 60
+011110101101 decidin 61
+011110101101 contemplatin 65
+011110101101 wonderinq 71
+011110101101 wondern 87
+011110101101 99
+011110101101 woundering 133
+011110101101 151
+011110101101 ☠warning☠ 231
+011110101101 debatin 288
+011110101101 291
+011110101101 391
+011110101101 wonderin 2521
+011110101101 unsure 3595
+011110101101 pondering 4953
+011110101101 deciding 6609
+011110101101 debating 9813
+011110101101 wondering 86726
+011110101101 wonders 16219
+011110101110 shuree 41
+011110101110 sures 59
+011110101110 surre 84
+011110101110 sure- 97
+011110101110 suure 139
+011110101110 suuure 159
+011110101110 sure 404308
+011110101110 suree 1462
+0111101011110 guessn 40
+0111101011110 -glad 43
+0111101011110 qlad 138
+0111101011110 presuming 174
+0111101011110 gladd 209
+0111101011110 gald 223
+0111101011110 guessin 840
+0111101011110 assuming 6989
+0111101011110 glad 175626
+0111101011110 guessing 11990
+01111010111110 contimplating 40
+01111010111110 whishing 40
+01111010111110 hopein 47
+01111010111110 hopn 51
+01111010111110 concidering 52
+01111010111110 dreadin 76
+01111010111110 hopen 79
+01111010111110 comtemplating 93
+01111010111110 wishn 142
+01111010111110 regreting 147
+01111010111110 suspecting 196
+01111010111110 considerin 206
+01111010111110 hopeing 389
+01111010111110 hopin 2138
+01111010111110 wishin 2274
+01111010111110 regretting 2311
+01111010111110 dreading 4077
+01111010111110 contemplating 8442
+01111010111110 considering 26247
+01111010111110 wishing 36958
+01111010111110 hoping 70024
+01111010111111 #whoelsenoticed 40
+01111010111111 #itsalwaystheuglygirls 40
+01111010111111 #imthatboyfriend 40
+01111010111111 forgetin 42
+01111010111111 explaning 43
+01111010111111 #thatonefollower 44
+01111010111111 #grandtheftautotaughtme 44
+01111010111111 #nevertrustaguy 46
+01111010111111 and's 47
+01111010111111 #imthetypeofboyfriend 50
+01111010111111 #weallhavethatonefriend 52
+01111010111111 #nevertellyourgirlfriend 54
+01111010111111 explaing 57
+01111010111111 supposing 57
+01111010111111 wheter 58
+01111010111111 claming 63
+01111010111111 admiting 66
+01111010111111 knowinq 72
+01111010111111 weither 73
+01111010111111 knwin 82
+01111010111111 4getting 84
+01111010111111 #that1ex 94
+01111010111111 #everyonehasthat1friend 98
+01111010111111 and/ 103
+01111010111111 #itsdisappointingtoknow 110
+01111010111111 knwing 111
+01111010111111 explainin 125
+01111010111111 #lifehastaughtme 136
+01111010111111 #thatfriend 144
+01111010111111 #imthetypeofgirlfriend 148
+01111010111111 #2011musictaughtme 177
+01111010111111 #whotoldyou 183
+01111010111111 #nevertellagirl 189
+01111010111111 #imthatgirlfriend 197
+01111010111111 ceasing 198
+01111010111111 forgeting 220
+01111010111111 #thatex 222
+01111010111111 #isitjustme 234
+01111010111111 #everybodyhasthat1follower 238
+01111010111111 #isitme 296
+01111010111111 desiring 312
+01111010111111 #collegetaughtme 314
+01111010111111 #thereisalwaysthat1person 333
+01111010111111 #highschooltaughtme 372
+01111010111111 ands 406
+01111010111111 indicating 406
+01111010111111 #imthetypeofperson 505
+01111010111111 #thatoneex 554
+01111010111111 wether 1158
+01111010111111 realising 1698
+01111010111111 admitting 2133
+01111010111111 knowin 3080
+01111010111111 proving 3770
+01111010111111 claiming 5107
+01111010111111 explaining 6183
+01111010111111 realizing 9125
+01111010111111 whom 9366
+01111010111111 forgetting 9838
+01111010111111 knowing 35735
+01111010111111 whether 35795
+01111011000 bacq 40
+01111011000 bact 41
+01111011000 back^^ 45
+01111011000 bback 45
+01111011000 bacccck 46
+01111011000 baak 46
+01111011000 6acc 47
+01111011000 #freelancejob 49
+01111011000 bacckkk 50
+01111011000 head-first 52
+01111011000 backkkkkkkk 52
+01111011000 bavk 53
+01111011000 back) 54
+01111011000 bqk 56
+01111011000 oooooon 58
+01111011000 bakkk 61
+01111011000 abck 62
+01111011000 baccc 63
+01111011000 thruuu 75
+01111011000 @rebeccaminkoff 79
+01111011000 back/ 82
+01111011000 bacckk 83
+01111011000 backkkkkkk 88
+01111011000 onnnnnnnn 90
+01111011000 baccck 93
+01111011000 @hmusa 95
+01111011000 ooooon 110
+01111011000 headlong 110
+01111011000 -back 110
+01111011000 baxk 125
+01111011000 onnnnnnn 128
+01111011000 bacl 129
+01111011000 oooon 153
+01111011000 backkkkkk 160
+01111011000 bckk 187
+01111011000 bakc 188
+01111011000 hither 190
+01111011000 baqk 240
+01111011000 backkkkk 288
+01111011000 baqq 307
+01111011000 bacck 372
+01111011000 baaaack 452
+01111011000 baaack 551
+01111011000 backkkk 597
+01111011000 baack 626
+01111011000 backkk 1123
+01111011000 bakk 1648
+01111011000 baq 1959
+01111011000 bacc 3488
+01111011000 backk 3856
+01111011000 bac 7921
+01111011000 bck 9251
+01111011000 directly 11350
+01111011000 back 1230523
+01111011000 bak 14811
+011110110010 tosleep 43
+011110110010 43
+011110110010 upnorth 44
+011110110010 44
+011110110010 hmee 45
+011110110010 l$1 46
+011110110010 homeeeeeeeee 48
+011110110010 hommee 49
+011110110010 2school 50
+011110110010 hommeee 51
+011110110010 homr 53
+011110110010 hoem 54
+011110110010 56
+011110110010 hooooooome 57
+011110110010 captureplay 58
+011110110010 homeeeeeeee 64
+011110110010 hom3 67
+011110110010 76
+011110110010 downstate 78
+011110110010 unglued 79
+011110110010 home/ 81
+011110110010 hoooooome 96
+011110110010 homed 99
+011110110010 99
+011110110010 uptop 102
+011110110010 intown 105
+011110110010 hoome 110
+011110110010 staffpointe 113
+011110110010 115
+011110110010 homeeeeeee 120
+011110110010 homw 122
+011110110010 hooooome 130
+011110110010 bys 132
+011110110010 hame 141
+011110110010 2work 184
+011110110010 hoooome 204
+011110110010 bandicoot 205
+011110110010 homeeeeee 225
+011110110010 hooome 226
+011110110010 2bed 227
+011110110010 2sleep 256
+011110110010 h0me 263
+011110110010 webdesigner 295
+011110110010 homeeeee 397
+011110110010 home- 472
+011110110010 homeeee 766
+011110110010 homeee 1533
+011110110010 hme 2136
+011110110010 home 723087
+011110110010 homee 2962
+011110110011 40
+011110110011 2008/11/13 40
+011110110011 2008/11/17 41
+011110110011 merced/macready 41
+011110110011 moviestore 41
+011110110011 2008/10/21 42
+011110110011 42
+011110110011 42
+011110110011 2008/10/19 42
+011110110011 leastt 42
+011110110011 flylip 43
+011110110011 @all_dads 43
+011110110011 portland/hillsboro 43
+011110110011 2008/10/14 44
+011110110011 2008/10/04 45
+011110110011 2008/10/06 45
+011110110011 45
+011110110011 movepoint 46
+011110110011 47
+011110110011 2008/09/24 49
+011110110011 50
+011110110011 leats 50
+011110110011 50
+011110110011 ballmoneygdi@ 51
+011110110011 53
+011110110011 2008/10/05 54
+011110110011 55
+011110110011 2008/10/15 55
+011110110011 2008/09/27 55
+011110110011 2008/10/07 56
+011110110011 2008/10/08 57
+011110110011 outrageousat 59
+011110110011 59
+011110110011 bozeman/gallatin 60
+011110110011 2008/10/01 61
+011110110011 denver/centennial 62
+011110110011 62
+011110110011 64
+011110110011 demetrastar 65
+011110110011 65
+011110110011 67
+011110110011 68
+011110110011 celsaelane 70
+011110110011 73
+011110110011 beaumont/port 73
+011110110011 2008/10/11 73
+011110110011 74
+011110110011 naughtypeaceful 76
+011110110011 77
+011110110011 79
+011110110011 pasco/tri-cities 82
+011110110011 84
+011110110011 84
+011110110011 84
+011110110011 85
+011110110011 86
+011110110011 86
+011110110011 94
+011110110011 97
+011110110011 97
+011110110011 99
+011110110011 101
+011110110011 102
+011110110011 102
+011110110011 106
+011110110011 #angelsoncam 106
+011110110011 106
+011110110011 109
+011110110011 109
+011110110011 111
+011110110011 112
+011110110011 114
+011110110011 115
+011110110011 limeexchange 115
+011110110011 117
+011110110011 somepoint 124
+011110110011 125
+011110110011 kwbc 127
+011110110011 130
+011110110011 132
+011110110011 132
+011110110011 134
+011110110011 136
+011110110011 139
+011110110011 144
+011110110011 146
+011110110011 163
+011110110011 166
+011110110011 leat 168
+011110110011 168
+011110110011 168
+011110110011 169
+011110110011 170
+011110110011 184
+011110110011 xov 188
+011110110011 190
+011110110011 221
+011110110011 223
+011110110011 rockthischicky 243
+011110110011 loveablewiney 249
+011110110011 257
+011110110011 283
+011110110011 301
+011110110011 331
+011110110011 347
+011110110011 407
+011110110011 557
+011110110011 727
+011110110011 least 175832
+011110110011 1048
+01111011010 40
+01111011010 rihgt 40
+01111011010 42
+01111011010 42
+01111011010 42
+01111011010 rytee 42
+01111011010 43
+01111011010 riiqht 43
+01111011010 riggght 43
+01111011010 45
+01111011010 ritte 46
+01111011010 48
+01111011010 roght 51
+01111011010 gmtbid 54
+01111011010 55
+01111011010 riht 56
+01111011010 57
+01111011010 righhtt 57
+01111011010 riii 58
+01111011010 erde 58
+01111011010 59
+01111011010 61
+01111011010 rright 61
+01111011010 65
+01111011010 frommm 66
+01111011010 anygood 69
+01111011010 bstbid 76
+01111011010 righhht 80
+01111011010 riqhtt 82
+01111011010 86
+01111011010 -right 87
+01111011010 87
+01111011010 94
+01111011010 99
+01111011010 rigght 100
+01111011010 106
+01111011010 righh 109
+01111011010 110
+01111011010 116
+01111011010 rgt 123
+01111011010