Overview

Analyze the Mnemiopsis data with the new filtered transcriptome that Eric generated.

Spearman Correlation

The following plots the spearman correlation of the RPM (reads per million) for all genes that have an average RPM ≥ 1.

Spearman’s rank correlation coefficient is a nonparametric measure of rank correlation, recommended for data that doesn’t necessarily come from a bivariate normal distribution.

Pairwise PCA

MA and Volcano plots

MA plot: The log2 fold change(M) plotted against the log2 average(A) of the normalized read count for each gene. Significantly differentially expressed genes are plotted in red.

Volcano plot: The log2 fold change(M) plotted against the -log10 (eg. 1e^-10 = 10) of the adjusted p-value.

1hpf/2hpf

2hpf/3hpf

3hpf/4hpf

4hpf/5hpf

5hpf/6hpf

6hpf/7hpf

7hpf/8hpf

Heatmaps

The first heatmap was made by hierarchically clustering the euclidean distances of the log2 fold change for genes with p-values less than 10^{-5} at any time point.

The second heatmap uses the same hierarchical method to cluster timepoints.

LS0tCnRpdGxlOiAiU3RlcHdpc2UiIAphdXRob3I6ICJLaXJzdGVuIEdvdHRpbmciCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICAgIHRvYzogdHJ1ZQogICAgICB0b2NfZGVwdGg6IDIKICAgICAgdG9jX2Zsb2F0OgogICAgICAgIGNvbGxhcHNlZDogZmFsc2UKLS0tCgoKYGBge3IgaW5pdGlhbGl6ZURhdGFTdGVwd2lzZSwgZWNobyA9IEZBTFNFLCByZXN1bHRzID0gImhpZGUiLCBtZXNzYWdlID0gRkFMU0UsIGVycm9yID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgY2FjaGUgPSBGQUxTRX0KCiMjIHVzZXIgaW5wdXQgdG8gJ0RFU2VxMkFsbC5SZGF0YScKCmxvYWQoIi4vb3V0cHV0L0RFU2VxMkFsbFN0ZXB3aXNlLlJkYXRhIikKc2V0d2QoIi4vIikKCiMjIEZpcnN0IGxpc3QgdGhlIFIgbGlicmFyaWVzIEkgd2FudCB0byB1c2UKbGlicmFyaWVzICAgICAgICA8LSBjKCJERVNlcTIiLCAiZ3Bsb3RzIiwgIlJDb2xvckJyZXdlciIsICdrbml0cicsICdncmlkJywgJ2dyaWRFeHRyYScsICJ0aWR5dmVyc2UiLCAna2lSc3RlbicpCgojIyBOb3cgcmVhZCBpbiB0aGUgbGlicmFyaWVzCmxhcHBseShsaWJyYXJpZXMsIGZ1bmN0aW9uKHgpewogICAgbGlicmFyeSh4LCBjaGFyYWN0ZXIub25seSA9IFRSVUUsIHF1aWV0bHkgPSBUUlVFKQogICAgfSkKCiMjIEluaXRpYWxpemUga25pdHIgb3B0aW9ucwpvcHRzX2NodW5rJHNldChlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCByZXN1bHRzPSJoaWRlIiwgZmlnLmtlZXA9ImFsbCIsIHdhcm5pbmc9RkFMU0UsIGVycm9yPUZBTFNFLCBmaWcucGF0aD0iZmlndXJlcy8iLCBjYWNoZSA9IFRSVUUpCm9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSAiLi8iKQoKCmBgYAoKCgoKCiMgT3ZlcnZpZXcKCkFuYWx5emUgdGhlIE1uZW1pb3BzaXMgZGF0YSB3aXRoIHRoZSBuZXcgZmlsdGVyZWQgdHJhbnNjcmlwdG9tZSB0aGF0IEVyaWMgZ2VuZXJhdGVkLgoKCiNTcGVhcm1hbiBDb3JyZWxhdGlvbgoKClRoZSBmb2xsb3dpbmcgcGxvdHMgdGhlIHNwZWFybWFuIGNvcnJlbGF0aW9uIG9mIHRoZSBSUE0gKHJlYWRzIHBlciBtaWxsaW9uKSBmb3IgYWxsIGdlbmVzIHRoYXQgaGF2ZSBhbiBhdmVyYWdlIFJQTSAmIzg4MDU7IDEuCgpTcGVhcm1hbidzIHJhbmsgY29ycmVsYXRpb24gY29lZmZpY2llbnQgaXMgYSBub25wYXJhbWV0cmljIG1lYXN1cmUgb2YgcmFuayBjb3JyZWxhdGlvbiwgcmVjb21tZW5kZWQgZm9yIGRhdGEgdGhhdCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGNvbWUgZnJvbSBhIGJpdmFyaWF0ZSBub3JtYWwgZGlzdHJpYnV0aW9uLgoKCmBgYHtyIHNwZWFybWFuX2NvcnJlbGF0aW9uU3RlcHdpc2UsIGZpZy5jYXAgPSAiIn0KCiMjIE1ha2UgYSBzcGVhcm1hbiBwbG90CgoKZmlsdGVyZWRSUE1zIDwtIG5vcm1Db3VudHMgJT4lIGdyb3VwX2J5KElEKSAlPiUgbXV0YXRlKHJwbUZsYWcgPSBpZmVsc2UoKG1lYW4ocnBtKSA+PSAxKSwgeWVzID0gJ3llcycsIG5vID0gJ25vJykpICU+JSB1bmdyb3VwKCkgJT4lCiAgICBmaWx0ZXIocnBtRmxhZyA9PSAneWVzJykgJT4lIHNlbGVjdChJRCwgU2FtcGxlLCBycG0pICU+JSBzcHJlYWQoU2FtcGxlLCBycG0pCgoKCnJwbWZpbHQgICAgICAgIDwtIGRhdGEuZnJhbWUoc2VsZWN0KGZpbHRlcmVkUlBNcywgLUlEKSwgcm93Lm5hbWVzID0gZmlsdGVyZWRSUE1zJElELCBjaGVjay5uYW1lcyA9IEZBTFNFKQpzcGVhcm1hbiAgICAgICA8LSBkYXRhLmZyYW1lKGNvcihycG1maWx0LCBtZXRob2QgPSAnc3BlYXJtYW4nKSwgY2hlY2submFtZXMgPSBGQUxTRSkKc3BlYXJtYW4kSUQgICAgPC0gcm93bmFtZXMoc3BlYXJtYW4pCnNwZWFybWFuVGlkeSAgIDwtIHNwZWFybWFuICU+JSBnYXRoZXIoU2FtcGxlLCBjb3JyZWxhdGlvbiwgLUlEKQoKIyMgYW5kIHBsb3QgaXQhCgpnZ3Bsb3QoZGF0YSA9IHNwZWFybWFuVGlkeSwgYWVzKHggPSBJRCwgeSA9IFNhbXBsZSwgZmlsbCA9IGNvcnJlbGF0aW9uKSkgKyBnZW9tX3RpbGUoKSArCiAgICBzY2FsZV9maWxsX2dyYWRpZW50Mihsb3cgPSAieWVsbG93IiwgbWlkID0gJ3doaXRlJywgaGlnaCA9ICJwdXJwbGU0IiwgbWlkcG9pbnQgPSAwLjgsIGxpbWl0ID0gYygwLDEpKSArCiAgICAgICAgZ2d0aXRsZSgnU3BlYXJtYW4gQ29ycmVsYXRpb24gb2YgU2FtcGxlcycpICsgeGxhYignJykgKyB5bGFiKCcnKSArCiAgICAgICAgICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSkpCmBgYAoKCiMgUGFpcndpc2UgUENBCgpgYGB7ciBQQ0FTdGVwd2lzZSwgZmlnLmZ1bGx3aWR0aCA9IFRSVUUsIGZpZy53aWR0aCA9IDEwLCBmaWcuaGVpZ2h0ID0gMTB9CgpwY2FzX2RhdGEgPC0gbGFwcGx5KGNvbnRyYXN0X25hbWVzLCBmdW5jdGlvbih4KXsKICAgIHkgPC0gcGxvdFBDQShybGRfYWxsW1t4XV0sIHJldHVybkRhdGEgPSBUUlVFLCBudG9wID0gMTAwMDApCiAgICB5JElEIDwtIHgKICAgIHkKfSkKCnBjYV9kYXRhIDwtIGJpbmRfcm93cyhwY2FzX2RhdGEpCgpnZ3Bsb3QoZGF0YSA9IHBjYV9kYXRhLCBhZXMoeCA9IFBDMSwgeSA9IFBDMiwgbGFiZWwgPSBuYW1lLCBjb2xvdXIgPSBmYWN0b3IoY29uZGl0aW9uKSkpICsKICAgICAgICAgICAgZ2VvbV9wb2ludChzaXplID0gMykgKyB0aGVtZV9idygpICsgZ2VvbV90ZXh0KGhqdXN0ID0gMCwgdmp1c3QgPSAtMC40KSArCiAgICAgICAgICAgIHhsYWIoIlBDIDEiKSArIHlsYWIoIlBDIDIiKSArIAogICAgICAgICAgICBzY2FsZV94X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLjk4LCAwKSkgICsKICAgICAgICAgICAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMC4yLCAwKSkgKwogICAgICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKSArCiAgICAgICAgICAgIGZhY2V0X3dyYXAofiBJRCwgc2NhbGVzID0gImZyZWUiKQoKYGBgCgoKCiMgTUEgYW5kIFZvbGNhbm8gcGxvdHMgey50YWJzZXR9CgpNQSBwbG90OiBUaGUgbG9nMiBmb2xkIGNoYW5nZShNKSBwbG90dGVkIGFnYWluc3QgdGhlIGxvZzIgYXZlcmFnZShBKSBvZiB0aGUgbm9ybWFsaXplZCByZWFkIGNvdW50IGZvciBlYWNoIGdlbmUuICBTaWduaWZpY2FudGx5IGRpZmZlcmVudGlhbGx5IGV4cHJlc3NlZCBnZW5lcyBhcmUgcGxvdHRlZCBpbiByZWQuCgpWb2xjYW5vIHBsb3Q6IFRoZSBsb2cyIGZvbGQgY2hhbmdlKE0pIHBsb3R0ZWQgYWdhaW5zdCB0aGUgLWxvZzEwIChlZy4gMWVeLTEwID0gMTApIG9mIHRoZSBhZGp1c3RlZCBwLXZhbHVlLgoKYGBge3IgbWF2b2xTdGVwd2lzZX0KCgp4IDwtIGNvbnRyYXN0X25hbWVzW1sxXV0KCnBsb3RzIDwtIGxhcHBseShjb250cmFzdF9uYW1lcywgZnVuY3Rpb24oeCl7CiAgICBkZiAgICAgIDwtIGFsbF9yZXN1bHRzX3RpZHlERiAlPiUgZmlsdGVyKGNvbnRyYXN0SUQgPT0geCkgJT4lIHNwcmVhZChkZWFfSUQsIGRlYV9WYWx1ZSkgJT4lIG11dGF0ZShsb2diYXNlTWVhbiA9IGxvZyhiYXNlTWVhbikpCiAgICBwdmFsICAgIDwtIGFzLm51bWVyaWMocHZhbCkKICAgIGlmKGlzLm51bGwoZGYpKXsKICAgICAgICBtZXNzYWdlKHBhc3RlMCgiUHZhbHVlIHRvbyBzdHJpbmdlbnQgZm9yICIsIGNvbnRyYXN0LCAiLiBNQS9Wb2xjYW5vIHBsb3Qgb21taXRlZC5cbiIpKQogICAgfSBlbHNlIHsKICAgICAgICBwdmFsICAgICAgICAgICAgICAgICAgPC0gYXMubnVtZXJpYyhwdmFsKQogICAgICAgIGxvd2VyX2xhYmVsICAgICAgICAgICA8LSBwYXN0ZTAoIkdlbmVzIHdpdGggQ291bnRzOiAiLCBucm93KGRmKSwgIlxuVXA6ICIsI2NyZWF0ZSB0aGUgbGFiZWwgb2YgdGhlIGxlZ2VuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJvdyhzdWJzZXQoZGYsIGxvZzJGb2xkQ2hhbmdlID4gMCAmIHBhZGogPCBwdmFsKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBEb3duOiAiLCBucm93KHN1YnNldChkZiwgbG9nMkZvbGRDaGFuZ2UgPCAwICYgcGFkaiA8IHB2YWwpKSwgIlxuIikKICAKICAgICAgICBkZiA8LSBkZiAlPiUgbXV0YXRlKHNpZ25pZmljYW5jZV9ncm91cCA9IGlmZWxzZShwYWRqIDw9IHB2YWwsIHllcyA9ICd5ZXMnLCBubyA9ICdubycpKQogIAogICAgICAgIGxlZ2VuZF9sYWJlbHMgICAgICAgIDwtIGMocGFzdGUwKCJwYWRqID4gIiwgcHZhbCwiOiAiLCBucm93KGZpbHRlcihkZiwgc2lnbmlmaWNhbmNlX2dyb3VwID09ICdubycpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZTAoInBhZGogPCAiLCBwdmFsLCI6ICIsIG5yb3coZmlsdGVyKGRmLCBzaWduaWZpY2FuY2VfZ3JvdXAgPT0gJ3llcycpKSkpCiAgICAgICAgbWEucGxvdCA8LSAgIGdncGxvdChkZiwgYWVzKHggPSBsb2diYXNlTWVhbiwgeSA9IGxvZzJGb2xkQ2hhbmdlLCBncm91cCA9IHNpZ25pZmljYW5jZV9ncm91cCwgY29sb3VyID0gc2lnbmlmaWNhbmNlX2dyb3VwKSkgKwogICAgICAgICAgICAgICAgICAgICAgZ2VvbV9wb2ludCgpICsgdGhlbWVfYncoKSArCiAgICAgICAgICAgICAgICAgICAgICBnZ3RpdGxlKCdNQSBwbG90JykgKyBzY2FsZV94X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLCAwKSkgKwogICAgICAgICAgICAgICAgICAgICAgeGxhYigiQSA9IE1lYW4gb2YgbG9nMihBYnVuZGFuY2UpIikgKyB5bGFiKCJNID0gbG9nMihGb2xkIENoYW5nZSkiKSArCiAgICAgICAgICAgICAgICAgICAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiZ3JheTI0IiwgInJlZCIpLCBuYW1lID0gbG93ZXJfbGFiZWwsIGJyZWFrcyA9IGMoImdyYXkyNCIsICJyZWQiKSwgbGFiZWxzID0gbGVnZW5kX2xhYmVscykgKwogICAgICAgICAgICAgICAgICAgICAgZ2VvbV9obGluZShhZXMoeWludGVyY2VwdCA9IDApLCBjb2xvdXIgPSAiYmxhY2siLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArCiAgICAgICAgICAgICAgICAgICAgICBnZW9tX2hsaW5lKGFlcyh5aW50ZXJjZXB0ID0gMSksIGNvbG91ciA9ICJncmF5NjYiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArCiAgICAgICAgICAgICAgICAgICAgICBnZW9tX2hsaW5lKGFlcyh5aW50ZXJjZXB0ID0gLTEpLCBjb2xvdXIgPSAiZ3JheTY2IiwgbGluZXR5cGU9ImRhc2hlZCIpICsKICAgICAgICAgICAgICAgICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdub25lJywgdGV4dCA9IGVsZW1lbnRfdGV4dChzaXplPTIwKSkKICAgICAgICB2b2xjYW5vLnBsb3QgPC0gICBnZ3Bsb3QoZGYsIGFlcyh4ID0gbG9nMkZvbGRDaGFuZ2UsIHkgPSAtbG9nKHBhZGosIGJhc2UgPSBjKDEwKSksIGdyb3VwID0gc2lnbmlmaWNhbmNlX2dyb3VwLCBjb2xvdXIgPSBzaWduaWZpY2FuY2VfZ3JvdXApKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbV9wb2ludCgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICBnZ3RpdGxlKCdWb2xjYW5vIHBsb3QnKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgeGxhYigiTSA9IGxvZzIoRm9sZCBDaGFuZ2UpIikgKyB5bGFiKCItbG9nMTAoQWRqdXN0ZWQgUC1WYWx1ZSkiKSArIAogICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJncmF5MjQiLCAicmVkIiksIGxhYmVscyA9IGxlZ2VuZF9sYWJlbHMsIG5hbWU9bG93ZXJfbGFiZWwpICsKICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZV9idygpICsKICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2LCBmYWNlID0gImJvbGQiKSwgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwKSwgIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0yMCkpCiAgICAgZ3JvYiA8LSAgIG1hcnJhbmdlR3JvYihsaXN0KG1hLnBsb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdm9sY2Fuby5wbG90KSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgPSB0ZXh0R3JvYih4LCBncCA9IGdwYXIoZm9uc2l6ZSA9IDQwLCBmb250ZmFjZSA9ICdib2xkJywgY2V4ID0gMiksIGhqdXN0ID0gMS44KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBucm93ID0gMSwgbmNvbCA9IDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzPWMoMC4zOCwgMC42MikpCiAgICAgaW52aXNpYmxlKGdyb2IpCiAgICB9Cn0pCgpuYW1lcyhwbG90cykgPC0gY29udHJhc3RfbmFtZXMKYGBgCgpgYGB7ciBwbG90bWF2b2xTdGVwd2lzZSwgZmlnLmtlZXAgPSAiYWxsIiwgZmlnLmhlaWdodCA9IDEwLCBmaWcud2lkdGggPSAyMCwgZWNobz1GQUxTRSwgcmVzdWx0cz0nYXNpcyd9Cgpmb3IoaSBpbiBjb250cmFzdF9uYW1lcyl7CiAgY2F0KHBhc3RlMCgiXG5cblxuIyMiLCBpLCAiXG4iKSkKICBwcmludChwbG90c1tbaV1dKQp9CgpgYGAKCgojSGVhdG1hcHMKCgpUaGUgZmlyc3QgaGVhdG1hcCB3YXMgbWFkZSBieSBoaWVyYXJjaGljYWxseSBjbHVzdGVyaW5nIHRoZSBldWNsaWRlYW4gZGlzdGFuY2VzIG9mIHRoZSBsb2cyIGZvbGQgY2hhbmdlIGZvciBnZW5lcyB3aXRoIHAtdmFsdWVzIGxlc3MgdGhhbiBgciBwdmFsYCBhdCBhbnkgdGltZSBwb2ludC4KClRoZSBzZWNvbmQgaGVhdG1hcCB1c2VzIHRoZSBzYW1lIGhpZXJhcmNoaWNhbCBtZXRob2QgdG8gY2x1c3RlciB0aW1lcG9pbnRzLgoKCmBgYHtyIHBhaXJ3aXNlSGVhdG1hcHNTdGVwd2lzZSwgcmVzdWx0cyA9ICJoaWRlIiwgZmlnLmNhcCA9ICIiLCBmaWcua2VlcCA9ICJoaWdoIn0KCgpsZmNfdGFibGUgPC0gYWxsX3Jlc3VsdHNfdGlkeURGICU+JQogIG11dGF0ZShzaWduaWZpY2FudCA9IGlmZWxzZShkZWFfSUQgPT0gJ3BhZGonICYgZGVhX1ZhbHVlIDw9IHB2YWwsIHllcyA9IFRSVUUsIG5vID0gRkFMU0UpKSAlPiUgIyBsYWJlbCBhbGwgc2lnbmlmaWNhbnQgZ2VuZXMKICBncm91cF9ieShjb250cmFzdElELCBHZW5lKSAlPiUgIyBsYWJlbCB0aGUgIyBvZiB0aW1lcyBnZW5lcyB0aGF0IGFyZSBzaWduaWZpY2FudAogIHVuZ3JvdXAoKSAgJT4lCiAgZ3JvdXBfYnkoR2VuZSkgJT4lCiAgZmlsdGVyKGFueShzaWduaWZpY2FudCksIGRlYV9JRCA9PSAnbG9nMkZvbGRDaGFuZ2UnKSAlPiUKICBzZWxlY3QoLXNpZ25pZmljYW50KSAlPiUgdW5pdGUoY29sbmFtZSwgY29udHJhc3RJRCwgZGVhX0lEKSAlPiUgIyBtYWtlIHRoZSB0YWJsZSB3aWRlIGZvcm1hdHRlZAogIHNwcmVhZChjb2xuYW1lLCBkZWFfVmFsdWUpCgoKIyMgY3JlYXRlIGEgdGFibGUgb2Ygc2lnbmlmaWNhbnQgZ2VuZXMgd2l0aCB0aGUgY2x1c3RlciBjb2xvcnMgYXNzaWduZWQKCnNpZ24udGFibGUgPC0gYWxsX3Jlc3VsdHNfdGlkeURGICAlPiUgCiAgc3ByZWFkKGtleSA9IGRlYV9JRCwgdmFsdWUgPSBkZWFfVmFsdWUpICAlPiUgCiAgZmlsdGVyKEdlbmUgJWluJSBsZmNfdGFibGUkR2VuZSkgJT4lCiAgZ3JvdXBfYnkoY29udHJhc3RJRCwgR2VuZSkgJT4lIAogIG11dGF0ZShzb3J0YnkgPSAtbG9nKHBhZGosIGJhc2UgPSBjKDEwKSkqc2lnbihsb2cyRm9sZENoYW5nZSkpICU+JSAKICB1bmdyb3VwKCkgJT4lIGdhdGhlcihkZWFfSUQsIGRlYV9WYWx1ZSwgLUdlbmUsIC1jb250cmFzdElEKSAlPiUgCiAgdW5pdGUoaWRBbGwsIGNvbnRyYXN0SUQsIGRlYV9JRCkgJT4lIHNwcmVhZChrZXkgPSBpZEFsbCwgdmFsdWUgPSBkZWFfVmFsdWUpICU+JQogIGRwbHlyOjpyZW5hbWUoJ1RyYW5zY3JpcHRJRCcgPSBHZW5lKQoKCmhlYXRtYXAuaW5wdXQudGFibGUgICAgICAgICAgIDwtIGRhdGEuZnJhbWUobGZjX3RhYmxlKQpyb3duYW1lcyhoZWF0bWFwLmlucHV0LnRhYmxlKSA8LSBsZmNfdGFibGUkR2VuZQpoZWF0bWFwLmlucHV0LnRhYmxlJEdlbmUgICAgICA8LSBOVUxMCmhlYXRtYXAuaW5wdXQudGFibGUgICAgICAgICAgIDwtIG5hLm9taXQoZGF0YS5tYXRyaXgoaGVhdG1hcC5pbnB1dC50YWJsZVt3aGljaChyb3duYW1lcyhoZWF0bWFwLmlucHV0LnRhYmxlKSAlaW4lIHNpZ24udGFibGUkVHJhbnNjcmlwdElEKSwgXSkpCmNvbG5hbWVzKGhlYXRtYXAuaW5wdXQudGFibGUpIDwtIGNvbnRyYXN0X25hbWVzCgoKcHJldHR5Y29sb3JzICA8LSBjb2xvclJhbXBQYWxldHRlKHJldihicmV3ZXIucGFsKDExLCAiU3BlY3RyYWwiKSkpCmNvbC5icmVha3MgICAgPC0gc2VxKC0zLCAzLCBsZW5ndGgub3V0ID0gbmNvbChoZWF0bWFwLmlucHV0LnRhYmxlKSkKCgojIyBNYWtlIHR3byBoZWF0bWFwcywgYWxsb3cgY3VzdGltaXphYmxlIGdyYXBoaW5nCgpociA8LSBoY2x1c3QoZGlzdChoZWF0bWFwLmlucHV0LnRhYmxlKSwgbWV0aG9kPSJjb21wbGV0ZSIpICMgQ3JlYXRlcyByb3cgZGVuZHJvZ3JhbQpoYyA8LSBoY2x1c3QoZGlzdCh0KGhlYXRtYXAuaW5wdXQudGFibGUpKSwgbWV0aG9kPSJjb21wbGV0ZSIpICMgQ3JlYXRlcyBjb2x1bW4gZGVuZHJvZ3JhbQoKbXljbHIgICAgIDwtIGN1dHJlZShociwgayA9IDcpICMgc2V0IHVwIHdoZXJlIHRoZSBncm91cHMgd2lsbCBiZSwgY2hhbmdlICdrJyBmb3IgbW9yZSBvciBsZXNzIGdyb3VwcwpteWNvbHIgICAgPC0gYygiR3JlZW4iLCAiUmVkIiwgIkJsdWUiLCAiT3JhbmdlIiwgIlB1cnBsZSIsICJQaW5rIiwgIlllbGxvdyIpICMgbXVzdCBiZSB0aGUgc2FtZSBsZW5ndGggYXMgJ2snCm15Y29sciAgICA8LSBteWNvbHJbYXMudmVjdG9yKG15Y2xyKV0gIyBwdWxsIG91dCB0aGUgY29sb3JzIGFzc2lnbmVkIHRvIGVhY2ggZ2VuZQpteWNvbHIuZGYgPC0gZGF0YS5mcmFtZShDbHVzdGVyX0NvbG9yID0gbXljb2xyLCBUcmFuc2NyaXB0SUQgPSBuYW1lcyhteWNscikpICMgY3JlYXRlIGEgZGF0YSBmcmFtZSBvZiB0aGUgY2x1c3RlciBjb2xvciBlYWNoIGdlbmUgYmVsb25ncyB0bwoKCmlmKG5jb2woaGVhdG1hcC5pbnB1dC50YWJsZSkgPiAxKXsKICAgICMjIE1ha2UgYSBoZWF0bWFwIHdpdGhvdXQgYSBjb2x1bW4gZGVuZHJvZ3JhbQogICAgY29sLmJyZWFrcyAgICA8LSBzZXEoLTMsIDMsIGxlbmd0aC5vdXQgPSBuY29sKGhlYXRtYXAuaW5wdXQudGFibGUpKQogICAgaGVhdG1hcCAgICAgICA8LSBoZWF0bWFwLjIoaGVhdG1hcC5pbnB1dC50YWJsZSwgbWFyZ2luID0gYygxNSw1KSwgY29sID0gcHJldHR5Y29sb3JzLCBkZW5kcm9ncmFtID0gJ3JvdycsIHRyYWNlID0gYygibm9uZSIpLCBSb3d2PWFzLmRlbmRyb2dyYW0oaHIpLCBDb2x2ID0gTkEsIGxhYlJvdyA9IEZBTFNFLCBrZXkgPSBUUlVFLCBicmVha3MgPSBjb2wuYnJlYWtzLCBrZXkueWxhYiA9ICJHZW5lIENvdW50Iiwga2V5LnhsYWIgPSAibG9nMkZvbGRDaGFuZ2UiLCBjZXhDb2wgPSAxLjUsIFJvd1NpZGVDb2xvcnMgPSBteWNvbHIpCiAgICB0aXRsZShtYWluID0gcGFzdGUwKCJDbHVzdGVyaW5nIG9mICIsIG5yb3coaGVhdG1hcC5pbnB1dC50YWJsZSksIiBHZW5lcyIpLCBsaW5lID0gMCkKICAgIHBhcihjZXgubWFpbj0wLjkpCn0KCgppZihuY29sKGhlYXRtYXAuaW5wdXQudGFibGUpID4gMikgewogICAgayA8LSBpZmVsc2UobmNvbChoZWF0bWFwLmlucHV0LnRhYmxlIDwgNSksIDMsIDUpCiAgICBteWNsYyAgPC0gY3V0cmVlKGhjLCBrID0gaykgIyBjcmVhdGUgZ3JvdXBpbmdzIGZvciB0aGUgY29sdW1uIGRlbmRyb2dyYW0KICAgIG15Y29sYyA8LSBjKCJHcmVlbiIsICJSZWQiLCAiQmx1ZSIsICJPcmFuZ2UiLCAiUHVycGxlIikKICAgIG15Y29sYyA8LSBteWNvbGNbYXMudmVjdG9yKG15Y2xjKV0KICAgICMjIE1ha2UgYSBoZWF0bWFwIG9mIHRoZSBsb2dmb2xkIGNoYW5nZXMgd2l0aCBjb2x1bW4gZGVuZHJvZ3JhbS4KICAgIGhlYXRtYXAgICAgICAgPC0gaGVhdG1hcC4yKGhlYXRtYXAuaW5wdXQudGFibGUsIG1hcmdpbiA9IGMoMTUsNSksIGRlbmRyb2dyYW0gPSAnYm90aCcsIFJvd3YgPSBhcy5kZW5kcm9ncmFtKGhyKSwgQ29sdiA9IGFzLmRlbmRyb2dyYW0oaGMpLCBjb2wgPSBwcmV0dHljb2xvcnMsIHRyYWNlID0gYygibm9uZSIpLCBsYWJSb3cgPSBGQUxTRSwga2V5ID0gVFJVRSwgYnJlYWtzID0gY29sLmJyZWFrcywgbWFpbiA9IHBhc3RlMCgiQ2x1c3RlcmluZyBvZiBUaW1lcG9pbnRzIG9uICIsIG5yb3coaGVhdG1hcC5pbnB1dC50YWJsZSksIiBHZW5lcyIpLCBrZXkueWxhYiA9ICJHZW5lIENvdW50Iiwga2V5LnhsYWIgPSAibG9nMkZvbGRDaGFuZ2UiLCBjZXhDb2wgPSAxLjUsIFJvd1NpZGVDb2xvcnMgPSBteWNvbHIsIENvbFNpZGVDb2xvcnMgPSBteWNvbGMpCn0KCmBgYAoKCgpgYGB7ciBzZXNzaW9uU3RlcHdpc2UsIGVjaG89RkFMU0V9CndyaXRlTGluZXMoY2FwdHVyZS5vdXRwdXQoc2Vzc2lvbkluZm8oKSksICJzZXNzaW9uSW5mby9hbmFseXNpc1N0ZXB3aXNlU2Vzc2lvbkluZm8udHh0IikKYGBgCgojW1Itc2Vzc2lvbiBpbmZvcm1hdGlvbl0oc2Vzc2lvbkluZm8vYW5hbHlzaXNTdGVwd2lzZVNlc3Npb25JbmZvLnR4dCkKCg==

Privacy Policy

Terms of Use