super_hacker 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +28 -0
- data/LICENSE.txt +21 -0
- data/README.md +26 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/csv/download.csv +202 -0
- data/csv/faild.csv +12 -0
- data/csv/hax.csv +347 -0
- data/csv/init.csv +33 -0
- data/csv/log.csv +47 -0
- data/csv/menu.csv +5 -0
- data/csv/success.csv +10 -0
- data/exe/super_hacker +5 -0
- data/lib/code_generator.rb +52 -0
- data/lib/super_hacker/version.rb +3 -0
- data/lib/super_hacker.rb +101 -0
- data/super_hacker.gemspec +41 -0
- metadata +123 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1d5775533007f1571cf75053ecd5c114ab3a8e1fddb4c960b8626efa2d603bdf
|
4
|
+
data.tar.gz: e88f266e6e1f0c4d934891c6ff2379636b018ab9da526dc6ad16e4f93a509694
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c4d381d7ae09a78f7f7b97b42aed4e28b3d1b7707085afc45830281d7deb2d85c292bb29ec5671eb489061445b38efb7a1fa48aa8690b0cbf14070b2375f0912
|
7
|
+
data.tar.gz: ad8c901b43300474a62e9283a5a61325f6c006a3d35dddb0a29ac65c15a27cdecc3582cce01bda9fef29d991bc095107559fbb4c1cfa64ac65b8fa1f0fa7bdee
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
2
|
+
|
3
|
+
## Our Pledge
|
4
|
+
|
5
|
+
In the interest of fostering an open and welcoming environment, we as
|
6
|
+
contributors and maintainers pledge to making participation in our project and
|
7
|
+
our community a harassment-free experience for everyone, regardless of age, body
|
8
|
+
size, disability, ethnicity, gender identity and expression, level of experience,
|
9
|
+
nationality, personal appearance, race, religion, or sexual identity and
|
10
|
+
orientation.
|
11
|
+
|
12
|
+
## Our Standards
|
13
|
+
|
14
|
+
Examples of behavior that contributes to creating a positive environment
|
15
|
+
include:
|
16
|
+
|
17
|
+
* Using welcoming and inclusive language
|
18
|
+
* Being respectful of differing viewpoints and experiences
|
19
|
+
* Gracefully accepting constructive criticism
|
20
|
+
* Focusing on what is best for the community
|
21
|
+
* Showing empathy towards other community members
|
22
|
+
|
23
|
+
Examples of unacceptable behavior by participants include:
|
24
|
+
|
25
|
+
* The use of sexualized language or imagery and unwelcome sexual attention or
|
26
|
+
advances
|
27
|
+
* Trolling, insulting/derogatory comments, and personal or political attacks
|
28
|
+
* Public or private harassment
|
29
|
+
* Publishing others' private information, such as a physical or electronic
|
30
|
+
address, without explicit permission
|
31
|
+
* Other conduct which could reasonably be considered inappropriate in a
|
32
|
+
professional setting
|
33
|
+
|
34
|
+
## Our Responsibilities
|
35
|
+
|
36
|
+
Project maintainers are responsible for clarifying the standards of acceptable
|
37
|
+
behavior and are expected to take appropriate and fair corrective action in
|
38
|
+
response to any instances of unacceptable behavior.
|
39
|
+
|
40
|
+
Project maintainers have the right and responsibility to remove, edit, or
|
41
|
+
reject comments, commits, code, wiki edits, issues, and other contributions
|
42
|
+
that are not aligned to this Code of Conduct, or to ban temporarily or
|
43
|
+
permanently any contributor for other behaviors that they deem inappropriate,
|
44
|
+
threatening, offensive, or harmful.
|
45
|
+
|
46
|
+
## Scope
|
47
|
+
|
48
|
+
This Code of Conduct applies both within project spaces and in public spaces
|
49
|
+
when an individual is representing the project or its community. Examples of
|
50
|
+
representing a project or community include using an official project e-mail
|
51
|
+
address, posting via an official social media account, or acting as an appointed
|
52
|
+
representative at an online or offline event. Representation of a project may be
|
53
|
+
further defined and clarified by project maintainers.
|
54
|
+
|
55
|
+
## Enforcement
|
56
|
+
|
57
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
58
|
+
reported by contacting the project team at fuse.kanrinin@gmail.com. All
|
59
|
+
complaints will be reviewed and investigated and will result in a response that
|
60
|
+
is deemed necessary and appropriate to the circumstances. The project team is
|
61
|
+
obligated to maintain confidentiality with regard to the reporter of an incident.
|
62
|
+
Further details of specific enforcement policies may be posted separately.
|
63
|
+
|
64
|
+
Project maintainers who do not follow or enforce the Code of Conduct in good
|
65
|
+
faith may face temporary or permanent repercussions as determined by other
|
66
|
+
members of the project's leadership.
|
67
|
+
|
68
|
+
## Attribution
|
69
|
+
|
70
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
71
|
+
available at [http://contributor-covenant.org/version/1/4][version]
|
72
|
+
|
73
|
+
[homepage]: http://contributor-covenant.org
|
74
|
+
[version]: http://contributor-covenant.org/version/1/4/
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
super_hacker (0.1.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
mini_portile2 (2.3.0)
|
10
|
+
minitest (5.11.3)
|
11
|
+
nokogiri (1.8.4-x86-mingw32)
|
12
|
+
mini_portile2 (~> 2.3.0)
|
13
|
+
rake (10.5.0)
|
14
|
+
thor (0.20.0)
|
15
|
+
|
16
|
+
PLATFORMS
|
17
|
+
x86-mingw32
|
18
|
+
|
19
|
+
DEPENDENCIES
|
20
|
+
bundler (~> 1.16)
|
21
|
+
minitest (~> 5.0)
|
22
|
+
nokogiri
|
23
|
+
rake (~> 10.0)
|
24
|
+
super_hacker!
|
25
|
+
thor
|
26
|
+
|
27
|
+
BUNDLED WITH
|
28
|
+
1.16.4
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2018 kouta
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# SuperHacker
|
2
|
+
このgemはスーパーハカーになりきれるお遊びgemです。仕事の息抜きに使ってください。
|
3
|
+
|
4
|
+
## Installation
|
5
|
+
|
6
|
+
Add this line to your application's Gemfile:
|
7
|
+
|
8
|
+
```ruby
|
9
|
+
gem 'super_hacker'
|
10
|
+
```
|
11
|
+
|
12
|
+
And then execute:
|
13
|
+
|
14
|
+
$ bundle
|
15
|
+
|
16
|
+
Or install it yourself as:
|
17
|
+
|
18
|
+
$ gem install super_hacker
|
19
|
+
|
20
|
+
## License
|
21
|
+
|
22
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
23
|
+
|
24
|
+
## Code of Conduct
|
25
|
+
|
26
|
+
Everyone interacting in the SuperHacker project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/koutakun/super_hacker/blob/master/CODE_OF_CONDUCT.md).
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "super_hacker"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
data/csv/download.csv
ADDED
@@ -0,0 +1,202 @@
|
|
1
|
+
text
|
2
|
+
WVMKZUBFHW_CPJBZFAPYYAEMVPEJHLCTYWCXPXBCNWAHMBDZERDPZVTWEHKUVFWFKBVSDBNYTUDTUTYCMLDQHSCYPE
|
3
|
+
BTTFWAXUTURXDATN__XURXYDTDRMULSZLMWMBXRRQNMWTGYL_JWZYHYYPRTHUZNJJQFFLWRJGAXWGQEJAHDFBHEZGP
|
4
|
+
DZMVBDXYMKEGAGYCVHPULYAFHR_DDDHNTBZGUNYRBBPXK_BNAADDNGLPGXPKAFAJ_NWTKDN_YFXKHQSGUULYMUPYBW
|
5
|
+
CNWMEYEMRFETFKHJEWHGHWAFMWRCKFKVCRBLUWUQBGMZLTWDFBXZLQQHTKARBPSTTLGFUSPBTFWFMEQMHXFEJCPLRF
|
6
|
+
VBGHXWBDCLYHKTGVBLXYRAWQKZALXYDJACZHPUAGMXZWNTTCNQFAURTDCTZRZZBPHV_SKPQTHFWHHSRUV_LLYVGPTS
|
7
|
+
ZHRJBYYTMXDSHDDUXFYMPVTQGSYDDXKEEXNTYPUSN_FPWLJNGABYRHXDMK_NVWYXGGNVHHPM_JPCHNHYAZWPGENUKE
|
8
|
+
W_UQXPFPZXSLJCUTYEXKFUBEYDWKUYTTXLNESTPGTPUR_DNLXKCDXHTJCRNKC__PKRNMRLQHAQFDTHRDAKJTVKHC_F
|
9
|
+
LCYPG_MTJM_FMPHZXSAKGXVHFESANFTETCGNLTLXFCGKRJNDCTQJMELS_YCHLXPERFKRSNBQUTAWZQVPSXMTWVBLZN
|
10
|
+
NZHCZR_JHWVSULTNKXDGLFAFEFSYNQTFJTTYJXTYAKJPWUJDBFKJBQWYEVF_XTTMSULCJUBHAK_XJGYFN_LNMNUQJM
|
11
|
+
HRUHNQYZGYQJWZEBJAVCAPDFJHHQAEWAPRQ_CVTXXQEQMPCBDCCNVWUUFTTNXYPSPDUMFNPWVQVXTWWWDFCUYTNHLJ
|
12
|
+
MNUULQMATFVQCXBPCKZLWBYFQHAPLMPJMNKWLQSGEGZHEEXED_WLRWVXKWFKNAALSUAFTEMXGNVYVDTXZZEVTDKLXJ
|
13
|
+
CMFK_YUE_NELANFXCWPMRZ_ZSUPGLPJJTJTZ_VETSNYTVNYPEDJVYBZYXXS_DTBFXJFV_XLXYGXBNCEWQ_FXFXNLHB
|
14
|
+
LDYBWPVSKLBCNKQAWNCUGRVHSSRDCUUMNWPPTKYMUXULBLZFDY_KFECZAMFVYEGB_YTMXYWHZHRKPLQWDRGJDHFUEU
|
15
|
+
CTWTCJHJDUTZRBPQWAYQUJCYM_QLAFQWLNNKTPDNZADLLC_EXNJG_QXLATQVFXRVZQT_T_JWRVFFDKNYYHYYGSJTR_
|
16
|
+
AYDKCTUQJ_NCJUCMTWKNGFAPVQDBEHRSQKFNXFFDYHJLDRVDBDWWEBNMLNSUR_YNDHZSJXTYYEBFJRLRTJPHEMBZU_
|
17
|
+
MNMCXSMGCCJEVQJTMKZSW_F_XQ_QJTUAEKEKKJPS_CCSQVFPCREJXHYSEXKUJFKZJWLZFAHJJRAZWTJMFZDQWEQPDA
|
18
|
+
ETVYBKNSALGEUKRUUHQGZ_RTJAJFTBFFPTVWWBYLYLNVTQC_SP_RRMSWFPQLELGATDKMTKFFSMKMSSYBVPNTBCLLJK
|
19
|
+
CKCTJARCFCUMDSLVGHTMCVHRHHHRDTVZUSEKAWRABVSDSSWQDKCZUAGXEJPAMJFYKTNPSVCJWWTMLNHRFSCUBDUNQL
|
20
|
+
MQ_CZYWYSL_THXBRCZXFBZMDRZKSXSXRJDYXVVGSX_BSVLBPJQCKZUAXXHDXRRDRQZUZYFB_KNHSPJPSLJXYPYHKWR
|
21
|
+
_WMQEFWECWQZANDFVEMSTTXSGDHDAKYPWURFRXRJWEVLAXTCYEFSFVNKFTFEFCMQSHDMVUAUYHQFFPARBHDMEQDMBT
|
22
|
+
VLWJAUWJXZEBAYTVSKQB_SWVYSHACHVZHMBMDVRWZGBNPWHSRAURTJCUMK_QPCCJDKMKFWSVNJSBDGWWBULGDGWCY_
|
23
|
+
SDPGSD_WKDGDNZLHEJTWEVT_JCEHMRFLVAGGYVUUJC_JXYVWQUWHKYKXJKKYFXLLKHSMSACZJWBXGKDTHGNPPUZCBT
|
24
|
+
RFGFGSFVCG_FJLCTHTETGSSMMQTZXBESGNCTHRKEALPQNGVZYTWPKDBSJPTMDXRAAGHBUXLNBN_TMTWWLTCYCRDR_T
|
25
|
+
LZQAXDZUPLPCFBKQBWJKUT_PMFH_LFUAYWMYZZFLSJGVJYQEYTWYPUDBVZUBEUFFRHVGPHWQHLGJQFLEVEXVTHCKEU
|
26
|
+
HKRAKKECNUBRXUGKRGWLUFZAJG_UJR_ZCNKLSQKDSGJDJPULFHNWRDLWCXXLXDKALUKRHRLEKUPKBFDMVYN_ZPJYVW
|
27
|
+
PSTNMJLAUZJKG_YL_DXUWKAYBYLSMREBWA_LVHHQLWLPVTGMRAYHHCVYHBSKLJNBLVQPLJXJTUWWPVAQWZDSPVBGMK
|
28
|
+
XPVYULHHYVPUCMHGJNCYAGXPKSSAGZSFPCCVMFGAL_KYGTSNSRDYQRGWWWQZJRCUBCUXLDMAPTVQ_JLRJGXAHVJYS_
|
29
|
+
HDATVPVBNWQGSHBQFVZLNCFVJUYKFUDXBYZXAPJHKY_T_XSUGHNUDTSAFUTGMYLD_BZFJMQXWPEZJCQUNCYNNFFDJG
|
30
|
+
RXXSCWTEJEVSJADNH_WH_VEFN_LCZZMBEVTVNRVJBXB_CVQSVEGLGA_VJHMXDSFBELSRSQHEEDBHMRLBWWBSVTPDDS
|
31
|
+
MBBWHHVPYPYHEV_JAWMLVFFQDWVYKPGYBJRGGJXUUWKXENKQDNRSQKFQAD_GJPHKXEETAPU_QZYFJYKXVHATYRTHDX
|
32
|
+
TRNCMKPKVVEMPKMHBCBRGJGXCHNTGELNBCPSZXTEXJMYNPVLMTNABYEXDDKJSCWTFPQLSKPPQKETJFYHBUJABUGRXD
|
33
|
+
VACKGWLETCDWF_UJEQG_RNZBU_AZVNUDESEWNAERSN_AG_NXNYATJNEYHGVQQT_HQPMDNJDJKTBBLTE_JWVCYH_XYX
|
34
|
+
SLNUSSYDKUQBFCRDR_VBFQAZ_PFXSBWKAJMGGVYJMKCZPDMHCQEVJXFDDGCLSEBGSEFPTMNMKQGCHK_DT_WZGJJ_FN
|
35
|
+
VQSACUKPHMHYLMLYRMTBUGUDK_KHRAGPLW_PTERZA_LZEMZQRZPNLUTFKRRUWDUVVEJM_YYQMJNKKBCRNLKSDWEZQG
|
36
|
+
BPXQ_ZJMMPTJLCPLYVQULVXZZKFDQLDUDQJRBDVAHFBXUMDDWBFXADEFALNYLSSEMNRSDBCPCEFCHXJWVQEAMSRCYR
|
37
|
+
ANRWUMYVQNHWAXADRMFBPSEPPDEG_HGLJDPTWJZNUCKRUMQG_LVNXGNYWDRXWHMRBBMSGTUEMPVFJ_SFDDFSLBPNMH
|
38
|
+
YASMHPJGJUXHNPELFTHXPAQNJWQ_EHUBPLRDGNGMARKLCBXRADVHDXSWKMSWEWCNBAW_DSJGDHVJGSLLWAA_LARWQE
|
39
|
+
CFAYSLCCQSHYZMEXHKKHNVTEPVHGDFCQGYAGJYKVYHDNPSUYHDCNBJPFGEHMFRSHXVV_EXCVFNHPLYHCCADQHJAKPB
|
40
|
+
UKYELHRHHFZNEKFJ_GW_XGEYZGSEW_GUAHRKVWZPXBLEXPUKEDKQHXRNVYUGHESQGZQPGJVUTVSCHQGCVWPPQVDNTV
|
41
|
+
UEPTGYTJNSFRDGXAZFMRYNVXXYSJ_JNHPAWLSPDTKWZVGPJFXLCZKLJEKQGFRC_AGQMBCJKRVDKVFUQNXKTVJSVP_P
|
42
|
+
CACXHATH_YGQJZEVBTB_LHGX_GRVVVQEPXL_ZPBXWKSMYEPBDPQCASHBBXAGARSAAYSFNLRGMYHFDKJNGRRUTJ_ZCM
|
43
|
+
VWMTJHQQUM_PUXPL_MAXKTNTZMQEYUASYTY_VFQYEMJASBAENBUBNLPTPQUBVPDGVQCMM_VLMFGWWHEMEG_NVHLBQS
|
44
|
+
VJZYM___FGKNWKNCWRWHGDYSQUTBYSAHVDRXNRGMASJYNHNZFKZVNPDXCMZABLNPDMGNTBPQBFEPCBCRX_NFQBEHHN
|
45
|
+
VHYPAZMQJEUCLEVHBDCCVXEXPQHZ_XTCSJ_KBBATUNGAMT_TPCYFQJVLDRVZZLRGXYWYHLHSXLFSDXFXZEGUC_MPRF
|
46
|
+
DA_KFXSSYWWCD_AUFVFKSGKFQYAVTZEMLGAVXELCWHY_XAFFANHVGECERXMLSL_UXGWYTJCBMKNFDEGDYEPMNUNNRT
|
47
|
+
CXVJDMWFNJFTERH_YMVVGAZKLYNDLNLKLSCRHUVL_ZMSHNMLMRHML_KFYDSNEADLCVAAM_ADR_XDTY_UGEHJKUDZMC
|
48
|
+
TWUMVRBRRBYEMFJEZJPZDUCUUCPMTTVKFHYXNMKQWJPHEACEQPULSFCTZELNTS_DTWGJVQXNRFS_X_CS_ZSEYHWUSM
|
49
|
+
NTEDRAVDNPF_WTQZPZFNUUPRLSKDBNNVELMPLKNAGSGFAEHKUGHS_RDMFM_L_GXATVUTQQDTLHHPACTYVLQACCLEBU
|
50
|
+
GFCTCBTBFNUNQAZVJNXSCALKCHTYLPLSWXJRWBQAYRVDDNFSLBABMFXDKGPYNNSXXZJQYZDTDUFMQXULVBSZQKEWGJ
|
51
|
+
KMEJASHSMCMBRUSWAHCZMMYXC_RQUPTRRKNFPSMWGZNCWJLQRSDUQBCTTZKJYPKLWEHHQWJPRRRZE_XRDWGBSZKBBT
|
52
|
+
AJMPFGNRAKEZFTFVECMLEGQU_ESVFWKXPRVQXPKAPJBWYQYNUAMTTAJYM_UCDFJSNZNE_JXP_UKQPSCFXUSHPF_YFJ
|
53
|
+
KDEBYUWCTVMGMFHKJWZUMSKSNELXCL_BKKQE_XWEZSQEWJNELXCUGZTQUMGSDHCSQUGLXEVQVY_DF_NVLVXDDUSWRN
|
54
|
+
MNYWE__NWCENJEUHNBHJWRATNETKTUUQABRBTTTGLMJGLLGWCRLDWPPXFJFAHCBMUSVQMNTVQAUGNF_FPCMUXCXRWZ
|
55
|
+
NUUARETHSYDGVUPVCDVZREXBTJZGTPLWPZHVAUAKKUMTRENHCVUETUZKRYGX_N_GQQTEZCJWYVZQGGPTFHHRUDXYVH
|
56
|
+
JPMMAWWMXNNDYPF_VRMJNNHCRXYREKGWYCXWMRRNAPMYMB__PGBKJKTLNXSKCHKKHVWY_LFGGVBLRKAPDTGENTPWFY
|
57
|
+
SYPSDUCSJFHADFGWFPZE_HGWDLABPMEVKN_XXLXBNFHVAHJACXQGPSFAQFGRUBWSQQPQDAWCFDLFCLCDYNVCKSKZCR
|
58
|
+
RK_XNHXPLRRUKGMXZVAXARDQTXQH_NRWUHH_SQPCXUVQG_PTDSNXSLFYGP_UKTFUVH_DTTMTLLKQDMSFYVMJDTPWFK
|
59
|
+
CXYEYZJCMLGRVMMAJBNJXZVCLKVZTAJRQZULLTZBBQQDKMRJXNLSZDRTYZMKHQUHTLCD_BTTNSTCVGXRFSZRZLTDAN
|
60
|
+
VCXBKRDXTFZSLJENXNSXPMUJKSLNPFXZCALPRDPCXLRDSMLYEQBBSSLCAPNUVKEDMPFBAUAPGGWJHXDDCSEANAUDVG
|
61
|
+
VYCPZWCMZZHL_QLGYEHBXJCFUGQMGSJNNPMEBMGLCFGPWJUF_LXBZPLT_AHQCQKSEWUAECDCBGDFDFVMAWQLD_AHLX
|
62
|
+
LYNVZEHVARFGRBEJYFZ_GRFLBBQGHTXWVNFPDBF_JGPYUCNQSRCWDKXFVVVPFXPTKCSSXENBCTPJZURQHKYSRZWTKA
|
63
|
+
FGKNFUXWNUBUDZUMVKMYDPMQWLFQFEUB_SEXUWSHMEXBPMGTYGETGJDDPSLPCRXNCGZ_EVYJTC__FUWYQUQSZNA_AN
|
64
|
+
AG_NTMQCMJRFLASGPUBMJYUGKRGSQBUDLBLDMKLLGFUQVRCVYTUGJXSC_QEULBKGYVUW_HFRB_STUMA_SCEBGPCPXZ
|
65
|
+
VRVYE_CEJSNPWVMKTNBXJWCBUJQPQBZTSHGZCKVFQFSJRWPWMD_DUQPNAJAZTTE_ZBMCMCPDAXUNPUPLBTSKGCFGLL
|
66
|
+
VNKEWUNRCLPUNLDRHYGHVGDVMUXFACTCXYMLVTJQXXNARFXC_RQZPGNYDXADUYRKDCWWJKYVWDHTSGYZLPHZZJE_CK
|
67
|
+
CHKZHXYREQLJEWUJBSFVPZYZH_CFMEGLTTTFKSXKNHSTPVQZHHRBV_SAUVKJEEWZYUVTNZTFPHPUNXBBRBZBCVDFAG
|
68
|
+
KSWXMJSDKXENLAQEFWRGSGJDSLWDTKQVKKG_QTTURFXDPJCLAHVBKVNAXZLAPBFXTTVXERUGUV_PNWNYEXVGYFXXNC
|
69
|
+
JPAFU_JMJREGLVLVXHGG_M_ZMYXFFFUCYHVNTYGQVLVGGMUJYUPCERBFZKEPVVBFGSCNU_DWCRYUKUZHADFUKFFQLL
|
70
|
+
NM_JJJJXEV_CFZASCJLZZXTJ_NDFLYHBBAZVHXQRADYQZKQVWBEJJWHVS_RHKPSNJGUSBBCQRGHNWLXTFPCKND_FUF
|
71
|
+
GWAH_JBZHJTREL_MUPRNUEATBWWJPW_RGLXMMUH_AUTMQUAQKPEPYCJBQSHKMQTCLFECLRUBYAMXZVFHR_RAUWDNMA
|
72
|
+
KZMLTJRGVKMH_HPRSF_MXMVHQAUDBNY_NPERNHWXFNLUGQTBNRAUKSMSPLQELZWGWZXYGNMGAAKHYRRQGEAD_CNBBW
|
73
|
+
RZYGCAZMQT_BZWMQHLHRYDGHHHTVDQMNHCNLNDCMTFPAWZTJUGVJCJJUHEQJQCDDXFXZ_XHVGSEVLFDDFWXUFTZJJC
|
74
|
+
_ZSBKYYC__F_YJ_GBSJMCLUVHUMCEVQDQYCTXAQUMF_JFUHLELVWXPWNURZFBCLVEEWRSMBQ_DMVJAQS_GQBGMTM_Z
|
75
|
+
CFMXRXEXQLYSAXCWKMPJUU_ULUC_EGZNQUEHSJZPDUABRTWCJRCYDRUUYKNDNHGZ_VWJYBTKLRJSVFFTSRFVLKMQAW
|
76
|
+
BVZZNDF_WHWTUGCETMTFLEQUQYVFYRFLTFKEAGPVGHCBRTQKEWH_HXCAECTK_LASSHSPPTDFUXYRWUEEVYXSHGYRRE
|
77
|
+
KYZQFD_HYMEQSGEACYVMRGPXWZSWYTJC_SVCQLASPLMJEXLHJWYXXL_DPWJBKRFGS_QS_DU_JZQSBVHMDLDACWUSKD
|
78
|
+
WTDNFRCV_CMSYEGKQMCYWKFPPTHKFVTFUWMHNGEYKAKQYACKDR_JFHJ_KKWCBPFUUTGGMT_ESNNHRQCXWCR_FEVXLM
|
79
|
+
NHDQAGWDWWCMWBJYHNCCLRHKZCXVDBFCWKFAJZVJVTWPUKHZDAAYKRVHVGSPMZDJTTEMWKQGTTVDFTASTFVPSRQMW_
|
80
|
+
LHNKLPGCSSJJPMAWKFYNHZEZYFETZBYCGBRYEFAYLLSGHHMSAMWFRM_BUJGFTTHXKXXCPJRJNEMPABQHXXVHXQXKPC
|
81
|
+
BKKNLMANCJZZJDLTBVECJWEYZJSSWJTQMNLTLNABXMUELHLUYXGVLTKEMBFCJ_PWHTJCDWVCQ_HPJKFLLURWPGXV_H
|
82
|
+
SZDSL__GFFJLWZNJVWTZDVQKZFUZJBM_ZDZBYDKWKHUMNLQMEAAEZGECQPMNGBFECMCDSTDTWXRKNVTNKFGDMVSHGX
|
83
|
+
VFPMHXMZJDHKMFPJKPSDKSSAGXHMMMZCGTEETXUETM_J_MCCJPBBYRSEVBSL_MJ_ABTPSUEZHYVKJPBLWBANGWBDSZ
|
84
|
+
MGNPRJRPZUERZRLQ_LXVFH_PBCACDBKL_YCCSBTQAGNBHMGEKDTBAXQLTTGNGCVSHBXLNMWASRPTUYFAWWJCCNAFKK
|
85
|
+
QNTPHQFUBAQEECHWSBLBUKLKKFHYKXFNWDSRKCTPMKWRAUZCNMMSRMVRZTBWBDYNEVVGBHZKBUPWFZUUKJCND_TRBS
|
86
|
+
ALZNELXPVZEDELFQTYTEKUMHGTHGHHTTSQLWVKDQFAPFTSUDFZWNWXTNTN_QEGDBB_YHXVDAUJRAXXMPCMRVAQNMPR
|
87
|
+
QQFWNJZPKTSLPQTPPGL_JDVGZQP_DNNNATRBZWSGBTEHSBQDDXPYGFXYSFHZWLPUQNDLYMSFHCLGDJFRSQJZLAASWV
|
88
|
+
RHUXBSZHXZAKRSWVCUUHXQLUBGJCYZJMTALBQEFQEJDCFTSGYRCK_HCLYJNHXDERRNHD_HDNBUXGP_ZVZYUUTPBRBH
|
89
|
+
SRDFBFR_WRDMYNXYLVHSGFBGNKGECJBDLUYSGKGW_YNGVBEPXCJTQQE_RXAUMAUGCXATFRHFHRMB_CJWPLFMBFKNGT
|
90
|
+
ENGCVCKVUPFLEMVX_ZDY_BFA_FJQKWKPT__L_XLMSTYGEYEXEMSQAUKZDQVXLTJDNXNBWDVVVZVXUJUZYCDB_KSHQK
|
91
|
+
ZZPVWXTCGJZCQVKXNEPYQDKDQWYDEDYNFLRGGAJQYKUJWFASGJLXCDVKESX_VDSMVWLUUCPFZMK_YKCX_QBQ_WZFTL
|
92
|
+
XMVMXPMDQPQJLEAHEEWKNDQ_AHXFXUFJ_REVSCADMECKVRKZXECRFUYDAHUWVANKTDAH_CMFEJBLZBLSGVHZRSWXKZ
|
93
|
+
KTKJBUCGLZTWUGMXRDMM_HSEBQVAENRWBTY_QMQPRRJBCRLMRNUQLTPMWEVBTPK_NLTN_SVHQMRKMKFJQBNXMZFGCK
|
94
|
+
TSRVMFZKEYAPXNBMRRANCPZAQH_BWZQJSJSTBKU_HCNPHVWZKWWSTDYFAJMVXLLJPUKRGWWQTJVMWQDDHEBPAFZQQL
|
95
|
+
EBRDTYAUAPYYUNHAKRQQECJMRAWWLNENMFRSWYBUTKDNVYGHJABHBJNP_VJLATCNPEMTKRP_ETWSDWUDBUWVZ_GF_X
|
96
|
+
QQLDYTACHNSMRWZQSGX_AEVAYSTSPKDRBAXK_QWCWTSPHYQFVVKV_EHVNHYTFFVLCYNVHJZPAS_LJQ_PMBVAQZWX_C
|
97
|
+
EJQ_SBDQCKMHAJCJBDVCKZBFAWGDSKABZC_TPXFNNNWE_YTGDWSZQKCUSLHMHFKNMFPGYFGQ_DDLVXVHXEFAT_UCJW
|
98
|
+
PV_PY_DCJYECFU_DHZXPBVKYKFHDCKEURLZBTMSAEVUBMVFTNPRLBZFCXHCUGZXCUPJYYNTWDTLTVWQDMFFDTYUAMQ
|
99
|
+
QFCYCZZZHXPYYVQLWJSTEBDHXMPB_KXBBRNKPXAMZDXFLLCYFVFVAHQPCXPZMWSUXFRURWRAVZCYKSV_HALNJPAFTB
|
100
|
+
JRJWDZCTTDXRKNTHGAKVGGJRYJAYKVPHJEJV_TDRSZJSBYJLMWQWPEKREEZXZRGGFDBXSAXBDFLFRHKYQAWTHNRFEB
|
101
|
+
PFHUMBVYHSKD_FWMPGMQZ_HPUVWX_AQYZRPBFRDWRRXALVSERUMRYYGEGGRSZCDAPZXAWGLXRQDQGKRTHEJAREWZTX
|
102
|
+
XKJM_NEFFNRXCJZWK_CTPYT_UUABVZYKBTTNZJSKKFWRCJYFBESWBFGARCSYAA_VYNHVMKWVKMUCCRHC_ZGFXMXYJR
|
103
|
+
ZQWFHUHJVUGGDHYEZMVVRBAPCSHYKJ_EBCASYYHDTZXVYLGPKBKBDQXXPGUJZNUKQYCNFWPCHXDLMQKUHEDK_JVZPF
|
104
|
+
VFEKDTFTADEGLUTU_UPVLFPLZZSTADHSBW_ZLFTWZMVJZRXNUFPQCKFYYHNTHTAARTBNVETZVQUCDS_YPFVW_SX_HX
|
105
|
+
GEB_DVKSHXZQSVPLZWBKCZXRUGJSKKFTTNXX_YYTWNKHWUMWTTQXREULHUZFZGRYNJDDYED_UXXBDPDP_NULKQDBYF
|
106
|
+
MHNCGNCFS_UMTRTJTNRJKQPGW_NAKKXKTUJDVPZVACYWBJCMLLDBVWRGYMUNAVPCW_EX_XGDVKKWBAGBBLZQJRXBGL
|
107
|
+
WDLXLRXLGD_DUYWDDHVLZDTDNLZUYHFEDMQENGMBDFPNQEGQSKGE_CCCDVDLYEYXFULKFFFRGJQPDGPBEKWMNRANEH
|
108
|
+
TTWMFZZWUSVSSXMNNRPGHUJJH_VS__KJAYUAA_MPKUDWFLELZZGSBVZYTDAMRYJQCFWFLNRB_QLXXZK_LUEPZXUTXY
|
109
|
+
WKLJBPYSLMCKFMAGQDLUMWYCFVJPYXM_EYHMJDT_UW_DUKTKASZSZFYCUDAUQKFESKGBNKKCQYYYGEYFESKKSLCRM_
|
110
|
+
ZBMPFPX_YXZZHHZPMBEQRDCPQDJXQEVCAJZVPSULFNWYHDGYAYRJEGCDQXFFVTHGTARGCEAWGEZLEZWKWVQERKBU_M
|
111
|
+
FGRGDPRRMKNFVKYSHQKBUXKDQTPKKZXUKKYWWTVAZDMZEEHLBBGXEXUGDUPXCEUUJ_JUSCDECSACWY_UQCGJAAETYQ
|
112
|
+
BAV_ZBNRHEZXSJRCHUTJLC_FXNNGATNQS_S_CBGZAASPPSUHJAEKWRQGPHCREBTTVJMNEBQNGWTUZNBHZVPEAUPGHJ
|
113
|
+
UTQC_QXCUDKEWEBLAUJAJVFVBEDYJHJLCPYW_FEZKSUHAPGGZTUQHPXEJLQJNWFLYEGTELUNAGRSGXNQMXAFCUUBXD
|
114
|
+
YDEGCHXYLEZWCQRTWUP_ZQ_UXBCEZZRHPJDPTKSAJYPUFASZPHWDMTVUU_CGTLHCWEFVGSQCD_HKZK_AEHNELMYDXX
|
115
|
+
AFXAGLYLPU_RGEWKJACRTZUSXYETVPYFAXBTJCSXAZTUDAEZWRVFBZBULBWLRGTQZQUZFSQBVUDVTRHFAGFRQYBAWE
|
116
|
+
AUCUREHZYKSK__QTCVXRPBEDDDMFFKTB_TWNGCPQFDPVSXNYJMZYCWRFQR_JLLNFCAMHSFDNHNJYGKLDRXRLVLCSYK
|
117
|
+
_FCQSAMZLTNFLYJGSSASUNBBVYLKKVWHYPPCAQPUDAJRMEUSLCBQDKYBCWCCURFLNFPBUNXLZQNWBQE_UNFECLRBSG
|
118
|
+
YKZMAUXGHBJLVJSGDZGFQKLVMFALFSHCHKETAJXUQXBHJMRQABJHPTPPSVXHDNWGLPJMSYMCD_RKJCSYBB_CYNLJAD
|
119
|
+
CH_VFZJCHARL_NMBDGH_FAEXF_RZLTZQTXLPQZBQQTVJHQTGNJPWKKSFQENAUGNNEXKFAGWSZLNZJHZGYJMKQFNYRR
|
120
|
+
PPNXKSNPQPFQNELDQD_DTNVPWXUHXQEQGJXTHGLAKMFCCSGTMKTKWZZWBVABAGQHLQBAATKEFFRALVHNAFJTJAFFYJ
|
121
|
+
JZTTWLQDPQYWZFYAEWEHFUZUWYYFCXQGKAWCSNJYQCVVZMRCSXLDME_V_BLUW_UWHHMRNFJJCTQZXGFABVJWPCRB_T
|
122
|
+
YXAHCSXZTYPT_XMKQMBVRDJHYYPEG_HCKKBXBVMEATLRSR_GPYJZWBNXUDUSLKCHURKTUGQLEKDGABGCG_KH_VTTLJ
|
123
|
+
HTFAFRZUQMWZZSKPRKSRYNXCEYDGFQGYPWLWPFGPBQRD_LTMPHNQMGGXTMZBMAELQRQFWZKK_KFGRUMYTLJASSLPLG
|
124
|
+
ZLLGSRJMGYBLYWP_QKW_DPPDKNWUXWCGCDLXXKMMCTNMBKEVYRLJMNUJDKQGFUJDTZLPBFHUWCYGWVWEWUBJKAGYQM
|
125
|
+
TMMRNNMZQHT_UMDXFNAQPMBMFHXEXDGRHNSEPAFH_EMSEP_XHDCEJZXSLEMECEBQCGFRSNTBBSPQV_BQFRX_RVNXM_
|
126
|
+
EGNDQKHYTKPKUHFXWYXWYPCENNHNAFVFTAVGJRFLADAVXCVTQDJBUJMVCDBHCWYYXJKCS_LJJXJYBJLQAGWQDWUND_
|
127
|
+
AGTRDZBSYHCMDAMHDHB_VVDQZMWTCCMJRGGSJRGYLU_DXHL_NKYBRDNRCNKJM_MJWQJWQTEXRACS_ZGDGTTRKUPJEQ
|
128
|
+
XBLXPKTQCZEVBZCKSXBENADLWAVVRLKPKNNLVECWELVAYUHJLPZX_ZBZQCENNGP_TQULZGXCEHPYVUXAAFKDHVPCZZ
|
129
|
+
YGWLFHXPCTTNHNWTHBXXBTTCWRUQYDUPNMUPKZKNYVEPUUMWDSTDDEVXJYZDWZHWS_S_VUBBFHWGUYPEWRWLWBAUYT
|
130
|
+
NSXVBVAMMHCK_NNCHMFKFNJ_YYEVKNYF__WADVDSFPRFFHUBBPE_BBVXGXEVURVJJHNVMBVXT_TZYRBTRWSSTBBHSH
|
131
|
+
LNJPD_DNGRXQVWTFWUQL_JUVYDUFCZPRKFRVTCANTJEW_ANGKKJYXEKMWEQYRVYFBXFLADVPJWUZV_PAGNGEG_GEYU
|
132
|
+
PLNJBDDVGG_YAWPVJBZRJBSFCAGSHXJYXHCEH_RKSRUUGFGQFUQVHUHQWPXFXNLQWMPUREPNXMWUPBYKVSBZACPQJN
|
133
|
+
HUTBGWCCMRBALAQJTWSAHVJPQQGTSYVHHBS_VN_ALBFFEF_XEMWHTAGDNLSDWHDLMBJTDWUJVYMMJYVKNDYVWXNPDZ
|
134
|
+
_FKRMUQRBWFSJNSUCKPUXXFZAHZSNRPT_CDLSRWQHLUWVFTUM_VDUXSVZGANHRZADXFNFYBDFGJUUBJKWLXRTDNEUB
|
135
|
+
WEBAQPVCSSDSEBHPBJPM_TKXGFRYRDEXHMXQNJ_HLTQXFTWVLKTDJHVZQTNVAFMMUKZLJJYTMKSPTQYUGYAXUYCSKE
|
136
|
+
SZHCKJJCDTXSGCGWAKYWJUJBLZXZ_ZERVEAQRPHPVXGNZMZUPGWKJLCFCWHEKQHNPMQLPFLLWTRNKEKCWSUSBWNDRM
|
137
|
+
LWXSWLZXFWNSTWEEZSVAQYTVDFNYRBFSBUPPEBKGFQCCSF_UHEY_CZ_QYBXLCC_PVHSMWZNQLJABCFFKLMDXYYPMTQ
|
138
|
+
_DBYJRWPDHYDRPZRQKUURRUBYPZRY_XG_NP_NFLJWFTXZYDJTVWRGYYBBZQJSHUJQNXNANAMDTEAMPXMGD_AYRBBJZ
|
139
|
+
NKSGUQ_KLLKNZMUYFMNVUMGPZDEJLUGAERKUKT__BUVKVHFSYRFJ_DDLLMWAJGUFQQDFPLEFHKYCCDRC_HKJKACEBU
|
140
|
+
MPLWHTSFDUNJTMBYVRKJPRQKHXFXGPHHJLJC_BMGXFAQBL_UWRVGWJUHDGXDEFMBZSSP_KHKAYLVGLLYUGDXHCBPDC
|
141
|
+
JQCWUWLYQMRETXRLQRGFGNW_HBFDXCLDEPGRJMSQGTJUEAAYDARWYDAFCF_YVRRVNMLQRKQRLDCUTFZQJ_P_KYGZAB
|
142
|
+
CTXSYALDDUKPVVGENCNVELFLYB_HZKLYVSXXKCTFGF_CNUZTQC_ZXSQPBECDFFHJWNJZHNGKHWSNABESCNEKZXZYGQ
|
143
|
+
KQSKWA_BUNWUUWARDHBLHHURPRGCPG_ZEXVGJEKMGBYSFHWNRDEZXYSRBLBVLGAGDZWAE_ZSYTDFHQGASTPBDDZDKX
|
144
|
+
_FFPGZPRMZUWQHESHVNLPMLYA_SBNEABNGHXJMLZURSJEN_BNJLCDVHRYALTTEHGRPRXVFHTAC_MYTBHEV_EHVNFJM
|
145
|
+
ZGSPNFQSRNQADQYZTCUPZKSBY_RPYHVJMUFYFMGADDPPRCNJFTNPDLPCLMSXLEFNQNHMB_USQRNSQLNBVZQZVPTQHL
|
146
|
+
QWDVDXEALVGWSWJTHVBWNHMXHP_KCC_MVJXFR_YSDJREXJDPHTEAJTVDSTDTFKBCMMDVUPST_BPDPWSVHUYKPZWAPW
|
147
|
+
BTBH_TMTBKJHXCELLFRVMHESRSZTEH_NKRKDXPWVKXHAVWWEYQFHWRNEFTCEEXMEJTYAVPQJHNYWKZYJTMPVSKVVLB
|
148
|
+
CXEPVCARVEDLNSVDNKL_UHDANNDBS_PBHXZDGCDHPMFLUZRZZXBGLDHEMVXYMAJWGVEBHKCGYUCJV_MTTJRKHNDNTC
|
149
|
+
GDBSKGMVDCKPLBYSWBBZDLYCAXAFTPHDTEDWLPQGMRNJ_RKDTVZGAVGNEYAWTAEJ_LHCNMLCWHYMBMLCWHKMEZSTD_
|
150
|
+
ZTEKCQN_AAZSDXDTGRNVFJCHZQXZYXHXSYGLTPQWGQYQLCPVGDQQBFAPPFXLUGGRP_JEEYMXB_AGANNKQCBNLVGZL_
|
151
|
+
BLNWUQALBVLFBSNARU_YGEGAAVNM_EB_Z_SSBQGUXTRAN_AUAKGMFAJWMARKVCBPDABAZGVLKXCB_WWLEDHQLLFUFW
|
152
|
+
KGQRBZ_BJEVLPUJKAENRRZSFRXHU_EKMGWAEXHKATVVNTCGXFEKMZTZYTWHLNNAGEUVHGTLGBDLBGKTKNJBW_PZYUZ
|
153
|
+
XPTDQCWEMDDEEHLWCQYTHHUXWNUPYTMFMDGJEWDBNZMGLZRLFBZHMPYAEJJVPMKZNHVDCFKPKSKBW_NUWESYUN_JYY
|
154
|
+
NVTXRJUBGEALDNAEDFMQKPDVCBTYEGHRWZTUHBQGBW_WMERALGG_TKFNEYXZR__WLXYPQWKKFUVCNSJMGQQWDTZJQG
|
155
|
+
WJLUQJYQTEBUCVBEVAAWTAEGRCFANKZSN_EMBBMNNJGVBEHT_JKWYYMGNLWKEZKAWGLKQ_PPJBBDPASDWJSEJEDNGE
|
156
|
+
K_MZWHA_PQX_LUREDLWGSLASXNT_LJKTM_RRVMXZGBYTEEEV_ZCMXXHPLTYBQVXQFLPBBXHKU_LLDHQDDXUNQSDM_R
|
157
|
+
NUMJQAUT__RNYUQNLQJQBUNJGBBBCLGRHFQNY_JMEQXECLFJT_HVDWXM_HTLRBFLEWLTTUKWWLTATXNPKXDFFXDHG_
|
158
|
+
CXGBJLEAUJJDHLGNXFSTDRLPZUYYFYESFND_E_SQWUWFCDMJQEADJUCULXEJHBGREFEJE_DUWLRL_NWJEPTJZTLAUL
|
159
|
+
GZ_DCWAWKPP_VFDNFHQSTZV_CEBWTFSRKHVXNQKVYNJXPGUDWZFMFCKWGAFHYLEGGHDAH_FJDQCKNRNEDTWNHXXDNT
|
160
|
+
UZFBXMQFKATJCNRCBYFQVYCQYWHZFAFTXAHCFAXRVQJNTYEVHXQZRVVBWDWNBDWHDUWPQRVETEWUA_MGLVSXHRJTZC
|
161
|
+
ZVXNWGHTZGAYPCYMCYMT_RY_BWUSUYGXYG_QEEWZMURRQPNVAABXPEMNHPCUDPBNXMFNSNKBNRBHXPZJGYGTDEVBNT
|
162
|
+
DVN_QJPEVVQJLYRSNHEYWUWWWHFQBCHZWJBSDQQSQYPNVLGTLEUC__JQSJKAHZBKVBFAMWWWGRPY_WGGLJHGUUSXFD
|
163
|
+
SXJVEV_TZPLKSWTBBXRBXVJLMWZJPBGUWYNEZXBUXKEBWJNPJWVUKWRRAGJCMKDXSEADEJKUTSQVLKTDAWLGESAVHC
|
164
|
+
__HGDXDN_QLKBGPGTYSWRAXTJEHVPKWDSTTFT_PAMVKNCGGVEBMHUPLYXENFTQFJMPTZQBMTSUKXUL_ZLAZAXCKYPX
|
165
|
+
SJWBYKJHPXRWSSL_MEHXRGMUWVJRNLTN_R_JBDWXLAZVCNAYBGVQLNXUMBSDFAEPKXYXC_ZZKAPHTHVWRHQNNVFPEE
|
166
|
+
SRBWVTKMJYLNXXSABTZBMKBSHERSYJARNARKVKYCNHLVC_NEFERGLQPHMDXNAXPKJWDQLGXJ_JRKJGUCPZPCDSMFCU
|
167
|
+
HTWMQKLM__KKXYWCLGRSALKJTEXAWWZUZBQGTEBGSAAKEPXB_MPVMWQTCHRGRNXRNBKTTMDPMRZCYALGMKRYC_DQTA
|
168
|
+
LJRWXGKFSER_EBYUZTFFBVHEPLYRWUDGJRKAYQRSZVDJJQRHTSQN_NKRQDLEQJNVHGMJWLWLVHLZRVLBPQSMGHUAFJ
|
169
|
+
WJUVWNUGUFBHJBGPXBEGJVBYUTSUJRWYYMQBXWNDKRWYJZQR_B_G_RSGU_R_PBCKPZ_PGVDCMJU_ZEFNZNDZCNJZFH
|
170
|
+
KDBQ__SF_JKEDSHCAWQZGAXTBLFSBTRUU_RURQZTCFFRQF_YGSABZPG_ZCPSHYHYQCBKENEWVVAJZSSASMZ_CHCLJV
|
171
|
+
WBLDSCDJTXUGAKNNBEBYWGSLDCCUYEXMZTHVDJDTHRSRUGYYHEEYEAK_ZWU_PUAJXXKLHZRPR_RYCUVMWKULBKHVYB
|
172
|
+
JTDFHWNVHXXAQFFCYAGSYAJDQUCESY_HBXPSEBHCYHUKGERTRTCNZSR_ZXZ_GWKFMAUYPQJVS_CPNESKMHEGB_WRQK
|
173
|
+
MDSFDSVLLYBDBWXZGGKDHVVCFGLAPMWPZVLASPCVARVCAMQLXTEGLUPWPSWRFTBTVSCMRWEUVUWTYFZZSMUPMZWXRX
|
174
|
+
XHEPPBBDLPQMJVUXHVKPGVRLSUULSRTBJSNCALWEQE_J_MQCKXWEVHXZHPQESXSYJHDMYHEZG_WQCNBRGBHVZGPJUF
|
175
|
+
HYHUWBHASKPKXZAQXFQHVPSYUBDWXKAWBJRYCPXAFEUA_PMYHWERLPFSENUFAJTKGQLSZSZ__HGYZAMNAENLA_ZSJT
|
176
|
+
VT_ZUWDYLZUMCGDZALTEQDRW_VCTEGFVYSPQRCTVMEDFPBEPWUKACNNCDJSHKKASCJDDRUYA_GKLJLPE_CSNT_AMFM
|
177
|
+
ZGCJD_HMUKQWFTGJAB_SAVQC_KLNYUPADHERKSHQTHSFMTZMRMRJBMMDNPJUHSHDBVDGHFDMRZUHXDVRLBLNBQXXTX
|
178
|
+
VFJXWFKDPHWMWZGAR_MN_YL_LWTWUT_QSQGRCYBPRPXGY_FRXGCWHQGRRWVDBGMEBEEDNXQQCNHTXFYYWX_EPGQTA_
|
179
|
+
QNHKCRRPFBDZQB_QCVTQHFWSMPWQAUECSVGMH_XBKZEEGXSWPGHLSNVBJVCNUWYEXMAPFYWXWWZQSZBJNPTYMUVB_D
|
180
|
+
TVXQ_Z_AAWUDNXVXRMRP_QGVSUAUNQKZDADVPVUTSBNWHQBVMPYESMGEUDLCDDAEPHPAKFJSNALZTTZTWSXAC_YJSD
|
181
|
+
CKLAEHWZG_FUCMMAWWREVVAHKGFUYZNGSQCTREFYKTYNZFPRVHFX_WKTCSNLKLUQQTMRPMTUGTLZ_VEGRAGYZFLWGA
|
182
|
+
BPQ_QYAUKRUAPSK_XRTTNAQ_ZVXNPPLXZMFKXJJRHJEZWHXRE_PHCLDMGWVLCLGGLUUPCG_R_KXSNYTRXVYMUHVQAP
|
183
|
+
TRUB_UJPYQRSZXZPXJWXKFXGJMPW_EBNPRZDTCCUGUJLUCRRYWPSKJSLWNZNPJMTPUCMTSZLLQVLUSPQ_EQMCRAEQR
|
184
|
+
NFWESWDAWBPEGXQKWRAQZ_LNLZKSDUAVFKUJWZLGSWZLNLFURRYFLYHGYRWRXUVTRFLU_ZKB__UGLYDCJJSUHFZBUS
|
185
|
+
QFVNJYTAQ_GNGXH_PHJFGUYGZBNGZBQDU_HHWCHKVCKUACBMCFUBESTWTYSSMDQRMAHSRFLXHUTMRHNNBTW_HZDJKC
|
186
|
+
SCRWSJPAEQARDEUDVEUHZZZ_MWSTHUWDYUPFHTULHUPXGBMBMNFKRCLUYGPDRJQCTPGEZHRJTXPWRRSSPKPRLGJBZP
|
187
|
+
PPDJUGBWJEVKERNAKEFCEQWXWBKAPMDTPTGXCTLDPYRSVAFU_PZUJNXLEDGFQBHVEJAKBKENZLTRBEBLSPBLYMDHS_
|
188
|
+
NFKTTRESNHXCWEDWPKCSBRPWJSMGRVBWQSSNBLDJD_JECTBUGTMJCFKEBPBLBWTHTAGAACDHDCDSSHVKHXVFYYWZLR
|
189
|
+
XAYWHDNSJBMNBVR_LMURYYBQ_RUGAKAHJJDFGMVVKADBLWZZFDKCZXVNWQEGQRUPLPMTCKVXEWHRANUFZNQHHGFJTW
|
190
|
+
WLJ_QPAPJZEQJDQSXUFPESUSDDKLXDHVTDCUYQYNYGFXBGAZ_TXDZMCDFZASUCNETC_BVTPNFLYVDEFFTP_WLTBPZH
|
191
|
+
JYRAKCVLHZR_KDGQVNDFMMVQ_QNHVYJDQREWJWLGTUYAJECKXCJGVDQXWZTNXUMCTHKYJWKTXZEMPAAFNVLLANHGLP
|
192
|
+
BJWF_QXVQRDKXPLQJTEGTPFFML_FBHDNZUGHTRNFHLZ_MGPU_MSDFHVUARAPKBVKWUPKXYNHMKRXTSZXBQEEQQXXAZ
|
193
|
+
YFTGHTH_WCBKUQFYYEZYZBTWGHSKLKPCEAAPCJQYSDDWAFKLQAUAQHDUSSPKNEECVQULALKNBWSPFXN_XHLJLKFTRR
|
194
|
+
TZNFRTDGTYEYKMDAJMTELPERMTMBNUALNHENSKKGCZJWCJBJZQCDNWLURTCXEWFJCTEEJDKQZNXGDMSQM_JBHGACCL
|
195
|
+
MYXWTCEYZKYUNFHQRZBUMELYBTZTMERKMTRWJBAQJQFEKQAXDKQAEFPMHSDJSQKFCQGKRPZBUQRDRTCDBZGUSGUUJA
|
196
|
+
RHSZUV_QXXGYQWXTCSBW_MQDTWPYFABLFMEADWXPLYYANWVXNHF_ACBCZZCZASNKRXPAMAYUVTGDJCUBRCKSAJBLYE
|
197
|
+
VKUDUVMLMPVUYZSWMGMESLA_TPGVHQNUCFMWZSKFGRRAPWBSJBFFXQUEDJ_QYEAHFTDLAMGEXFFHPUVBMDRNMAWCE_
|
198
|
+
XLSYEPTLAWELKEDDXRSEAEXARXMMQBKL_FXXFVDNQFFEVQHBWEQENGLBWPHE_MAZFQVCHMYVQSTYSEGDLLARMNLUVT
|
199
|
+
URMBLHSBVZEGQKGAUNBWLYXWKN_Y_HXSVRYLDJMAG_MDZPEBZCDDENACPAULGZNRRFFRZCJNDZNKGPBPSBCW_DBSNW
|
200
|
+
PAQSYEKZBC_UTPCRKZFDUVQYSQBEDYEPMSUEVJTRYQLXQQGJTECSZRRZGESFPZPHWUWTUECVLQFNZFCBMBZZRRBUPD
|
201
|
+
BXLRNXWD_WEFVLLPRVYHJFYKPBGX_JUWZRTH_VZUSPUGKTSRQBNZAGELPTYCEHKAVDMCKUWSYQDFKTTNYX_G_RFDPB
|
202
|
+
|
data/csv/faild.csv
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
text
|
2
|
+
.............................................................................................
|
3
|
+
.##...##.######..####...####..######..####..##..##........######..####..######.##.....#####..
|
4
|
+
.###.###...##...##.....##.......##...##..##.###.##........##.....##..##...##...##.....##..##.
|
5
|
+
.##.#.##...##....####...####....##...##..##.##.###........####...######...##...##.....##..##.
|
6
|
+
.##...##...##.......##.....##...##...##..##.##..##........##.....##..##...##...##.....##..##.
|
7
|
+
.##...##.######..####...####..######..####..##..##........##.....##..##.######.######.#####..
|
8
|
+
.............................................................................................
|
9
|
+
|
10
|
+
create by kouta
|
11
|
+
|
12
|
+
|
data/csv/hax.csv
ADDED
@@ -0,0 +1,347 @@
|
|
1
|
+
text
|
2
|
+
|
3
|
+
#include <QDebug>
|
4
|
+
#include <QFile>
|
5
|
+
#include <QHash>
|
6
|
+
#include <QPair>
|
7
|
+
#include <QSet>
|
8
|
+
#include <limits>
|
9
|
+
#include <openbr/openbr_plugin.h>
|
10
|
+
|
11
|
+
#include openbr/core/bee.h
|
12
|
+
#include openbr/core/cluster.h
|
13
|
+
|
14
|
+
typedef QPair<int,float> Neighbor; // QPair<id,similarity>
|
15
|
+
typedef QList<Neighbor> Neighbors;
|
16
|
+
typedef QVector<Neighbors> Neighborhood;
|
17
|
+
|
18
|
+
// Compare function used to order neighbors from highest to lowest similarity
|
19
|
+
static bool compareNeighbors(const Neighbor &a, const Neighbor &b)
|
20
|
+
{
|
21
|
+
if (a.second == b.second)
|
22
|
+
return a.first < b.first;
|
23
|
+
return a.second > b.second;
|
24
|
+
}
|
25
|
+
|
26
|
+
// Zhu et al. A Rank-Order Distance based Clustering Algorithm for Face Tagging, CVPR 2011
|
27
|
+
// Ob(x) in eq. 1, modified to consider 0/1 as ground truth imposter/genuine.
|
28
|
+
static int indexOf(const Neighbors &neighbors, int i)
|
29
|
+
{
|
30
|
+
for (int j=0; j<neighbors.size(); j++) {
|
31
|
+
const Neighbor &neighbor = neighbors[j];
|
32
|
+
if (neighbor.first == i) {
|
33
|
+
if (neighbor.second == 0) return neighbors.size()-1;
|
34
|
+
else if (neighbor.second == 1) return 0;
|
35
|
+
else return j;
|
36
|
+
}
|
37
|
+
}
|
38
|
+
return -1;
|
39
|
+
}
|
40
|
+
|
41
|
+
// Zhu et al. A Rank-Order Distance based Clustering Algorithm for Face Tagging, CVPR 2011
|
42
|
+
// Corresponds to eq. 1, or D(a,b)
|
43
|
+
static int asymmetricalROD(const Neighborhood &neighborhood, int a, int b)
|
44
|
+
{
|
45
|
+
int distance = 0;
|
46
|
+
foreach (const Neighbor &neighbor, neighborhood[a]) {
|
47
|
+
if (neighbor.first == b) break;
|
48
|
+
int index = indexOf(neighborhood[b], neighbor.first);
|
49
|
+
distance += (index == -1) ? neighborhood[b].size() : index;
|
50
|
+
}
|
51
|
+
return distance;
|
52
|
+
}
|
53
|
+
|
54
|
+
// Zhu et al. A Rank-Order Distance based Clustering Algorithm for Face Tagging, CVPR 2011
|
55
|
+
// Corresponds to eq. 2/4, or D-R(a,b)
|
56
|
+
float normalizedROD(const Neighborhood &neighborhood, int a, int b)
|
57
|
+
{
|
58
|
+
int indexA = indexOf(neighborhood[b], a);
|
59
|
+
int indexB = indexOf(neighborhood[a], b);
|
60
|
+
|
61
|
+
// Default behaviors
|
62
|
+
if ((indexA == -1) || (indexB == -1)) return std::numeric_limits<float>::max();
|
63
|
+
if ((neighborhood[b][indexA].second == 1) || (neighborhood[a][indexB].second == 1)) return 0;
|
64
|
+
if ((neighborhood[b][indexA].second == 0) || (neighborhood[a][indexB].second == 0)) return std::numeric_limits<float>::max();
|
65
|
+
|
66
|
+
int distanceA = asymmetricalROD(neighborhood, a, b);
|
67
|
+
int distanceB = asymmetricalROD(neighborhood, b, a);
|
68
|
+
return 1.f * (distanceA + distanceB) / std::min(indexA+1, indexB+1);
|
69
|
+
}
|
70
|
+
|
71
|
+
Neighborhood getNeighborhood(const QStringList &simmats)
|
72
|
+
{
|
73
|
+
Neighborhood neighborhood;
|
74
|
+
|
75
|
+
float globalMax = -std::numeric_limits<float>::max();
|
76
|
+
float globalMin = std::numeric_limits<float>::max();
|
77
|
+
int numGalleries = (int)sqrt((float)simmats.size());
|
78
|
+
if (numGalleries*numGalleries != simmats.size())
|
79
|
+
qFatal(Incorrect number of similarity matrices.);
|
80
|
+
|
81
|
+
// Process each simmat
|
82
|
+
for (int i=0; i<numGalleries; i++) {
|
83
|
+
QVector<Neighbors> allNeighbors;
|
84
|
+
|
85
|
+
int currentRows = -1;
|
86
|
+
int columnOffset = 0;
|
87
|
+
for (int j=0; j<numGalleries; j++) {
|
88
|
+
cv::Mat m = BEE::readMat(simmats[i*numGalleries+j]);
|
89
|
+
if (j==0) {
|
90
|
+
currentRows = m.rows;
|
91
|
+
allNeighbors.resize(currentRows);
|
92
|
+
}
|
93
|
+
if (currentRows != m.rows) qFatal(Row count mismatch.);
|
94
|
+
|
95
|
+
// Get data row by row
|
96
|
+
for (int k=0; k<m.rows; k++) {
|
97
|
+
Neighbors &neighbors = allNeighbors[k];
|
98
|
+
neighbors.reserve(neighbors.size() + m.cols);
|
99
|
+
for (int l=0; l<m.cols; l++) {
|
100
|
+
float val = m.at<float>(k,l);
|
101
|
+
if ((i==j) && (k==l)) continue; // Skips self-similarity scores
|
102
|
+
|
103
|
+
if ((val != -std::numeric_limits<float>::infinity()) &&
|
104
|
+
(val != std::numeric_limits<float>::infinity())) {
|
105
|
+
globalMax = std::max(globalMax, val);
|
106
|
+
globalMin = std::min(globalMin, val);
|
107
|
+
}
|
108
|
+
neighbors.append(Neighbor(l+columnOffset, val));
|
109
|
+
}
|
110
|
+
}
|
111
|
+
|
112
|
+
columnOffset += m.cols;
|
113
|
+
}
|
114
|
+
|
115
|
+
// Keep the top matches
|
116
|
+
for (int j=0; j<allNeighbors.size(); j++) {
|
117
|
+
Neighbors &val = allNeighbors[j];
|
118
|
+
const int cutoff = 20; // Somewhat arbitrary number of neighbors to keep
|
119
|
+
int keep = std::min(cutoff, val.size());
|
120
|
+
std::partial_sort(val.begin(), val.begin()+keep, val.end(), compareNeighbors);
|
121
|
+
neighborhood.append((Neighbors)val.mid(0, keep));
|
122
|
+
}
|
123
|
+
}
|
124
|
+
|
125
|
+
// Normalize scores
|
126
|
+
for (int i=0; i<neighborhood.size(); i++) {
|
127
|
+
Neighbors &neighbors = neighborhood[i];
|
128
|
+
for (int j=0; j<neighbors.size(); j++) {
|
129
|
+
Neighbor &neighbor = neighbors[j];
|
130
|
+
if (neighbor.second == -std::numeric_limits<float>::infinity())
|
131
|
+
neighbor.second = 0;
|
132
|
+
else if (neighbor.second == std::numeric_limits<float>::infinity())
|
133
|
+
neighbor.second = 1;
|
134
|
+
else
|
135
|
+
neighbor.second = (neighbor.second - globalMin) / (globalMax - globalMin);
|
136
|
+
}
|
137
|
+
}
|
138
|
+
|
139
|
+
return neighborhood;
|
140
|
+
}
|
141
|
+
|
142
|
+
// Zhu et al. A Rank-Order Distance based Clustering Algorithm for Face Tagging, CVPR 2011
|
143
|
+
br::Clusters br::ClusterGallery(const QStringList &simmats, float aggressiveness, const QString &csv)
|
144
|
+
{
|
145
|
+
qDebug(Clustering %d simmat(s), simmats.size());
|
146
|
+
|
147
|
+
// Read in gallery parts, keeping top neighbors of each template
|
148
|
+
Neighborhood neighborhood = getNeighborhood(simmats);
|
149
|
+
const int cutoff = neighborhood.first().size();
|
150
|
+
const float threshold = 3*cutoff/4 * aggressiveness/5;
|
151
|
+
|
152
|
+
// Initialize clusters
|
153
|
+
Clusters clusters(neighborhood.size());
|
154
|
+
for (int i=0; i<neighborhood.size(); i++)
|
155
|
+
clusters[i].append(i);
|
156
|
+
|
157
|
+
bool done = false;
|
158
|
+
while (!done) {
|
159
|
+
// nextClusterIds[i] = j means that cluster i is set to merge into cluster j
|
160
|
+
QVector<int> nextClusterIDs(neighborhood.size());
|
161
|
+
for (int i=0; i<neighborhood.size(); i++) nextClusterIDs[i] = i;
|
162
|
+
|
163
|
+
// For each cluster
|
164
|
+
for (int clusterID=0; clusterID<neighborhood.size(); clusterID++) {
|
165
|
+
const Neighbors &neighbors = neighborhood[clusterID];
|
166
|
+
int nextClusterID = nextClusterIDs[clusterID];
|
167
|
+
|
168
|
+
// Check its neighbors
|
169
|
+
foreach (const Neighbor &neighbor, neighbors) {
|
170
|
+
int neighborID = neighbor.first;
|
171
|
+
int nextNeighborID = nextClusterIDs[neighborID];
|
172
|
+
|
173
|
+
// Don't bother if they have already merged
|
174
|
+
if (nextNeighborID == nextClusterID) continue;
|
175
|
+
|
176
|
+
// Flag for merge if similar enough
|
177
|
+
if (normalizedROD(neighborhood, clusterID, neighborID) < threshold) {
|
178
|
+
if (nextClusterID < nextNeighborID) nextClusterIDs[neighborID] = nextClusterID;
|
179
|
+
else nextClusterIDs[clusterID] = nextNeighborID;
|
180
|
+
}
|
181
|
+
}
|
182
|
+
}
|
183
|
+
|
184
|
+
// Transitive merge
|
185
|
+
for (int i=0; i<neighborhood.size(); i++) {
|
186
|
+
int nextClusterID = i;
|
187
|
+
while (nextClusterID != nextClusterIDs[nextClusterID]) {
|
188
|
+
assert(nextClusterIDs[nextClusterID] < nextClusterID);
|
189
|
+
nextClusterID = nextClusterIDs[nextClusterID];
|
190
|
+
}
|
191
|
+
nextClusterIDs[i] = nextClusterID;
|
192
|
+
}
|
193
|
+
|
194
|
+
// Construct new clusters
|
195
|
+
QHash<int, int> clusterIDLUT;
|
196
|
+
QList<int> allClusterIDs = QSet<int>::fromList(nextClusterIDs.toList()).values();
|
197
|
+
for (int i=0; i<neighborhood.size(); i++)
|
198
|
+
clusterIDLUT[i] = allClusterIDs.indexOf(nextClusterIDs[i]);
|
199
|
+
|
200
|
+
Clusters newClusters(allClusterIDs.size());
|
201
|
+
Neighborhood newNeighborhood(allClusterIDs.size());
|
202
|
+
|
203
|
+
for (int i=0; i<neighborhood.size(); i++) {
|
204
|
+
int newID = clusterIDLUT[i];
|
205
|
+
newClusters[newID].append(clusters[i]);
|
206
|
+
newNeighborhood[newID].append(neighborhood[i]);
|
207
|
+
}
|
208
|
+
|
209
|
+
// Update indices and trim
|
210
|
+
for (int i=0; i<newNeighborhood.size(); i++) {
|
211
|
+
Neighbors &neighbors = newNeighborhood[i];
|
212
|
+
int size = qMin(neighbors.size(),cutoff);
|
213
|
+
std::partial_sort(neighbors.begin(), neighbors.begin()+size, neighbors.end(), compareNeighbors);
|
214
|
+
for (int j=0; j<size; j++)
|
215
|
+
neighbors[j].first = clusterIDLUT[j];
|
216
|
+
neighbors = neighbors.mid(0, c utoff);
|
217
|
+
}
|
218
|
+
|
219
|
+
// Update results
|
220
|
+
done = true; //(newClusters.size() >= clusters.size());
|
221
|
+
clusters = newClusters;
|
222
|
+
neighborhood = newNeighborhood;
|
223
|
+
}
|
224
|
+
|
225
|
+
// Save clusters
|
226
|
+
if (!csv.isEmpty())
|
227
|
+
WriteClusters(clusters, csv);
|
228
|
+
return clusters;
|
229
|
+
}
|
230
|
+
|
231
|
+
// Santo Fortunato Community detection in graphs, Physics Reports 486 (2010)
|
232
|
+
// wI or wII metric (page 148)
|
233
|
+
float wallaceMetric(const br::Clusters &clusters, const QVector<int> &indices)
|
234
|
+
{
|
235
|
+
int matches = 0;
|
236
|
+
int total = 0;
|
237
|
+
foreach (const QList<int> &cluster, clusters) {
|
238
|
+
for (int i=0; i<cluster.size(); i++) {
|
239
|
+
for (int j=i+1; j<cluster.size(); j++) {
|
240
|
+
total++;
|
241
|
+
if (indices[cluster[i]] == indices[cluster[j]])
|
242
|
+
matches++;
|
243
|
+
}
|
244
|
+
}
|
245
|
+
}
|
246
|
+
return (float)matches/(float)total;
|
247
|
+
}
|
248
|
+
|
249
|
+
// Santo Fortunato Community detection in graphs, Physics Reports 486 (2010)
|
250
|
+
// Jaccard index (page 149)
|
251
|
+
float jaccardIndex(const QVector<int> &indicesA, const QVector<int> &indicesB)
|
252
|
+
{
|
253
|
+
int a[2][2] = {{0,0},{0,0}};
|
254
|
+
for (int i=0; i<indicesA.size()-1; i++)
|
255
|
+
for (int j=i+1; j<indicesA.size(); j++)
|
256
|
+
a[indicesA[i] == indicesA[j] ? 1 : 0][indicesB[i] == indicesB[j] ? 1 : 0]++;
|
257
|
+
|
258
|
+
return float(a[1][1]) / (a[0][1] + a[1][0] + a[1][1]);
|
259
|
+
}
|
260
|
+
|
261
|
+
// Evaluates clustering algorithms based on metrics described in
|
262
|
+
// Santo Fortunato Community detection in graphs, Physics Reports 486 (2010)
|
263
|
+
void br::EvalClustering(const QString &csv, const QString &input)
|
264
|
+
{
|
265
|
+
qDebug(Evaluating %s against %s, qPrintable(csv), qPrintable(input));
|
266
|
+
|
267
|
+
// We assume clustering algorithms store assigned cluster labels as integers (since the clusters are
|
268
|
+
// not named). Direct use of ClusterID is not general -cao
|
269
|
+
QList<int> labels = File::get<int>(TemplateList::fromGallery(input), ClusterID);
|
270
|
+
|
271
|
+
QHash<int, int> labelToIndex;
|
272
|
+
int nClusters = 0;
|
273
|
+
for (int i=0; i<labels.size(); i++) {
|
274
|
+
const float &label = labels[i];
|
275
|
+
if (!labelToIndex.contains(label))
|
276
|
+
labelToIndex[label] = nClusters++;
|
277
|
+
}
|
278
|
+
|
279
|
+
Clusters truthClusters; truthClusters.reserve(nClusters);
|
280
|
+
for (int i=0; i<nClusters; i++)
|
281
|
+
truthClusters.append(QList<int>());
|
282
|
+
|
283
|
+
QVector<int> truthIndices(labels.size());
|
284
|
+
for (int i=0; i<labels.size(); i++) {
|
285
|
+
truthIndices[i] = labelToIndex[labels[i]];
|
286
|
+
truthClusters[labelToIndex[labels[i]]].append(i);
|
287
|
+
}
|
288
|
+
|
289
|
+
Clusters testClusters = ReadClusters(csv);
|
290
|
+
|
291
|
+
QVector<int> testIndices(labels.size());
|
292
|
+
for (int i=0; i<testClusters.size(); i++)
|
293
|
+
for (int j=0; j<testClusters[i].size(); j++)
|
294
|
+
testIndices[testClusters[i][j]] = i;
|
295
|
+
|
296
|
+
// At this point the following 4 things are defined:
|
297
|
+
// truthClusters - list of clusters of template_ids based on subject_ids
|
298
|
+
// truthIndices - template_id to cluster_id based on sigset subject_ids
|
299
|
+
// testClusters - list of clusters of template_ids based on csv input
|
300
|
+
// testIndices - template_id to cluster_id based on testClusters
|
301
|
+
|
302
|
+
float wI = wallaceMetric(truthClusters, testIndices);
|
303
|
+
float wII = wallaceMetric(testClusters, truthIndices);
|
304
|
+
float jaccard = jaccardIndex(testIndices, truthIndices);
|
305
|
+
qDebug(Recall: %f Precision: %f F-score: %f Jaccard index: %f, wI, wII, sqrt(wI*wII), jaccard);
|
306
|
+
}
|
307
|
+
|
308
|
+
br::Clusters br::ReadClusters(const QString &csv)
|
309
|
+
{
|
310
|
+
Clusters clusters;
|
311
|
+
QFile file(csv);
|
312
|
+
bool success = file.open(QFile::ReadOnly);
|
313
|
+
if (!success) qFatal(Failed to open %s for reading., qPrintable(csv));
|
314
|
+
QStringList lines = QString(file.readAll()).split(\n);
|
315
|
+
file.close();
|
316
|
+
|
317
|
+
foreach (const QString &line, lines) {
|
318
|
+
Cluster cluster;
|
319
|
+
QStringList ids = line.trimmed().split(,, QString::SkipEmptyParts);
|
320
|
+
foreach (const QString &id, ids) {
|
321
|
+
bool ok;
|
322
|
+
cluster.append(id.toInt(&ok));
|
323
|
+
if (!ok) qFatal(Non-interger id.);
|
324
|
+
}
|
325
|
+
clusters.append(cluster);
|
326
|
+
}
|
327
|
+
return clusters;
|
328
|
+
}
|
329
|
+
|
330
|
+
void br::WriteClusters(const Clusters &clusters, const QString &csv)
|
331
|
+
{
|
332
|
+
QFile file(csv);
|
333
|
+
bool success = file.open(QFile::WriteOnly);
|
334
|
+
if (!success) qFatal(Failed to open %s for writing., qPrintable(csv));
|
335
|
+
|
336
|
+
foreach (Cluster cluster, clusters) {
|
337
|
+
if (cluster.empty()) continue;
|
338
|
+
|
339
|
+
qSort(cluster);
|
340
|
+
QStringList ids;
|
341
|
+
foreach (int id, cluster)
|
342
|
+
ids.append(QString::number(id));
|
343
|
+
file.write(qPrintable(ids.join(,)+\n));
|
344
|
+
}
|
345
|
+
file.close();
|
346
|
+
}
|
347
|
+
|
data/csv/init.csv
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
text,sleep_time
|
2
|
+
initialize..,0.005
|
3
|
+
Install.. SuperHacker.exe,0.005
|
4
|
+
Loading...,0.002
|
5
|
+
Loading...,0.002
|
6
|
+
........................................................................................,0.001
|
7
|
+
..####...##..##..#####...######..#####...##..##...####....####...##..##..######..#####..,0.001
|
8
|
+
.##......##..##..##..##..##......##..##..##..##..##..##..##..##..##.##...##......##..##.,0.001
|
9
|
+
..####...##..##..#####...####....#####...######..######..##......####....####....#####..,0.001
|
10
|
+
.....##..##..##..##......##......##..##..##..##..##..##..##..##..##.##...##......##..##.,0.001
|
11
|
+
..####....####...##......######..##..##..##..##..##..##...####...##..##..######..##..##.,0.001
|
12
|
+
........................................................................................,0.001
|
13
|
+
______
|
14
|
+
/ /\
|
15
|
+
/ /##\
|
16
|
+
/ /####\
|
17
|
+
/ /######\
|
18
|
+
/ /########\
|
19
|
+
/ /##########\
|
20
|
+
/ /#####/\#####\
|
21
|
+
/ /#####/++\#####\
|
22
|
+
/ /#####/++++\#####\
|
23
|
+
/ /#####/\+++++\#####\
|
24
|
+
/ /#####/ \+++++\#####\
|
25
|
+
/ /#####/ \+++++\#####\
|
26
|
+
/ /#####/ \+++++\#####\
|
27
|
+
/ /#####/ \+++++\#####\
|
28
|
+
/ /#####/__________\+++++\#####\
|
29
|
+
/ \+++++\#####\
|
30
|
+
/__________________________\+++++\####/
|
31
|
+
\+++++++++++++++++++++++++++++++++\##/
|
32
|
+
\+++++++++++++++++++++++++++++++++\/
|
33
|
+
``````````````````````````````````
|
data/csv/log.csv
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
text
|
2
|
+
user1 pts/0 10.0.2.2 Thu Sep 20 22:55 still logged in
|
3
|
+
reboot system boot 3.10.0-862.11.6. Thu Sep 20 22:54 - 22:55 (00:00)
|
4
|
+
user1 pts/0 10.0.2.2 Sun Sep 9 04:31 - crash (11+18:23)
|
5
|
+
user1 pts/0 10.0.2.2 Sun Sep 9 04:17 - 04:31 (00:14)
|
6
|
+
reboot system boot 3.10.0-862.6.3.e Sun Sep 9 04:16 - 22:55 (11+18:38)
|
7
|
+
user1 pts/0 10.0.2.2 Tue Sep 4 23:57 - crash (4+04:19)
|
8
|
+
reboot system boot 3.10.0-862.6.3.e Tue Sep 4 23:56 - 22:55 (15+22:58)
|
9
|
+
user1 pts/0 10.0.2.2 Mon Sep 3 12:19 - 14:33 (02:13)
|
10
|
+
user1 pts/0 10.0.2.2 Mon Sep 3 12:08 - 12:17 (00:09)
|
11
|
+
reboot system boot 3.10.0-862.6.3.e Mon Sep 3 12:08 - 14:38 (02:29)
|
12
|
+
user1 pts/1 10.0.2.2 Sun Sep 2 13:16 - crash (22:52)
|
13
|
+
user1 pts/0 10.0.2.2 Sun Sep 2 08:16 - crash (1+03:52)
|
14
|
+
reboot system boot 3.10.0-862.6.3.e Sun Sep 2 08:16 - 14:38 (1+06:22)
|
15
|
+
user1 pts/0 10.0.2.2 Sat Sep 1 14:29 - 15:03 (00:33)
|
16
|
+
reboot system boot 3.10.0-862.6.3.e Sat Sep 1 14:29 - 15:03 (00:34)
|
17
|
+
user1 pts/0 10.0.2.2 Wed Aug 29 12:11 - 13:58 (01:46)
|
18
|
+
reboot system boot 3.10.0-862.6.3.e Wed Aug 29 12:11 - 15:03 (3+02:52)
|
19
|
+
user1 pts/0 10.0.2.2 Tue Aug 28 13:16 - crash (22:55)
|
20
|
+
reboot system boot 3.10.0-862.6.3.e Tue Aug 28 13:15 - 15:03 (4+01:47)
|
21
|
+
|
22
|
+
|
23
|
+
Username Port From Latest
|
24
|
+
root **Never logged in**
|
25
|
+
bin **Never logged in**
|
26
|
+
daemon **Never logged in**
|
27
|
+
adm **Never logged in**
|
28
|
+
lp **Never logged in**
|
29
|
+
sync **Never logged in**
|
30
|
+
shutdown **Never logged in**
|
31
|
+
halt **Never logged in**
|
32
|
+
mail **Never logged in**
|
33
|
+
operator **Never logged in**
|
34
|
+
ftp **Never logged in**
|
35
|
+
nobody **Never logged in**
|
36
|
+
systemd-network **Never logged in**
|
37
|
+
dbus **Never logged in**
|
38
|
+
polkitd **Never logged in**
|
39
|
+
rpc **Never logged in**
|
40
|
+
rpcuser **Never logged in**
|
41
|
+
nfsnobody **Never logged in**
|
42
|
+
sshd **Never logged in**
|
43
|
+
postfix **Never logged in**
|
44
|
+
chrony **Never logged in**
|
45
|
+
→user1 pts/0 10.0.2.2 22:55:20 +0000 2018
|
46
|
+
|
47
|
+
|
data/csv/menu.csv
ADDED
data/csv/success.csv
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
text
|
2
|
+
...........................................................................................................
|
3
|
+
.##...##.######..####...####..######..####..##..##.........####..##..##..####...####..######..####...####..
|
4
|
+
.###.###...##...##.....##.......##...##..##.###.##........##.....##..##.##..##.##..##.##.....##.....##.....
|
5
|
+
.##.#.##...##....####...####....##...##..##.##.###.........####..##..##.##.....##.....####....####...####..
|
6
|
+
.##...##...##.......##.....##...##...##..##.##..##............##.##..##.##..##.##..##.##.........##.....##.
|
7
|
+
.##...##.######..####...####..######..####..##..##.........####...####...####...####..######..####...####..
|
8
|
+
...........................................................................................................
|
9
|
+
|
10
|
+
create by kouta
|
data/exe/super_hacker
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'io/console/size'
|
2
|
+
$stdout.sync = true
|
3
|
+
|
4
|
+
#CreateCode
|
5
|
+
class CodeGenerator
|
6
|
+
def initialize
|
7
|
+
end
|
8
|
+
#単語毎に区切って表示
|
9
|
+
def type_word_code(str,split_sleep = 0.02,typing_sleep = 0.02)
|
10
|
+
str.chars do |s|
|
11
|
+
#もし空白なら空白用のスリープ時間を適用
|
12
|
+
if s == ' ' || s == '\t'
|
13
|
+
sleep(split_sleep)
|
14
|
+
print s
|
15
|
+
else
|
16
|
+
sleep(typing_sleep)
|
17
|
+
print s
|
18
|
+
end
|
19
|
+
end
|
20
|
+
puts
|
21
|
+
end
|
22
|
+
|
23
|
+
#プログレスバーの表示
|
24
|
+
def print_progres()
|
25
|
+
100.times do |num|
|
26
|
+
print "#{num}%\r"
|
27
|
+
sleep 0.025
|
28
|
+
STDOUT.flush
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
#CSVファイルの読み込み
|
33
|
+
def read_csv(file_name,sleep_time = 0.001,word_sleep = 0.02)
|
34
|
+
csv_data = CSV.read(file_name, headers: true)
|
35
|
+
csv_data.each do |data|
|
36
|
+
#もしテキストがなければ改行して次の文字へ
|
37
|
+
if data["text"].nil?
|
38
|
+
puts
|
39
|
+
next
|
40
|
+
end
|
41
|
+
|
42
|
+
#sleep_timeが設定されていれば、csvファイルのほうを有効にする
|
43
|
+
if data["sleep_time"].nil? == false
|
44
|
+
type_word_code(data["text"],word_sleep,data["sleep_time"].to_f)
|
45
|
+
else
|
46
|
+
#csvデータを表示する
|
47
|
+
type_word_code(data["text"],word_sleep,sleep_time)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
data/lib/super_hacker.rb
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
require './lib/super_hacker/version'
|
2
|
+
require 'csv'
|
3
|
+
require './lib/code_generator'
|
4
|
+
require 'securerandom'
|
5
|
+
|
6
|
+
class Hacker
|
7
|
+
def initialize
|
8
|
+
@cg = CodeGenerator.new()
|
9
|
+
end
|
10
|
+
|
11
|
+
#IPアドレスを入力するまでのシーン
|
12
|
+
def scene_input_ip
|
13
|
+
ip = "192.168.#{rand(1..99)}.#{rand(1..99)}"
|
14
|
+
@cg.type_word_code("You are Get IP address #{ip}")
|
15
|
+
@cg.type_word_code("Plz Input IP address")
|
16
|
+
print "[IP]> "
|
17
|
+
user_input_ip = gets.chomp()
|
18
|
+
#比較結果を返す
|
19
|
+
user_input_ip == ip
|
20
|
+
end
|
21
|
+
|
22
|
+
#loginするまでのシーン
|
23
|
+
def scene_login
|
24
|
+
#ダウンロード成功、色々流れてくる。
|
25
|
+
@cg.type_word_code("[CONNECTION SUCCESS]",0.02,0.01)
|
26
|
+
@cg.type_word_code("Downloading..",0.02,0.01)
|
27
|
+
@cg.print_progres()
|
28
|
+
@cg.read_csv("./csv/download.csv",0.00001,0.00001)
|
29
|
+
|
30
|
+
#パスワードを入力させる
|
31
|
+
create_password = SecureRandom.base64(5)
|
32
|
+
@cg.type_word_code("You are get Pass Word: #{create_password}")
|
33
|
+
@cg.type_word_code("Plz Input Pass Word")
|
34
|
+
print "[PassWord]> "
|
35
|
+
password = gets.chomp()
|
36
|
+
|
37
|
+
#比較結果を返す
|
38
|
+
create_password == password
|
39
|
+
end
|
40
|
+
|
41
|
+
#成功
|
42
|
+
def scene_success
|
43
|
+
@cg.read_csv("./csv/success.csv",0.001,0.001)
|
44
|
+
end
|
45
|
+
|
46
|
+
#失敗
|
47
|
+
def scene_faild
|
48
|
+
@cg.read_csv("./csv/faild.csv",0.001,0.001)
|
49
|
+
end
|
50
|
+
|
51
|
+
#実装部分
|
52
|
+
def step
|
53
|
+
#初期化csvファイルの読み込み
|
54
|
+
@cg.read_csv('./csv/init.csv')
|
55
|
+
|
56
|
+
loop do
|
57
|
+
#メニュー表示
|
58
|
+
@cg.read_csv('./csv/menu.csv')
|
59
|
+
|
60
|
+
print("(HACK_MENU)> ")
|
61
|
+
input = gets.chomp
|
62
|
+
|
63
|
+
if input == "hax"
|
64
|
+
#haxコードの表示
|
65
|
+
@cg.read_csv('./csv/hax.csv',0.002,0.0001)
|
66
|
+
@cg.read_csv('./csv/log.csv',0.002,0.0001)
|
67
|
+
|
68
|
+
#IPアドレスを入力させる
|
69
|
+
if scene_input_ip == false
|
70
|
+
@cg.type_word_code("You jare input mistakes..")
|
71
|
+
scene_faild
|
72
|
+
next
|
73
|
+
end
|
74
|
+
|
75
|
+
#loginするまでのシーン
|
76
|
+
if scene_login == false
|
77
|
+
@cg.type_word_code("You are input mistakes..")
|
78
|
+
scene_faild
|
79
|
+
next
|
80
|
+
end
|
81
|
+
|
82
|
+
@cg.type_word_code("Infiltration succeeded")
|
83
|
+
|
84
|
+
#成功
|
85
|
+
scene_success
|
86
|
+
|
87
|
+
elsif input == "exit" || input == "quit"
|
88
|
+
#終了
|
89
|
+
@cg.type_word_code("bye..")
|
90
|
+
break
|
91
|
+
else
|
92
|
+
#入力ミス
|
93
|
+
@cg.type_word_code("[INPUT ERROR]")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "super_hacker/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "super_hacker"
|
8
|
+
spec.version = SuperHacker::VERSION
|
9
|
+
spec.authors = ["kouta"]
|
10
|
+
spec.email = [""]
|
11
|
+
|
12
|
+
spec.summary = %q{SUPER HACK}
|
13
|
+
spec.description = %q{Are you Super Hacker? Yes. We are super hacker!! LOL}
|
14
|
+
spec.homepage = ""
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
18
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
19
|
+
# if spec.respond_to?(:metadata)
|
20
|
+
# spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
21
|
+
# else
|
22
|
+
# raise "RubyGems 2.0 or newer is required to protect against " \
|
23
|
+
# "public gem pushes."
|
24
|
+
# end
|
25
|
+
|
26
|
+
# Specify which files should be added to the gem when it is released.
|
27
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
28
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
29
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
30
|
+
end
|
31
|
+
spec.bindir = "exe"
|
32
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
33
|
+
spec.require_paths = ["lib"]
|
34
|
+
|
35
|
+
spec.add_development_dependency "bundler", "~> 1.16"
|
36
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
37
|
+
spec.add_development_dependency "minitest", "~> 5.0"
|
38
|
+
spec.add_development_dependency "thor"
|
39
|
+
|
40
|
+
end
|
41
|
+
|
metadata
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: super_hacker
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- kouta
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-09-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.16'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.16'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: thor
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: Are you Super Hacker? Yes. We are super hacker!! LOL
|
70
|
+
email:
|
71
|
+
- ''
|
72
|
+
executables:
|
73
|
+
- super_hacker
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- ".gitignore"
|
78
|
+
- ".travis.yml"
|
79
|
+
- CODE_OF_CONDUCT.md
|
80
|
+
- Gemfile
|
81
|
+
- Gemfile.lock
|
82
|
+
- LICENSE.txt
|
83
|
+
- README.md
|
84
|
+
- Rakefile
|
85
|
+
- bin/console
|
86
|
+
- bin/setup
|
87
|
+
- csv/download.csv
|
88
|
+
- csv/faild.csv
|
89
|
+
- csv/hax.csv
|
90
|
+
- csv/init.csv
|
91
|
+
- csv/log.csv
|
92
|
+
- csv/menu.csv
|
93
|
+
- csv/success.csv
|
94
|
+
- exe/super_hacker
|
95
|
+
- lib/code_generator.rb
|
96
|
+
- lib/super_hacker.rb
|
97
|
+
- lib/super_hacker/version.rb
|
98
|
+
- super_hacker.gemspec
|
99
|
+
homepage: ''
|
100
|
+
licenses:
|
101
|
+
- MIT
|
102
|
+
metadata: {}
|
103
|
+
post_install_message:
|
104
|
+
rdoc_options: []
|
105
|
+
require_paths:
|
106
|
+
- lib
|
107
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
requirements: []
|
118
|
+
rubyforge_project:
|
119
|
+
rubygems_version: 2.7.6
|
120
|
+
signing_key:
|
121
|
+
specification_version: 4
|
122
|
+
summary: SUPER HACK
|
123
|
+
test_files: []
|