├── README.md ├── amazon ├── README.md └── amazonroulette.py ├── shodan ├── README.md └── shodan.go ├── insta ├── README.md └── insta.py ├── mg.json ├── conmebol.css ├── election1.css ├── tlhtml2.html ├── vote.css └── mg2.json /README.md: -------------------------------------------------------------------------------- 1 | # OSINT 2 | 3 | Small scripts for OSINT.
4 | #1. Instagram
5 | #2. Shodan
6 | #3. Amazon S3 7 | -------------------------------------------------------------------------------- /amazon/README.md: -------------------------------------------------------------------------------- 1 | Amazon roulette 2 | 3 | 1. It scans each bucket from provided dictionary for extensions 4 | 2. You can check all files with chosen extension or random one 5 | 3. Follow the instructions in script and it will be working, otherwise it won't 6 | 7 | Dictionary in form:
8 | company1.s3.amazonaws.com
9 | company2.s3.amazonaws.com 10 | 11 | One screen explains all 12 | ![Alt Text](https://i.imgur.com/NDSFZTa.png) 13 | -------------------------------------------------------------------------------- /shodan/README.md: -------------------------------------------------------------------------------- 1 | 2 |

Description:


3 | Search multiple organization with Shodan.
4 | Prepare txt file with organizations names and pass it to script as argument.
5 | 6 | Edit line #140 and change your api key. 7 | 8 | Needed libraries:
9 | ``` 10 | gopkg.in/ns3777k/go-shodan.v1/shodan (Shodan API) 11 | github.com/PuerkitoBio/goquery (gathering organization from Bugcrowd) (optional) 12 | ``` 13 |

Example

14 | Hosts.txt includes:
15 | 16 | Sony
17 | Facebook
18 | Dropbox
19 | 20 | Run ./shodan hosts.txt 21 | 22 |

Output


23 | 24 | As output script makes directory with organization's name and writes response as txt file
25 | ``` 26 | /Sony 27 | ---xxx.xxx.xxx.xxx 28 | ---xxx.xxx.xxx.xxx 29 | /Facebook 30 | ---xxx.xxx.xxx.xxx 31 | ---xxx.xxx.xxx.xxx 32 | ``` 33 | -------------------------------------------------------------------------------- /insta/README.md: -------------------------------------------------------------------------------- 1 | Description:
2 | Small proof of concept to show how to retrieve exact location of photos from instagram. At instagram.com you can only see approximate location like country and city. This script gets latitude and longitude from photos and next checks this values with GeoPy. Additionaly can count all hashtags.
3 |

Tested with >600 photos
4 | Do not forget to change api credentials

5 | 6 | Functions: 7 | - Count and show all hashtags 8 | - Get exact location of all photos (thanks to GeoPy) with timestamp 9 | 10 | Requirements: 11 | - GeoPy (pip install geopy) 12 | - InstagramApi for python (https://github.com/LevPasha/Instagram-API-python) (pip install -e git+https://github.com/LevPasha/Instagram-API-python.git#egg=InstagramAPI) 13 | 14 | Usage: 15 | #python insta.py ID
16 | You can check user's ID easily by adding double underscore at the end of the request, like this https://www.instagram.com/USERNAME/?__a=1 and look for owner id in json response. 17 | 18 | Examples: (random person) 19 | 20 | ![alt text](http://i.imgur.com/2eOwovn.png) 21 | 22 | ![alt text](http://i.imgur.com/WTVkFPM.png) 23 | TODO: 24 | - improve hashtags parsing 25 | - make it faster 26 | - new functions? 27 | 28 | Code is quite messy but in my defense I can say that I'm still learning python. 29 | If you have any advice or idea, just let me know! 30 | -------------------------------------------------------------------------------- /mg.json: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": [ 3 | { 4 | "name": "Mindgeek", 5 | "group": 1, 6 | "id": 1, 7 | "photo": "https://i.imgur.com/08IEsts.png", 8 | "size": 100, 9 | "info": "Mansef/Manwin" 10 | }, 11 | { 12 | "name": "Advertisements", 13 | "group": 1, 14 | "id": 2, 15 | "photo": "https://i.imgur.com/dhZH3pd.png", 16 | "size": 55, 17 | "info": "TrafficJunky
AdultForce" 18 | }, 19 | { 20 | "name": "Memberships", 21 | "group": 1, 22 | "id": 3, 23 | "photo": "https://i.imgur.com/AAMJMLk.png", 24 | "size": 55, 25 | "info": "Twistys
MYLFS
Reality Kings
Brazzers
Babes
Men.com" 26 | }, 27 | { 28 | "name": "Premium Content", 29 | "group": 1, 30 | "id": 4, 31 | "photo": "https://i.imgur.com/cSsKzgK.jpg", 32 | "size": 55, 33 | "info": "Pornhub
YouPorn
XTube
Thumbzilla
Tube8" 34 | }, 35 | { 36 | "name": "Games", 37 | "group": 1, 38 | "id": 5, 39 | "photo": "https://i.imgur.com/iuahJrJ.png", 40 | "size": 55, 41 | "info": "Nutaku" 42 | }, 43 | { 44 | "name": "Mobile", 45 | "group": 1, 46 | "id": 6, 47 | "photo": "https://i.imgur.com/sR4LpAU.png", 48 | "size": 55, 49 | "info": "VPNhub
Kode
Private Downloader
Rocket VPN" 50 | }, 51 | { 52 | "name": "Payments", 53 | "group": 1, 54 | "id": 7, 55 | "photo": "https://i.imgur.com/JaVN8CW.jpg", 56 | "size": 55, 57 | "info": "ProBiller" 58 | } 59 | 60 | ], 61 | "links": [ 62 | { 63 | "source": 1, 64 | "target": 2, 65 | "value": 2 66 | }, 67 | { 68 | "source": 1, 69 | "target": 3, 70 | "value": 2 71 | }, 72 | { 73 | "source": 1, 74 | "target": 4, 75 | "value": 2 76 | }, 77 | { 78 | "source": 1, 79 | "target": 5, 80 | "value": 2 81 | }, 82 | { 83 | "source": 1, 84 | "target": 6, 85 | "value": 2 86 | }, 87 | { 88 | "source": 1, 89 | "target": 7, 90 | "value": 2 91 | } 92 | 93 | 94 | ] 95 | } 96 | -------------------------------------------------------------------------------- /amazon/amazonroulette.py: -------------------------------------------------------------------------------- 1 | import urllib 2 | from xml.dom import minidom 3 | import os.path 4 | from collections import defaultdict 5 | import random 6 | import sys 7 | 8 | class bcolors: 9 | HEADER = '\033[95m' 10 | OKBLUE = '\033[94m' 11 | OKGREEN = '\033[92m' 12 | WARNING = '\033[93m' 13 | FAIL = '\033[91m' 14 | ENDC = '\033[0m' 15 | BOLD = '\033[1m' 16 | UNDERLINE = '\033[4m' 17 | 18 | 19 | if len(sys.argv) == 1: 20 | print "python amazonroulette.py [file name with buckets names]" 21 | sys.exit() 22 | 23 | 24 | file = sys.argv[1] 25 | 26 | 27 | with open(file) as f: 28 | for line in f: 29 | line = line.rstrip() 30 | xml_str = urllib.urlopen("http://" + line).read() 31 | extensions = defaultdict(list) 32 | xmldoc = minidom.parseString(xml_str) 33 | obs_values = xmldoc.getElementsByTagName('Key') 34 | 35 | for i in obs_values: 36 | path = i.firstChild.data 37 | extension = os.path.splitext(i.firstChild.data)[1][1:] 38 | if extensions.has_key(extension): 39 | extensions[extension].append(path) 40 | else: 41 | extensions[extension] = [path] 42 | 43 | helper = 0 44 | while helper == 0: 45 | print "Founded extensions\n " + line 46 | for i in (extensions): 47 | print i, len(extensions[i]) 48 | choosen_ext = raw_input("Type extension or go to [N]ext target\n> ") 49 | while 1: 50 | if choosen_ext in extensions: 51 | for i in extensions[choosen_ext]: 52 | print i 53 | decision = raw_input("Check All[A] Roulette[R] [B]ack \n> ") 54 | if decision == "A": 55 | for i in extensions[choosen_ext]: 56 | req = urllib.urlopen("http://" + line + "/" + i) 57 | if req.code == 200: 58 | print bcolors.OKGREEN + i + " -----> " + str(req.code) + bcolors.ENDC + "\n" 59 | else: 60 | print bcolors.FAIL + i + " -----> " + str(req.code) + bcolors.ENDC + "\n" 61 | 62 | elif decision == "R": 63 | ran = random.randint(0,len(extensions[choosen_ext]) -1 ) 64 | url = "http://" + line + "/" + extensions[choosen_ext][ran] 65 | req = urllib.urlopen(url) 66 | if req.code == 200: 67 | print bcolors.OKGREEN + url + " -----> " + str(req.code) + bcolors.ENDC 68 | 69 | else: 70 | print bcolors.FAIL + url + " -----> " + str(req.code) + bcolors.ENDC 71 | continue 72 | elif decision== "B": 73 | break 74 | else: 75 | print "Wrong choice1\n " 76 | continue 77 | if choosen_ext == "N": 78 | helper = helper + 1 79 | break 80 | else: 81 | print "Wrong choice" 82 | break 83 | -------------------------------------------------------------------------------- /conmebol.css: -------------------------------------------------------------------------------- 1 | 2 | .outerwrapper { 3 | /*display: none;*/ 4 | width: 630px; 5 | position: relative; 6 | } 7 | 8 | .outerwrapper .visually-hidden { 9 | width:1px; 10 | height:1px; 11 | position: absolute !important; 12 | clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ 13 | clip: rect(1px, 1px, 1px, 1px); 14 | } 15 | 16 | 17 | .outerwrapper .timeline { 18 | width: 630px; 19 | height: 260px; 20 | } 21 | 22 | .outerwrapper .timeline-header { 23 | position: absolute; 24 | top: -4px; 25 | left: 120px; 26 | width: 500px; 27 | height: 110px; 28 | z-index: 10; 29 | } 30 | 31 | .outerwrapper .timeline-header h2 { 32 | font-size: 1.3em; 33 | margin: 0 0 1em 0; 34 | color: #666; 35 | } 36 | 37 | .outerwrapper .timeline-header h3 { 38 | margin: 0 0 0.5em 0; 39 | color: #999; 40 | } 41 | 42 | 43 | .outerwrapper .info-box { 44 | position: relative; 45 | top: 0px; 46 | width: 630px; 47 | height: 320px; 48 | opacity: 1; 49 | border-top: 2px solid #999999; 50 | border-bottom: 2px solid #999999; 51 | z-index: 10; 52 | overflow: hidden; 53 | } 54 | 55 | .outerwrapper div[class^='event'] { 56 | position: relative; 57 | float: left; 58 | width: 630px; 59 | padding: 10px 0; 60 | 61 | } 62 | 63 | 64 | .outerwrapper .info-box div[class^='event'] h3 { 65 | margin: 0 0 1em 5px; 66 | color: #666; 67 | } 68 | 69 | .outerwrapper .info-box div[class^='event'] h4 { 70 | margin: 0 0 0 5px; 71 | color: #999; 72 | font-style: italic; 73 | } 74 | 75 | .outerwrapper .info-box div[class^='event'] p { 76 | margin: 0 0 0 5px; 77 | } 78 | 79 | .outerwrapper .info-box div[class^='event'] img { 80 | float: right; 81 | margin: 0 5px 0 10px; 82 | max-width: 300px; 83 | } 84 | 85 | .outerwrapper .info-box div[class^='event'] a:before { 86 | content:url(http://www.nature.com/polopoly_fs/7.7008.1350920391!/image/link.jpg); 87 | } 88 | 89 | .outerwrapper .info-box div[class^='event'] .credit { 90 | margin: 0.8em 0 0 0; 91 | } 92 | 93 | .outerwrapper .info-box div[class^='event'] .credit a:before { 94 | content:none; 95 | } 96 | 97 | 98 | 99 | .outerwrapper .tooltip 100 | { 101 | display:none; 102 | position: absolute; 103 | top: 110px; 104 | width: 135px; 105 | z-index: 999; 106 | margin-left: -75px; 107 | padding: 10px; 108 | background-color: #5E5E5E; 109 | text-align:center; 110 | opacity: 0; 111 | -webkit-transition: opacity 0.3s ease; 112 | -moz-transition: opacity 0.3s ease; 113 | -o-transition: opacity 0.3s ease; 114 | -ms-transition: opacity 0.3s ease; 115 | transition: opacity 0.3s ease; 116 | } 117 | 118 | .outerwrapper .tooltip:after 119 | { 120 | content: ""; 121 | position:absolute; 122 | z-index: 1000; 123 | bottom: -8px; 124 | left: 50%; 125 | margin-left: -12px; 126 | border-top: 10px solid #5E5E5E; 127 | border-left: 10px solid transparent; 128 | border-right: 10px solid transparent; 129 | border-bottom: 0; 130 | } 131 | 132 | .outerwrapper .tooltip p { 133 | margin: 0; 134 | color: #FFF; 135 | } 136 | 137 | /* SVG 138 | ----------------------------------*/ 139 | 140 | .outerwrapper svg text { 141 | font: 13px sans-serif; 142 | } 143 | 144 | .outerwrapper svg .axis text, .outerwrapper svg .year-axis text { 145 | font: 11px sans-serif; 146 | } 147 | 148 | .outerwrapper svg .axis path, .outerwrapper svg .year-axis path { 149 | fill: none; 150 | stroke: none; 151 | } 152 | 153 | .outerwrapper svg .axis line { 154 | fill: none; 155 | stroke: #999999; 156 | shape-rendering: crispEdges; 157 | } 158 | 159 | .outerwrapper svg .year-axis line { 160 | stroke: none; 161 | } 162 | 163 | .outerwrapper svg .locations { 164 | fill: #999999; 165 | cursor: pointer; 166 | -webkit-transition: all 0.2s ease; 167 | -moz-transition: all 0.2s ease; 168 | -o-transition: all 0.2s ease; 169 | -ms-transition: all 0.2s ease; 170 | transition: all 0.2s ease; 171 | } 172 | 173 | .outerwrapper svg .locations:hover { 174 | fill: #EE8361; 175 | } 176 | 177 | .outerwrapper svg .selected { 178 | fill: #E85338; 179 | }s 180 | -------------------------------------------------------------------------------- /election1.css: -------------------------------------------------------------------------------- 1 | .flex-parent { 2 | display: flex; 3 | flex-direction: column; 4 | justify-content: center; 5 | align-items: center; 6 | width: 100%; 7 | height: 100%; 8 | } 9 | 10 | .input-flex-container { 11 | display: flex; 12 | justify-content: space-around; 13 | align-items: center; 14 | width: 80vw; 15 | height: 100px; 16 | max-width: 1000px; 17 | position: relative; 18 | z-index: 0; 19 | } 20 | 21 | .input { 22 | width: 25px; 23 | height: 25px; 24 | background-color: #2C3E50; 25 | position: relative; 26 | border-radius: 50%; 27 | } 28 | .input:hover { 29 | cursor: pointer; 30 | } 31 | .input::before, .input::after { 32 | content: ""; 33 | display: block; 34 | position: absolute; 35 | z-index: -1; 36 | top: 50%; 37 | transform: translateY(-50%); 38 | background-color: #2C3E50; 39 | width: 4vw; 40 | height: 5px; 41 | max-width: 50px; 42 | } 43 | .input::before { 44 | left: calc(-4vw + 12.5px); 45 | } 46 | .input::after { 47 | right: calc(-4vw + 12.5px); 48 | } 49 | .input.active { 50 | background-color: #2C3E50; 51 | } 52 | .input.active::before { 53 | background-color: #2C3E50; 54 | } 55 | .input.active::after { 56 | background-color: #AEB6BF; 57 | } 58 | .input.active span { 59 | font-weight: 700; 60 | } 61 | .input.active span::before { 62 | font-size: 13px; 63 | } 64 | .input.active span::after { 65 | font-size: 15px; 66 | } 67 | .input.active ~ .input, .input.active ~ .input::before, .input.active ~ .input::after { 68 | background-color: #AEB6BF; 69 | } 70 | .input span { 71 | width: 1px; 72 | height: 1px; 73 | position: absolute; 74 | top: 50%; 75 | left: 50%; 76 | transform: translate(-50%, -50%); 77 | visibility: hidden; 78 | color:#FF1493; 79 | } 80 | .input span::before, .input span::after { 81 | visibility: visible; 82 | position: absolute; 83 | left: 50%; 84 | } 85 | .input span::after { 86 | content: attr(data-year); 87 | top: 25px; 88 | transform: translateX(-50%); 89 | font-size: 14px; 90 | } 91 | .input span::before { 92 | content: attr(data-info); 93 | top: -65px; 94 | width: 70px; 95 | transform: translateX(-5px) rotateZ(-45deg); 96 | font-size: 12px; 97 | text-indent: -10px; 98 | } 99 | 100 | .description-flex-container { 101 | width: 80vw; 102 | font-weight: 400; 103 | font-size: 22px; 104 | margin-top: 100px; 105 | max-width: 1000px; 106 | } 107 | .description-flex-container p { 108 | margin-top: 0; 109 | display: none; 110 | } 111 | .description-flex-container p.active { 112 | display: block; 113 | } 114 | 115 | @media (min-width: 1250px) { 116 | .input::before { 117 | left: -37.5px; 118 | } 119 | 120 | .input::after { 121 | right: -37.5px; 122 | } 123 | } 124 | @media (max-width: 850px) { 125 | .input { 126 | width: 17px; 127 | height: 17px; 128 | } 129 | .input::before, .input::after { 130 | height: 3px; 131 | } 132 | .input::before { 133 | left: calc(-4vw + 8.5px); 134 | } 135 | .input::after { 136 | right: calc(-4vw + 8.5px); 137 | } 138 | } 139 | @media (max-width: 600px) { 140 | .flex-parent { 141 | justify-content: initial; 142 | } 143 | 144 | .input-flex-container { 145 | flex-wrap: wrap; 146 | justify-content: center; 147 | width: 100%; 148 | height: auto; 149 | margin-top: 15vh; 150 | } 151 | 152 | .input { 153 | width: 60px; 154 | height: 60px; 155 | margin: 0 10px 50px; 156 | background-color: #AEB6BF; 157 | } 158 | .input::before, .input::after { 159 | content: none; 160 | } 161 | .input span { 162 | width: 100%; 163 | height: 100%; 164 | display: block; 165 | } 166 | .input span::before { 167 | top: calc(100% + 5px); 168 | transform: translateX(-50%); 169 | text-indent: 0; 170 | text-align: center; 171 | } 172 | .input span::after { 173 | top: 50%; 174 | transform: translate(-50%, -50%); 175 | color: #ECF0F1; 176 | } 177 | 178 | .description-flex-container { 179 | margin-top: 30px; 180 | text-align: center; 181 | } 182 | } 183 | @media (max-width: 400px) { 184 | body { 185 | min-height: 950px; 186 | } 187 | } 188 | -------------------------------------------------------------------------------- /insta/insta.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | # 200121216 4 | # Use text editor to edit the script and type in valid Instagram username/password 5 | 6 | from InstagramAPI import InstagramAPI 7 | from geopy.geocoders import Nominatim 8 | import sys 9 | import argparse 10 | import datetime 11 | from collections import OrderedDict 12 | 13 | 14 | parser = argparse.ArgumentParser() 15 | parser.add_argument('id', type=str, # var = id 16 | help='ID') 17 | args = parser.parse_args() 18 | InstagramAPI = InstagramAPI("CHANGEIT", "CHANGEIT") 19 | 20 | InstagramAPI.login() # login 21 | geolocator = Nominatim() 22 | # media_id = InstagramAPI.LastJson # last response JSON 23 | # InstagramAPI.like(media_id["ranked_items"][0]["pk"]) # like first media 24 | # InstagramAPI.getUserFollowers(media_id["ranked_items"][0]["user"]["pk"]) 25 | 26 | 27 | 28 | ########################Gets exact locatino with timestamp############################### 29 | 30 | def CheckIfExist(id): #Could not catch 400 error, so checking for JSON response 31 | try: 32 | InstagramAPI.getUserFeed(id) 33 | a = InstagramAPI.LastJson['items'] 34 | except KeyError: 35 | print "User with id: "+ id + " does not exist" 36 | sys.exit() 37 | print "Checking.. It may take a while if user has many photos" 38 | 39 | def GetAdressesTimes(id): 40 | only_id = {} #var only for max_next_id parameter | pagination 41 | photos = [] # only photos 42 | hashtags = [] 43 | a = None #helper 44 | while True: 45 | if (a == None): 46 | InstagramAPI.getUserFeed(id) 47 | a = InstagramAPI.LastJson['items']#photos 00, 01, 02... 48 | only_id = InstagramAPI.LastJson #all LastJson with max_id param 49 | else: 50 | InstagramAPI.getUserFeed(id, only_id['next_max_id']) #passing parameter max_id 51 | only_id = InstagramAPI.LastJson 52 | a = InstagramAPI.LastJson['items'] 53 | 54 | photos.append(a) 55 | 56 | if not 'next_max_id' in only_id: 57 | break 58 | 59 | 60 | locations = {} 61 | 62 | for i in photos: #extract location from photos, related 63 | for j in i: 64 | if 'lat' in j.keys(): 65 | lat = j.get('lat') 66 | lng = j.get('lng') 67 | 68 | locations[str(lat) + ', ' + str(lng)] = j.get('taken_at') 69 | 70 | address = {} 71 | for k,v in locations.iteritems(): 72 | details = geolocator.reverse(k) #locate for key 73 | unix_timestamp = datetime.datetime.fromtimestamp(v) # read timestamp as a value 74 | address[details.address] = unix_timestamp.strftime('%Y-%m-%d %H:%M:%S') 75 | 76 | 77 | sort_addresses = sorted(address.items(), key=lambda p: p[1], reverse=True) #sorting 78 | 79 | #printing 80 | i = 1 81 | for address, time in sort_addresses: 82 | print str(i) + ' ' + address, time 83 | i = i+1 84 | ################################################################################################ 85 | 86 | 87 | def GetHashtags(id): 88 | text = [] 89 | only_id = {} 90 | a = None #helper 91 | hashtags = [] 92 | counter = 1 93 | while True: 94 | if (a == None): 95 | InstagramAPI.getUserFeed(id) 96 | a = InstagramAPI.LastJson['items']#photos 00, 01, 02... 97 | only_id = InstagramAPI.LastJson #all LastJson with max_id param 98 | else: 99 | InstagramAPI.getUserFeed(id, only_id['next_max_id']) #passing parameter max_id 100 | only_id = InstagramAPI.LastJson 101 | a = InstagramAPI.LastJson['items'] 102 | 103 | 104 | try: 105 | for i in a: 106 | c = i.get('caption', {}).get('text') 107 | text.append(c) 108 | #print str(counter) + ' ' + c 109 | counter = counter +1 110 | except AttributeError: 111 | pass 112 | 113 | if not 'next_max_id' in only_id: 114 | break 115 | 116 | hashtag_counter = {} 117 | 118 | for i in text: 119 | for j in i.split(): 120 | if j.startswith('#'): 121 | hashtags.append(j.encode('UTF-8')) 122 | 123 | for i in hashtags: 124 | if i in hashtag_counter: 125 | hashtag_counter[i] += 1 126 | else: 127 | hashtag_counter[i] = 1 128 | 129 | sortE = sorted(hashtag_counter.items(), key=lambda value: value[1], reverse=True) 130 | 131 | for k,v in sortE: 132 | print str(v) + ". " + str(k) 133 | print "Done with hashtags" 134 | # for k,v in ):Q 135 | # print str(v) + ' ' + k 136 | 137 | CheckIfExist(args.id) 138 | GetHashtags(args.id) 139 | GetAdressesTimes(args.id) 140 | -------------------------------------------------------------------------------- /tlhtml2.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

CONMEBOL Copa America scheme

4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 |

Since 1987

5 |
StartEndEventDescriptionLinkPhotoCredit
1 January 199030 December 1990Starting in or about the 1990s, Jose Hawilla agreed on behalf of Traffic International to pay AFA, the Argentinian soccer federation, millions of dollars per edition of the Copa America so that AFA would field its best players. At times, Hawilla was directed to send the payments not to AFA, but to a travel agency used to facilitate payments to Co-Conspirator #1 personally. Hawilla then sent the payments as directed. Hawilla also agreed to make payments to CBF, the Brazilian soccer federation, to ensure that CBF would field its best players for the Copa America editions played in or about and between 2001 to 2011. At times, the defendant RICARDO TEIXEIRA directed Hawilla to make the payments to accounts that were unknown to Hawilla, and that a Traffic financial officer informed Hawilla were not CBF accounts.
23 January 199123 January 1991in Asuncion, Paraguay, Jose Hawilla signed the contract on behalf of Traffic, as did two CONMEBOL officials on behalf of the confederation. The defendant NICOLAS LEOZ, then the president of CONMEBOL, declined to sign the contract. In a private meeting, LEOZ told Hawilla, in sum and substance, that Hawilla would make a lot of money from the rights he was acquiring and LEOZ did not think it was fair that he (LEOZ) did not also make money. LEOZ told Hawilla that he would only sign the contract if Hawilla agreed to pay him a bribe. After Hawilla agreed to make the payment, LEOZ signed the contract. Hawilla caused the payment - a six-figure U.S. dollar payment -to be made to an account designated by LEOZ
01 January 199301 January 1995In approximately 1993 or 1995, the defendant NICOLAS LEOZ began demanding additional bribe payments around the time each edition of the tournament was played. Jose Hawilla agreed to make these payments and caused them to be made. The defendant NICOLAS LEOZ solicited and received bribe payments from Hawilla in connection with every Copa America edition until 2011. The payments increased over time, and ultimately reached the seven figures.
1 January 200730 December 2007Jose Hawilla made personal payments to other CONMEBOL officials over the course of his and Traffic's involvement as holder of the rights to Copa America. For example, Hawilla made periodic six-figure payments to the defendants EDUARDO DELUCA, EUGENIO FIGUEREDO, and ROMER OSUNA in connection with multiple editions of the tournament through in or about 2007, during which time DELUCA, FIGUEREDO, and OSUNA, were the general secretary, vice president, and treasurer of CONMEBOL, respectively.
1 January 20071 January 2011The defendant RAFAEL ESQUIVEL also solicited and received bribe and kickback payments in connection with the Copa America tournament. Over the course of the 2007 and 2011 editions of the tournament, held in Venezuela and Argentina, respectively, ESQUIVEL solicited and received bribe and kickback payments totaling in the seven figures from, variously, Jose Hawilla and another senior Traffic executive, Co-Conspirator #9. Hawilla agreed to make the bribe payments to ESQUIVEL, who at the time was the president of FVF, the Venezuelan soccer 6federation, and a member of the CONMEBOL executive committee, in exchange for ESQUIVEL's continued official support of Traffic's position as exclusive holder of the marketing rights to the Copa America and of Traffic's ability to commercialize the rights.
1 January 201030 December 2010In or about 2010, however, CONMEBOL terminated its long-standing relationship with Traffic and sold the rights to future editions of the tournament to Full Play, owned by the defendants HUGO JINKIS and MARIANO JINKIS.
1 June 20111 June 2011For example, in 2011, ESQUIVEL solicited a $1 million bribe and kickback payment from Jose Hawilla in light of the substantial profits Hawilla had earned ~n connection with the 2007 tournament. After discussing the matter with Co-Conspirator #9, Hawilla agreed to the payment and caused it to be made, in part because he hoped to secure ESQUIVEL's official support for Traffic in a dispute between Traffic and Full Play (see CONMEBOL/CONCACAF Copa America Centenario Scheme, below) concerning which company would hold the commercial rights to the Copa America going forward.
22 July 201122 July 2011Jose Hawilla caused the $1,000,000 bribe to be paid to the defendant RAFAEL ESQUIVEL in a manner designed to conceal the source and nature of the payment. On or about July 22, 2011, at the direction of Traffic executives, approximately $1,000,000 was wired from an account held in the name of Co-Conspirator #10, an intermediary, at Banco Itau in Brazil, to an account held in the name of Co-Conspirator #10's investment company ("Investment Company A"), the identity of which is known to the Grand Jury, at Banco Itau in Miami, Florida. That same day, the funds were wired from the latter account to an account at UBS in Miami held in the name of an entity controlled by ESQUIVEL
70 | 71 |
72 |
73 | -------------------------------------------------------------------------------- /vote.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | .cd-container { 4 | width: 90%; 5 | max-width: 1080px; 6 | margin: 0 auto; 7 | padding: 0 10%; 8 | border-radius: 2px; 9 | } 10 | 11 | .cd-container::after { 12 | content: ""; 13 | display: table; 14 | clear: both; 15 | } 16 | 17 | /* -------------------------------- 18 | 19 | Main components 20 | 21 | -------------------------------- */ 22 | #cd-timeline { 23 | position: relative; 24 | padding: 2em 0; 25 | margin-top: 2em; 26 | margin-bottom: 2em; 27 | } 28 | 29 | #cd-timeline::before { 30 | content: ""; 31 | position: absolute; 32 | top: 0; 33 | left: 25px; 34 | height: 100%; 35 | width: 4px; 36 | background: #7E57C2; 37 | } 38 | 39 | @media only screen and (min-width: 1170px) { 40 | #cd-timeline { 41 | margin-top: 3em; 42 | margin-bottom: 3em; 43 | } 44 | 45 | #cd-timeline::before { 46 | left: 50%; 47 | margin-left: -2px; 48 | } 49 | } 50 | .cd-timeline-block { 51 | position: relative; 52 | margin: 2em 0; 53 | } 54 | 55 | .cd-timeline-block:after { 56 | content: ""; 57 | display: table; 58 | clear: both; 59 | } 60 | 61 | .cd-timeline-block:first-child { 62 | margin-top: 0; 63 | } 64 | 65 | .cd-timeline-block:last-child { 66 | margin-bottom: 0; 67 | } 68 | 69 | @media only screen and (min-width: 1170px) { 70 | .cd-timeline-block { 71 | margin: 4em 0; 72 | } 73 | 74 | .cd-timeline-block:first-child { 75 | margin-top: 0; 76 | } 77 | 78 | .cd-timeline-block:last-child { 79 | margin-bottom: 0; 80 | } 81 | } 82 | .cd-timeline-img { 83 | position: absolute; 84 | top: 8px; 85 | left: 12px; 86 | width: 30px; 87 | height: 30px; 88 | border-radius: 50%; 89 | box-shadow: 0 0 0 4px #7E57C2, inset 0 2px 0 rgba(0, 0, 0, 0.08), 0 3px 0 4px rgba(0, 0, 0, 0.05); 90 | } 91 | 92 | .cd-timeline-img { 93 | background: #673AB7; 94 | } 95 | 96 | @media only screen and (min-width: 1170px) { 97 | .cd-timeline-img { 98 | width: 30px; 99 | height: 30px; 100 | left: 50%; 101 | margin-left: -15px; 102 | margin-top: 15px; 103 | /* Force Hardware Acceleration in WebKit */ 104 | -webkit-transform: translateZ(0); 105 | -webkit-backface-visibility: hidden; 106 | } 107 | } 108 | .cd-timeline-content { 109 | position: relative; 110 | margin-left: 60px; 111 | margin-right: 30px; 112 | background: #333C42; 113 | border-radius: 2px; 114 | padding: 1em; 115 | } 116 | .cd-timeline-content .timeline-content-info { 117 | background: #2B343A; 118 | padding: 5px 10px; 119 | color: rgba(255, 255, 255, 0.7); 120 | font-size: 12px; 121 | box-shadow: inset 0 2px 0 rgba(0, 0, 0, 0.08); 122 | border-radius: 2px; 123 | } 124 | .cd-timeline-content .timeline-content-info i { 125 | margin-right: 5px; 126 | } 127 | .cd-timeline-content .timeline-content-info .timeline-content-info-title, .cd-timeline-content .timeline-content-info .timeline-content-info-date { 128 | width: calc(50% - 2px); 129 | display: inline-block; 130 | } 131 | @media (max-width: 500px) { 132 | .cd-timeline-content .timeline-content-info .timeline-content-info-title, .cd-timeline-content .timeline-content-info .timeline-content-info-date { 133 | display: block; 134 | width: 100%; 135 | } 136 | } 137 | .cd-timeline-content .content-skills { 138 | font-size: 12px; 139 | padding: 0; 140 | margin-bottom: 0; 141 | display: flex; 142 | flex-wrap: wrap; 143 | justify-content: center; 144 | } 145 | .cd-timeline-content .content-skills li { 146 | background: #40484D; 147 | border-radius: 2px; 148 | display: inline-block; 149 | padding: 2px 10px; 150 | color: rgba(255, 255, 255, 0.7); 151 | margin: 3px 2px; 152 | text-align: center; 153 | flex-grow: 1; 154 | } 155 | 156 | .cd-timeline-content:after { 157 | content: ""; 158 | display: table; 159 | clear: both; 160 | } 161 | 162 | .cd-timeline-content h2 { 163 | color: rgba(255, 255, 255, 0.9); 164 | margin-top: 0; 165 | margin-bottom: 5px; 166 | } 167 | 168 | .cd-timeline-content p, .cd-timeline-content .cd-date { 169 | color: rgba(255, 255, 255, 0.7); 170 | font-size: 13px; 171 | font-size: 0.8125rem; 172 | } 173 | 174 | .cd-timeline-content .cd-date { 175 | display: inline-block; 176 | color:#FF1493; 177 | } 178 | 179 | .cd-timeline-content p { 180 | margin: 1em 0; 181 | line-height: 1.6; 182 | } 183 | 184 | .cd-timeline-content::before { 185 | content: ""; 186 | position: absolute; 187 | top: 16px; 188 | right: 100%; 189 | height: 0; 190 | width: 0; 191 | border: 7px solid transparent; 192 | border-right: 7px solid #333C42; 193 | } 194 | 195 | @media only screen and (min-width: 768px) { 196 | .cd-timeline-content h2 { 197 | font-size: 20px; 198 | font-size: 1.25rem; 199 | } 200 | 201 | .cd-timeline-content p { 202 | font-size: 16px; 203 | font-size: 1rem; 204 | } 205 | 206 | .cd-timeline-content .cd-read-more, .cd-timeline-content .cd-date { 207 | font-size: 14px; 208 | font-size: 0.875rem; 209 | } 210 | } 211 | @media only screen and (min-width: 1170px) { 212 | .cd-timeline-content { 213 | color: white; 214 | margin-left: 0; 215 | padding: 1.6em; 216 | width: 36%; 217 | margin: 0 5%; 218 | } 219 | 220 | .cd-timeline-content::before { 221 | top: 24px; 222 | left: 100%; 223 | border-color: transparent; 224 | border-left-color: #333C42; 225 | } 226 | 227 | .cd-timeline-content .cd-date { 228 | position: absolute; 229 | width: 100%; 230 | left: 142%; 231 | top: 6px; 232 | font-size: 16px; 233 | font-size: 1rem; 234 | } 235 | 236 | .cd-timeline-block:nth-child(even) .cd-timeline-content { 237 | float: right; 238 | } 239 | 240 | .cd-timeline-block:nth-child(even) .cd-timeline-content::before { 241 | top: 24px; 242 | left: auto; 243 | right: 100%; 244 | border-color: transparent; 245 | border-right-color: #333C42; 246 | } 247 | 248 | .cd-timeline-block:nth-child(even) .cd-timeline-content .cd-read-more { 249 | float: right; 250 | } 251 | 252 | .cd-timeline-block:nth-child(even) .cd-timeline-content .cd-date { 253 | left: auto; 254 | right: 122%; 255 | text-align: right; 256 | } 257 | } 258 | -------------------------------------------------------------------------------- /shodan/shodan.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" // printing 5 | "gopkg.in/ns3777k/go-shodan.v1/shodan" // shodan api 6 | "github.com/PuerkitoBio/goquery" 7 | "log" 8 | "os" // os commands 9 | "bufio" //input output 10 | "strconv" 11 | ) 12 | 13 | func bugcrowd() []string{ 14 | doc, err := goquery.NewDocument("https://www.bugcrowd.com/bug-bounty-list/") //link to bugcrowd list 15 | if err != nil { // if cant connect 16 | log.Fatal(err) 17 | } 18 | 19 | s := make([]string, 455 ) //slice of strings 20 | 21 | doc.Find("td a").Each(func(index int, item *goquery.Selection) { //for every organization in "td a" (table) 22 | linkTag := item.Text() // get text 23 | s[index] = linkTag //put in to map 24 | }) 25 | 26 | return s // return slice of organizations 27 | } 28 | 29 | func intro() (){ 30 | fmt.Println("Search multiple organization with Shodan.") 31 | fmt.Println("Prepare txt file with organizations names") 32 | fmt.Println("and pass it to script as argument") 33 | fmt.Println("----------------------------------------") 34 | fmt.Println("Example") 35 | fmt.Println("Hosts.txt includes:") 36 | fmt.Println("Sony") 37 | fmt.Println("Facebook") 38 | fmt.Println("Dropbox") 39 | fmt.Println("---------------------------------------") 40 | fmt.Println("Run ./shodan hosts.txt") 41 | fmt.Println("As output script makes directory with organization's name") 42 | fmt.Println("and writes response as txt file") 43 | fmt.Println("/Sony") 44 | fmt.Println("---xxx.xxx.xxx.xxx") 45 | fmt.Println("---xxx.xxx.xxx.xxx") 46 | fmt.Println("/Facebook") 47 | fmt.Println("---xxx.xxx.xxx.xxx") 48 | fmt.Println("---xxx.xxx.xxx.xxx") 49 | } 50 | 51 | func in_array(val int, array []int) (ok bool, i int) { //https://codereview.stackexchange.com/questions/60074/in-array-in-go 52 | for i = range array { 53 | if ok = array[i] == val; ok { 54 | return 55 | } 56 | } 57 | return 58 | } 59 | 60 | func func_unique(input []string) []string { //https://kylewbanks.com/blog/creating-unique-slices-in-go 61 | u := make([]string, 0, len(input)) 62 | m := make(map[string]bool) 63 | 64 | for _, val := range input { 65 | if _, ok := m[val]; !ok { 66 | m[val] = true 67 | u = append(u, val) 68 | } 69 | } 70 | 71 | return u 72 | } 73 | 74 | func read_file(input string) (orgs_string []string) { // https://stackoverflow.com/questions/8757389/reading-file-line-by-line-in-go 75 | //var orgs_string [400]string 76 | file, err := os.Open(input) 77 | if err != nil { 78 | log.Fatal(err) 79 | os.Exit(1) 80 | } 81 | defer file.Close() 82 | 83 | scanner := bufio.NewScanner(file) 84 | for scanner.Scan() { 85 | //fmt.Println(scanner.Text()) 86 | orgs_string = append(orgs_string, scanner.Text()) 87 | } 88 | 89 | if err := scanner.Err(); err != nil { 90 | intro() 91 | os.Exit(1) 92 | } 93 | 94 | return orgs_string 95 | } 96 | 97 | /* function for infinite loop in user input; when user type 111 - exit from loop 98 | it gets slice of strings (uniique) and return index and breaking point*/ 99 | 100 | func loop(query []string) (breaking bool, index int) { 101 | index = 0 102 | breaking = false 103 | var input int 104 | fmt.Scan(&input) // get input 105 | if input == 111 { 106 | breaking = true 107 | return breaking, index // return false (do not exit from main loop), return index = 0 108 | }else{ 109 | index = input 110 | breaking = false 111 | return breaking, index 112 | } 113 | return breaking, index 114 | } 115 | 116 | 117 | /*Printing loop, gets slice of unique organizations and map{org:value of appaerances} 118 | Needs for counting results */ 119 | func print_loop(orgs []string, counter map[string]int) { 120 | for index, value :=range orgs{ 121 | fmt.Println(index,"-------->", value, "-", counter[value], "results for that organization") //get value from counter for every organizations in unique 122 | 123 | } 124 | fmt.Println("Type 111 to go to next organization") 125 | } 126 | func main() { 127 | 128 | if len(os.Args) == 1 { 129 | intro() 130 | os.Exit(1) 131 | } 132 | argsWithoutProg := os.Args[1] 133 | // multiple ports query, dont need to check if port is in array 134 | ports := "port:'80, 81, 443, 8000, 8001, 8008, 8080, 8083, 8443, 8834, 8888'" 135 | // ports := []int{80, 81, 443, 591, 2082, 2095, 2096, 3000, 8000, 8001, 8008, 8080, 8083, 8443, 8834, 8888, 55672} 136 | 137 | orgquery := read_file(argsWithoutProg) // 138 | 139 | 140 | client := shodan.NewClient(nil, "YOUR_API_KEY") //") //connect with shodan 141 | 142 | //fmt.Println(client.GetAPIInfo()) //Api info 143 | 144 | for i:= range orgquery{ // for every item in slice 145 | organtion_query := "org:" + orgquery[i] + " " + ports //make string "org: Company ports: ....." 146 | fmt.Println("Query:", organtion_query) // print query 147 | 148 | a := &shodan.HostQueryOptions{Query:organtion_query} //first query "org: Company port: ....." 149 | 150 | query, err := client.GetHostsForQuery(a) /*get host from previous query and return 151 | type HostMatch struct { 152 | Total int `json:"total"` 153 | Facets map[string][]*Facet `json:"facets"` 154 | Matches []*HostData `json:"matches"` }*/ 155 | 156 | fmt.Println("Error:", err) //print error 157 | fmt.Println("Founded: ", query.Total, "total result(s)") // print amount of results for everything 158 | if query.Total == 0 { // debugging 159 | fmt.Println("Nothing was found. Going to next one\n") 160 | continue 161 | 162 | } 163 | organization := make([]string, len(query.Matches)) //slice for organizations 164 | 165 | for i:= range query.Matches { //for every match in query 166 | organization[i] = query.Matches[i].Organization //get organization 167 | // now organization is [Company1, Company2 ...] with repetives 168 | } 169 | 170 | unique := func_unique(organization) // get uniqie from organization 171 | counts := make(map[string]int) //map for counting orgs 172 | for _, helperorg := range organization{ // for every value in organization 173 | counts[helperorg]++ // add to map and ++ 174 | } 175 | fmt.Println("Organizations:") 176 | //print_loop(unique) 177 | 178 | 179 | print_loop(unique, counts) 180 | i = 0 181 | // starbuck. sony 182 | 183 | 184 | for{ // for {} means infinite loop 185 | breaking_point, index := loop(unique) // 186 | if breaking_point == false { 187 | if index >= len(unique){ 188 | fmt.Println("Wrong choice, try again") 189 | print_loop(unique, counts) 190 | continue 191 | } 192 | fmt.Println("Company: ", unique[index]) // print founded organizations 193 | uniquery := "org:'" + string(unique[index]) + "' " + ports // make query for next request {org: i from unique organizations} 194 | fmt.Println("Query:", uniquery) 195 | c := &shodan.HostQueryOptions{Query:uniquery} // connect and query 196 | query1, _ := client.GetHostsForQuery(c) // make request 197 | //fmt.Println(query1.Total) 198 | 199 | 200 | //fmt.Println(query1.Total) // print total results from unique organizations for EVERY COMPANY!! 201 | for j:= range query1.Matches{ // for every matches from query1 202 | path := unique[index] + "/" + query1.Matches[j].IP // company/111.111.111.111 203 | fmt.Println("Making file in ", path) 204 | os.Mkdir(unique[index], os.FileMode(0666)) // make directory with 205 | f, _ := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0666) // read and write for everyone 206 | w := bufio.NewWriter(f) // make new writer 207 | s := strconv.Itoa(query1.Matches[j].Port) 208 | fmt.Fprintf(w, "Port:") 209 | fmt.Fprintf(w, s) 210 | fmt.Fprintf(w, "\n") 211 | //fmt.Fprintf(w, "\n") 212 | if len(query1.Matches[j].Hostnames) > 0 { //if there is hostname related to match 213 | for a:= range query1.Matches[j].Hostnames{ // for every founded hostname 214 | fmt.Fprintln(w, query1.Matches[j].Hostnames[a]) //add to file 215 | //fmt.Fprintf(w, "\n") 216 | } 217 | } 218 | fmt.Fprintf(w, query1.Matches[j].Data) //save data (http response) to new writer 219 | 220 | w.Flush() // flussssssssssssssh 221 | i++ 222 | } 223 | fmt.Println("\n") 224 | print_loop(unique, counts) 225 | }else{ 226 | break 227 | } 228 | } 229 | } 230 | } 231 | -------------------------------------------------------------------------------- /mg2.json: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": [ 3 | { 4 | "name": "Mindgeek", 5 | "group": 1, 6 | "id": 1, 7 | "photo": "https://i.imgur.com/08IEsts.png", 8 | "size": 60, 9 | "info": "Mansef/Manwin/Mindgeek" 10 | }, 11 | { 12 | "name": "Bernard Bergemar", 13 | "group": 1, 14 | "id": 2, 15 | "photo": "https://www.pinclipart.com/picdir/big/209-2098523_kids-sleeping-clip-art.png", 16 | "size": 55, 17 | "info": "CEO of Pornhub" 18 | }, 19 | { 20 | "name": "Andreas Alkiviades Andreou", 21 | "group": 1, 22 | "id": 3, 23 | "photo": "https://www.pinclipart.com/picdir/big/209-2098523_kids-sleeping-clip-art.png", 24 | "size": 55, 25 | "info": "Director of Corporate Finance" 26 | }, 27 | { 28 | "name": "Stephane Manos", 29 | "group": 1, 30 | "id": 4, 31 | "photo": "https://www.pinclipart.com/picdir/big/209-2098523_kids-sleeping-clip-art.png", 32 | "size": 55, 33 | "info": "" 34 | }, 35 | { 36 | "name": "Ouissam Youssef", 37 | "group": 1, 38 | "id": 5, 39 | "photo": "https://www.pinclipart.com/picdir/big/209-2098523_kids-sleeping-clip-art.png", 40 | "size": 55, 41 | "info": "" 42 | }, 43 | { 44 | "name": "Hassan Youssef", 45 | "group": 1, 46 | "id": 6, 47 | "photo": "https://www.pinclipart.com/picdir/big/209-2098523_kids-sleeping-clip-art.png", 48 | "size": 55, 49 | "info": "" 50 | }, 51 | { 52 | "name": "Philip Keezer", 53 | "group": 1, 54 | "id": 7, 55 | "photo": "https://www.pinclipart.com/picdir/big/209-2098523_kids-sleeping-clip-art.png", 56 | "size": 55, 57 | "info": "" 58 | }, 59 | { 60 | "name": "Anis Baba", 61 | "group": 1, 62 | "id": 8, 63 | "photo": "https://www.pinclipart.com/picdir/big/209-2098523_kids-sleeping-clip-art.png", 64 | "size": 55, 65 | "info": "Head of European Operations" 66 | }, 67 | { 68 | "name": "Bright Imperial Ltd", 69 | "group": 13, 70 | "id": 10, 71 | "photo": "https://cdn.onlinewebfonts.com/svg/img_382390.png", 72 | "size": 55, 73 | "info": "Hong Kong company" 74 | } 75 | , 76 | { 77 | "name": "Pornhub", 78 | "group": 13, 79 | "id": 11, 80 | "photo": "https://i.imgur.com/cSsKzgK.jpg", 81 | "size": 55, 82 | "info": "" 83 | }, 84 | { 85 | "name": "Valsef Capital", 86 | "group": 13, 87 | "id": 12, 88 | "photo": "https://i.imgur.com/0fX14Gk.png", 89 | "size": 55, 90 | "info": "" 91 | }, 92 | { 93 | "name": "Valnet Inc", 94 | "group": 13, 95 | "id": 13, 96 | "photo": "https://pbs.twimg.com/profile_images/699644235511783424/cdeNoZNG_400x400.jpg", 97 | "size": 55, 98 | "info": "" 99 | }, 100 | { 101 | "name": "Grindstone Capital", 102 | "group": 13, 103 | "id": 14, 104 | "photo": "https://pbs.twimg.com/profile_images/1113077909177200640/vh2IUFH7_400x400.png", 105 | "size": 55, 106 | "info": "" 107 | }, 108 | { 109 | "name": "Hyuna Internatioal", 110 | "group": 13, 111 | "id": 15, 112 | "photo": "https://pbs.twimg.com/profile_images/918124826950356992/RVHNV4kK_400x400.jpg", 113 | "size": 55, 114 | "info": "" 115 | }, 116 | { 117 | "name": "Valsef Group", 118 | "group": 13, 119 | "id": 16, 120 | "photo": "https://i.imgur.com/nSFVjMc.png", 121 | "size": 55, 122 | "info": "" 123 | }, 124 | { 125 | "name": "Valsoft Corporation", 126 | "group": 13, 127 | "id": 17, 128 | "photo": "https://pbs.twimg.com/profile_images/700452481810227201/-Q5dk2XD_400x400.jpg", 129 | "size": 55, 130 | "info": "" 131 | }, 132 | { 133 | "name": "Matthew Keezer", 134 | "group": 13, 135 | "id": 18, 136 | "photo": "https://www.pinclipart.com/picdir/big/209-2098523_kids-sleeping-clip-art.png", 137 | "size": 55, 138 | "info": "" 139 | }, 140 | { 141 | "name": "Momentum Ventures", 142 | "group": 13, 143 | "id": 19, 144 | "photo": "https://pbs.twimg.com/profile_images/636968261905571840/XA6yte5y_400x400.png", 145 | "size": 55, 146 | "info": "" 147 | }, 148 | { 149 | "name": "Feras Antoon", 150 | "group": 13, 151 | "id": 20, 152 | "photo": "https://www.pinclipart.com/picdir/big/209-2098523_kids-sleeping-clip-art.png", 153 | "size": 55, 154 | "info": "" 155 | }, 156 | { 157 | "name": "Mark Antoon", 158 | "group": 13, 159 | "id": 21, 160 | "photo": "https://www.pinclipart.com/picdir/big/209-2098523_kids-sleeping-clip-art.png", 161 | "size": 55, 162 | "info": "VP of Games & Mobile apps" 163 | }, 164 | { 165 | "name": "Flighthub", 166 | "group": 13, 167 | "id": 22, 168 | "photo": "https://pbs.twimg.com/profile_images/1199082655616323584/OzCLULgN_400x400.png", 169 | "size": 55, 170 | "info": "" 171 | } 172 | 173 | ], 174 | "links": [ 175 | { 176 | "source": 1, 177 | "target": 2, 178 | "value": 2 179 | }, 180 | { 181 | "source": 1, 182 | "target": 3, 183 | "value": 2 184 | }, 185 | { 186 | "source": 1, 187 | "target": 4, 188 | "value": 2 189 | }, 190 | { 191 | "source": 1, 192 | "target": 5, 193 | "value": 2 194 | }, 195 | { 196 | "source": 1, 197 | "target": 6, 198 | "value": 2 199 | }, 200 | { 201 | "source": 1, 202 | "target": 7, 203 | "value": 2 204 | }, 205 | { 206 | "source": 1, 207 | "target": 8, 208 | "value": 2 209 | } 210 | , 211 | { 212 | "source": 2, 213 | "target": 10, 214 | "value": 2 215 | }, 216 | { 217 | "source": 2, 218 | "target": 11, 219 | "value": 2 220 | }, 221 | { 222 | "source": 5, 223 | "target": 12, 224 | "value": 2 225 | }, 226 | { 227 | "source": 5, 228 | "target": 13, 229 | "value": 2 230 | }, 231 | { 232 | "source": 7, 233 | "target": 14, 234 | "value": 2 235 | }, 236 | { 237 | "source": 7, 238 | "target": 15, 239 | "value": 2 240 | }, 241 | { 242 | "source": 4, 243 | "target": 12, 244 | "value": 2 245 | }, 246 | { 247 | "source": 4, 248 | "target": 13, 249 | "value": 2 250 | }, 251 | { 252 | "source": 4, 253 | "target": 16, 254 | "value": 2 255 | }, 256 | { 257 | "source": 5, 258 | "target": 16, 259 | "value": 2 260 | }, 261 | { 262 | "source": 6, 263 | "target": 16, 264 | "value": 2 265 | }, 266 | { 267 | "source": 4, 268 | "target": 17, 269 | "value": 2 270 | }, 271 | { 272 | "source": 5, 273 | "target": 17, 274 | "value": 2 275 | }, 276 | { 277 | "source": 1, 278 | "target": 18, 279 | "value": 2 280 | }, 281 | { 282 | "source": 18, 283 | "target": 19, 284 | "value": 2 285 | }, 286 | { 287 | "source": 1, 288 | "target": 20, 289 | "value": 2 290 | }, 291 | { 292 | "source": 1, 293 | "target": 21, 294 | "value": 2 295 | }, 296 | { 297 | "source": 18, 298 | "target": 22, 299 | "value": 2 300 | } 301 | 302 | 303 | ] 304 | } 305 | --------------------------------------------------------------------------------