import java.util.*;
import java.lang.*;
import java.io.*;
class SocialMedia {
/* All Social Media Sites
* -------------------------------------------------
*/
/* All Social Media Sites ~ Nice Names
* -------------------------------------------------
*/
public Map
<String, String
> GetSocialMediaSites_NiceNames
() { Map
<String, String
> socialmediasites
= new HashMap
<String, String
>(){{ put("add.this", "AddThis");
put("blogger", "Blogger");
put("buffer", "Buffer");
put("diaspora", "Diaspora");
put("digg", "Digg");
put("douban", "Douban");
put("email", "EMail");
put("evernote", "EverNote");
put("getpocket", "Pocket");
put("facebook", "FaceBook");
put("flattr", "Flattr");
put("flipboard", "FlipBoard");
put("google.bookmarks", "GoogleBookmarks");
put("instapaper", "InstaPaper");
put("line.me", "Line.me");
put("linkedin", "LinkedIn");
put("livejournal", "LiveJournal");
put("gmail", "GMail");
put("hacker.news", "HackerNews");
put("ok.ru", "OK.ru");
put("pinterest.com", "Pinterest");
put("google.plus", "GooglePlus");
put("qzone", "QZone");
put("reddit", "Reddit");
put("renren", "RenRen");
put("skype", "Skype");
put("sms", "SMS");
put("stumbleupon", "StumbleUpon");
put("surfingbird.ru", "SurfingBird.ru");
put("telegram.me", "Telegram.me");
put("threema", "Threema");
put("tumblr", "Tumblr");
put("twitter", "Twitter");
put("vk", "VK");
put("weibo", "Weibo");
put("xing", "Xing");
put("yahoo", "Yahoo");
}};
return socialmediasites;
}
/* Social Media Sites With Share Links
* -------------------------------------------------
*/
public String[] GetSocialMediaSites_WithShareLinks_OrderedByPopularity
() { "google.plus",
"google.bookmarks",
"facebook",
"reddit",
"twitter",
"linkedin",
"tumblr",
"pinterest",
"blogger",
"livejournal",
"evernote",
"add.this",
"getpocket",
"hacker.news",
"stumbleupon",
"digg",
"buffer",
"flipboard",
"instapaper",
"surfingbird.ru",
"flattr",
"diaspora",
"qzone",
"vk",
"weibo",
"ok.ru",
"douban",
"xing",
"renren",
"threema",
"sms",
"line.me",
"skype",
"telegram.me",
"email",
"gmail",
"yahoo",
};
}
public String[] GetSocialMediaSites_WithShareLinks_OrderedByAlphabet
() { Map
<String, String
> socialmediaurls
= GetSocialMediaSites_NiceNames
(); String[] socialmediasites
= new String[socialmediaurls.
size()];
int index = 0;
for(Map.
Entry<String, String
> entry
: socialmediaurls.
entrySet()) { socialmediasites[index++] = key;
}
Arrays.
sort(socialmediasites
);
return socialmediasites;
}
/* Social Media Site Links With Share Links
* -------------------------------------------------
*/
public Map
<String, String
> GetSocialMediaSiteLinks_WithShareLinks
(Map
<String, String
> args
) { "url",
"title",
"image",
"desc",
"appid",
"redirecturl",
"via",
"hashtags",
"provider",
"language",
"userid",
"category",
"phonenumber",
"emailaddress",
"cemailaddress",
"bccemailaddress",
};
for (String validarg
: validargs
) { if(args.get(validarg) == null) {
args.put(validarg, "");
}
}
String text
= args.
get("title"); String desc
= args.
get("desc");
if(desc != null) {
text += "%20%3A%20";
text += desc;
}
args.put("text", text);
Map
<String, String
> socialmediasites
= new HashMap
<String, String
>(){{ put("add.this", "http://w...content-available-to-author-only...s.com/bookmark.php?url=" + args.get("url"));
put("blogger", "https://w...content-available-to-author-only...r.com/blog-this.g?u=" + args.get("url") + "&n=" + args.get("title") + "&t=" + args.get("desc"));
put("buffer", "https://b...content-available-to-author-only...r.com/add?text=" + args.get("text") + "&url=" + args.get("url"));
put("diaspora", "https://s...content-available-to-author-only...n.org/?title=" + args.get("title") + "&url=" + args.get("url"));
put("digg", "http://d...content-available-to-author-only...g.com/submit?url=" + args.get("url") + "&title=" + args.get("text"));
put("douban", "http://w...content-available-to-author-only...n.com/recommend/?url=" + args.get("url") + "&title=" + args.get("text"));
put("email", "mailto:" + args.get("email_address") + "?subject=" + args.get("title") + "&body=" + args.get("desc"));
put("evernote", "http://w...content-available-to-author-only...e.com/clip.action?url=" + args.get("url") + "&title=" + args.get("text"));
put("getpocket", "https://g...content-available-to-author-only...t.com/edit?url=" + args.get("url"));
put("facebook", "http://w...content-available-to-author-only...k.com/sharer.php?u=" + args.get("url"));
put("flattr", "https://f...content-available-to-author-only...r.com/submit/auto?user_id=" + args.get("user_id") + "&url=" + args.get("url") + "&title=" + args.get("title") + "&description=" + args.get("text") + "&language=" + args.get("language") + "&tags=" + args.get("hash_tags") + "&hidden=HIDDEN&category=" + args.get("category"));
put("flipboard", "https://s...content-available-to-author-only...d.com/bookmarklet/popout?v=2&title=" + args.get("text") + "&url=" + args.get("url"));
put("gmail", "https://mail.google.com/mail/?view=cm&to=" + args.get("email_address") + "&su=" + args.get("title") + "&body=" + args.get("url") + "&bcc=" + args.get("bcc_email_address") + "&cc=" + args.get("cc_email_address"));
put("google.bookmarks", "https://www.google.com/bookmarks/mark?op=edit&bkmk=" + args.get("url") + "&title=" + args.get("title") + "&annotation=" + args.get("text") + "&labels=" + args.get("hash_tags"));
put("instapaper", "http://w...content-available-to-author-only...r.com/edit?url=" + args.get("url") + "&title=" + args.get("title") + "&description=" + args.get("desc"));
put("line.me", "https://l...content-available-to-author-only...e.me/share/ui?url=" + args.get("url") + "&text=" + args.get("text"));
put("linkedin", "https://w...content-available-to-author-only...n.com/shareArticle?mini=true&url=" + args.get("url") + "&title=" + args.get("title") + "&summary=" + args.get("text") + "&source=" + args.get("provider"));
put("livejournal", "http://w...content-available-to-author-only...l.com/update.bml?subject=" + args.get("text") + "&event=" + args.get("url"));
put("hacker.news", "https://n...content-available-to-author-only...r.com/submitlink?u=" + args.get("url") + "&t=" + args.get("title"));
put("ok.ru", "https://c...content-available-to-author-only...k.ru/dk?st.cmd=WidgetSharePreview&st.shareUrl=" + args.get("url"));
put("pinterest", "http://p...content-available-to-author-only...t.com/pin/create/button/?url=" + args.get("url"));
put("google.plus", "https://plus.google.com/share?url=" + args.get("url") + "&text=" + args.get("text") + "&hl=" + args.get("language"));
put("qzone", "http://s...content-available-to-author-only...q.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=" + args.get("url"));
put("reddit", "https://r...content-available-to-author-only...t.com/submit?url=" + args.get("url") + "&title=" + args.get("title"));
put("renren", "http://w...content-available-to-author-only...n.com/dialog/share?resourceUrl=" + args.get("url") + "&srcUrl=" + args.get("url") + "&title=" + args.get("text") + "&description=" + args.get("desc"));
put("skype", "https://w...content-available-to-author-only...e.com/share?url=" + args.get("url") + "&text=" + args.get("text"));
put("sms", "sms:" + args.get("phone_number") + "?body=" + args.get("text"));
put("stumbleupon", "http://w...content-available-to-author-only...n.com/submit?url=" + args.get("url") + "&title=" + args.get("text"));
put("surfingbird.ru", "http://s...content-available-to-author-only...d.ru/share?url=" + args.get("url") + "&description=" + args.get("desc") + "&screenshot=" + args.get("image") + "&title=" + args.get("title"));
put("telegram.me", "https://content-available-to-author-only.me/share/url?url=" + args.get("url") + "&text=" + args.get("text") + "&to=" + args.get("phone_number"));
put("threema", "threema://compose?text=" + args.get("text") + "&id=" + args.get("user_id"));
put("tumblr", "https://w...content-available-to-author-only...r.com/widgets/share/tool?canonicalUrl=" + args.get("url") + "&title=" + args.get("title") + "&caption=" + args.get("desc") + "&tags=" + args.get("hash_tags"));
put("twitter", "https://t...content-available-to-author-only...r.com/intent/tweet?url=" + args.get("url") + "&text=" + args.get("text") + "&via=" + args.get("via") + "&hashtags=" + args.get("hash_tags"));
put("vk", "http://content-available-to-author-only.com/share.php?url=" + args.get("url") + "&title=" + args.get("title") + "&comment=" + args.get("desc"));
put("weibo", "http://s...content-available-to-author-only...o.com/share/share.php?url=" + args.get("url") + "&appkey=&title=" + args.get("title") + "&pic=&ralateUid=");
put("xing", "https://w...content-available-to-author-only...g.com/app/user?op=share&url=" + args.get("url"));
put("yahoo", "http://c...content-available-to-author-only...o.com/?to=" + args.get("email_address") + "&subject=" + args.get("title") + "&body=" + args.get("text"));
}};
return socialmediasites;
}
}
class main {
public static void main
(String[] args
) { SocialMedia sm = new SocialMedia();
Map
<String, String
> socialmediaargs
= new HashMap
<String, String
>(){{ put("url", "http://w...content-available-to-author-only...t.com/");
put("title", "EarthFluent");
}};
Map
<String, String
> socialmediasites
= sm.
GetSocialMediaSiteLinks_WithShareLinks(socialmediaargs
);
//System.out.println(sm.GetSocialMediaSites_NiceNames().toString());
//for (String socialmedia : sm.GetSocialMediaSites_WithShareLinks_OrderedByAlphabet()) {
for (String socialmedia
: sm.
GetSocialMediaSites_WithShareLinks_OrderedByPopularity()) { System.
out.
println(socialmedia
+ " : " + socialmediasites.
get(socialmedia
)); }
//System.out.println(sm.GetSocialMediaSites_WithShareLinks_OrderedByPopularity());
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBTb2NpYWxNZWRpYSB7CgkJCQkJLyogQWxsIFNvY2lhbCBNZWRpYSBTaXRlcwoJCQkJCSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkJCSovCgkJCgkJCQkvKiBBbGwgU29jaWFsIE1lZGlhIFNpdGVzIH4gTmljZSBOYW1lcwoJCQkJKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCQkqLwoJCQkJCglwdWJsaWMgTWFwPFN0cmluZywgU3RyaW5nPiBHZXRTb2NpYWxNZWRpYVNpdGVzX05pY2VOYW1lcygpIHsKCQlNYXA8U3RyaW5nLCBTdHJpbmc+IHNvY2lhbG1lZGlhc2l0ZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKXt7CgkJCXB1dCgiYWRkLnRoaXMiLCAiQWRkVGhpcyIpOwoJCQlwdXQoImJsb2dnZXIiLCAiQmxvZ2dlciIpOwoJCQlwdXQoImJ1ZmZlciIsICJCdWZmZXIiKTsKCQkJcHV0KCJkaWFzcG9yYSIsICJEaWFzcG9yYSIpOwoJCQlwdXQoImRpZ2ciLCAiRGlnZyIpOwoJCQlwdXQoImRvdWJhbiIsICJEb3ViYW4iKTsKCQkJcHV0KCJlbWFpbCIsICJFTWFpbCIpOwoJCQlwdXQoImV2ZXJub3RlIiwgIkV2ZXJOb3RlIik7CgkJCXB1dCgiZ2V0cG9ja2V0IiwgIlBvY2tldCIpOwoJCQlwdXQoImZhY2Vib29rIiwgIkZhY2VCb29rIik7CgkJCXB1dCgiZmxhdHRyIiwgIkZsYXR0ciIpOwoJCQlwdXQoImZsaXBib2FyZCIsICJGbGlwQm9hcmQiKTsKCQkJcHV0KCJnb29nbGUuYm9va21hcmtzIiwgIkdvb2dsZUJvb2ttYXJrcyIpOwoJCQlwdXQoImluc3RhcGFwZXIiLCAiSW5zdGFQYXBlciIpOwoJCQlwdXQoImxpbmUubWUiLCAiTGluZS5tZSIpOwoJCQlwdXQoImxpbmtlZGluIiwgIkxpbmtlZEluIik7CgkJCXB1dCgibGl2ZWpvdXJuYWwiLCAiTGl2ZUpvdXJuYWwiKTsKCQkJcHV0KCJnbWFpbCIsICJHTWFpbCIpOwoJCQlwdXQoImhhY2tlci5uZXdzIiwgIkhhY2tlck5ld3MiKTsKCQkJcHV0KCJvay5ydSIsICJPSy5ydSIpOwoJCQlwdXQoInBpbnRlcmVzdC5jb20iLCAiUGludGVyZXN0Iik7CgkJCXB1dCgiZ29vZ2xlLnBsdXMiLCAiR29vZ2xlUGx1cyIpOwoJCQlwdXQoInF6b25lIiwgIlFab25lIik7CgkJCXB1dCgicmVkZGl0IiwgIlJlZGRpdCIpOwoJCQlwdXQoInJlbnJlbiIsICJSZW5SZW4iKTsKCQkJcHV0KCJza3lwZSIsICJTa3lwZSIpOwoJCQlwdXQoInNtcyIsICJTTVMiKTsKCQkJcHV0KCJzdHVtYmxldXBvbiIsICJTdHVtYmxlVXBvbiIpOwoJCQlwdXQoInN1cmZpbmdiaXJkLnJ1IiwgIlN1cmZpbmdCaXJkLnJ1Iik7CgkJCXB1dCgidGVsZWdyYW0ubWUiLCAiVGVsZWdyYW0ubWUiKTsKCQkJcHV0KCJ0aHJlZW1hIiwgIlRocmVlbWEiKTsKCQkJcHV0KCJ0dW1ibHIiLCAiVHVtYmxyIik7CgkJCXB1dCgidHdpdHRlciIsICJUd2l0dGVyIik7CgkJCXB1dCgidmsiLCAiVksiKTsKCQkJcHV0KCJ3ZWlibyIsICJXZWlibyIpOwoJCQlwdXQoInhpbmciLCAiWGluZyIpOwoJCQlwdXQoInlhaG9vIiwgIllhaG9vIik7CgkJfX07CgkJCgkJcmV0dXJuIHNvY2lhbG1lZGlhc2l0ZXM7Cgl9CgkJCgkJCQkvKiBTb2NpYWwgTWVkaWEgU2l0ZXMgV2l0aCBTaGFyZSBMaW5rcwoJCQkJKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCQkqLwoKCXB1YmxpYyBTdHJpbmdbXSBHZXRTb2NpYWxNZWRpYVNpdGVzX1dpdGhTaGFyZUxpbmtzX09yZGVyZWRCeVBvcHVsYXJpdHkoKSB7CgkJcmV0dXJuIG5ldyBTdHJpbmdbXXsKCQkJImdvb2dsZS5wbHVzIiwKCQkJImdvb2dsZS5ib29rbWFya3MiLAoJCQkiZmFjZWJvb2siLAoJCQkicmVkZGl0IiwKCQkJInR3aXR0ZXIiLAoJCQkibGlua2VkaW4iLAoJCQkidHVtYmxyIiwKCQkJInBpbnRlcmVzdCIsCgkJCSJibG9nZ2VyIiwKCQkJImxpdmVqb3VybmFsIiwKCQkJImV2ZXJub3RlIiwKCQkJImFkZC50aGlzIiwKCQkJImdldHBvY2tldCIsCgkJCSJoYWNrZXIubmV3cyIsCgkJCSJzdHVtYmxldXBvbiIsCgkJCSJkaWdnIiwKCQkJImJ1ZmZlciIsCgkJCSJmbGlwYm9hcmQiLAoJCQkiaW5zdGFwYXBlciIsCgkJCSJzdXJmaW5nYmlyZC5ydSIsCgkJCSJmbGF0dHIiLAoJCQkiZGlhc3BvcmEiLAoJCQkicXpvbmUiLAoJCQkidmsiLAoJCQkid2VpYm8iLAoJCQkib2sucnUiLAoJCQkiZG91YmFuIiwKCQkJInhpbmciLAoJCQkicmVucmVuIiwKCQkJInRocmVlbWEiLAoJCQkic21zIiwKCQkJImxpbmUubWUiLAoJCQkic2t5cGUiLAoJCQkidGVsZWdyYW0ubWUiLAoJCQkiZW1haWwiLAoJCQkiZ21haWwiLAoJCQkieWFob28iLAoJCX07Cgl9CgkKCXB1YmxpYyBTdHJpbmdbXSBHZXRTb2NpYWxNZWRpYVNpdGVzX1dpdGhTaGFyZUxpbmtzX09yZGVyZWRCeUFscGhhYmV0KCkgewoJCU1hcDxTdHJpbmcsIFN0cmluZz4gc29jaWFsbWVkaWF1cmxzID0gR2V0U29jaWFsTWVkaWFTaXRlc19OaWNlTmFtZXMoKTsKCQlTdHJpbmdbXSBzb2NpYWxtZWRpYXNpdGVzID0gbmV3IFN0cmluZ1tzb2NpYWxtZWRpYXVybHMuc2l6ZSgpXTsKCQkKCQlpbnQgaW5kZXggPSAwOwoJCQoJCWZvcihNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+IGVudHJ5IDogc29jaWFsbWVkaWF1cmxzLmVudHJ5U2V0KCkpIHsKCQkJU3RyaW5nIGtleSA9IGVudHJ5LmdldEtleSgpOwoJCQlzb2NpYWxtZWRpYXNpdGVzW2luZGV4KytdID0ga2V5OwoJCX0KCgkJQXJyYXlzLnNvcnQoc29jaWFsbWVkaWFzaXRlcyk7CgkJCgkJcmV0dXJuIHNvY2lhbG1lZGlhc2l0ZXM7Cgl9CgkKCQkJCS8qIFNvY2lhbCBNZWRpYSBTaXRlIExpbmtzIFdpdGggU2hhcmUgTGlua3MKCQkJCSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkJKi8KCQoJcHVibGljIE1hcDxTdHJpbmcsIFN0cmluZz4gR2V0U29jaWFsTWVkaWFTaXRlTGlua3NfV2l0aFNoYXJlTGlua3MoTWFwPFN0cmluZywgU3RyaW5nPiBhcmdzKSB7CgkJU3RyaW5nW10gdmFsaWRhcmdzID0gewoJCQkidXJsIiwKCQkJInRpdGxlIiwKCQkJImltYWdlIiwKCQkJImRlc2MiLAoJCQkiYXBwaWQiLAoJCQkicmVkaXJlY3R1cmwiLAoJCQkidmlhIiwKCQkJImhhc2h0YWdzIiwKCQkJInByb3ZpZGVyIiwKCQkJImxhbmd1YWdlIiwKCQkJInVzZXJpZCIsCgkJCSJjYXRlZ29yeSIsCgkJCSJwaG9uZW51bWJlciIsCgkJCSJlbWFpbGFkZHJlc3MiLAoJCQkiY2VtYWlsYWRkcmVzcyIsCgkJCSJiY2NlbWFpbGFkZHJlc3MiLAoJCX07CgkJCgkJZm9yIChTdHJpbmcgdmFsaWRhcmcgOiB2YWxpZGFyZ3MpIHsKCQkJaWYoYXJncy5nZXQodmFsaWRhcmcpID09IG51bGwpIHsKCQkJCWFyZ3MucHV0KHZhbGlkYXJnLCAiIik7CgkJCX0KCQl9CgoJCVN0cmluZyB0ZXh0ID0gYXJncy5nZXQoInRpdGxlIik7CgkJU3RyaW5nIGRlc2MgPSBhcmdzLmdldCgiZGVzYyIpOwoKCQlpZihkZXNjICE9IG51bGwpIHsKCQkJdGV4dCArPSAiJTIwJTNBJTIwIjsKCQkJdGV4dCArPSBkZXNjOwoJCX0KCgkJYXJncy5wdXQoInRleHQiLCB0ZXh0KTsKCQkKCQlNYXA8U3RyaW5nLCBTdHJpbmc+IHNvY2lhbG1lZGlhc2l0ZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKXt7CgkJCXB1dCgiYWRkLnRoaXMiLCAiaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnMuY29tL2Jvb2ttYXJrLnBocD91cmw9IiArIGFyZ3MuZ2V0KCJ1cmwiKSk7CgkJCXB1dCgiYmxvZ2dlciIsICJodHRwczovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnIuY29tL2Jsb2ctdGhpcy5nP3U9IiArIGFyZ3MuZ2V0KCJ1cmwiKSArICImbj0iICsgYXJncy5nZXQoInRpdGxlIikgKyAiJnQ9IiArIGFyZ3MuZ2V0KCJkZXNjIikpOwoJCQlwdXQoImJ1ZmZlciIsICJodHRwczovL2IuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnIuY29tL2FkZD90ZXh0PSIgKyBhcmdzLmdldCgidGV4dCIpICsgIiZ1cmw9IiArIGFyZ3MuZ2V0KCJ1cmwiKSk7CgkJCXB1dCgiZGlhc3BvcmEiLCAiaHR0cHM6Ly9zLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5uLm9yZy8/dGl0bGU9IiArIGFyZ3MuZ2V0KCJ0aXRsZSIpICsgIiZ1cmw9IiArIGFyZ3MuZ2V0KCJ1cmwiKSk7CgkJCXB1dCgiZGlnZyIsICJodHRwOi8vZC4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uZy5jb20vc3VibWl0P3VybD0iICsgYXJncy5nZXQoInVybCIpICsgIiZ0aXRsZT0iICsgYXJncy5nZXQoInRleHQiKSk7CgkJCXB1dCgiZG91YmFuIiwgImh0dHA6Ly93Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5uLmNvbS9yZWNvbW1lbmQvP3VybD0iICsgYXJncy5nZXQoInVybCIpICsgIiZ0aXRsZT0iICsgYXJncy5nZXQoInRleHQiKSk7CgkJCXB1dCgiZW1haWwiLCAibWFpbHRvOiIgKyBhcmdzLmdldCgiZW1haWxfYWRkcmVzcyIpICsgIj9zdWJqZWN0PSIgKyBhcmdzLmdldCgidGl0bGUiKSArICImYm9keT0iICsgYXJncy5nZXQoImRlc2MiKSk7CgkJCXB1dCgiZXZlcm5vdGUiLCAiaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmUuY29tL2NsaXAuYWN0aW9uP3VybD0iICsgYXJncy5nZXQoInVybCIpICsgIiZ0aXRsZT0iICsgYXJncy5nZXQoInRleHQiKSk7CgkJCXB1dCgiZ2V0cG9ja2V0IiwgImh0dHBzOi8vZy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4udC5jb20vZWRpdD91cmw9IiArIGFyZ3MuZ2V0KCJ1cmwiKSk7CgkJCXB1dCgiZmFjZWJvb2siLCAiaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmsuY29tL3NoYXJlci5waHA/dT0iICsgYXJncy5nZXQoInVybCIpKTsKCQkJcHV0KCJmbGF0dHIiLCAiaHR0cHM6Ly9mLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5yLmNvbS9zdWJtaXQvYXV0bz91c2VyX2lkPSIgKyBhcmdzLmdldCgidXNlcl9pZCIpICsgIiZ1cmw9IiArIGFyZ3MuZ2V0KCJ1cmwiKSArICImdGl0bGU9IiArIGFyZ3MuZ2V0KCJ0aXRsZSIpICsgIiZkZXNjcmlwdGlvbj0iICsgYXJncy5nZXQoInRleHQiKSArICImbGFuZ3VhZ2U9IiArIGFyZ3MuZ2V0KCJsYW5ndWFnZSIpICsgIiZ0YWdzPSIgKyBhcmdzLmdldCgiaGFzaF90YWdzIikgKyAiJmhpZGRlbj1ISURERU4mY2F0ZWdvcnk9IiArIGFyZ3MuZ2V0KCJjYXRlZ29yeSIpKTsKCQkJcHV0KCJmbGlwYm9hcmQiLCAiaHR0cHM6Ly9zLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5kLmNvbS9ib29rbWFya2xldC9wb3BvdXQ/dj0yJnRpdGxlPSIgKyBhcmdzLmdldCgidGV4dCIpICsgIiZ1cmw9IiArIGFyZ3MuZ2V0KCJ1cmwiKSk7CgkJCXB1dCgiZ21haWwiLCAiaHR0cHM6Ly9tYWlsLmdvb2dsZS5jb20vbWFpbC8/dmlldz1jbSZ0bz0iICsgYXJncy5nZXQoImVtYWlsX2FkZHJlc3MiKSArICImc3U9IiArIGFyZ3MuZ2V0KCJ0aXRsZSIpICsgIiZib2R5PSIgKyBhcmdzLmdldCgidXJsIikgKyAiJmJjYz0iICsgYXJncy5nZXQoImJjY19lbWFpbF9hZGRyZXNzIikgKyAiJmNjPSIgKyBhcmdzLmdldCgiY2NfZW1haWxfYWRkcmVzcyIpKTsKCQkJcHV0KCJnb29nbGUuYm9va21hcmtzIiwgImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vYm9va21hcmtzL21hcms/b3A9ZWRpdCZia21rPSIgKyBhcmdzLmdldCgidXJsIikgKyAiJnRpdGxlPSIgKyBhcmdzLmdldCgidGl0bGUiKSArICImYW5ub3RhdGlvbj0iICsgYXJncy5nZXQoInRleHQiKSArICImbGFiZWxzPSIgKyBhcmdzLmdldCgiaGFzaF90YWdzIikpOwoJCQlwdXQoImluc3RhcGFwZXIiLCAiaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnIuY29tL2VkaXQ/dXJsPSIgKyBhcmdzLmdldCgidXJsIikgKyAiJnRpdGxlPSIgKyBhcmdzLmdldCgidGl0bGUiKSArICImZGVzY3JpcHRpb249IiArIGFyZ3MuZ2V0KCJkZXNjIikpOwoJCQlwdXQoImxpbmUubWUiLCAiaHR0cHM6Ly9sLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5lLm1lL3NoYXJlL3VpP3VybD0iICsgYXJncy5nZXQoInVybCIpICsgIiZ0ZXh0PSIgKyBhcmdzLmdldCgidGV4dCIpKTsKCQkJcHV0KCJsaW5rZWRpbiIsICJodHRwczovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLm4uY29tL3NoYXJlQXJ0aWNsZT9taW5pPXRydWUmdXJsPSIgKyBhcmdzLmdldCgidXJsIikgKyAiJnRpdGxlPSIgKyBhcmdzLmdldCgidGl0bGUiKSArICImc3VtbWFyeT0iICsgYXJncy5nZXQoInRleHQiKSArICImc291cmNlPSIgKyBhcmdzLmdldCgicHJvdmlkZXIiKSk7CgkJCXB1dCgibGl2ZWpvdXJuYWwiLCAiaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmwuY29tL3VwZGF0ZS5ibWw/c3ViamVjdD0iICsgYXJncy5nZXQoInRleHQiKSArICImZXZlbnQ9IiArIGFyZ3MuZ2V0KCJ1cmwiKSk7CgkJCXB1dCgiaGFja2VyLm5ld3MiLCAiaHR0cHM6Ly9uLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5yLmNvbS9zdWJtaXRsaW5rP3U9IiArIGFyZ3MuZ2V0KCJ1cmwiKSArICImdD0iICsgYXJncy5nZXQoInRpdGxlIikpOwoJCQlwdXQoIm9rLnJ1IiwgImh0dHBzOi8vYy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uay5ydS9kaz9zdC5jbWQ9V2lkZ2V0U2hhcmVQcmV2aWV3JnN0LnNoYXJlVXJsPSIgKyBhcmdzLmdldCgidXJsIikpOwoJCQlwdXQoInBpbnRlcmVzdCIsICJodHRwOi8vcC4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4udC5jb20vcGluL2NyZWF0ZS9idXR0b24vP3VybD0iICsgYXJncy5nZXQoInVybCIpKTsKCQkJcHV0KCJnb29nbGUucGx1cyIsICJodHRwczovL3BsdXMuZ29vZ2xlLmNvbS9zaGFyZT91cmw9IiArIGFyZ3MuZ2V0KCJ1cmwiKSArICImdGV4dD0iICsgYXJncy5nZXQoInRleHQiKSArICImaGw9IiArIGFyZ3MuZ2V0KCJsYW5ndWFnZSIpKTsKCQkJcHV0KCJxem9uZSIsICJodHRwOi8vcy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4ucS5jb20vY2dpLWJpbi9xenNoYXJlL2NnaV9xenNoYXJlX29uZWtleT91cmw9IiArIGFyZ3MuZ2V0KCJ1cmwiKSk7CgkJCXB1dCgicmVkZGl0IiwgImh0dHBzOi8vci4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4udC5jb20vc3VibWl0P3VybD0iICsgYXJncy5nZXQoInVybCIpICsgIiZ0aXRsZT0iICsgYXJncy5nZXQoInRpdGxlIikpOwoJCQlwdXQoInJlbnJlbiIsICJodHRwOi8vdy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4ubi5jb20vZGlhbG9nL3NoYXJlP3Jlc291cmNlVXJsPSIgKyBhcmdzLmdldCgidXJsIikgKyAiJnNyY1VybD0iICsgYXJncy5nZXQoInVybCIpICsgIiZ0aXRsZT0iICsgYXJncy5nZXQoInRleHQiKSArICImZGVzY3JpcHRpb249IiArIGFyZ3MuZ2V0KCJkZXNjIikpOwoJCQlwdXQoInNreXBlIiwgImh0dHBzOi8vdy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uZS5jb20vc2hhcmU/dXJsPSIgKyBhcmdzLmdldCgidXJsIikgKyAiJnRleHQ9IiArIGFyZ3MuZ2V0KCJ0ZXh0IikpOwoJCQlwdXQoInNtcyIsICJzbXM6IiArIGFyZ3MuZ2V0KCJwaG9uZV9udW1iZXIiKSArICI/Ym9keT0iICsgYXJncy5nZXQoInRleHQiKSk7CgkJCXB1dCgic3R1bWJsZXVwb24iLCAiaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLm4uY29tL3N1Ym1pdD91cmw9IiArIGFyZ3MuZ2V0KCJ1cmwiKSArICImdGl0bGU9IiArIGFyZ3MuZ2V0KCJ0ZXh0IikpOwoJCQlwdXQoInN1cmZpbmdiaXJkLnJ1IiwgImh0dHA6Ly9zLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5kLnJ1L3NoYXJlP3VybD0iICsgYXJncy5nZXQoInVybCIpICsgIiZkZXNjcmlwdGlvbj0iICsgYXJncy5nZXQoImRlc2MiKSArICImc2NyZWVuc2hvdD0iICsgYXJncy5nZXQoImltYWdlIikgKyAiJnRpdGxlPSIgKyBhcmdzLmdldCgidGl0bGUiKSk7CgkJCXB1dCgidGVsZWdyYW0ubWUiLCAiaHR0cHM6Ly9jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS5tZS9zaGFyZS91cmw/dXJsPSIgKyBhcmdzLmdldCgidXJsIikgKyAiJnRleHQ9IiArIGFyZ3MuZ2V0KCJ0ZXh0IikgKyAiJnRvPSIgKyBhcmdzLmdldCgicGhvbmVfbnVtYmVyIikpOwoJCQlwdXQoInRocmVlbWEiLCAidGhyZWVtYTovL2NvbXBvc2U/dGV4dD0iICsgYXJncy5nZXQoInRleHQiKSArICImaWQ9IiArIGFyZ3MuZ2V0KCJ1c2VyX2lkIikpOwoJCQlwdXQoInR1bWJsciIsICJodHRwczovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnIuY29tL3dpZGdldHMvc2hhcmUvdG9vbD9jYW5vbmljYWxVcmw9IiArIGFyZ3MuZ2V0KCJ1cmwiKSArICImdGl0bGU9IiArIGFyZ3MuZ2V0KCJ0aXRsZSIpICsgIiZjYXB0aW9uPSIgKyBhcmdzLmdldCgiZGVzYyIpICsgIiZ0YWdzPSIgKyBhcmdzLmdldCgiaGFzaF90YWdzIikpOwoJCQlwdXQoInR3aXR0ZXIiLCAiaHR0cHM6Ly90Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5yLmNvbS9pbnRlbnQvdHdlZXQ/dXJsPSIgKyBhcmdzLmdldCgidXJsIikgKyAiJnRleHQ9IiArIGFyZ3MuZ2V0KCJ0ZXh0IikgKyAiJnZpYT0iICsgYXJncy5nZXQoInZpYSIpICsgIiZoYXNodGFncz0iICsgYXJncy5nZXQoImhhc2hfdGFncyIpKTsKCQkJcHV0KCJ2ayIsICJodHRwOi8vY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuY29tL3NoYXJlLnBocD91cmw9IiArIGFyZ3MuZ2V0KCJ1cmwiKSArICImdGl0bGU9IiArIGFyZ3MuZ2V0KCJ0aXRsZSIpICsgIiZjb21tZW50PSIgKyBhcmdzLmdldCgiZGVzYyIpKTsKCQkJcHV0KCJ3ZWlibyIsICJodHRwOi8vcy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uby5jb20vc2hhcmUvc2hhcmUucGhwP3VybD0iICsgYXJncy5nZXQoInVybCIpICsgIiZhcHBrZXk9JnRpdGxlPSIgKyBhcmdzLmdldCgidGl0bGUiKSArICImcGljPSZyYWxhdGVVaWQ9Iik7CgkJCXB1dCgieGluZyIsICJodHRwczovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmcuY29tL2FwcC91c2VyP29wPXNoYXJlJnVybD0iICsgYXJncy5nZXQoInVybCIpKTsKCQkJcHV0KCJ5YWhvbyIsICJodHRwOi8vYy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uby5jb20vP3RvPSIgKyBhcmdzLmdldCgiZW1haWxfYWRkcmVzcyIpICsgIiZzdWJqZWN0PSIgKyBhcmdzLmdldCgidGl0bGUiKSArICImYm9keT0iICsgYXJncy5nZXQoInRleHQiKSk7CgkJfX07CgkJCgkJcmV0dXJuIHNvY2lhbG1lZGlhc2l0ZXM7Cgl9Cn0KCmNsYXNzIG1haW4gewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKCQlTb2NpYWxNZWRpYSBzbSA9IG5ldyBTb2NpYWxNZWRpYSgpOwoJCU1hcDxTdHJpbmcsIFN0cmluZz4gc29jaWFsbWVkaWFhcmdzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCl7ewoJCQlwdXQoInVybCIsICJodHRwOi8vdy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4udC5jb20vIik7CgkJCXB1dCgidGl0bGUiLCAiRWFydGhGbHVlbnQiKTsKCQl9fTsKCQlNYXA8U3RyaW5nLCBTdHJpbmc+IHNvY2lhbG1lZGlhc2l0ZXMgPSBzbS5HZXRTb2NpYWxNZWRpYVNpdGVMaW5rc19XaXRoU2hhcmVMaW5rcyhzb2NpYWxtZWRpYWFyZ3MpOwoJCQoJCS8vU3lzdGVtLm91dC5wcmludGxuKHNtLkdldFNvY2lhbE1lZGlhU2l0ZXNfTmljZU5hbWVzKCkudG9TdHJpbmcoKSk7CgkJCgkJLy9mb3IgKFN0cmluZyBzb2NpYWxtZWRpYSA6IHNtLkdldFNvY2lhbE1lZGlhU2l0ZXNfV2l0aFNoYXJlTGlua3NfT3JkZXJlZEJ5QWxwaGFiZXQoKSkgewoJCWZvciAoU3RyaW5nIHNvY2lhbG1lZGlhIDogc20uR2V0U29jaWFsTWVkaWFTaXRlc19XaXRoU2hhcmVMaW5rc19PcmRlcmVkQnlQb3B1bGFyaXR5KCkpIHsKCQkJU3lzdGVtLm91dC5wcmludGxuKHNvY2lhbG1lZGlhICsgIiA6ICIgKyBzb2NpYWxtZWRpYXNpdGVzLmdldChzb2NpYWxtZWRpYSkpOwoJCX0KCQkvL1N5c3RlbS5vdXQucHJpbnRsbihzbS5HZXRTb2NpYWxNZWRpYVNpdGVzX1dpdGhTaGFyZUxpbmtzX09yZGVyZWRCeVBvcHVsYXJpdHkoKSk7Cgl9Cn0=