├── report.png ├── py ├── report │ ├── semantic │ │ ├── themes │ │ │ ├── basic │ │ │ │ └── assets │ │ │ │ │ └── fonts │ │ │ │ │ ├── icons.eot │ │ │ │ │ ├── icons.ttf │ │ │ │ │ └── icons.woff │ │ │ └── default │ │ │ │ └── assets │ │ │ │ ├── fonts │ │ │ │ ├── icons.eot │ │ │ │ ├── icons.otf │ │ │ │ ├── icons.ttf │ │ │ │ ├── icons.woff │ │ │ │ └── icons.woff2 │ │ │ │ └── images │ │ │ │ └── flags.png │ │ └── components │ │ │ ├── sticky.min.css │ │ │ ├── tab.min.css │ │ │ ├── rail.min.css │ │ │ ├── breadcrumb.min.css │ │ │ ├── video.min.css │ │ │ ├── nag.min.css │ │ │ ├── site.min.css │ │ │ ├── shape.min.css │ │ │ ├── sticky.css │ │ │ ├── ad.min.css │ │ │ ├── tab.css │ │ │ ├── dimmer.min.css │ │ │ ├── reset.min.css │ │ │ ├── breadcrumb.css │ │ │ ├── comment.min.css │ │ │ ├── rail.css │ │ │ ├── video.css │ │ │ ├── popup.min.css │ │ │ ├── divider.min.css │ │ │ ├── feed.min.css │ │ │ ├── nag.css │ │ │ ├── loader.min.css │ │ │ ├── image.min.css │ │ │ ├── site.css │ │ │ ├── shape.css │ │ │ ├── search.min.css │ │ │ ├── dimmer.css │ │ │ ├── rating.min.js │ │ │ ├── item.min.css │ │ │ ├── modal.min.css │ │ │ ├── nag.min.js │ │ │ ├── message.min.css │ │ │ ├── ad.css │ │ │ ├── reveal.min.css │ │ │ ├── divider.css │ │ │ ├── video.min.js │ │ │ ├── comment.css │ │ │ ├── checkbox.min.js │ │ │ ├── statistic.min.css │ │ │ ├── site.min.js │ │ │ ├── input.min.css │ │ │ ├── accordion.min.css │ │ │ ├── popup.css │ │ │ ├── image.css │ │ │ ├── feed.css │ │ │ ├── accordion.min.js │ │ │ ├── progress.min.css │ │ │ └── loader.css │ ├── css │ │ └── common.css │ ├── js │ │ └── common.js │ └── template.html ├── program.py ├── config.py ├── instruction.py ├── handler.py ├── main.py ├── runtimeblock.py ├── trace.py └── pyh.py ├── r.sh ├── makefile ├── MyPinTool.vcxproj.filters ├── MyPinTool.sln └── makefile.rules /report.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmy375/pinvmp/HEAD/report.png -------------------------------------------------------------------------------- /py/report/semantic/themes/basic/assets/fonts/icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmy375/pinvmp/HEAD/py/report/semantic/themes/basic/assets/fonts/icons.eot -------------------------------------------------------------------------------- /py/report/semantic/themes/basic/assets/fonts/icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmy375/pinvmp/HEAD/py/report/semantic/themes/basic/assets/fonts/icons.ttf -------------------------------------------------------------------------------- /py/report/semantic/themes/basic/assets/fonts/icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmy375/pinvmp/HEAD/py/report/semantic/themes/basic/assets/fonts/icons.woff -------------------------------------------------------------------------------- /py/report/semantic/themes/default/assets/fonts/icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmy375/pinvmp/HEAD/py/report/semantic/themes/default/assets/fonts/icons.eot -------------------------------------------------------------------------------- /py/report/semantic/themes/default/assets/fonts/icons.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmy375/pinvmp/HEAD/py/report/semantic/themes/default/assets/fonts/icons.otf -------------------------------------------------------------------------------- /py/report/semantic/themes/default/assets/fonts/icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmy375/pinvmp/HEAD/py/report/semantic/themes/default/assets/fonts/icons.ttf -------------------------------------------------------------------------------- /py/report/semantic/themes/default/assets/fonts/icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmy375/pinvmp/HEAD/py/report/semantic/themes/default/assets/fonts/icons.woff -------------------------------------------------------------------------------- /py/report/semantic/themes/default/assets/images/flags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmy375/pinvmp/HEAD/py/report/semantic/themes/default/assets/images/flags.png -------------------------------------------------------------------------------- /py/report/semantic/themes/default/assets/fonts/icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lmy375/pinvmp/HEAD/py/report/semantic/themes/default/assets/fonts/icons.woff2 -------------------------------------------------------------------------------- /r.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # DEFAULT_PATH="D:/paper/papers/test_asm/test_pin/base64_vmp/base64.vmp_1.81_demo.exe" 4 | DEFAULT_PATH="D:/paper/papers/test_asm/test_llvm/all_op/all_op2.vmp_1.81.exe" 5 | 6 | if [ "$1" = "make" ]; then 7 | make TARGET=ia32 8 | ../../../pin.exe -t obj-ia32/MyPinTool.dll -- $DEFAULT_PATH 9 | elif [ "$1" = "clean" ]; then 10 | rm *.dump *.info *.trace *.log 11 | elif [ "$1" = "" ]; then 12 | ../../../pin.exe -t obj-ia32/MyPinTool.dll -- $DEFAULT_PATH 13 | else 14 | ../../../pin.exe -t obj-ia32/MyPinTool.dll -- $1 15 | fi -------------------------------------------------------------------------------- /py/report/css/common.css: -------------------------------------------------------------------------------- 1 | /* 2 | *{ 3 | font-family: Consolas, "微软雅黑", "Liberation Mono", Menlo, Courier, monospace !important; 4 | } 5 | */ 6 | *{ 7 | font-family: Consolas, "微软雅黑", "Liberation Mono", Menlo, Courier, monospace ; 8 | } 9 | 10 | #report .ui.left.sidebar { 11 | overflow: visible; 12 | width: 350px; 13 | } 14 | 15 | #report .ui.styled.accordion{ 16 | width: 100%; 17 | } 18 | 19 | #report .ui.page { 20 | margin-left: 10%; 21 | margin-right: 10%; 22 | margin-top: 80px; 23 | padding: auto; 24 | } 25 | 26 | .ui.toggle.checkbox label { 27 | color: white; 28 | } 29 | 30 | -------------------------------------------------------------------------------- /makefile: -------------------------------------------------------------------------------- 1 | ############################################################## 2 | # 3 | # DO NOT EDIT THIS FILE! 4 | # 5 | ############################################################## 6 | 7 | # If the tool is built out of the kit, PIN_ROOT must be specified in the make invocation and point to the kit root. 8 | ifdef PIN_ROOT 9 | CONFIG_ROOT := $(PIN_ROOT)/source/tools/Config 10 | else 11 | CONFIG_ROOT := ../Config 12 | endif 13 | include $(CONFIG_ROOT)/makefile.config 14 | include makefile.rules 15 | include $(TOOLS_ROOT)/Config/makefile.default.rules 16 | 17 | ############################################################## 18 | # 19 | # DO NOT EDIT THIS FILE! 20 | # 21 | ############################################################## 22 | -------------------------------------------------------------------------------- /py/report/semantic/components/sticky.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Sticky 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.sticky{position:static;-webkit-transition:width .2s ease,height .2s ease,top .2s ease,bottom .2s ease;transition:width .2s ease,height .2s ease,top .2s ease,bottom .2s ease;z-index:800}.ui.sticky.bound{position:absolute;left:auto;right:auto}.ui.sticky.fixed{position:fixed;left:auto;right:auto}.ui.sticky.bound.top,.ui.sticky.fixed.top{top:0;bottom:auto}.ui.sticky.bound.bottom,.ui.sticky.fixed.bottom{top:auto;bottom:0}.ui.native.sticky{position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;position:sticky} -------------------------------------------------------------------------------- /py/program.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | import instructions 5 | import trace 6 | import runtimeblock 7 | 8 | class Program(object): 9 | """docstring for Program""" 10 | def __init__(self, arg): 11 | 12 | self.instructions = {} # addr, instructions 13 | self.runtimeblocks = {} 14 | 15 | 16 | 17 | def load_instructions(self, filepath): 18 | for ins in instructions.parsefile(filepath): 19 | self.instructions[ins.addr] = ins 20 | 21 | def load_trace(self, filepath): 22 | current_block = RuntimeBlock() 23 | coverred_addr = set() 24 | 25 | for t in trace.parsefile(filepath): 26 | if t.addr not in self.instructions: 27 | raise Exception("Unknown address at %#x" % t.addr) 28 | inst = self.instructions[addr] 29 | if t.addr not in coverred_addr: 30 | current_block. 31 | 32 | 33 | -------------------------------------------------------------------------------- /MyPinTool.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {b8dd2600-7302-4aa7-a99d-1607cd3cd4fb} 14 | txt;doc;html 15 | 16 | 17 | 18 | 19 | Source Files 20 | 21 | 22 | 23 | 24 | Documents 25 | 26 | 27 | -------------------------------------------------------------------------------- /py/report/semantic/components/tab.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Tab 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.tab{display:none}.ui.tab.active,.ui.tab.open{display:block}.ui.tab.loading{position:relative;overflow:hidden;display:block;min-height:250px}.ui.tab.loading *{position:relative!important;left:-10000px!important}.ui.tab.loading.segment:before,.ui.tab.loading:before{position:absolute;content:'';top:100px;left:50%;margin:-1.25em 0 0 -1.25em;width:2.5em;height:2.5em;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.tab.loading.segment:after,.ui.tab.loading:after{position:absolute;content:'';top:100px;left:50%;margin:-1.25em 0 0 -1.25em;width:2.5em;height:2.5em;-webkit-animation:button-spin .6s linear;animation:button-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#aaa transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent} -------------------------------------------------------------------------------- /py/report/js/common.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function function_name (argument) { 2 | 3 | $('.ui.dropdown') 4 | .dropdown({ 5 | on: 'hover' 6 | }) 7 | ; 8 | 9 | // For side bar button. 10 | $('.ui.sidebar') 11 | .sidebar('attach events', '.launch.button') 12 | ; 13 | 14 | $('.ui.accordion') 15 | .accordion() 16 | ; 17 | $('.ui.checkbox') 18 | .checkbox(); 19 | 20 | // Check all checkbox. 21 | //$('.ui.checkbox').click() 22 | // toggle all back. 23 | var arr = $('.ui.checkbox') 24 | for(var i= 0; i' % (self.addr, self.disasm) 19 | 20 | @property 21 | def size(self): 22 | return len(self.bytes) 23 | 24 | def add_trace(self, trace): 25 | self.traces.append(trace) 26 | 27 | def print_trace(self, i=0): 28 | if len(self.traces) == 0: 29 | print '[!] No Trace at %s' % self 30 | if i >= len(self.traces): 31 | print self.traces[-1] 32 | else: 33 | print self.traces[i] 34 | 35 | def parse_file(filepath): 36 | for line in open(filepath, 'rb').read().splitlines(): 37 | addr, diasm, hexbytes = line.split('\t') 38 | yield Instruction(int(addr, 16), diasm, hexbytes.decode('hex')) 39 | 40 | 41 | if __name__ == '__main__': 42 | for ins in parse_file('../bin.ins'): 43 | print ins -------------------------------------------------------------------------------- /MyPinTool.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MyPinTool", "MyPinTool.vcxproj", "{639EF517-FCFC-408E-9500-71F0DC0458DB}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|x64 = Debug|x64 11 | Debug|x86 = Debug|x86 12 | Release|x64 = Release|x64 13 | Release|x86 = Release|x86 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {639EF517-FCFC-408E-9500-71F0DC0458DB}.Debug|x64.ActiveCfg = Debug|x64 17 | {639EF517-FCFC-408E-9500-71F0DC0458DB}.Debug|x64.Build.0 = Debug|x64 18 | {639EF517-FCFC-408E-9500-71F0DC0458DB}.Debug|x86.ActiveCfg = Debug|Win32 19 | {639EF517-FCFC-408E-9500-71F0DC0458DB}.Debug|x86.Build.0 = Debug|Win32 20 | {639EF517-FCFC-408E-9500-71F0DC0458DB}.Release|x64.ActiveCfg = Release|x64 21 | {639EF517-FCFC-408E-9500-71F0DC0458DB}.Release|x64.Build.0 = Release|x64 22 | {639EF517-FCFC-408E-9500-71F0DC0458DB}.Release|x86.ActiveCfg = Release|Win32 23 | {639EF517-FCFC-408E-9500-71F0DC0458DB}.Release|x86.Build.0 = Release|Win32 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | EndGlobal 29 | -------------------------------------------------------------------------------- /py/report/semantic/components/nag.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Nag 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.nag{display:none;opacity:.95;position:relative;top:0;left:0;z-index:999;min-height:0;width:100%;margin:0;padding:.75em 1em;background:#555;box-shadow:0 1px 2px 0 rgba(0,0,0,.2);font-size:1rem;text-align:center;color:rgba(0,0,0,.8);border-radius:0 0 .2857rem .2857rem;-webkit-transition:.2s background ease;transition:.2s background ease}a.ui.nag{cursor:pointer}.ui.nag>.title{display:inline-block;margin:0 .5em;color:#fff}.ui.nag>.close.icon{cursor:pointer;opacity:.4;position:absolute;top:50%;right:1em;font-size:1em;margin:-.5em 0 0;color:#fff;-webkit-transition:opacity .2s ease;transition:opacity .2s ease}.ui.nag:hover{background:#555;opacity:1}.ui.nag .close:hover{opacity:1}.ui.overlay.nag{position:absolute;display:block}.ui.fixed.nag{position:fixed}.ui.bottom.nag,.ui.bottom.nags{border-radius:.2857rem .2857rem 0 0;top:auto;bottom:0}.ui.inverted.nag,.ui.inverted.nags .nag{background-color:#f0f0f0;color:rgba(0,0,0,.85)}.ui.inverted.nag .close,.ui.inverted.nag .title,.ui.inverted.nags .nag .close,.ui.inverted.nags .nag .title{color:rgba(0,0,0,.4)}.ui.nags .nag{border-radius:0!important}.ui.nags .nag:last-child{border-radius:0 0 .2857rem .2857rem}.ui.bottom.nags .nag:last-child{border-radius:.2857rem .2857rem 0 0} -------------------------------------------------------------------------------- /py/report/semantic/components/site.min.css: -------------------------------------------------------------------------------- 1 | @import 'https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic&subset=latin';/*! 2 | * # Semantic UI - Site 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */body,html{height:100%}html{font-size:14px}body{margin:0;padding:0;min-width:320px;background:#f7f7f7;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:14px;line-height:1.33;color:rgba(0,0,0,.8);font-smoothing:antialiased}h1,h2,h3,h4,h5{font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;line-height:1.33em;margin:-webkit-calc(2rem - .165em)0 1rem;margin:calc(2rem - .165em)0 1rem;font-weight:700;padding:0}h1{min-height:1rem;font-size:2rem}h2{font-size:1.714rem}h3{font-size:1.28rem}h4{font-size:1.071rem}h5{font-size:1rem}h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child,p:first-child{margin-top:0}h1:last-child,h2:last-child,h3:last-child,h4:last-child,h5:last-child,p:last-child{margin-bottom:0}p{margin:0 0 1em;line-height:1.33}a{color:#009fda;text-decoration:none}a:hover{color:#00b2f3}::-webkit-selection{background-color:#cce2ff;color:rgba(0,0,0,.8)}::-moz-selection{background-color:#cce2ff;color:rgba(0,0,0,.8)}::selection{background-color:#cce2ff;color:rgba(0,0,0,.8)}input::-webkit-selection,textarea::-webkit-selection{background-color:rgba(100,100,100,.4);color:rgba(0,0,0,.8)}input::-moz-selection,textarea::-moz-selection{background-color:rgba(100,100,100,.4);color:rgba(0,0,0,.8)}input::selection,textarea::selection{background-color:rgba(100,100,100,.4);color:rgba(0,0,0,.8)} -------------------------------------------------------------------------------- /py/report/semantic/components/shape.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Shape 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.shape{position:relative;display:inline-block;-webkit-perspective:2000px;perspective:2000px}.ui.shape .sides{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.ui.shape .side{opacity:1;width:100%;margin:0!important;-webkit-backface-visibility:hidden;backface-visibility:hidden;display:none}.ui.shape .side>*{-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.ui.cube.shape .side{min-width:15em;height:15em;padding:2em;background-color:#e6e6e6;color:rgba(0,0,0,.8);box-shadow:0 0 2px rgba(0,0,0,.3)}.ui.cube.shape .side>.content{width:100%;height:100%;display:table;text-align:center;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ui.cube.shape .side>.content>div{display:table-cell;vertical-align:middle;font-size:2em}.ui.text.shape.animating .sides{position:static}.ui.text.shape .side{white-space:nowrap}.ui.text.shape .side>*{white-space:normal}.ui.loading.shape{position:absolute;top:-9999px;left:-9999px}.ui.shape .animating.side{position:absolute;top:0;left:0;z-index:100}.ui.shape .hidden.side{opacity:.4}.ui.shape.animating{-webkit-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.ui.shape.animating .sides{position:absolute;-webkit-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.ui.shape.animating .side{-webkit-transition:opacity .6s ease-in-out;transition:opacity .6s ease-in-out}.ui.shape .active.side{display:block} -------------------------------------------------------------------------------- /py/report/semantic/components/sticky.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Sticky 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Sticky 15 | *******************************/ 16 | 17 | .ui.sticky { 18 | position: static; 19 | -webkit-transition: width 0.2s ease, height 0.2s ease, top 0.2s ease, bottom 0.2s ease; 20 | transition: width 0.2s ease, height 0.2s ease, top 0.2s ease, bottom 0.2s ease; 21 | z-index: 800; 22 | } 23 | 24 | 25 | /******************************* 26 | States 27 | *******************************/ 28 | 29 | 30 | /* Bound */ 31 | .ui.sticky.bound { 32 | position: absolute; 33 | left: auto; 34 | right: auto; 35 | } 36 | 37 | /* Fixed */ 38 | .ui.sticky.fixed { 39 | position: fixed; 40 | left: auto; 41 | right: auto; 42 | } 43 | 44 | /* Bound/Fixed Position */ 45 | .ui.sticky.bound.top, 46 | .ui.sticky.fixed.top { 47 | top: 0px; 48 | bottom: auto; 49 | } 50 | .ui.sticky.bound.bottom, 51 | .ui.sticky.fixed.bottom { 52 | top: auto; 53 | bottom: 0px; 54 | } 55 | 56 | 57 | /******************************* 58 | Types 59 | *******************************/ 60 | 61 | .ui.native.sticky { 62 | position: -webkit-sticky; 63 | position: -moz-sticky; 64 | position: -ms-sticky; 65 | position: -o-sticky; 66 | position: sticky; 67 | } 68 | 69 | 70 | /******************************* 71 | Theme Overrides 72 | *******************************/ 73 | 74 | 75 | 76 | /******************************* 77 | Site Overrides 78 | *******************************/ 79 | 80 | -------------------------------------------------------------------------------- /py/handler.py: -------------------------------------------------------------------------------- 1 | 2 | import config 3 | 4 | from symexec import SymExecObject 5 | 6 | class Handler(SymExecObject): 7 | 8 | DEFAULT_NAME = 'Handler' 9 | 10 | def __init__(self): 11 | self.blocks = [] 12 | self.head = None 13 | self.tail = None 14 | 15 | self.copy = [] # same handler 16 | 17 | self._name = None 18 | 19 | @property 20 | def name(self): 21 | if self._name: 22 | return self._name 23 | else: 24 | return 'Handler_%x' % self.addr 25 | 26 | def __repr__(self): 27 | return '<%s>' % self.name 28 | 29 | def add_block(self, block): 30 | if not self.head: 31 | self.head = block 32 | 33 | if self.tail: 34 | if block.addr not in self.tail.nexts: 35 | return False 36 | 37 | self.blocks.append(block) 38 | self.tail = block 39 | 40 | return True 41 | 42 | def add_copy(self, handler): 43 | self.copy.append(handler) 44 | 45 | 46 | @property 47 | def is_valid(self): 48 | return self.head is not None 49 | 50 | @property 51 | def addr(self): 52 | return self.head.addr 53 | 54 | 55 | @property 56 | def bytes(self): 57 | return ''.join(b.bytes for b in self.blocks) 58 | 59 | @property 60 | def instructions(self): 61 | ins = [] 62 | for b in self.blocks: 63 | ins += b.instructions 64 | return ins 65 | 66 | @property 67 | def ins_str(self): 68 | return '\n'.join(b.ins_str for b in self.blocks) 69 | 70 | 71 | def __str__(self): 72 | buf = self.name 73 | buf += '(%#x) %d blocks' % (self.addr, len(self.blocks)) 74 | for b in self.blocks: 75 | buf += '\n\t' + repr(b) 76 | 77 | if len(self.copy) > 0: 78 | buf += '\n[COPY] '+ '\n'.join(str(i) for i in self.copy) 79 | 80 | return buf 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /py/main.py: -------------------------------------------------------------------------------- 1 | 2 | import bbl_manager 3 | import config 4 | import report 5 | 6 | import os 7 | 8 | def main(): 9 | # Change work folder. 10 | os.chdir(config.WORK_PATH) 11 | 12 | print '[*] Target: %s' % config.EXE_PATH 13 | print '----- STEP 1 -----' 14 | print '[*] Running PinTool ...' 15 | print '#'*80 16 | 17 | os.system(config.PIN_CMD) 18 | 19 | print '#'*80 20 | 21 | print '[*] Pin instrument finished.' 22 | 23 | global bm 24 | bm = bbl_manager.BBLManager() 25 | 26 | 27 | print '----- STEP 2 -----' 28 | # Load instructions. 29 | bm.load_ins_info(config.INS_PATH) 30 | 31 | print '----- STEP 3 -----' 32 | # Load trace. 33 | bm.load_trace(config.TRACE_PATH, config.START_ADDR, config.END_ADDR) 34 | 35 | print '----- STEP 4 -----' 36 | # Generate execution graph. 37 | bm.consolidate_blocks() 38 | 39 | print '----- STEP 5 -----' 40 | bm.detect_handlers() 41 | 42 | print '----- STEP 6 -----' 43 | print '[*] Generating report ....' 44 | report.gen_report(bm) 45 | print '[*] Report generated.' 46 | 47 | # report.open_report() 48 | 49 | 50 | if __name__ == '__main__': 51 | # try: 52 | main() 53 | # except Exception, e: 54 | # print '[!] Fatal Error %s' % e 55 | 56 | # global bm 57 | # bm = bbl_manager.BBLManager() 58 | # bm.load_ins_info(r'D:\papers\pin\pin-3.2-81205-msvc-windows\source\tools\MyPinTool\bin.ins') 59 | # bm.load_trace(r'D:\papers\pin\pin-3.2-81205-msvc-windows\source\tools\MyPinTool\bin.trace', 60 | # # start_addr=0x401000, end_addr=0x40127C) # allop 61 | # start_addr=0x401000, end_addr=0x0040101A ) # base64 62 | # # bm.load_trace('../bin.block') 63 | # bm.consolidate_blocks() 64 | # # cPickle.dump(bm, open('test.dump','wb')) 65 | # bm.display_bbl_graph() 66 | # # bm.display_bbl_graph_ida() 67 | 68 | # bm.detect_handlers() 69 | # bm.dump_handlers() 70 | 71 | 72 | # report.gen_report(bm) 73 | # report.open_report() -------------------------------------------------------------------------------- /py/report/semantic/components/ad.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Ad 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2013 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.ad{display:block;overflow:hidden;margin:1em 0}.ui.ad:first-child,.ui.ad:last-child{margin:0}.ui.ad iframe{margin:0;padding:0;border:none;overflow:hidden}.ui.leaderboard.ad{width:728px;height:90px}.ui[class*="medium rectangle"].ad{width:300px;height:250px}.ui[class*="large rectangle"].ad{width:336px;height:280px}.ui[class*="half page"].ad{width:300px;height:600px}.ui.square.ad{width:250px;height:250px}.ui[class*="small square"].ad{width:200px;height:200px}.ui[class*="small rectangle"].ad{width:180px;height:150px}.ui[class*="vertical rectangle"].ad{width:240px;height:400px}.ui.button.ad{width:120px;height:90px}.ui[class*="square button"].ad{width:125px;height:125px}.ui[class*="small button"].ad{width:120px;height:60px}.ui.skyscraper.ad{width:120px;height:600px}.ui[class*="wide skyscraper"].ad{width:160px}.ui.banner.ad{width:468px;height:60px}.ui[class*="vertical banner"].ad{width:120px;height:240px}.ui[class*="top banner"].ad{width:930px;height:180px}.ui[class*="half banner"].ad{width:234px;height:60px}.ui[class*="large leaderboard"].ad{width:970px;height:90px}.ui.billboard.ad{width:970px;height:250px}.ui.panorama.ad{width:980px;height:120px}.ui.netboard.ad{width:580px;height:400px}.ui[class*="large mobile banner"].ad{width:320px;height:100px}.ui[class*="mobile leaderboard"].ad{width:320px;height:50px}.ui.mobile.ad{display:none}@media only screen and (max-width:767px){.ui.mobile.ad{display:block}}.ui.centered.ad{margin-left:auto;margin-right:auto}.ui.test.ad{position:relative;background:#333}.ui.test.ad:after{position:absolute;top:50%;left:50%;width:100%;text-align:center;-webkit-transform:translateX(-50%)translateY(-50%);-ms-transform:translateX(-50%)translateY(-50%);transform:translateX(-50%)translateY(-50%);content:'Ad';color:#fff;font-size:1em;font-weight:700}.ui.mobile.test.ad:after{font-size:.85714em}.ui.test.ad[data-text]:after{content:attr(data-text)} -------------------------------------------------------------------------------- /py/report/semantic/components/tab.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Tab 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | UI Tabs 15 | *******************************/ 16 | 17 | .ui.tab { 18 | display: none; 19 | } 20 | 21 | 22 | /******************************* 23 | States 24 | *******************************/ 25 | 26 | 27 | /*-------------------- 28 | Active 29 | ---------------------*/ 30 | 31 | .ui.tab.active, 32 | .ui.tab.open { 33 | display: block; 34 | } 35 | 36 | /*-------------------- 37 | Loading 38 | ---------------------*/ 39 | 40 | .ui.tab.loading { 41 | position: relative; 42 | overflow: hidden; 43 | display: block; 44 | min-height: 250px; 45 | } 46 | .ui.tab.loading * { 47 | position: relative !important; 48 | left: -10000px !important; 49 | } 50 | .ui.tab.loading:before, 51 | .ui.tab.loading.segment:before { 52 | position: absolute; 53 | content: ''; 54 | top: 100px; 55 | left: 50%; 56 | margin: -1.25em 0em 0em -1.25em; 57 | width: 2.5em; 58 | height: 2.5em; 59 | border-radius: 500rem; 60 | border: 0.2em solid rgba(0, 0, 0, 0.1); 61 | } 62 | .ui.tab.loading:after, 63 | .ui.tab.loading.segment:after { 64 | position: absolute; 65 | content: ''; 66 | top: 100px; 67 | left: 50%; 68 | margin: -1.25em 0em 0em -1.25em; 69 | width: 2.5em; 70 | height: 2.5em; 71 | -webkit-animation: button-spin 0.6s linear; 72 | animation: button-spin 0.6s linear; 73 | -webkit-animation-iteration-count: infinite; 74 | animation-iteration-count: infinite; 75 | border-radius: 500rem; 76 | border-color: #aaaaaa transparent transparent; 77 | border-style: solid; 78 | border-width: 0.2em; 79 | box-shadow: 0px 0px 0px 1px transparent; 80 | } 81 | 82 | 83 | /******************************* 84 | Tab Overrides 85 | *******************************/ 86 | 87 | 88 | 89 | /******************************* 90 | User Overrides 91 | *******************************/ 92 | 93 | -------------------------------------------------------------------------------- /py/report/semantic/components/dimmer.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Dimmer 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.dimmable{position:relative}.ui.dimmer{display:none;position:absolute;top:0!important;left:0!important;width:100%;height:100%;text-align:center;vertical-align:middle;background:rgba(0,0,0,.85);opacity:0;line-height:1;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-transition:background-color .5s linear;transition:background-color .5s linear;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;will-change:opacity;z-index:1000}.ui.dimmer>.content{width:100%;height:100%;display:table;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ui.dimmer>.content>div{display:table-cell;vertical-align:middle;color:#fff}.ui.segment>.ui.dimmer{border-radius:inherit!important}.animating.dimmable:not(body),.dimmed.dimmable:not(body){overflow:hidden}.dimmed.dimmable>.ui.animating.dimmer,.dimmed.dimmable>.ui.visible.dimmer,.ui.active.dimmer{display:block;opacity:1}.ui.disabled.dimmer{width:0!important;height:0!important}.ui.page.dimmer{position:fixed;-webkit-transform-style:'';transform-style:'';-webkit-perspective:2000px;perspective:2000px;-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}body.animating.in.dimmable,body.dimmed.dimmable{overflow:hidden}body.dimmable>.dimmer{position:fixed}.ui.dimmer>.top.aligned.content>*{vertical-align:top}.ui.dimmer>.bottom.aligned.content>*{vertical-align:bottom}.ui.inverted.dimmer{background:rgba(255,255,255,.85)}.ui.inverted.dimmer>.content>*{color:#fff}.ui.simple.dimmer{display:block;overflow:hidden;opacity:1;width:0;height:0;z-index:-100;background-color:transparent}.dimmed.dimmable>.ui.simple.dimmer{overflow:visible;opacity:1;width:100%;height:100%;background:rgba(0,0,0,.85);z-index:1}.ui.simple.inverted.dimmer{background:rgba(255,255,255,0)}.dimmed.dimmable>.ui.simple.inverted.dimmer{background:rgba(255,255,255,.85)} -------------------------------------------------------------------------------- /py/report/semantic/components/reset.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Reset 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */*,:after,:before{box-sizing:inherit}html{box-sizing:border-box;font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}input[type=text],input[type=email],input[type=search],input[type=password]{-webkit-appearance:none;-moz-appearance:none}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} -------------------------------------------------------------------------------- /py/runtimeblock.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | class RuntimeBlock(object): 4 | 5 | def __init__(self, instructions=None): 6 | if instructions: 7 | self._instructions = instructions 8 | else: 9 | self._instructions = [] 10 | 11 | self.next_addr = set() 12 | self.prev_addr = set() 13 | 14 | # Properties. 15 | @property 16 | def start_addr(self): 17 | return self.instructions[0].addr 18 | 19 | @property 20 | def addr(self): 21 | return self.start_addr 22 | 23 | @property 24 | def end_addr(self): 25 | return self.instructions[-1].addr 26 | 27 | @property 28 | def bytes(self): 29 | return ''.join(ins.bytes for ins in self.instructions) 30 | 31 | @property 32 | def diasm(self): 33 | return '\n'.join(ins.diasm for ins in self.instructions) 34 | 35 | def __str__(self): 36 | return '\n'.join(str(ins) for ins in self.instructions) 37 | 38 | 39 | # Util method. 40 | def has_addr(self, addr): 41 | return addr in (ins.addr for ins in self.instructions) 42 | 43 | def add_instruction(self, ins): 44 | self.instructions.append(ins) 45 | 46 | def add_next(self, addr): 47 | self.next_addr.add(addr) 48 | 49 | def add_prev(self, addr): 50 | self.prev_addr.add(addr) 51 | 52 | 53 | def split_at(self, addr): 54 | """ 55 | Split this RuntimeBlock at address(addr). Truncate this block and return another new block. 56 | If addr not in this block or is block head, return None. 57 | """ 58 | if not self.has_addr(addr) or addr == self.addr: 59 | return None 60 | 61 | addrs = [ins.addr for ins in self._instructions] 62 | addr_idx = addrs.index(addr) 63 | new_instructions = self._instructions[addr_idx:] 64 | self.instructions = self._instructions[0:addr_idx] 65 | 66 | new_block = RuntimeBlock(new_instructions) 67 | 68 | 69 | new_block.add_prev(self.addr) 70 | self.add_next(addr) 71 | 72 | return new_block 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /py/report/semantic/components/breadcrumb.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Breadcrumb 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Breadcrumb 15 | *******************************/ 16 | 17 | .ui.breadcrumb { 18 | margin: 1em 0em; 19 | display: inline-block; 20 | vertical-align: middle; 21 | } 22 | .ui.breadcrumb:first-child { 23 | margin-top: 0em; 24 | } 25 | .ui.breadcrumb:last-child { 26 | margin-bottom: 0em; 27 | } 28 | 29 | 30 | /******************************* 31 | Content 32 | *******************************/ 33 | 34 | 35 | /* Divider */ 36 | .ui.breadcrumb .divider { 37 | display: inline-block; 38 | opacity: 0.5; 39 | margin: 0em 0.2rem 0em; 40 | font-size: 0.9em; 41 | color: rgba(0, 0, 0, 0.4); 42 | vertical-align: baseline; 43 | } 44 | 45 | /* Link */ 46 | .ui.breadcrumb a { 47 | color: #009fda; 48 | } 49 | .ui.breadcrumb a:hover { 50 | color: #00b2f3; 51 | } 52 | 53 | /* Icon Divider */ 54 | .ui.breadcrumb .icon.divider { 55 | font-size: 0.85714286em; 56 | vertical-align: baseline; 57 | } 58 | 59 | /* Section */ 60 | .ui.breadcrumb a.section { 61 | cursor: pointer; 62 | } 63 | .ui.breadcrumb .section { 64 | display: inline-block; 65 | margin: 0em; 66 | padding: 0em; 67 | } 68 | 69 | /* Loose Coupling */ 70 | .ui.breadcrumb.segment { 71 | display: inline-block; 72 | padding: 0.5em 1em; 73 | } 74 | 75 | 76 | /******************************* 77 | States 78 | *******************************/ 79 | 80 | .ui.breadcrumb .active.section { 81 | font-weight: bold; 82 | } 83 | 84 | 85 | /******************************* 86 | Variations 87 | *******************************/ 88 | 89 | .ui.mini.breadcrumb { 90 | font-size: 0.65em; 91 | } 92 | .ui.tiny.breadcrumb { 93 | font-size: 0.7em; 94 | } 95 | .ui.small.breadcrumb { 96 | font-size: 0.75em; 97 | } 98 | .ui.breadcrumb { 99 | font-size: 1em; 100 | } 101 | .ui.large.breadcrumb { 102 | font-size: 1.1em; 103 | } 104 | .ui.big.breadcrumb { 105 | font-size: 1.05em; 106 | } 107 | .ui.huge.breadcrumb { 108 | font-size: 1.3em; 109 | } 110 | .ui.massive.breadcrumb { 111 | font-size: 1.5em; 112 | } 113 | 114 | 115 | /******************************* 116 | Theme Overrides 117 | *******************************/ 118 | 119 | 120 | 121 | /******************************* 122 | Site Overrides 123 | *******************************/ 124 | 125 | -------------------------------------------------------------------------------- /py/report/semantic/components/comment.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Comment 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributorss 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.comments{margin:1.5em 0;max-width:650px}.ui.comments:first-child{margin-top:0}.ui.comments:last-child{margin-bottom:0}.ui.comments .comment{position:relative;background:0 0;margin:.5em 0 0;padding:.5em 0 0;border:none;border-top:none;line-height:1.2}.ui.comments .comment:first-child{margin-top:0;padding-top:0}.ui.comments .comment .comments{margin:0 0 .5em .5em;padding:1em 0 1em 1em}.ui.comments .comment .comments:before{position:absolute;top:0;left:0}.ui.comments .comment .comments .comment{border:none;border-top:none;background:0 0}.ui.comments .comment .avatar{display:block;width:2.5em;height:auto;float:left;margin:.2em 0 0}.ui.comments .comment .avatar img,.ui.comments .comment img.avatar{display:block;margin:0 auto;width:100%;height:100%;border-radius:.25rem}.ui.comments .comment>.content{display:block}.ui.comments .comment>.avatar~.content{margin-left:3.5em}.ui.comments .comment .author{font-size:1em;color:rgba(0,0,0,.8);font-weight:700}.ui.comments .comment a.author{cursor:pointer}.ui.comments .comment a.author:hover{color:#00b2f3}.ui.comments .comment .metadata{display:inline-block;margin-left:.5em;color:rgba(0,0,0,.4);font-size:.875em}.ui.comments .comment .metadata>*{display:inline-block;margin:0 .5em 0 0}.ui.comments .comment .metadata>:last-child{margin-right:0}.ui.comments .comment .text{margin:.25em 0 .5em;font-size:1em;word-wrap:break-word;color:rgba(0,0,0,.8);line-height:1.3}.ui.comments .comment .actions{font-size:.875em}.ui.comments .comment .actions a{cursor:pointer;display:inline-block;margin:0 .75em 0 0;color:rgba(0,0,0,.4)}.ui.comments .comment .actions a:last-child{margin-right:0}.ui.comments .comment .actions a.active,.ui.comments .comment .actions a:hover{color:rgba(0,0,0,.8)}.ui.comments>.reply.form{margin-top:1em}.ui.comments .comment .reply.form{width:100%;margin-top:1em}.ui.comments .reply.form textarea{font-size:1em;height:12em}.ui.collapsed.comments,.ui.comments .collapsed.comment,.ui.comments .collapsed.comments{display:none}.ui.threaded.comments .comment .comments{margin:-1.5em 0 -1em 1.25em;padding:3em 0 2em 2.25em;box-shadow:-1px 0 0 rgba(39,41,43,.15)}.ui.minimal.comments .comment .actions{opacity:0;position:absolute;top:0;right:0;left:auto;-webkit-transition:opacity .2s ease;transition:opacity .2s ease;-webkit-transition-delay:.1s;transition-delay:.1s}.ui.minimal.comments .comment>.content:hover>.actions{opacity:1}.ui.small.comments{font-size:.9em}.ui.comments{font-size:1em}.ui.large.comments{font-size:1.1em}.ui.huge.comments{font-size:1.2em} -------------------------------------------------------------------------------- /py/report/semantic/components/rail.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Rail 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Rails 15 | *******************************/ 16 | 17 | .ui.rail { 18 | position: absolute; 19 | top: 0%; 20 | width: 300px; 21 | height: 100%; 22 | box-sizing: content-box; 23 | } 24 | .ui.left.rail { 25 | left: auto; 26 | right: 100%; 27 | padding: 0em 2rem 0em 0em; 28 | margin: 0em 2rem 0em 0em; 29 | } 30 | .ui.right.rail { 31 | left: 100%; 32 | right: auto; 33 | padding: 0em 0em 0em 2rem; 34 | margin: 0em 0em 0em 2rem; 35 | } 36 | 37 | 38 | /******************************* 39 | Variations 40 | *******************************/ 41 | 42 | 43 | /*-------------- 44 | Internal 45 | ---------------*/ 46 | 47 | .ui.left.internal.rail { 48 | left: 0%; 49 | right: auto; 50 | padding: 0em 0em 0em 2rem; 51 | margin: 0em 0em 0em 2rem; 52 | } 53 | .ui.right.internal.rail { 54 | left: auto; 55 | right: 0%; 56 | padding: 0em 2rem 0em 0em; 57 | margin: 0em 2rem 0em 0em; 58 | } 59 | 60 | /*-------------- 61 | Divided 62 | ---------------*/ 63 | 64 | .ui.left.dividing.rail { 65 | padding: 0em 2.5rem 0em 0em; 66 | margin: 0em 2.5rem 0em 0em; 67 | border-right: 1px solid rgba(39, 41, 43, 0.15); 68 | } 69 | .ui.right.dividing.rail { 70 | border-left: 1px solid rgba(39, 41, 43, 0.15); 71 | padding: 0em 0em 0em 2.5rem; 72 | margin: 0em 0em 0em 2.5rem; 73 | } 74 | 75 | /*-------------- 76 | Distance 77 | ---------------*/ 78 | 79 | .ui.close.left.rail { 80 | padding: 0em 1em 0em 0em; 81 | margin: 0em 1em 0em 0em; 82 | } 83 | .ui.close.right.rail { 84 | padding: 0em 0em 0em 1em; 85 | margin: 0em 0em 0em 1em; 86 | } 87 | .ui.very.close.left.rail { 88 | padding: 0em 0.5em 0em 0em; 89 | margin: 0em 0.5em 0em 0em; 90 | } 91 | .ui.very.close.right.rail { 92 | padding: 0em 0em 0em 0.5em; 93 | margin: 0em 0em 0em 0.5em; 94 | } 95 | 96 | /*-------------- 97 | Attached 98 | ---------------*/ 99 | 100 | .ui.attached.left.rail, 101 | .ui.attached.right.rail { 102 | padding: 0em; 103 | margin: 0em; 104 | } 105 | 106 | /*-------------- 107 | Sizing 108 | ---------------*/ 109 | 110 | .ui.rail { 111 | font-size: 1em; 112 | } 113 | 114 | 115 | /******************************* 116 | Theme Overrides 117 | *******************************/ 118 | 119 | 120 | 121 | /******************************* 122 | Site Overrides 123 | *******************************/ 124 | 125 | -------------------------------------------------------------------------------- /py/report/semantic/components/video.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Video 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Video 15 | *******************************/ 16 | 17 | .ui.video { 18 | background-color: #dddddd; 19 | position: relative; 20 | max-width: 100%; 21 | padding-bottom: 56.25%; 22 | height: 0px; 23 | overflow: hidden; 24 | } 25 | 26 | /*-------------- 27 | Content 28 | ---------------*/ 29 | 30 | 31 | /* Placeholder Image */ 32 | .ui.video .placeholder { 33 | background-color: #333333; 34 | } 35 | 36 | /* Play Icon Overlay */ 37 | .ui.video .play { 38 | cursor: pointer; 39 | position: absolute; 40 | top: 0px; 41 | left: 0px; 42 | z-index: 10; 43 | width: 100%; 44 | height: 100%; 45 | opacity: 0.8; 46 | -webkit-transition: opacity 0.3s; 47 | transition: opacity 0.3s; 48 | } 49 | .ui.video .play.icon:before { 50 | position: absolute; 51 | top: 50%; 52 | left: 50%; 53 | z-index: 11; 54 | background: rgba(0, 0, 0, 0.3); 55 | width: 8rem; 56 | height: 8rem; 57 | line-height: 8rem; 58 | border-radius: 500rem; 59 | color: #ffffff; 60 | font-size: 8rem; 61 | text-shadow: none; 62 | -webkit-transform: translateX(-50%) translateY(-50%); 63 | -ms-transform: translateX(-50%) translateY(-50%); 64 | transform: translateX(-50%) translateY(-50%); 65 | } 66 | .ui.video .placeholder { 67 | position: absolute; 68 | top: 0px; 69 | left: 0px; 70 | display: block; 71 | width: 100%; 72 | height: 100%; 73 | } 74 | 75 | /* IFrame Embed */ 76 | .ui.video .embed iframe, 77 | .ui.video .embed embed, 78 | .ui.video .embed object { 79 | position: absolute; 80 | border: none; 81 | width: 100%; 82 | height: 100%; 83 | top: 0px; 84 | left: 0px; 85 | margin: 0em; 86 | padding: 0em; 87 | } 88 | 89 | 90 | /******************************* 91 | States 92 | *******************************/ 93 | 94 | 95 | /*-------------- 96 | Hover 97 | ---------------*/ 98 | 99 | .ui.video .play:hover { 100 | opacity: 1; 101 | } 102 | 103 | /*-------------- 104 | Active 105 | ---------------*/ 106 | 107 | .ui.video.active .play, 108 | .ui.video.active .placeholder { 109 | display: none; 110 | } 111 | .ui.video.active .embed { 112 | display: inline; 113 | } 114 | 115 | 116 | /******************************* 117 | Video Overrides 118 | *******************************/ 119 | 120 | 121 | 122 | /******************************* 123 | Site Overrides 124 | *******************************/ 125 | 126 | -------------------------------------------------------------------------------- /py/report/semantic/components/popup.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Popup 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.popup{display:none;position:absolute;top:0;right:0;min-width:-moz-max-content;z-index:1900;border:1px solid #ccc;max-width:250px;background-color:#fff;padding:.833em 1em;font-weight:400;font-style:normal;color:rgba(0,0,0,.8);border-radius:.2857rem;box-shadow:0 2px 4px rgba(0,0,0,.1);margin:0}.ui.popup>.header{padding:0;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:1.125em;line-height:1.2;font-weight:700}.ui.popup>.header+.content{padding-top:.5em}.ui.popup:before{position:absolute;content:'';width:.75em;height:.75em;background:#fff;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);z-index:2;box-shadow:1px 1px 0 0 #b3b3b3}.ui.popup.bottom{margin:.75em 0 0}.ui.popup.top{margin:0 0 .75em}.ui.popup.left.center{margin:0 .75em 0 0}.ui.popup.right.center{margin:0 0 0 .75em}.ui.bottom.center.popup:before{margin-left:-.325em;top:-.325em;left:50%;right:auto;bottom:auto;box-shadow:-1px -1px 0 0 #b3b3b3}.ui.bottom.left.popup{margin-left:0}.ui.bottom.left.popup:before{top:-.325em;left:1em;right:auto;bottom:auto;margin-left:0;box-shadow:-1px -1px 0 0 #b3b3b3}.ui.bottom.right.popup{margin-right:0}.ui.bottom.right.popup:before{top:-.325em;right:1em;bottom:auto;left:auto;margin-left:0;box-shadow:-1px -1px 0 0 #b3b3b3}.ui.top.center.popup:before{top:auto;right:auto;bottom:-.325em;left:50%;margin-left:-.325em}.ui.top.left.popup{margin-left:0}.ui.top.left.popup:before{bottom:-.325em;left:1em;top:auto;right:auto;margin-left:0}.ui.top.right.popup{margin-right:0}.ui.top.right.popup:before{bottom:-.325em;right:1em;top:auto;left:auto;margin-left:0}.ui.left.center.popup:before{top:50%;right:-.325em;bottom:auto;left:auto;margin-top:-.325em;box-shadow:1px -1px 0 0 #b3b3b3}.ui.right.center.popup:before{top:50%;left:-.325em;bottom:auto;right:auto;margin-top:-.325em;box-shadow:-1px 1px 0 0 #b3b3b3}.ui.popup>.ui.grid:not(.padded){width:-webkit-calc(100% + 1.75rem);width:calc(100% + 1.75rem);margin:-.7rem -.875rem}.ui.loading.popup{display:block;visibility:hidden;z-index:-1}.ui.animating.popup,.ui.visible.popup{display:block}.ui.basic.popup:before{display:none}.ui.wide.popup{max-width:350px}.ui[class*="very wide"].popup{max-width:550px}.ui.fluid.popup{width:100%;max-width:none}.ui.inverted.popup{background:#1b1c1d;color:#fff;border:none;box-shadow:none}.ui.inverted.popup .header{background-color:none;color:#fff}.ui.inverted.popup:before{background-color:#1b1c1d;box-shadow:none!important}.ui.flowing.popup{max-width:none}.ui.small.popup{font-size:.785714rem}.ui.popup{font-size:.85714rem}.ui.large.popup{font-size:1rem}.ui.huge.popup{font-size:1.14285rem} -------------------------------------------------------------------------------- /makefile.rules: -------------------------------------------------------------------------------- 1 | ############################################################## 2 | # 3 | # This file includes all the test targets as well as all the 4 | # non-default build rules and test recipes. 5 | # 6 | ############################################################## 7 | 8 | 9 | ############################################################## 10 | # 11 | # Test targets 12 | # 13 | ############################################################## 14 | 15 | ###### Place all generic definitions here ###### 16 | 17 | # This defines tests which run tools of the same name. This is simply for convenience to avoid 18 | # defining the test name twice (once in TOOL_ROOTS and again in TEST_ROOTS). 19 | # Tests defined here should not be defined in TOOL_ROOTS and TEST_ROOTS. 20 | TEST_TOOL_ROOTS := MyPinTool 21 | 22 | # This defines the tests to be run that were not already defined in TEST_TOOL_ROOTS. 23 | TEST_ROOTS := 24 | 25 | # This defines the tools which will be run during the the tests, and were not already defined in 26 | # TEST_TOOL_ROOTS. 27 | TOOL_ROOTS := 28 | 29 | # This defines the static analysis tools which will be run during the the tests. They should not 30 | # be defined in TEST_TOOL_ROOTS. If a test with the same name exists, it should be defined in 31 | # TEST_ROOTS. 32 | # Note: Static analysis tools are in fact executables linked with the Pin Static Analysis Library. 33 | # This library provides a subset of the Pin APIs which allows the tool to perform static analysis 34 | # of an application or dll. Pin itself is not used when this tool runs. 35 | SA_TOOL_ROOTS := 36 | 37 | # This defines all the applications that will be run during the tests. 38 | APP_ROOTS := 39 | 40 | # This defines any additional object files that need to be compiled. 41 | OBJECT_ROOTS := 42 | 43 | # This defines any additional dlls (shared objects), other than the pintools, that need to be compiled. 44 | DLL_ROOTS := 45 | 46 | # This defines any static libraries (archives), that need to be built. 47 | LIB_ROOTS := 48 | 49 | ###### Define the sanity subset ###### 50 | 51 | # This defines the list of tests that should run in sanity. It should include all the tests listed in 52 | # TEST_TOOL_ROOTS and TEST_ROOTS excluding only unstable tests. 53 | SANITY_SUBSET := $(TEST_TOOL_ROOTS) $(TEST_ROOTS) 54 | 55 | 56 | ############################################################## 57 | # 58 | # Test recipes 59 | # 60 | ############################################################## 61 | 62 | # This section contains recipes for tests other than the default. 63 | # See makefile.default.rules for the default test rules. 64 | # All tests in this section should adhere to the naming convention: .test 65 | 66 | 67 | ############################################################## 68 | # 69 | # Build rules 70 | # 71 | ############################################################## 72 | 73 | # This section contains the build rules for all binaries that have special build rules. 74 | # See makefile.default.rules for the default build rules. 75 | -------------------------------------------------------------------------------- /py/report/semantic/components/divider.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Divider 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.divider{margin:1rem 0;line-height:1;height:0;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:rgba(0,0,0,.85);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;font-size:1rem}.ui.divider:not(.vertical):not(.horizontal){border-top:1px solid rgba(0,0,0,.1);border-bottom:1px solid rgba(255,255,255,.2)}.ui.grid>.ui.divider{font-size:1rem}.ui.horizontal.divider{position:relative;height:auto;margin:'';overflow:hidden;line-height:1;text-align:center}.ui.horizontal.divider:after,.ui.horizontal.divider:before{position:absolute;content:'';z-index:3;width:50%;top:50%;height:0;border-top:1px solid rgba(0,0,0,.1);border-bottom:1px solid rgba(255,255,255,.2)}.ui.horizontal.divider:before{margin-left:-webkit-calc(-50% - 1em);margin-left:calc(-50% - 1em)}.ui.horizontal.divider:after{margin-left:1em}.ui.vertical.divider{position:absolute;z-index:2;top:50%;left:50%;margin:0;padding:0;width:auto;height:50%;line-height:0;text-align:center;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.ui.vertical.divider:after,.ui.vertical.divider:before{position:absolute;left:50%;content:'';z-index:3;border-left:1px solid rgba(0,0,0,.1);border-right:1px solid rgba(255,255,255,.2);width:0;height:-webkit-calc(100% - 1rem);height:calc(100% - 1rem)}.ui.vertical.divider:before{top:-100%}.ui.vertical.divider:after{top:auto;bottom:0}@media only screen and (max-width:767px){.ui.grid .stackable.row .ui.vertical.divider,.ui.stackable.grid .ui.vertical.divider{position:relative;margin:1rem 0;left:50%;height:auto;overflow:hidden;line-height:1;text-align:center}.ui.grid .stackable.row .ui.vertical.divider:after,.ui.grid .stackable.row .ui.vertical.divider:before,.ui.stackable.grid .ui.vertical.divider:after,.ui.stackable.grid .ui.vertical.divider:before{position:absolute;left:auto;content:'';z-index:3;width:50%;top:50%;height:0;border-top:1px solid rgba(0,0,0,.1);border-bottom:1px solid rgba(255,255,255,.2)}.ui.grid .stackable.row .ui.vertical.divider:before,.ui.stackable.grid .ui.vertical.divider:before{margin-left:-51%}.ui.grid .stackable.row .ui.vertical.divider:after,.ui.stackable.grid .ui.vertical.divider:after{margin-left:1em}}.ui.divider>.icon{margin:0;font-size:1rem;height:1em;vertical-align:middle}.ui.hidden.divider{border-color:transparent!important}.ui.divider.inverted,.ui.horizontal.inverted.divider,.ui.vertical.inverted.divider{color:#fff}.ui.divider.inverted,.ui.divider.inverted:after,.ui.divider.inverted:before{border-top-color:rgba(0,0,0,.15)!important;border-bottom-color:rgba(255,255,255,.15)!important;border-left-color:rgba(0,0,0,.15)!important;border-right-color:rgba(255,255,255,.15)!important}.ui.fitted.divider{margin:0}.ui.clearing.divider{clear:both}.ui.section.divider{margin-top:2rem;margin-bottom:2rem} -------------------------------------------------------------------------------- /py/report/semantic/components/feed.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Feed 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributorss 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.feed{margin:1em 0}.ui.feed:first-child,.ui.feed:last-child{margin-top:0}.ui.feed>.event{display:table;width:100%;padding:.5rem 0;margin:0;background:0 0;border-top:none}.ui.feed>.event:first-child{border-top:0;padding-top:0}.ui.feed>.event:last-child{padding-bottom:0}.ui.feed>.event>.label{display:table-cell;width:2.5em;height:2.5em;vertical-align:top;text-align:left}.ui.feed>.event>.label .icon{opacity:1;font-size:1.5em;width:100%;padding:.25em;background:0 0;border:none;border-radius:none;color:rgba(0,0,0,.6)}.ui.feed>.event>.label img{width:100%;height:auto;border-radius:500rem}.ui.feed>.event>.label+.content{padding:.5em 0 .5em 1.25em}.ui.feed>.event>.content{display:table-cell;vertical-align:top;text-align:left;word-wrap:break-word}.ui.feed>.event:last-child>.content{padding-bottom:0}.ui.feed>.event>.content a{cursor:pointer}.ui.feed>.event>.content .date{margin:-.5rem 0 0;padding:0;font-weight:400;font-size:1em;font-style:normal;color:rgba(0,0,0,.4)}.ui.feed>.event>.content .summary{margin:0;font-size:1em;font-weight:700;color:rgba(0,0,0,.8)}.ui.feed>.event>.content .summary img{display:inline-block;width:auto;height:2em;margin:-.25em .25em 0 0;border-radius:.25em;vertical-align:middle}.ui.feed>.event>.content .user{display:inline-block;font-weight:700;margin-right:0;vertical-align:baseline}.ui.feed>.event>.content .user img{margin:-.25em .25em 0 0;width:auto;height:2em;vertical-align:middle}.ui.feed>.event>.content .summary>.date{display:inline-block;float:none;font-weight:400;font-size:.875em;font-style:normal;margin:0 0 0 .5em;padding:0;color:rgba(0,0,0,.4)}.ui.feed>.event>.content .extra{margin:.5em 0 0;background:0 0;padding:0;color:rgba(0,0,0,.8)}.ui.feed>.event>.content .extra.images img{display:inline-block;margin:0 .25em 0 0;width:6em}.ui.feed>.event>.content .extra.text{padding:.5em 1em;border-left:3px solid rgba(0,0,0,.2);font-size:1em;max-width:500px;line-height:1.33}.ui.feed>.event>.content .meta{display:inline-block;font-size:.875em;margin:.5em 0 0;background:0 0;border:none;border-radius:0;box-shadow:none;padding:0;color:rgba(0,0,0,.6)}.ui.feed>.event>.content .meta>*{position:relative;margin-left:.75em}.ui.feed>.event>.content .meta>:after{content:'';color:rgba(0,0,0,.2);top:0;left:-1em;opacity:1;position:absolute;vertical-align:top}.ui.feed>.event>.content .meta .like{color:'';-webkit-transition:.2s color ease;transition:.2s color ease}.ui.feed>.event>.content .meta .like:hover .icon{color:#ff2733}.ui.feed>.event>.content .meta .active.like .icon{color:#ef404a}.ui.feed>.event>.content .meta>:first-child{margin-left:0}.ui.feed>.event>.content .meta>:first-child::after{display:none}.ui.feed>.event>.content .meta a,.ui.feed>.event>.content .meta>.icon{cursor:pointer;opacity:1;color:rgba(0,0,0,.5);-webkit-transition:color .2s ease;transition:color .2s ease}.ui.feed>.event>.content .meta a:hover,.ui.feed>.event>.content .meta a:hover .icon,.ui.feed>.event>.content .meta>.icon:hover{color:rgba(0,0,0,.8)}.ui.small.feed{font-size:.9em}.ui.feed{font-size:1em}.ui.large.feed{font-size:1.1em} -------------------------------------------------------------------------------- /py/report/semantic/components/nag.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Nag 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Nag 15 | *******************************/ 16 | 17 | .ui.nag { 18 | display: none; 19 | opacity: 0.95; 20 | position: relative; 21 | top: 0em; 22 | left: 0px; 23 | z-index: 999; 24 | min-height: 0em; 25 | width: 100%; 26 | margin: 0em; 27 | padding: 0.75em 1em; 28 | background: #555555; 29 | box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2); 30 | font-size: 1rem; 31 | text-align: center; 32 | color: rgba(0, 0, 0, 0.8); 33 | border-radius: 0em 0em 0.2857rem 0.2857rem; 34 | -webkit-transition: 0.2s background ease; 35 | transition: 0.2s background ease; 36 | } 37 | a.ui.nag { 38 | cursor: pointer; 39 | } 40 | .ui.nag > .title { 41 | display: inline-block; 42 | margin: 0em 0.5em; 43 | color: #ffffff; 44 | } 45 | .ui.nag > .close.icon { 46 | cursor: pointer; 47 | opacity: 0.4; 48 | position: absolute; 49 | top: 50%; 50 | right: 1em; 51 | font-size: 1em; 52 | margin: -0.5em 0em 0em; 53 | color: #ffffff; 54 | -webkit-transition: opacity 0.2s ease; 55 | transition: opacity 0.2s ease; 56 | } 57 | 58 | 59 | /******************************* 60 | States 61 | *******************************/ 62 | 63 | 64 | /* Hover */ 65 | .ui.nag:hover { 66 | background: #555555; 67 | opacity: 1; 68 | } 69 | .ui.nag .close:hover { 70 | opacity: 1; 71 | } 72 | 73 | 74 | /******************************* 75 | Variations 76 | *******************************/ 77 | 78 | 79 | /*-------------- 80 | Static 81 | ---------------*/ 82 | 83 | .ui.overlay.nag { 84 | position: absolute; 85 | display: block; 86 | } 87 | 88 | /*-------------- 89 | Fixed 90 | ---------------*/ 91 | 92 | .ui.fixed.nag { 93 | position: fixed; 94 | } 95 | 96 | /*-------------- 97 | Bottom 98 | ---------------*/ 99 | 100 | .ui.bottom.nags, 101 | .ui.bottom.nag { 102 | border-radius: 0.2857rem 0.2857rem 0em 0em; 103 | top: auto; 104 | bottom: 0em; 105 | } 106 | 107 | /*-------------- 108 | White 109 | ---------------*/ 110 | 111 | .ui.inverted.nags .nag, 112 | .ui.inverted.nag { 113 | background-color: #f0f0f0; 114 | color: rgba(0, 0, 0, 0.85); 115 | } 116 | .ui.inverted.nags .nag .close, 117 | .ui.inverted.nags .nag .title, 118 | .ui.inverted.nag .close, 119 | .ui.inverted.nag .title { 120 | color: rgba(0, 0, 0, 0.4); 121 | } 122 | 123 | 124 | /******************************* 125 | Groups 126 | *******************************/ 127 | 128 | .ui.nags .nag { 129 | border-radius: 0em !important; 130 | } 131 | .ui.nags .nag:last-child { 132 | border-radius: 0em 0em 0.2857rem 0.2857rem; 133 | } 134 | .ui.bottom.nags .nag:last-child { 135 | border-radius: 0.2857rem 0.2857rem 0em 0em; 136 | } 137 | 138 | 139 | /******************************* 140 | Theme Overrides 141 | *******************************/ 142 | 143 | 144 | 145 | /******************************* 146 | User Overrides 147 | *******************************/ 148 | 149 | -------------------------------------------------------------------------------- /py/report/semantic/components/loader.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Loader 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.loader{display:none;position:absolute;top:50%;left:50%;margin:0;text-align:center;z-index:1000;-webkit-transform:translateX(-50%)translateY(-50%);-ms-transform:translateX(-50%)translateY(-50%);transform:translateX(-50%)translateY(-50%)}.ui.loader:before{position:absolute;content:'';top:0;left:50%;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loader:after{position:absolute;content:'';top:0;left:50%;-webkit-animation:loader .6s linear;animation:loader .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#aaa transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent}@-webkit-keyframes loader{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loader{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.ui.loader:after,.ui.loader:before{width:2.2585em;height:2.2585em;margin:0 0 0 -1.12925em}.ui.mini.loader:after,.ui.mini.loader:before{width:1.2857em;height:1.2857em;margin:0 0 0 -.64285em}.ui.small.loader:after,.ui.small.loader:before{width:1.7142em;height:1.7142em;margin:0 0 0 -.8571em}.ui.large.loader:after,.ui.large.loader:before{width:4.5714em;height:4.5714em;margin:0 0 0 -2.2857em}.ui.dimmer .loader{display:block}.ui.dimmer .ui.loader{color:#fff}.ui.dimmer .ui.loader:before{border-color:rgba(255,255,255,.15)}.ui.dimmer .ui.loader:after{border-color:#fff transparent transparent}.ui.inverted.dimmer .ui.loader{color:rgba(0,0,0,.8)}.ui.inverted.dimmer .ui.loader:before{border-color:rgba(0,0,0,.1)}.ui.inverted.dimmer .ui.loader:after{border-color:#aaa transparent transparent}.ui.text.loader{width:auto!important;height:auto!important;text-align:center;font-style:normal}.ui.indeterminate.loader:after{-webkit-animation-direction:reverse;animation-direction:reverse;-webkit-animation-duration:1.2s;animation-duration:1.2s}.ui.loader.active,.ui.loader.visible{display:block}.ui.loader.disabled,.ui.loader.hidden{display:none}.ui.inverted.dimmer .ui.mini.loader,.ui.mini.loader{width:1.2857em;height:1.2857em;font-size:.7857em}.ui.inverted.dimmer .ui.small.loader,.ui.small.loader{width:1.7142em;height:1.7142em;font-size:.9285em}.ui.inverted.dimmer .ui.loader,.ui.loader{width:2.2585em;height:2.2585em;font-size:1em}.ui.inverted.dimmer .ui.loader.large,.ui.loader.large{width:4.5714em;height:4.5714em;font-size:1.1428em}.ui.mini.text.loader{min-width:1.2857em;padding-top:1.9857em}.ui.small.text.loader{min-width:1.7142em;padding-top:2.4142em}.ui.text.loader{min-width:2.2585em;padding-top:2.9585em}.ui.large.text.loader{min-width:4.5714em;padding-top:5.2714em}.ui.inverted.loader{color:#fff}.ui.inverted.loader:before{border-color:rgba(255,255,255,.15)}.ui.inverted.loader:after{border-top-color:#fff}.ui.inline.loader{position:relative;vertical-align:middle;margin:0;left:0;top:0;-webkit-transform:none;-ms-transform:none;transform:none}.ui.inline.loader.active,.ui.inline.loader.visible{display:inline-block}.ui.centered.inline.loader.active,.ui.centered.inline.loader.visible{display:block} -------------------------------------------------------------------------------- /py/report/semantic/components/image.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Image 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.image{position:relative;display:inline-block;vertical-align:middle;max-width:100%;background-color:transparent}img.ui.image{display:block}.ui.image img,.ui.image svg{display:block;max-width:100%;height:auto}.ui.hidden.image,.ui.hidden.images{display:none}.ui.disabled.image,.ui.disabled.images{cursor:default;opacity:.3}.ui.inline.image,.ui.inline.image img,.ui.inline.image svg{display:inline-block}.ui.top.aligned.image,.ui.top.aligned.image img,.ui.top.aligned.image svg,.ui.top.aligned.images .image{display:inline-block;vertical-align:top}.ui.middle.aligned.image,.ui.middle.aligned.image img,.ui.middle.aligned.image svg,.ui.middle.aligned.images .image{display:inline-block;vertical-align:middle}.ui.bottom.aligned.image,.ui.bottom.aligned.image img,.ui.bottom.aligned.image svg,.ui.bottom.aligned.images .image{display:inline-block;vertical-align:bottom}.ui.rounded.image,.ui.rounded.image img,.ui.rounded.image svg,.ui.rounded.images .image,.ui.rounded.images img,.ui.rounded.images svg{border-radius:.3125em}.ui.bordered.image img,.ui.bordered.image svg,.ui.bordered.images .image,.ui.bordered.images img,.ui.bordered.images svg,img.ui.bordered.image{border:1px solid rgba(0,0,0,.1)}.ui.circular.image,.ui.circular.images{overflow:hidden}.ui.circular.image,.ui.circular.image img,.ui.circular.image svg,.ui.circular.images .image,.ui.circular.images img,.ui.circular.images svg{border-radius:500rem}.ui.fluid.image,.ui.fluid.image img,.ui.fluid.image svg,.ui.fluid.images,.ui.fluid.images img,.ui.fluid.images svg{display:block;width:100%;height:auto}.ui.avatar.image,.ui.avatar.image img,.ui.avatar.image svg,.ui.avatar.images .image,.ui.avatar.images img,.ui.avatar.images svg{margin-right:.25em;display:inline-block;width:2.5em;height:2.5em;border-radius:500rem}.ui.floated.image,.ui.floated.images{float:left;margin-right:1em;margin-bottom:1em}.ui.right.floated.image,.ui.right.floated.images{float:right;margin-right:0;margin-bottom:1em;margin-left:1em}.ui.floated.image:last-child,.ui.floated.images:last-child{margin-bottom:0}.ui.centered.image,.ui.centered.images{margin-left:auto;margin-right:auto}.ui.mini.image,.ui.mini.images .image,.ui.mini.images img,.ui.mini.images svg{width:20px;height:auto;font-size:.71428571rem}.ui.tiny.image,.ui.tiny.images .image,.ui.tiny.images img,.ui.tiny.images svg{width:80px;height:auto;font-size:.85714286rem}.ui.small.image,.ui.small.images .image,.ui.small.images img,.ui.small.images svg{width:150px;height:auto;font-size:.92857143rem}.ui.medium.image,.ui.medium.images .image,.ui.medium.images img,.ui.medium.images svg{width:300px;height:auto;font-size:1rem}.ui.large.image,.ui.large.images .image,.ui.large.images img,.ui.large.images svg{width:450px;height:auto;font-size:1.14285714rem}.ui.big.image,.ui.big.images .image,.ui.big.images img,.ui.big.images svg{width:600px;height:auto;font-size:1.28571429rem}.ui.huge.image,.ui.huge.images .image,.ui.huge.images img,.ui.huge.images svg{width:800px;height:auto;font-size:1.42857143rem}.ui.massive.image,.ui.massive.images .image,.ui.massive.images img,.ui.massive.images svg{width:960px;height:auto;font-size:1.71428571rem}.ui.images{font-size:0;margin:0 -.25rem}.ui.images .image,.ui.images img,.ui.images svg{display:inline-block;margin:0 .25rem .5rem} -------------------------------------------------------------------------------- /py/report/semantic/components/site.css: -------------------------------------------------------------------------------- 1 | @import 'https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic&subset=latin'; 2 | /*! 3 | * # Semantic UI - Site 4 | * http://github.com/semantic-org/semantic-ui/ 5 | * 6 | * 7 | * Copyright 2014 Contributors 8 | * Released under the MIT license 9 | * http://opensource.org/licenses/MIT 10 | * 11 | */ 12 | 13 | 14 | /******************************* 15 | Page 16 | *******************************/ 17 | 18 | html, 19 | body { 20 | height: 100%; 21 | } 22 | html { 23 | font-size: 14px; 24 | } 25 | body { 26 | margin: 0px; 27 | padding: 0px; 28 | min-width: 320px; 29 | background: #f7f7f7; 30 | font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif; 31 | font-size: 14px; 32 | line-height: 1.33; 33 | color: rgba(0, 0, 0, 0.8); 34 | font-smoothing: antialiased; 35 | } 36 | 37 | 38 | /******************************* 39 | Headers 40 | *******************************/ 41 | 42 | h1, 43 | h2, 44 | h3, 45 | h4, 46 | h5 { 47 | font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif; 48 | line-height: 1.33em; 49 | margin: -webkit-calc(2rem - 0.165em ) 0em 1rem; 50 | margin: calc(2rem - 0.165em ) 0em 1rem; 51 | font-weight: bold; 52 | padding: 0em; 53 | } 54 | h1 { 55 | min-height: 1rem; 56 | font-size: 2rem; 57 | } 58 | h2 { 59 | font-size: 1.714rem; 60 | } 61 | h3 { 62 | font-size: 1.28rem; 63 | } 64 | h4 { 65 | font-size: 1.071rem; 66 | } 67 | h5 { 68 | font-size: 1rem; 69 | } 70 | h1:first-child, 71 | h2:first-child, 72 | h3:first-child, 73 | h4:first-child, 74 | h5:first-child { 75 | margin-top: 0em; 76 | } 77 | h1:last-child, 78 | h2:last-child, 79 | h3:last-child, 80 | h4:last-child, 81 | h5:last-child { 82 | margin-bottom: 0em; 83 | } 84 | 85 | 86 | /******************************* 87 | Text 88 | *******************************/ 89 | 90 | p { 91 | margin: 0em 0em 1em; 92 | line-height: 1.33; 93 | } 94 | p:first-child { 95 | margin-top: 0em; 96 | } 97 | p:last-child { 98 | margin-bottom: 0em; 99 | } 100 | 101 | /*------------------- 102 | Links 103 | --------------------*/ 104 | 105 | a { 106 | color: #009fda; 107 | text-decoration: none; 108 | } 109 | a:hover { 110 | color: #00b2f3; 111 | } 112 | 113 | 114 | /******************************* 115 | Highlighting 116 | *******************************/ 117 | 118 | 119 | /* Site */ 120 | ::-webkit-selection { 121 | background-color: #cce2ff; 122 | color: rgba(0, 0, 0, 0.8); 123 | } 124 | ::-moz-selection { 125 | background-color: #cce2ff; 126 | color: rgba(0, 0, 0, 0.8); 127 | } 128 | ::selection { 129 | background-color: #cce2ff; 130 | color: rgba(0, 0, 0, 0.8); 131 | } 132 | 133 | /* Form */ 134 | textarea::-webkit-selection, 135 | input::-webkit-selection { 136 | background-color: rgba(100, 100, 100, 0.4); 137 | color: rgba(0, 0, 0, 0.8); 138 | } 139 | textarea::-moz-selection, 140 | input::-moz-selection { 141 | background-color: rgba(100, 100, 100, 0.4); 142 | color: rgba(0, 0, 0, 0.8); 143 | } 144 | textarea::selection, 145 | input::selection { 146 | background-color: rgba(100, 100, 100, 0.4); 147 | color: rgba(0, 0, 0, 0.8); 148 | } 149 | 150 | 151 | /******************************* 152 | Global Overrides 153 | *******************************/ 154 | 155 | 156 | 157 | /******************************* 158 | Site Overrides 159 | *******************************/ 160 | 161 | -------------------------------------------------------------------------------- /py/report/semantic/components/shape.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Shape 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Shape 15 | *******************************/ 16 | 17 | .ui.shape { 18 | position: relative; 19 | display: inline-block; 20 | -webkit-perspective: 2000px; 21 | perspective: 2000px; 22 | } 23 | .ui.shape .sides { 24 | -webkit-transform-style: preserve-3d; 25 | transform-style: preserve-3d; 26 | } 27 | .ui.shape .side { 28 | opacity: 1; 29 | width: 100%; 30 | margin: 0em !important; 31 | -webkit-backface-visibility: hidden; 32 | backface-visibility: hidden; 33 | } 34 | .ui.shape .side { 35 | display: none; 36 | } 37 | .ui.shape .side > * { 38 | -webkit-backface-visibility: visible !important; 39 | backface-visibility: visible !important; 40 | } 41 | 42 | 43 | /******************************* 44 | Types 45 | *******************************/ 46 | 47 | .ui.cube.shape .side { 48 | min-width: 15em; 49 | height: 15em; 50 | padding: 2em; 51 | background-color: #e6e6e6; 52 | color: rgba(0, 0, 0, 0.8); 53 | box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3); 54 | } 55 | .ui.cube.shape .side > .content { 56 | width: 100%; 57 | height: 100%; 58 | display: table; 59 | text-align: center; 60 | -webkit-user-select: text; 61 | -moz-user-select: text; 62 | -ms-user-select: text; 63 | user-select: text; 64 | } 65 | .ui.cube.shape .side > .content > div { 66 | display: table-cell; 67 | vertical-align: middle; 68 | font-size: 2em; 69 | } 70 | 71 | 72 | /******************************* 73 | Variations 74 | *******************************/ 75 | 76 | .ui.text.shape.animating .sides { 77 | position: static; 78 | } 79 | .ui.text.shape .side { 80 | white-space: nowrap; 81 | } 82 | .ui.text.shape .side > * { 83 | white-space: normal; 84 | } 85 | 86 | 87 | /******************************* 88 | States 89 | *******************************/ 90 | 91 | 92 | /*-------------- 93 | Loading 94 | ---------------*/ 95 | 96 | .ui.loading.shape { 97 | position: absolute; 98 | top: -9999px; 99 | left: -9999px; 100 | } 101 | 102 | /*-------------- 103 | Animating 104 | ---------------*/ 105 | 106 | .ui.shape .animating.side { 107 | position: absolute; 108 | top: 0px; 109 | left: 0px; 110 | z-index: 100; 111 | } 112 | .ui.shape .hidden.side { 113 | opacity: 0.4; 114 | } 115 | 116 | /*-------------- 117 | CSS 118 | ---------------*/ 119 | 120 | .ui.shape.animating { 121 | -webkit-transition: all 0.6s ease-in-out; 122 | transition: all 0.6s ease-in-out; 123 | } 124 | .ui.shape.animating .sides { 125 | position: absolute; 126 | } 127 | .ui.shape.animating .sides { 128 | -webkit-transition: all 0.6s ease-in-out; 129 | transition: all 0.6s ease-in-out; 130 | } 131 | .ui.shape.animating .side { 132 | -webkit-transition: opacity 0.6s ease-in-out; 133 | transition: opacity 0.6s ease-in-out; 134 | } 135 | 136 | /*-------------- 137 | Active 138 | ---------------*/ 139 | 140 | .ui.shape .active.side { 141 | display: block; 142 | } 143 | 144 | 145 | /******************************* 146 | Theme Overrides 147 | *******************************/ 148 | 149 | 150 | 151 | /******************************* 152 | User Overrides 153 | *******************************/ 154 | 155 | -------------------------------------------------------------------------------- /py/report/template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Report Template 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 30 | 31 | 32 |
33 | 34 | 62 | 63 | 64 |
65 | 66 |

PE Infomation

67 | 68 |
69 | PE Infomation 70 |
71 |
72 | PE Infomation 73 | 74 | 75 | 76 | 79 | 82 | 83 | 84 | 85 | 86 | 89 | 92 | 93 | 94 | 95 | 96 |
77 | Segment Name 78 | 80 | Segment size 81 |
87 | .data 88 | 90 | 100 91 |
.text200
97 |
98 | 99 | 100 | 101 |

Hook Function Infomation

102 | 103 |
104 |
105 | 106 | Title 107 |
108 |
109 |
110 |
arg1
111 |
arg2
112 |
113 |
114 |
115 |
116 |
117 | 118 | Title2 119 |
120 |
121 | Content2 122 |
123 |
124 | 125 | 126 |
127 | 132 |
133 | 134 |
135 | 136 | 137 | 138 | -------------------------------------------------------------------------------- /py/report/semantic/components/search.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Search 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.search{position:relative}.ui.search>.prompt{margin:0;outline:0;-webkit-appearance:none;-webkit-tap-highlight-color:rgba(255,255,255,0);text-shadow:none;font-style:normal;font-weight:400;line-height:1.2;padding:.68571em 1em;font-size:1em;background:#fff;border:1px solid rgba(39,41,43,.15);color:rgba(0,0,0,.8);box-shadow:0 0 0 0 transparent inset;-webkit-transition:background-color .2s ease,color .2s ease,box-shadow .2s ease,border-color .2s ease;transition:background-color .2s ease,color .2s ease,box-shadow .2s ease,border-color .2s ease}.ui.search .prompt{border-radius:500rem}.ui.search .prompt~.search.icon{cursor:pointer}.ui.search>.results{display:none;position:absolute;top:100%;left:0;background:#fff;margin-top:.5em;width:16em;border-radius:.25em;box-shadow:0 1px 3px 1px rgba(0,0,0,.2);z-index:998}.ui.search>.results .result{cursor:pointer;display:block;overflow:hidden;font-size:1em;padding:.5em 1em;color:rgba(0,0,0,.8);line-height:1.33;border-bottom:1px solid rgba(39,41,43,.15)}.ui.search>.results .result:last-child{border-bottom:none}.ui.search>.results .result .image{float:right;overflow:hidden;background:0 0;width:5em;height:3em;border-radius:.25em}.ui.search>.results .result .image img{display:block;width:auto;height:100%}.ui.search>.results .result .image+.content{margin:0 6em 0 0}.ui.search>.results .result .title{font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-weight:700;font-size:1em;color:rgba(0,0,0,.85)}.ui.search>.results .result .description{margin-top:0;font-size:.9285em;color:rgba(0,0,0,.4)}.ui.search>.results .result .price{float:right;color:#5bbd72}.ui.search>.results>.message{padding:1em}.ui.search>.results>.message .header{font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:1.1428em;font-weight:700;color:rgba(0,0,0,.8)}.ui.search>.results>.message .description{margin-top:.25rem;font-size:1em;color:rgba(0,0,0,.8)}.ui.search>.results>.action{display:block;border-top:none;background:#f0f0f0;padding:.5em 1em;color:rgba(0,0,0,.8);font-weight:700;text-align:center}.ui.loading.search .input>.icon:before{position:absolute;content:'';top:50%;left:50%;margin:-.64285em 0 0 -.64285em;width:1.2857em;height:1.2857em;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loading.search .input>.icon:after{position:absolute;content:'';top:50%;left:50%;margin:-.64285em 0 0 -.64285em;width:1.2857em;height:1.2857em;-webkit-animation:button-spin .6s linear;animation:button-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#aaa transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent}.ui.category.search>.results .category .result:hover,.ui.search>.results .result:hover{background:#fafafa}.ui.search .action:hover{background:#e0e0e0}.ui.search>.results .category.active{background:#f0f0f0}.ui.search>.results .category.active>.name{color:rgba(0,0,0,.8)}.ui.category.search>.results .category .result.active,.ui.search>.results .result.active{position:relative;border-left-color:transparent;background:#f0f0f0;box-shadow:3px 0 3px 0 rgba(39,41,43,.15)}.ui.search>.results .result.active .description,.ui.search>.results .result.active .title{color:rgba(0,0,0,.85)}.ui.category.search .results{width:28em}.ui.category.search>.results .category{background:#f0f0f0;box-shadow:none;border-bottom:1px solid rgba(39,41,43,.15);-webkit-transition:background .2s ease,border-color .2s ease;transition:background .2s ease,border-color .2s ease}.ui.category.search>.results .category:last-child{border-bottom:none}.ui.category.search>.results .category .result{background:#fff;margin-left:100px;border-left:1px solid rgba(39,41,43,.15);border-bottom:1px solid rgba(39,41,43,.15);-webkit-transition:background .2s ease,border-color .2s ease;transition:background .2s ease,border-color .2s ease}.ui.category.search>.results .category .result:last-child{border-bottom:none}.ui.category.search>.results .category>.name{width:100px;background:#f0f0f0;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:1em;float:1em;float:left;padding:.4em 1em;font-weight:700;color:rgba(0,0,0,.4)}.ui[class*="left aligned"].search>.results{right:auto;left:0}.ui[class*="right aligned"].search>.results{right:0;left:auto}.ui.fluid.search .results{width:100%}.ui.search{font-size:1em}.ui.large.search{font-size:1.1em} -------------------------------------------------------------------------------- /py/report/semantic/components/dimmer.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Dimmer 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Dimmer 15 | *******************************/ 16 | 17 | .dimmable { 18 | position: relative; 19 | } 20 | .ui.dimmer { 21 | display: none; 22 | position: absolute; 23 | top: 0em !important; 24 | left: 0em !important; 25 | width: 100%; 26 | height: 100%; 27 | text-align: center; 28 | vertical-align: middle; 29 | background: rgba(0, 0, 0, 0.85); 30 | opacity: 0; 31 | line-height: 1; 32 | -webkit-animation-fill-mode: both; 33 | animation-fill-mode: both; 34 | -webkit-animation-duration: 0.5s; 35 | animation-duration: 0.5s; 36 | -webkit-transition: background-color 0.5s linear; 37 | transition: background-color 0.5s linear; 38 | -webkit-user-select: none; 39 | -moz-user-select: none; 40 | -ms-user-select: none; 41 | user-select: none; 42 | will-change: opacity; 43 | z-index: 1000; 44 | } 45 | 46 | /* Dimmer Content */ 47 | .ui.dimmer > .content { 48 | width: 100%; 49 | height: 100%; 50 | display: table; 51 | -webkit-user-select: text; 52 | -moz-user-select: text; 53 | -ms-user-select: text; 54 | user-select: text; 55 | } 56 | .ui.dimmer > .content > div { 57 | display: table-cell; 58 | vertical-align: middle; 59 | color: #ffffff; 60 | } 61 | 62 | /* Loose Coupling */ 63 | .ui.segment > .ui.dimmer { 64 | border-radius: inherit !important; 65 | } 66 | 67 | 68 | /******************************* 69 | States 70 | *******************************/ 71 | 72 | .animating.dimmable:not(body), 73 | .dimmed.dimmable:not(body) { 74 | overflow: hidden; 75 | } 76 | .dimmed.dimmable > .ui.animating.dimmer, 77 | .dimmed.dimmable > .ui.visible.dimmer, 78 | .ui.active.dimmer { 79 | display: block; 80 | opacity: 1; 81 | } 82 | .ui.disabled.dimmer { 83 | width: 0 !important; 84 | height: 0 !important; 85 | } 86 | 87 | 88 | /******************************* 89 | Variations 90 | *******************************/ 91 | 92 | 93 | /*-------------- 94 | Page 95 | ---------------*/ 96 | 97 | .ui.page.dimmer { 98 | position: fixed; 99 | -webkit-transform-style: ''; 100 | transform-style: ''; 101 | -webkit-perspective: 2000px; 102 | perspective: 2000px; 103 | -webkit-transform-origin: center center; 104 | -ms-transform-origin: center center; 105 | transform-origin: center center; 106 | } 107 | body.animating.in.dimmable, 108 | body.dimmed.dimmable { 109 | overflow: hidden; 110 | } 111 | body.dimmable > .dimmer { 112 | position: fixed; 113 | } 114 | /* 115 | body.dimmable > :not(.dimmer) { 116 | filter: @elementStartFilter; 117 | } 118 | body.dimmed.dimmable > :not(.dimmer) { 119 | filter: @elementEndFilter; 120 | transition: @elementTransition; 121 | } 122 | */ 123 | 124 | /*-------------- 125 | Aligned 126 | ---------------*/ 127 | 128 | .ui.dimmer > .top.aligned.content > * { 129 | vertical-align: top; 130 | } 131 | .ui.dimmer > .bottom.aligned.content > * { 132 | vertical-align: bottom; 133 | } 134 | 135 | /*-------------- 136 | Inverted 137 | ---------------*/ 138 | 139 | .ui.inverted.dimmer { 140 | background: rgba(255, 255, 255, 0.85); 141 | } 142 | .ui.inverted.dimmer > .content > * { 143 | color: #ffffff; 144 | } 145 | 146 | /*-------------- 147 | Simple 148 | ---------------*/ 149 | 150 | 151 | /* Displays without javascript */ 152 | .ui.simple.dimmer { 153 | display: block; 154 | overflow: hidden; 155 | opacity: 1; 156 | width: 0%; 157 | height: 0%; 158 | z-index: -100; 159 | background-color: rgba(0, 0, 0, 0); 160 | } 161 | .dimmed.dimmable > .ui.simple.dimmer { 162 | overflow: visible; 163 | opacity: 1; 164 | width: 100%; 165 | height: 100%; 166 | background: rgba(0, 0, 0, 0.85); 167 | z-index: 1; 168 | } 169 | .ui.simple.inverted.dimmer { 170 | background: rgba(255, 255, 255, 0); 171 | } 172 | .dimmed.dimmable > .ui.simple.inverted.dimmer { 173 | background: rgba(255, 255, 255, 0.85); 174 | } 175 | 176 | 177 | /******************************* 178 | Theme Overrides 179 | *******************************/ 180 | 181 | 182 | 183 | /******************************* 184 | User Overrides 185 | *******************************/ 186 | 187 | -------------------------------------------------------------------------------- /py/report/semantic/components/rating.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Rating 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | !function(e,n,t,a){"use strict";e.fn.rating=function(n){var t,i=e(this),o=i.selector||"",r=(new Date).getTime(),s=[],l=arguments[0],c="string"==typeof l,u=[].slice.call(arguments,1);return i.each(function(){var g,d=e.isPlainObject(n)?e.extend(!0,{},e.fn.rating.settings,n):e.extend({},e.fn.rating.settings),m=d.namespace,f=d.className,v=d.metadata,p=d.selector,b=(d.error,"."+m),h="module-"+m,y=this,R=e(this).data(h),C=e(this),x=C.find(p.icon);g={initialize:function(){g.verbose("Initializing rating module",d),0===x.length&&g.setup.layout(),d.interactive?g.enable():g.disable(),d.initialRating&&(g.debug("Setting initial rating"),g.setRating(d.initialRating)),C.data(v.rating)&&(g.debug("Rating found in metadata"),g.setRating(C.data(v.rating))),g.instantiate()},instantiate:function(){g.verbose("Instantiating module",d),R=g,C.data(h,g)},destroy:function(){g.verbose("Destroying previous instance",R),C.removeData(h),x.off(b)},refresh:function(){x=C.find(p.icon)},setup:{layout:function(){var n=C.data(v.maxRating)||d.maxRating;g.debug("Generating icon html dynamically"),C.html(e.fn.rating.settings.templates.icon(n)),g.refresh()}},event:{mouseenter:function(){var n=e(this);n.nextAll().removeClass(f.selected),C.addClass(f.selected),n.addClass(f.selected).prevAll().addClass(f.selected)},mouseleave:function(){C.removeClass(f.selected),x.removeClass(f.selected)},click:function(){var n=e(this),t=g.getRating(),a=x.index(n)+1,i="auto"==d.clearable?1===x.length:d.clearable;i&&t==a?g.clearRating():g.setRating(a)}},clearRating:function(){g.debug("Clearing current rating"),g.setRating(0)},getRating:function(){var e=x.filter("."+f.active).length;return g.verbose("Current rating retrieved",e),e},enable:function(){g.debug("Setting rating to interactive mode"),x.on("mouseenter"+b,g.event.mouseenter).on("mouseleave"+b,g.event.mouseleave).on("click"+b,g.event.click),C.removeClass(f.disabled)},disable:function(){g.debug("Setting rating to read-only mode"),x.off(b),C.addClass(f.disabled)},setRating:function(e){var n=e-1>=0?e-1:0,t=x.eq(n);C.removeClass(f.selected),x.removeClass(f.selected).removeClass(f.active),e>0&&(g.verbose("Setting current rating to",e),t.prevAll().andSelf().addClass(f.active)),d.onRate.call(y,e)},setting:function(n,t){if(g.debug("Changing setting",n,t),e.isPlainObject(n))e.extend(!0,d,n);else{if(t===a)return d[n];d[n]=t}},internal:function(n,t){if(e.isPlainObject(n))e.extend(!0,g,n);else{if(t===a)return g[n];g[n]=t}},debug:function(){d.debug&&(d.performance?g.performance.log(arguments):(g.debug=Function.prototype.bind.call(console.info,console,d.name+":"),g.debug.apply(console,arguments)))},verbose:function(){d.verbose&&d.debug&&(d.performance?g.performance.log(arguments):(g.verbose=Function.prototype.bind.call(console.info,console,d.name+":"),g.verbose.apply(console,arguments)))},error:function(){g.error=Function.prototype.bind.call(console.error,console,d.name+":"),g.error.apply(console,arguments)},performance:{log:function(e){var n,t,a;d.performance&&(n=(new Date).getTime(),a=r||n,t=n-a,r=n,s.push({Name:e[0],Arguments:[].slice.call(e,1)||"",Element:y,"Execution Time":t})),clearTimeout(g.performance.timer),g.performance.timer=setTimeout(g.performance.display,100)},display:function(){var n=d.name+":",t=0;r=!1,clearTimeout(g.performance.timer),e.each(s,function(e,n){t+=n["Execution Time"]}),n+=" "+t+"ms",o&&(n+=" '"+o+"'"),i.length>1&&(n+=" ("+i.length+")"),(console.group!==a||console.table!==a)&&s.length>0&&(console.groupCollapsed(n),console.table?console.table(s):e.each(s,function(e,n){console.log(n.Name+": "+n["Execution Time"]+"ms")}),console.groupEnd()),s=[]}},invoke:function(n,i,o){var r,s,l,c=R;return i=i||u,o=y||o,"string"==typeof n&&c!==a&&(n=n.split(/[\. ]/),r=n.length-1,e.each(n,function(t,i){var o=t!=r?i+n[t+1].charAt(0).toUpperCase()+n[t+1].slice(1):n;if(e.isPlainObject(c[o])&&t!=r)c=c[o];else{if(c[o]!==a)return s=c[o],!1;if(!e.isPlainObject(c[i])||t==r)return c[i]!==a?(s=c[i],!1):!1;c=c[i]}})),e.isFunction(s)?l=s.apply(o,i):s!==a&&(l=s),e.isArray(t)?t.push(l):t!==a?t=[t,l]:l!==a&&(t=l),s}},c?(R===a&&g.initialize(),g.invoke(l)):(R!==a&&R.invoke("destroy"),g.initialize())}),t!==a?t:this},e.fn.rating.settings={name:"Rating",namespace:"rating",debug:!1,verbose:!0,performance:!0,initialRating:0,interactive:!0,maxRating:4,clearable:"auto",onRate:function(){},error:{method:"The method you called is not defined",noMaximum:"No maximum rating specified. Cannot generate HTML automatically"},metadata:{rating:"rating",maxRating:"maxRating"},className:{active:"active",disabled:"disabled",selected:"selected",loading:"loading"},selector:{icon:".icon"},templates:{icon:function(e){for(var n=1,t="";e>=n;)t+='',n++;return t}}}}(jQuery,window,document); -------------------------------------------------------------------------------- /py/report/semantic/components/item.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Item 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributorss 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.items>.item{table-layout:fixed;display:table;margin:1em 0;width:100%;min-height:0;background:0 0;padding:0;border:none;border-radius:0;box-shadow:none;-webkit-transition:box-shadow .2s ease;transition:box-shadow .2s ease;z-index:''}.ui.items>.item a{cursor:pointer}.ui.items{margin:1.5em 0}.ui.items:first-child{margin-top:0!important}.ui.items:last-child{margin-bottom:0!important}.ui.items>.item:after{display:block;content:' ';height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item:first-child{margin-top:0}.ui.items>.item:last-child{margin-bottom:0}.ui.items>.item>.image{position:relative;display:table-cell;float:none;margin:0;padding:0;max-height:'';vertical-align:top}.ui.items>.item>.image>img{display:block;width:100%;height:auto;border-radius:.125rem;border:none}.ui.items>.item>.image:only-child>img{border-radius:0}.ui.items>.item>.content{display:block;background:0 0;margin:0;padding:0;box-shadow:none;font-size:1em;border:none;border-radius:0}.ui.items>.item>.content:after{display:block;content:' ';height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item>.image+.content{width:100%;display:table-cell;margin-left:0;vertical-align:top;padding-left:1.5em}.ui.items>.item>.content>.header{display:block;margin:-.165em 0 0;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-weight:700;color:rgba(0,0,0,.85)}.ui.items>.item>.content>.header:not(.ui){font-size:1.2em}.ui.items>.item [class*="left floated"]{float:left}.ui.items>.item [class*="right floated"]{float:right}.ui.items>.item .content img{vertical-align:middle;width:''}.ui.items>.item .avatar img,.ui.items>.item img.avatar{width:'';height:'';border-radius:500rem}.ui.items>.item>.content>.description{margin-top:.6em;max-width:550px;font-size:1em;line-height:1.33;color:rgba(0,0,0,.8)}.ui.items>.item>.content p{margin:0 0 .5em}.ui.items>.item>.content p:last-child{margin-bottom:0}.ui.items>.item .meta{font-size:1em;line-height:1em;color:rgba(0,0,0,.6)}.ui.items>.item .meta *{margin-right:.3em}.ui.items>.item .meta :last-child{margin-right:0}.ui.items>.item .meta [class*="right floated"]{margin-right:0;margin-left:.3em}.ui.items>.item>.content a:not(.ui){color:'';-webkit-transition:color .2s ease;transition:color .2s ease}.ui.items>.item>.content a:not(.ui):hover{color:''}.ui.items>.item>.content>a.header{color:rgba(0,0,0,.85)}.ui.items>.item>.content>a.header:hover{color:#00b2f3}.ui.items>.item .meta>a:not(.ui){color:rgba(0,0,0,.4)}.ui.items>.item .meta>a:not(.ui):hover{color:rgba(0,0,0,.8)}.ui.items>.item>.content .favorite.icon{cursor:pointer;opacity:.75;-webkit-transition:color .2s ease;transition:color .2s ease}.ui.items>.item>.content .favorite.icon:hover{opacity:1;color:#ffb70a}.ui.items>.item>.content .active.favorite.icon{color:#ffe623}.ui.items>.item>.content .like.icon{cursor:pointer;opacity:.75;-webkit-transition:color .2s ease;transition:color .2s ease}.ui.items>.item>.content .like.icon:hover{opacity:1;color:#ff2733}.ui.items>.item>.content .active.like.icon{color:#ff2733}.ui.items>.item .extra{display:block;position:relative;background:0 0;margin:.5rem 0 0;width:100%;padding:0;top:0;left:0;color:rgba(0,0,0,.4);box-shadow:none;-webkit-transition:color .2s ease;transition:color .2s ease;border-top:none}.ui.items>.item .extra>*{margin:.25rem .5rem .25rem 0}.ui.items>.item .extra>[class*="right floated"]{margin:.25rem 0 .25rem .5rem}.ui.items>.item .extra:after{display:block;content:' ';height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item>.image:not(.ui){width:175px}@media only screen and (min-width:768px)and (max-width:991px){.ui.items>.item{margin:1em 0}.ui.items>.item>.image:not(.ui){width:150px}.ui.items>.item>.image+.content{display:block;padding:0 0 0 1em}}@media only screen and (max-width:767px){.ui.items>.item{margin:2em 0}.ui.items>.item>.image{display:block;margin-left:auto;margin-right:auto}.ui.items>.item>.image,.ui.items>.item>.image>img{max-width:100%!important;width:auto!important;max-height:250px!important}.ui.items>.item>.image+.content{display:block;padding:1.5em 0 0}}.ui.items>.item>.image+[class*="top aligned"].content{vertical-align:top}.ui.items>.item>.image+[class*="middle aligned"].content{vertical-align:middle}.ui.items>.item>.image+[class*="bottom aligned"].content{vertical-align:bottom}.ui.relaxed.items>.item{margin:1.5em 0}.ui[class*="very relaxed"].items>.item{margin:2em 0}.ui.divided.items>.item{border-top:1px solid rgba(39,41,43,.15);margin:0;padding:1em 0}.ui.divided.items>.item:first-child{border-top:none;margin-top:0!important;padding-top:0!important}.ui.divided.items>.item:last-child{margin-bottom:0!important;padding-bottom:0!important}.ui.relaxed.divided.items>.item{margin:0;padding:1.5em 0}.ui[class*="very relaxed"].divided.items>.item{margin:0;padding:2em 0}.ui.items a.item:hover,.ui.link.items>.item:hover{cursor:pointer}.ui.items a.item:hover .content .header,.ui.link.items>.item:hover .content .header{color:#00b2f3}.ui.items>.item{min-width:100%;font-size:1em} -------------------------------------------------------------------------------- /py/trace.py: -------------------------------------------------------------------------------- 1 | import struct 2 | 3 | class Trace(object): 4 | """docstring for Trace""" 5 | def __init__(self, id, addr): 6 | self.id = id 7 | self.addr = addr 8 | 9 | self.mem_read = {} # addr, value 10 | self.mem_write = {} 11 | self.reg_read = {} # reg, value 12 | self.reg_write = {} 13 | 14 | @property 15 | def change_str(self): 16 | buf = '' 17 | for reg in self.reg_read: 18 | buf += '\t' 19 | buf += '%s->%#x' % (reg, self.reg_read[reg]) 20 | 21 | for reg in self.reg_write: 22 | buf += '\t' 23 | buf += '%s<-%#x' % (reg, self.reg_write[reg]) 24 | 25 | for addr in self.mem_read: 26 | buf += '\t' 27 | buf += '[%#x]->%#x' % (addr, self.mem_read[addr]) 28 | 29 | for addr in self.mem_write: 30 | buf += '\t' 31 | buf += '[%#x]<-%#x' % (addr, self.mem_write[addr]) 32 | return buf.strip('\t') # skip 1st '\t' 33 | 34 | def __str__(self): 35 | buf = '[%d]\t%#x\t' % (self.id, self.addr) 36 | buf += self.change_str 37 | return buf 38 | 39 | def __repr__(self): 40 | return '' % (self.id, self.addr) 41 | 42 | def add_reg_read(self, reg_name, value): 43 | self.reg_read[reg_name] = value 44 | 45 | def add_reg_write(self, reg_name, value): 46 | self.reg_write[reg_name] = value 47 | 48 | def add_mem_read(self, addr, value): 49 | self.mem_read[addr] = value 50 | 51 | def add_mem_write(self, addr, value): 52 | self.mem_write[addr] = value 53 | 54 | def add_change(self, change): 55 | assert not change.is_start, 'START change can not be added.' 56 | if change.is_reg: 57 | if change.is_read: 58 | self.add_reg_read(change.reg_name, change.value) 59 | else: 60 | self.add_reg_write(change.reg_name, change.value) 61 | else: 62 | assert change.is_mem 63 | if change.is_read: 64 | self.add_mem_read(change.addr, change.value) 65 | else: 66 | self.add_mem_write(change.addr, change.value) 67 | 68 | IS_WRITE = 0x40000000 69 | IS_MEM = 0x20000000 70 | IS_START = 0x10000000 71 | 72 | CHANGE_FORMAT = 'IIQQ' 73 | CHANGE_SIZE = 24 74 | 75 | REG_NAME_MAP = { 76 | 0 : 'eax', 77 | 4 : 'ecx', 78 | 8 : 'edx', 79 | 12 : 'ebx', 80 | 16 : 'esp', 81 | 20 : 'ebp', 82 | 24 : 'esi', 83 | 28 : 'edi', 84 | 32 : 'eip' 85 | } 86 | 87 | class Change(object): 88 | def __init__(self, buf): 89 | id, flags, addr, data = struct.unpack(CHANGE_FORMAT, buf) 90 | self.id = id 91 | self.flags = flags 92 | self.addr = addr 93 | self.data = data 94 | 95 | @property 96 | def value(self): 97 | return self.data 98 | 99 | @property 100 | def is_mem(self): 101 | return self.flags & IS_MEM 102 | 103 | @property 104 | def is_reg(self): 105 | return not self.is_mem 106 | 107 | @property 108 | def reg_name(self): 109 | assert self.is_reg 110 | return REG_NAME_MAP[self.addr] 111 | 112 | @property 113 | def is_write(self): 114 | return self.flags & IS_WRITE 115 | 116 | @property 117 | def is_read(self): 118 | return not self.is_write 119 | 120 | 121 | @property 122 | def is_start(self): 123 | return self.flags & IS_START 124 | 125 | 126 | def __str__(self): 127 | if self.is_start: 128 | return '[START]\t%#x' % self.addr 129 | elif self.is_reg: 130 | if self.is_read: 131 | return '[R]\t%s -> %#x' % (self.reg_name, self.data) 132 | else: 133 | return '[W]\t%s <- %#x' % (self.reg_name, self.data) 134 | elif self.is_mem: 135 | if self.is_read: 136 | return '[R]\t[%#x] -> %#x' % (self.addr, self.data) 137 | else: 138 | return '[W]\t[%#x] <- %#x' % (self.addr, self.data) 139 | else: 140 | return '[INVALID]' 141 | 142 | def parse_file(filepath): 143 | 144 | f = open(filepath, 'rb') 145 | 146 | trace = None 147 | 148 | while True: 149 | buf = f.read(CHANGE_SIZE) 150 | 151 | if len(buf) != CHANGE_SIZE: 152 | if trace: yield trace 153 | return 154 | 155 | c = Change(buf) 156 | #print c 157 | 158 | if c.is_start: 159 | if trace: yield trace 160 | trace = Trace(c.id, c.addr) 161 | else: 162 | trace.add_change(c) 163 | 164 | 165 | if __name__ == '__main__': 166 | count = 0 167 | global g 168 | for trace in parse_file('../bin.trace'): 169 | g = trace 170 | print trace 171 | count += 1 172 | # if count == 100: break -------------------------------------------------------------------------------- /py/report/semantic/components/modal.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Modal 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.modal{display:none;position:fixed;z-index:1001;top:50%;left:50%;text-align:left;width:90%;margin-left:-45%;background:#fff;border:none;box-shadow:0 1px 4px 1px rgba(0,0,0,.3);border-radius:.2857rem;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;will-change:top,left,margin,transform,opacity}.ui.modal>.icon:first-child+*,.ui.modal>:first-child:not(.icon){border-top-left-radius:.2857rem;border-top-right-radius:.2857rem}.ui.modal>:last-child{border-bottom-left-radius:.2857rem;border-bottom-right-radius:.2857rem}.ui.modal>.close{cursor:pointer;position:absolute;top:-2.5rem;right:-2.5rem;z-index:1;opacity:.8;font-size:1.25em;color:#fff;width:2.25rem;height:2.25rem;padding:.625rem 0 0}.ui.modal>.close:hover{opacity:1}.ui.modal>.header{display:block;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;background:-webkit-linear-gradient(transparent,rgba(0,0,0,.05))#fff;background:linear-gradient(transparent,rgba(0,0,0,.05))#fff;margin:0;padding:1.2rem 2rem;box-shadow:0 1px 2px 0 rgba(0,0,0,.05);font-size:1.6em;line-height:1.3em;font-weight:700;color:rgba(0,0,0,.85);border-bottom:1px solid rgba(39,41,43,.15)}.ui.modal>.content{display:table;table-layout:fixed;width:100%;font-size:1em;line-height:1.4;padding:2rem;background:#fff}.ui.modal>.content>.image{display:table-cell;width:'';vertical-align:top}.ui.modal>.content>.image[class*="top aligned"]{vertical-align:top}.ui.modal>.content>.image[class*="middle aligned"]{vertical-align:middle}.ui.modal>.content>.description{display:table-cell;vertical-align:top}.ui.modal>.content>.icon+.description,.ui.modal>.content>.image+.description{min-width:'';width:80%;padding-left:2em}.ui.modal>.content>.image>i.icon{font-size:8rem;margin:0;opacity:1;width:auto}.ui.modal .actions{background:#efefef;padding:1rem 2rem;border-top:1px solid rgba(39,41,43,.15);text-align:right}.ui.modal .actions>.button{margin-left:.75em}@media only screen and (max-width:767px){.ui.modal{width:95%;margin:0 0 0 -47.5%}}@media only screen and (min-width:768px){.ui.modal{width:88%;margin:0 0 0 -44%}}@media only screen and (min-width:992px){.ui.modal{width:74%;margin:0 0 0 -37%}}@media only screen and (min-width:1400px){.ui.modal{width:56%;margin:0 0 0 -28%}}@media only screen and (min-width:1920px){.ui.modal{width:42%;margin:0 0 0 -21%}}@media only screen and (max-width:992px){.ui.modal>.header{padding-right:2.25rem}.ui.modal>.close{top:.905rem;right:1rem;color:rgba(0,0,0,.8)}}@media only screen and (max-width:767px){.ui.modal>.header{padding:.75rem 2.25rem .75rem 1rem!important}.ui.modal>.content{display:block;padding:1rem!important}.ui.modal>.close{top:.5rem!important;right:.5rem!important}.ui.modal .content>.image{display:block;max-width:100%;margin:0 auto!important;text-align:center;padding:0 0 1rem!important}.ui.modal>.content>.image>i.icon{font-size:5rem;text-align:center}.ui.modal .content>.description{display:block;width:100%!important;margin:0!important;padding:1rem 0!important;box-shadow:none}.ui.modal>.actions{padding:1rem 1rem 0!important}.ui.modal .actions>.button,.ui.modal .actions>.buttons{margin-bottom:1rem}}.ui.basic.modal{background-color:transparent;border:none;border-radius:0;box-shadow:0 0;color:#fff}.ui.basic.modal>.actions,.ui.basic.modal>.content,.ui.basic.modal>.header{background-color:transparent}.ui.basic.modal>.header{color:#fff}.ui.basic.modal>.close{top:1rem;right:1.5rem}.scrolling.dimmable.dimmed{overflow:hidden}.scrolling.dimmable.dimmed>.dimmer{overflow:auto;-webkit-overflow-scrolling:touch}.scrolling.dimmable>.dimmer{position:fixed}.ui.scrolling.modal{position:static;margin:3.5rem auto!important}@media only screen and (max-width:992px){.ui.basic.modal>.close{color:#fff}.ui.scrolling.modal{margin-top:1rem;margin-bottom:1rem}}.ui.active.modal{display:block}.ui.fullscreen.modal{width:95%!important;left:2.5%!important;margin:1em auto}.ui.fullscreen.scrolling.modal{left:0!important}.ui.fullscreen.modal>.header{padding-right:2.25rem}.ui.fullscreen.modal>.close{top:.905rem;right:1rem;color:rgba(0,0,0,.8)}.ui.modal{font-size:1rem}.ui.small.modal>.header{font-size:1.3em}@media only screen and (max-width:767px){.ui.small.modal{width:95%;margin:0 0 0 -47.5%}}@media only screen and (min-width:768px){.ui.small.modal{width:52.8%;margin:0 0 0 -26.4%}}@media only screen and (min-width:992px){.ui.small.modal{width:44.4%;margin:0 0 0 -22.2%}}@media only screen and (min-width:1400px){.ui.small.modal{width:33.6%;margin:0 0 0 -16.8%}}@media only screen and (min-width:1920px){.ui.small.modal{width:25.2%;margin:0 0 0 -12.6%}}.ui.large.modal>.header{font-size:1.6em}@media only screen and (max-width:767px){.ui.large.modal{width:95%;margin:0 0 0 -47.5%}}@media only screen and (min-width:768px){.ui.large.modal{width:88%;margin:0 0 0 -44%}}@media only screen and (min-width:992px){.ui.large.modal{width:88.8%;margin:0 0 0 -44.4%}}@media only screen and (min-width:1400px){.ui.large.modal{width:67.2%;margin:0 0 0 -33.6%}}@media only screen and (min-width:1920px){.ui.large.modal{width:50.4%;margin:0 0 0 -25.2%}} -------------------------------------------------------------------------------- /py/report/semantic/components/nag.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Nag 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | !function(e,o,n,t){"use strict";e.fn.nag=function(n){var i,a=e(this),r=a.selector||"",s=(new Date).getTime(),c=[],l=arguments[0],u="string"==typeof l,g=[].slice.call(arguments,1);return a.each(function(){{var a,d=e.isPlainObject(n)?e.extend(!0,{},e.fn.nag.settings,n):e.extend({},e.fn.nag.settings),m=(d.className,d.selector),f=d.error,p=d.namespace,h="."+p,b=p+"-module",v=e(this),y=v.find(m.close),k=e(d.context?d.context:"body"),w=this,x=v.data(b);o.requestAnimationFrame||o.mozRequestAnimationFrame||o.webkitRequestAnimationFrame||o.msRequestAnimationFrame||function(e){setTimeout(e,0)}}a={initialize:function(){a.verbose("Initializing element"),v.data(b,a),y.on("click"+h,a.dismiss),d.detachable&&v.parent()[0]!==k[0]&&v.detach().prependTo(k),d.displayTime>0&&setTimeout(a.hide,d.displayTime),a.show()},destroy:function(){a.verbose("Destroying instance"),v.removeData(b).off(h)},show:function(){a.should.show()&&!v.is(":visible")&&(a.debug("Showing nag",d.animation.show),"fade"==d.animation.show?v.fadeIn(d.duration,d.easing):v.slideDown(d.duration,d.easing))},hide:function(){a.debug("Showing nag",d.animation.hide),"fade"==d.animation.show?v.fadeIn(d.duration,d.easing):v.slideUp(d.duration,d.easing)},onHide:function(){a.debug("Removing nag",d.animation.hide),v.remove(),d.onHide&&d.onHide()},dismiss:function(e){d.storageMethod&&a.storage.set(d.key,d.value),a.hide(),e.stopImmediatePropagation(),e.preventDefault()},should:{show:function(){return d.persist?(a.debug("Persistent nag is set, can show nag"),!0):a.storage.get(d.key)!=d.value.toString()?(a.debug("Stored value is not set, can show nag",a.storage.get(d.key)),!0):(a.debug("Stored value is set, cannot show nag",a.storage.get(d.key)),!1)}},get:{storageOptions:function(){var e={};return d.expires&&(e.expires=d.expires),d.domain&&(e.domain=d.domain),d.path&&(e.path=d.path),e}},clear:function(){a.storage.remove(d.key)},storage:{set:function(n,i){var r=a.get.storageOptions();if("localstorage"==d.storageMethod&&o.localStorage!==t)o.localStorage.setItem(n,i),a.debug("Value stored using local storage",n,i);else{if(e.cookie===t)return void a.error(f.noCookieStorage);e.cookie(n,i,r),a.debug("Value stored using cookie",n,i,r)}},get:function(n){var i;return"localstorage"==d.storageMethod&&o.localStorage!==t?i=o.localStorage.getItem(n):e.cookie!==t?i=e.cookie(n):a.error(f.noCookieStorage),("undefined"==i||"null"==i||i===t||null===i)&&(i=t),i},remove:function(n){var i=a.get.storageOptions();"local"==d.storageMethod&&o.store!==t?o.localStorage.removeItem(n):e.cookie!==t?e.removeCookie(n,i):a.error(f.noStorage)}},setting:function(o,n){if(a.debug("Changing setting",o,n),e.isPlainObject(o))e.extend(!0,d,o);else{if(n===t)return d[o];d[o]=n}},internal:function(o,n){if(e.isPlainObject(o))e.extend(!0,a,o);else{if(n===t)return a[o];a[o]=n}},debug:function(){d.debug&&(d.performance?a.performance.log(arguments):(a.debug=Function.prototype.bind.call(console.info,console,d.name+":"),a.debug.apply(console,arguments)))},verbose:function(){d.verbose&&d.debug&&(d.performance?a.performance.log(arguments):(a.verbose=Function.prototype.bind.call(console.info,console,d.name+":"),a.verbose.apply(console,arguments)))},error:function(){a.error=Function.prototype.bind.call(console.error,console,d.name+":"),a.error.apply(console,arguments)},performance:{log:function(e){var o,n,t;d.performance&&(o=(new Date).getTime(),t=s||o,n=o-t,s=o,c.push({Name:e[0],Arguments:[].slice.call(e,1)||"",Element:w,"Execution Time":n})),clearTimeout(a.performance.timer),a.performance.timer=setTimeout(a.performance.display,100)},display:function(){var o=d.name+":",n=0;s=!1,clearTimeout(a.performance.timer),e.each(c,function(e,o){n+=o["Execution Time"]}),o+=" "+n+"ms",r&&(o+=" '"+r+"'"),(console.group!==t||console.table!==t)&&c.length>0&&(console.groupCollapsed(o),console.table?console.table(c):e.each(c,function(e,o){console.log(o.Name+": "+o["Execution Time"]+"ms")}),console.groupEnd()),c=[]}},invoke:function(o,n,r){var s,c,l,u=x;return n=n||g,r=w||r,"string"==typeof o&&u!==t&&(o=o.split(/[\. ]/),s=o.length-1,e.each(o,function(n,i){var r=n!=s?i+o[n+1].charAt(0).toUpperCase()+o[n+1].slice(1):o;if(e.isPlainObject(u[r])&&n!=s)u=u[r];else{if(u[r]!==t)return c=u[r],!1;if(!e.isPlainObject(u[i])||n==s)return u[i]!==t?(c=u[i],!1):(a.error(f.method,o),!1);u=u[i]}})),e.isFunction(c)?l=c.apply(r,n):c!==t&&(l=c),e.isArray(i)?i.push(l):i!==t?i=[i,l]:l!==t&&(i=l),c}},u?(x===t&&a.initialize(),a.invoke(l)):(x!==t&&x.invoke("destroy"),a.initialize())}),i!==t?i:this},e.fn.nag.settings={name:"Nag",debug:!1,verbose:!0,performance:!0,namespace:"Nag",persist:!1,displayTime:0,animation:{show:"slide",hide:"slide"},context:!1,detachable:!1,expires:30,domain:!1,path:"/",storageMethod:"cookie",key:"nag",value:"dismiss",error:{noStorage:"Neither $.cookie or store is defined. A storage solution is required for storing state",method:"The method you called is not defined."},className:{bottom:"bottom",fixed:"fixed"},selector:{close:".close.icon"},speed:500,easing:"easeOutQuad",onHide:function(){}}}(jQuery,window,document); -------------------------------------------------------------------------------- /py/report/semantic/components/message.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Message 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.message{position:relative;min-height:1em;margin:1em 0;background:#efefef;padding:1em 1.5em;line-height:1.3;color:rgba(0,0,0,.8);-webkit-transition:opacity .2s ease,color .2s ease,background .2s ease,box-shadow .2s ease;transition:opacity .2s ease,color .2s ease,background .2s ease,box-shadow .2s ease;border-radius:.2857rem;box-shadow:0 0 0 1px rgba(39,41,43,.15)inset,0 0 0 0 transparent}.ui.message:first-child{margin-top:0}.ui.message:last-child{margin-bottom:0}.ui.message .header{display:block;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-weight:700;margin:0 0 .5rem}.ui.message .header:not(.ui){font-size:1.1em}.ui.message p{opacity:.85;margin:.75em 0}.ui.message p:first-child{margin-top:0}.ui.message p:last-child{margin-bottom:0}.ui.message .header+p{margin-top:.25em}.ui.message ul.list{opacity:.85;list-style-position:inside;margin:.5em 0 0;padding:0}.ui.message ul.list:first-child{margin-top:0}.ui.message ul.list:last-child{margin-bottom:0}.ui.message ul.list li{position:relative;list-style-type:none;margin:0 0 .3em 1em;padding:0}.ui.message ul.list li:before{position:absolute;content:'•';left:-1em;height:100%;vertical-align:baseline}.ui.message ul.list li:last-child{margin-bottom:0}.ui.message>.icon{margin-right:.6em}.ui.message>.close.icon{cursor:pointer;position:absolute;margin:0;top:1.15em;right:.5em;opacity:.7;-webkit-transition:opacity .1s linear;transition:opacity .1s linear}.ui.message>.close.icon:hover{opacity:1}.ui.message>:first-child{margin-top:0}.ui.message>:last-child{margin-bottom:0}.ui.visible.visible.visible.visible.message{display:block}.ui.icon.visible.visible.visible.visible.message{display:table}.ui.hidden.hidden.hidden.hidden.message{display:none}.ui.compact.message{display:inline-block}.ui.attached.message{margin-bottom:-1px;border-radius:.2857rem .2857rem 0 0;box-shadow:0 0 0 1px rgba(0,0,0,.1)inset;margin-left:-1px;margin-right:-1px}.ui.attached+.ui.attached.message:not(.top):not(.bottom){margin-top:-1px;border-radius:0}.ui.bottom.attached.message{margin-top:-1px;border-radius:0 0 .2857rem .2857rem;box-shadow:0 0 0 1px rgba(0,0,0,.1)inset,0 1px 2px 0 rgba(0,0,0,.05)}.ui.bottom.attached.message:not(:last-child){margin-bottom:1em}.ui.attached.icon.message{display:block;width:auto}.ui.icon.message{display:table;width:100%}.ui.icon.message>.icon:not(.close){display:table-cell;width:auto;vertical-align:middle;font-size:3em;opacity:.8}.ui.icon.message>.content{display:table-cell;width:100%;vertical-align:middle}.ui.icon.message .icon:not(.close)+.content{padding-left:1.5rem}.ui.icon.message .circular.icon{width:1em}.ui.icon.message .circular.icon+.content{width:auto;padding-left:2em}.ui.floating.message{box-shadow:0 1px 4px 0 rgba(0,0,0,.15),0 0 0 1px rgba(39,41,43,.15)inset}.ui.positive.message{background-color:#eeffe7;color:#3c763d}.ui.attached.positive.message,.ui.positive.message{box-shadow:0 0 0 1px #b7caa7 inset,0 1px 2px 0 rgba(0,0,0,.05)}.ui.positive.message .header{color:#356e36}.ui.negative.message{background-color:#fff0f0;color:#a94442}.ui.attached.negative.message,.ui.negative.message{box-shadow:0 0 0 1px #dbb1b1 inset,0 1px 2px 0 rgba(0,0,0,.05)}.ui.negative.message .header{color:#912d2b}.ui.info.message{background-color:#e9faff;color:#337b92}.ui.attached.info.message,.ui.info.message{box-shadow:0 0 0 1px #aad6df inset,0 1px 2px 0 rgba(0,0,0,.05)}.ui.info.message .header{color:#297187}.ui.warning.message{background-color:#fffbe6;color:#876a38}.ui.attached.warning.message,.ui.warning.message{box-shadow:0 0 0 1px #d9caab inset,0 1px 2px 0 rgba(0,0,0,.05)}.ui.warning.message .header{color:#825c01}.ui.error.message{background-color:#fff0f0;color:#a94442}.ui.attached.error.message,.ui.error.message{box-shadow:0 0 0 1px #dbb1b1 inset,0 1px 2px 0 rgba(0,0,0,.05)}.ui.error.message .header{color:#912d2b}.ui.success.message{background-color:#eeffe7;color:#3c763d}.ui.attached.success.message,.ui.success.message{box-shadow:0 0 0 1px #b7caa7 inset,0 1px 2px 0 rgba(0,0,0,.05)}.ui.success.message .header{color:#356e36}.ui.black.message,.ui.inverted.message{background-color:#1b1c1d;color:#fff}.ui.blue.message{background-color:#dff0ff;color:#3b83c0}.ui.blue.message .header{color:#3576ac}.ui.green.message{background-color:#ebffed;color:#1ebc30}.ui.green.message .header{color:#1aa62a}.ui.orange.message{background-color:#ffedde;color:#e07b53}.ui.orange.message .header{color:#dc6a3d}.ui.pink.message{background-color:#ffe3fb;color:#d9499a}.ui.pink.message .header{color:#d5348e}.ui.purple.message{background-color:#eae7ff;color:#564f8a}.ui.purple.message .header{color:#4c467a}.ui.red.message{background-color:#ffe8e6;color:#d95c5c}.ui.red.message .header{color:#d44747}.ui.teal.message{background-color:#e9ffff;color:#10a3a3}.ui.teal.message .header{color:#0e8c8c}.ui.yellow.message{background-color:#fff8db;color:#b58105}.ui.yellow.message .header{color:#9c6f04}.ui.small.message{font-size:.92857143em}.ui.message{font-size:1em}.ui.large.message{font-size:1.14285714em}.ui.huge.message{font-size:1.42857143em}.ui.massive.message{font-size:1.71428571em} -------------------------------------------------------------------------------- /py/pyh.py: -------------------------------------------------------------------------------- 1 | # @file: pyh.py 2 | # @purpose: a HTML tag generator 3 | # @author: Emmanuel Turlay 4 | 5 | __doc__ = """The pyh.py module is the core of the PyH package. PyH lets you 6 | generate HTML tags from within your python code. 7 | See http://code.google.com/p/pyh/ for documentation. 8 | """ 9 | __author__ = "Emmanuel Turlay " 10 | __version__ = '$Revision: 63 $' 11 | __date__ = '$Date: 2010-05-21 03:09:03 +0200 (Fri, 21 May 2010) $' 12 | 13 | from sys import _getframe, stdout, modules, version 14 | nOpen={} 15 | 16 | nl = '\n' 17 | doctype = '\n' 18 | charset = '\n' 19 | 20 | tags = ['html', 'body', 'head', 'link', 'meta', 'div', 'p', 'form', 'legend', 21 | 'input', 'select', 'span', 'b', 'i', 'option', 'img', 'script', 22 | 'table', 'tr', 'td', 'th', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 23 | 'fieldset', 'a', 'title', 'body', 'head', 'title', 'script', 'br', 'table', 24 | 'ul', 'li', 'ol'] 25 | 26 | # by Moon 2015/04/17 27 | tags += ["thead","tbody"] 28 | 29 | selfClose = ['input', 'img', 'link', 'br'] 30 | 31 | class Tag(list): 32 | tagname = '' 33 | 34 | def __init__(self, *arg, **kw): 35 | self.attributes = kw 36 | if self.tagname : 37 | name = self.tagname 38 | self.isSeq = False 39 | else: 40 | name = 'sequence' 41 | self.isSeq = True 42 | self.id = kw.get('id', name) 43 | #self.extend(arg) 44 | for a in arg: self.addObj(a) 45 | 46 | def __iadd__(self, obj): 47 | if isinstance(obj, Tag) and obj.isSeq: 48 | for o in obj: self.addObj(o) 49 | else: self.addObj(obj) 50 | return self 51 | 52 | def addObj(self, obj): 53 | if not isinstance(obj, Tag): obj = str(obj) 54 | id=self.setID(obj) 55 | setattr(self, id, obj) 56 | self.append(obj) 57 | 58 | def setID(self, obj): 59 | if isinstance(obj, Tag): 60 | id = obj.id 61 | n = len([t for t in self if isinstance(t, Tag) and t.id.startswith(id)]) 62 | else: 63 | id = 'content' 64 | n = len([t for t in self if not isinstance(t, Tag)]) 65 | if n: id = '%s_%03i' % (id, n) 66 | if isinstance(obj, Tag): obj.id = id 67 | return id 68 | 69 | def __add__(self, obj): 70 | if self.tagname: return Tag(self, obj) 71 | self.addObj(obj) 72 | return self 73 | 74 | def __lshift__(self, obj): 75 | self += obj 76 | if isinstance(obj, Tag): return obj 77 | 78 | def render(self): 79 | result = '' 80 | if self.tagname: 81 | result = '<%s%s%s>' % (self.tagname, self.renderAtt(), self.selfClose()*' /') 82 | if not self.selfClose(): 83 | for c in self: 84 | if isinstance(c, Tag): 85 | result += c.render() 86 | else: result += c 87 | if self.tagname: 88 | result += '' % self.tagname 89 | result += '\n' 90 | return result 91 | 92 | def renderAtt(self): 93 | result = '' 94 | for n, v in self.attributes.iteritems(): 95 | if n != 'txt' and n != 'open': 96 | if n == 'cl': n = 'class' 97 | result += ' %s="%s"' % (n, v) 98 | return result 99 | 100 | def selfClose(self): 101 | return self.tagname in selfClose 102 | 103 | def TagFactory(name): 104 | class f(Tag): 105 | tagname = name 106 | f.__name__ = name 107 | return f 108 | 109 | thisModule = modules[__name__] 110 | 111 | for t in tags: setattr(thisModule, t, TagFactory(t)) 112 | 113 | def ValidW3C(): 114 | out = a(img(src='http://www.w3.org/Icons/valid-xhtml10', alt='Valid XHTML 1.0 Strict'), href='http://validator.w3.org/check?uri=referer') 115 | return out 116 | 117 | class PyH(Tag): 118 | tagname = 'html' 119 | 120 | def __init__(self, name='MyPyHPage'): 121 | self += head() 122 | self += body() 123 | self.attributes = dict(xmlns='http://www.w3.org/1999/xhtml', lang='en') 124 | self.head += title(name) 125 | 126 | def __iadd__(self, obj): 127 | if isinstance(obj, head) or isinstance(obj, body): self.addObj(obj) 128 | elif isinstance(obj, meta) or isinstance(obj, link): self.head += obj 129 | else: 130 | self.body += obj 131 | id=self.setID(obj) 132 | setattr(self, id, obj) 133 | return self 134 | 135 | def addJS(self, *arg): 136 | for f in arg: self.head += script(type='text/javascript', src=f) 137 | 138 | def addCSS(self, *arg): 139 | for f in arg: self.head += link(rel='stylesheet', type='text/css', href=f) 140 | 141 | def printOut(self,file=''): 142 | if file: f = open(file, 'w') 143 | else: f = stdout 144 | f.write(doctype) 145 | f.write(self.render()) 146 | f.flush() 147 | if file: f.close() 148 | 149 | -------------------------------------------------------------------------------- /py/report/semantic/components/ad.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Ad 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2013 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Advertisement 15 | *******************************/ 16 | 17 | .ui.ad { 18 | display: block; 19 | overflow: hidden; 20 | margin: 1em 0em; 21 | } 22 | .ui.ad:first-child { 23 | margin: 0em; 24 | } 25 | .ui.ad:last-child { 26 | margin: 0em; 27 | } 28 | .ui.ad iframe { 29 | margin: 0em; 30 | padding: 0em; 31 | border: none; 32 | overflow: hidden; 33 | } 34 | 35 | /*-------------- 36 | Common 37 | ---------------*/ 38 | 39 | 40 | /* Leaderboard */ 41 | .ui.leaderboard.ad { 42 | width: 728px; 43 | height: 90px; 44 | } 45 | 46 | /* Medium Rectangle */ 47 | .ui[class*="medium rectangle"].ad { 48 | width: 300px; 49 | height: 250px; 50 | } 51 | 52 | /* Large Rectangle */ 53 | .ui[class*="large rectangle"].ad { 54 | width: 336px; 55 | height: 280px; 56 | } 57 | 58 | /* Half Page */ 59 | .ui[class*="half page"].ad { 60 | width: 300px; 61 | height: 600px; 62 | } 63 | 64 | /*-------------- 65 | Square 66 | ---------------*/ 67 | 68 | 69 | /* Square */ 70 | .ui.square.ad { 71 | width: 250px; 72 | height: 250px; 73 | } 74 | 75 | /* Small Square */ 76 | .ui[class*="small square"].ad { 77 | width: 200px; 78 | height: 200px; 79 | } 80 | 81 | /*-------------- 82 | Rectangle 83 | ---------------*/ 84 | 85 | 86 | /* Small Rectangle */ 87 | .ui[class*="small rectangle"].ad { 88 | width: 180px; 89 | height: 150px; 90 | } 91 | 92 | /* Vertical Rectangle */ 93 | .ui[class*="vertical rectangle"].ad { 94 | width: 240px; 95 | height: 400px; 96 | } 97 | 98 | /*-------------- 99 | Button 100 | ---------------*/ 101 | 102 | .ui.button.ad { 103 | width: 120px; 104 | height: 90px; 105 | } 106 | .ui[class*="square button"].ad { 107 | width: 125px; 108 | height: 125px; 109 | } 110 | .ui[class*="small button"].ad { 111 | width: 120px; 112 | height: 60px; 113 | } 114 | 115 | /*-------------- 116 | Skyscrapers 117 | ---------------*/ 118 | 119 | 120 | /* Skyscraper */ 121 | .ui.skyscraper.ad { 122 | width: 120px; 123 | height: 600px; 124 | } 125 | 126 | /* Wide Skyscraper */ 127 | .ui[class*="wide skyscraper"].ad { 128 | width: 160px; 129 | } 130 | 131 | /*-------------- 132 | Banners 133 | ---------------*/ 134 | 135 | 136 | /* Banner */ 137 | .ui.banner.ad { 138 | width: 468px; 139 | height: 60px; 140 | } 141 | 142 | /* Vertical Banner */ 143 | .ui[class*="vertical banner"].ad { 144 | width: 120px; 145 | height: 240px; 146 | } 147 | 148 | /* Top Banner */ 149 | .ui[class*="top banner"].ad { 150 | width: 930px; 151 | height: 180px; 152 | } 153 | 154 | /* Half Banner */ 155 | .ui[class*="half banner"].ad { 156 | width: 234px; 157 | height: 60px; 158 | } 159 | 160 | /*-------------- 161 | Boards 162 | ---------------*/ 163 | 164 | 165 | /* Leaderboard */ 166 | .ui[class*="large leaderboard"].ad { 167 | width: 970px; 168 | height: 90px; 169 | } 170 | 171 | /* Billboard */ 172 | .ui.billboard.ad { 173 | width: 970px; 174 | height: 250px; 175 | } 176 | 177 | /*-------------- 178 | Panorama 179 | ---------------*/ 180 | 181 | 182 | /* Panorama */ 183 | .ui.panorama.ad { 184 | width: 980px; 185 | height: 120px; 186 | } 187 | 188 | /*-------------- 189 | Netboard 190 | ---------------*/ 191 | 192 | 193 | /* Netboard */ 194 | .ui.netboard.ad { 195 | width: 580px; 196 | height: 400px; 197 | } 198 | 199 | /*-------------- 200 | Mobile 201 | ---------------*/ 202 | 203 | 204 | /* Large Mobile Banner */ 205 | .ui[class*="large mobile banner"].ad { 206 | width: 320px; 207 | height: 100px; 208 | } 209 | 210 | /* Mobile Leaderboard */ 211 | .ui[class*="mobile leaderboard"].ad { 212 | width: 320px; 213 | height: 50px; 214 | } 215 | 216 | 217 | /******************************* 218 | Types 219 | *******************************/ 220 | 221 | 222 | /* Mobile Sizes */ 223 | .ui.mobile.ad { 224 | display: none; 225 | } 226 | @media only screen and (max-width: 767px) { 227 | .ui.mobile.ad { 228 | display: block; 229 | } 230 | } 231 | 232 | 233 | /******************************* 234 | Variations 235 | *******************************/ 236 | 237 | .ui.centered.ad { 238 | margin-left: auto; 239 | margin-right: auto; 240 | } 241 | .ui.test.ad { 242 | position: relative; 243 | background: #333333; 244 | } 245 | .ui.test.ad:after { 246 | position: absolute; 247 | top: 50%; 248 | left: 50%; 249 | width: 100%; 250 | text-align: center; 251 | -webkit-transform: translateX(-50%) translateY(-50%); 252 | -ms-transform: translateX(-50%) translateY(-50%); 253 | transform: translateX(-50%) translateY(-50%); 254 | content: 'Ad'; 255 | color: #ffffff; 256 | font-size: 1em; 257 | font-weight: bold; 258 | } 259 | .ui.mobile.test.ad:after { 260 | font-size: 0.85714em; 261 | } 262 | .ui.test.ad[data-text]:after { 263 | content: attr(data-text); 264 | } 265 | 266 | 267 | /******************************* 268 | Theme Overrides 269 | *******************************/ 270 | 271 | 272 | 273 | /******************************* 274 | User Variable Overrides 275 | *******************************/ 276 | 277 | -------------------------------------------------------------------------------- /py/report/semantic/components/reveal.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Reveal 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.reveal{display:inline-block;position:relative!important;font-size:0!important}.ui.reveal>.visible.content{position:absolute!important;top:0!important;left:0!important;z-index:3!important;-webkit-transition:all .8s cubic-bezier(.175,.885,.32,1).15s;transition:all .8s cubic-bezier(.175,.885,.32,1).15s}.ui.reveal>.hidden.content{position:relative!important;z-index:2!important}.ui.reveal:hover .visible.content{z-index:4!important}.ui.slide.reveal{position:relative!important;overflow:hidden!important;white-space:nowrap}.ui.slide.reveal>.content{display:block;float:left;margin:0;-webkit-transition:-webkit-transform .8s cubic-bezier(.175,.885,.32,1).15s;transition:transform .8s cubic-bezier(.175,.885,.32,1).15s}.ui.slide.reveal>.visible.content{position:relative!important}.ui.slide.reveal>.hidden.content{position:absolute!important;left:0!important;width:100%!important;-webkit-transform:translateX(100%)!important;-ms-transform:translateX(100%)!important;transform:translateX(100%)!important}.ui.slide.reveal:hover>.visible.content{-webkit-transform:translateX(-100%)!important;-ms-transform:translateX(-100%)!important;transform:translateX(-100%)!important}.ui.slide.reveal:hover>.hidden.content,.ui.slide.right.reveal>.visible.content{-webkit-transform:translateX(0)!important;-ms-transform:translateX(0)!important;transform:translateX(0)!important}.ui.slide.right.reveal>.hidden.content{-webkit-transform:translateX(-100%)!important;-ms-transform:translateX(-100%)!important;transform:translateX(-100%)!important}.ui.slide.right.reveal:hover>.visible.content{-webkit-transform:translateX(100%)!important;-ms-transform:translateX(100%)!important;transform:translateX(100%)!important}.ui.slide.right.reveal:hover>.hidden.content{-webkit-transform:translateX(0)!important;-ms-transform:translateX(0)!important;transform:translateX(0)!important}.ui.slide.up.reveal>.hidden.content{-webkit-transform:translateY(100%)!important;-ms-transform:translateY(100%)!important;transform:translateY(100%)!important}.ui.slide.up.reveal:hover>.visible.content{-webkit-transform:translateY(-100%)!important;-ms-transform:translateY(-100%)!important;transform:translateY(-100%)!important}.ui.slide.up.reveal:hover>.hidden.content{-webkit-transform:translateY(0)!important;-ms-transform:translateY(0)!important;transform:translateY(0)!important}.ui.slide.down.reveal>.hidden.content{-webkit-transform:translateY(-100%)!important;-ms-transform:translateY(-100%)!important;transform:translateY(-100%)!important}.ui.slide.down.reveal:hover>.visible.content{-webkit-transform:translateY(100%)!important;-ms-transform:translateY(100%)!important;transform:translateY(100%)!important}.ui.slide.down.reveal:hover>.hidden.content{-webkit-transform:translateY(0)!important;-ms-transform:translateY(0)!important;transform:translateY(0)!important}.ui.fade.reveal>.visible.content{opacity:1}.ui.fade.reveal:hover>.visible.content{opacity:0}.ui.move.reveal{position:relative!important;overflow:hidden!important;white-space:nowrap}.ui.move.reveal>.content{display:block;float:left;margin:0;-webkit-transition:-webkit-transform .8s cubic-bezier(.175,.885,.32,1).15s;transition:transform .8s cubic-bezier(.175,.885,.32,1).15s}.ui.move.reveal>.visible.content{position:relative!important}.ui.move.reveal>.hidden.content{position:absolute!important;left:0!important;width:100%!important}.ui.move.reveal:hover>.visible.content{-webkit-transform:translateX(-100%)!important;-ms-transform:translateX(-100%)!important;transform:translateX(-100%)!important}.ui.move.right.reveal:hover>.visible.content{-webkit-transform:translateX(100%)!important;-ms-transform:translateX(100%)!important;transform:translateX(100%)!important}.ui.move.up.reveal:hover>.visible.content{-webkit-transform:translateY(-100%)!important;-ms-transform:translateY(-100%)!important;transform:translateY(-100%)!important}.ui.move.down.reveal:hover>.visible.content{-webkit-transform:translateY(100%)!important;-ms-transform:translateY(100%)!important;transform:translateY(100%)!important}.ui.rotate.reveal>.visible.content{-webkit-transition-duration:.8s;transition-duration:.8s;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}.ui.rotate.reveal>.visible.content,.ui.rotate.right.reveal>.visible.content{-webkit-transform-origin:bottom right;-ms-transform-origin:bottom right;transform-origin:bottom right}.ui.rotate.reveal:hover>.visible.content,.ui.rotate.right.reveal:hover>.visible.content{-webkit-transform:rotate(110deg);-ms-transform:rotate(110deg);transform:rotate(110deg)}.ui.rotate.left.reveal>.visible.content{-webkit-transform-origin:bottom left;-ms-transform-origin:bottom left;transform-origin:bottom left}.ui.rotate.left.reveal:hover>.visible.content{-webkit-transform:rotate(-110deg);-ms-transform:rotate(-110deg);transform:rotate(-110deg)}.ui.disabled.reveal{opacity:1!important}.ui.disabled.reveal>.content{-webkit-transition:none!important;transition:none!important}.ui.disabled.reveal:hover>.visible.content{position:static!important;display:block!important;opacity:1!important;top:0!important;left:0!important;right:auto!important;bottom:auto!important;-webkit-transform:none!important;-ms-transform:none!important;transform:none!important}.ui.disabled.reveal:hover>.hidden.content{display:none!important}.ui.masked.reveal{overflow:hidden}.ui.instant.reveal>.content{-webkit-transition-delay:0s!important;transition-delay:0s!important}.ui.reveal>.content{font-size:1rem!important} -------------------------------------------------------------------------------- /py/report/semantic/components/divider.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Divider 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Divider 15 | *******************************/ 16 | 17 | .ui.divider { 18 | margin: 1rem 0rem; 19 | line-height: 1; 20 | height: 0em; 21 | font-weight: bold; 22 | text-transform: uppercase; 23 | letter-spacing: 0.05em; 24 | color: rgba(0, 0, 0, 0.85); 25 | -webkit-user-select: none; 26 | -moz-user-select: none; 27 | -ms-user-select: none; 28 | user-select: none; 29 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 30 | } 31 | 32 | /*-------------- 33 | Basic 34 | ---------------*/ 35 | 36 | .ui.divider:not(.vertical):not(.horizontal) { 37 | border-top: 1px solid rgba(0, 0, 0, 0.1); 38 | border-bottom: 1px solid rgba(255, 255, 255, 0.2); 39 | } 40 | 41 | /*-------------- 42 | Coupling 43 | ---------------*/ 44 | 45 | .ui.grid > .ui.divider { 46 | font-size: 1rem; 47 | } 48 | 49 | /*-------------- 50 | Horizontal 51 | ---------------*/ 52 | 53 | .ui.horizontal.divider { 54 | position: relative; 55 | height: auto; 56 | margin: ''; 57 | overflow: hidden; 58 | line-height: 1; 59 | text-align: center; 60 | } 61 | .ui.horizontal.divider:before, 62 | .ui.horizontal.divider:after { 63 | position: absolute; 64 | content: ''; 65 | z-index: 3; 66 | width: 50%; 67 | top: 50%; 68 | height: 0px; 69 | border-top: 1px solid rgba(0, 0, 0, 0.1); 70 | border-bottom: 1px solid rgba(255, 255, 255, 0.2); 71 | } 72 | .ui.horizontal.divider:before { 73 | margin-left: -webkit-calc(-50% - 1em ); 74 | margin-left: calc(-50% - 1em ); 75 | } 76 | .ui.horizontal.divider:after { 77 | margin-left: 1em; 78 | } 79 | 80 | /*-------------- 81 | Vertical 82 | ---------------*/ 83 | 84 | .ui.vertical.divider { 85 | position: absolute; 86 | z-index: 2; 87 | top: 50%; 88 | left: 50%; 89 | margin: 0rem; 90 | padding: 0em; 91 | width: auto; 92 | height: 50%; 93 | line-height: 0em; 94 | text-align: center; 95 | -webkit-transform: translateX(-50%); 96 | -ms-transform: translateX(-50%); 97 | transform: translateX(-50%); 98 | } 99 | .ui.vertical.divider:before, 100 | .ui.vertical.divider:after { 101 | position: absolute; 102 | left: 50%; 103 | content: ''; 104 | z-index: 3; 105 | border-left: 1px solid rgba(0, 0, 0, 0.1); 106 | border-right: 1px solid rgba(255, 255, 255, 0.2); 107 | width: 0%; 108 | height: -webkit-calc(100% - 1rem ); 109 | height: calc(100% - 1rem ); 110 | } 111 | .ui.vertical.divider:before { 112 | top: -100%; 113 | } 114 | .ui.vertical.divider:after { 115 | top: auto; 116 | bottom: 0px; 117 | } 118 | 119 | /* Inside grid */ 120 | @media only screen and (max-width: 767px) { 121 | .ui.stackable.grid .ui.vertical.divider, 122 | .ui.grid .stackable.row .ui.vertical.divider { 123 | position: relative; 124 | margin: 1rem 0rem; 125 | left: 50%; 126 | height: auto; 127 | overflow: hidden; 128 | line-height: 1; 129 | text-align: center; 130 | } 131 | .ui.stackable.grid .ui.vertical.divider:before, 132 | .ui.grid .stackable.row .ui.vertical.divider:before, 133 | .ui.stackable.grid .ui.vertical.divider:after, 134 | .ui.grid .stackable.row .ui.vertical.divider:after { 135 | position: absolute; 136 | left: auto; 137 | content: ''; 138 | z-index: 3; 139 | width: 50%; 140 | top: 50%; 141 | height: 0px; 142 | border-top: 1px solid rgba(0, 0, 0, 0.1); 143 | border-bottom: 1px solid rgba(255, 255, 255, 0.2); 144 | } 145 | .ui.stackable.grid .ui.vertical.divider:before, 146 | .ui.grid .stackable.row .ui.vertical.divider:before { 147 | margin-left: -51%; 148 | } 149 | .ui.stackable.grid .ui.vertical.divider:after, 150 | .ui.grid .stackable.row .ui.vertical.divider:after { 151 | margin-left: 1em; 152 | } 153 | } 154 | 155 | /*-------------- 156 | Icon 157 | ---------------*/ 158 | 159 | .ui.divider > .icon { 160 | margin: 0rem; 161 | font-size: 1rem; 162 | height: 1em; 163 | vertical-align: middle; 164 | } 165 | 166 | 167 | /******************************* 168 | Variations 169 | *******************************/ 170 | 171 | 172 | /*-------------- 173 | Hidden 174 | ---------------*/ 175 | 176 | .ui.hidden.divider { 177 | border-color: transparent !important; 178 | } 179 | 180 | /*-------------- 181 | Inverted 182 | ---------------*/ 183 | 184 | .ui.divider.inverted, 185 | .ui.vertical.inverted.divider, 186 | .ui.horizontal.inverted.divider { 187 | color: #ffffff; 188 | } 189 | .ui.divider.inverted, 190 | .ui.divider.inverted:after, 191 | .ui.divider.inverted:before { 192 | border-top-color: rgba(0, 0, 0, 0.15) !important; 193 | border-bottom-color: rgba(255, 255, 255, 0.15) !important; 194 | border-left-color: rgba(0, 0, 0, 0.15) !important; 195 | border-right-color: rgba(255, 255, 255, 0.15) !important; 196 | } 197 | 198 | /*-------------- 199 | Fitted 200 | ---------------*/ 201 | 202 | .ui.fitted.divider { 203 | margin: 0em; 204 | } 205 | 206 | /*-------------- 207 | Clearing 208 | ---------------*/ 209 | 210 | .ui.clearing.divider { 211 | clear: both; 212 | } 213 | 214 | /*-------------- 215 | Section 216 | ---------------*/ 217 | 218 | .ui.section.divider { 219 | margin-top: 2rem; 220 | margin-bottom: 2rem; 221 | } 222 | 223 | /*-------------- 224 | Sizes 225 | ---------------*/ 226 | 227 | .ui.divider { 228 | font-size: 1rem; 229 | } 230 | 231 | 232 | /******************************* 233 | Theme Overrides 234 | *******************************/ 235 | 236 | 237 | 238 | /******************************* 239 | Site Overrides 240 | *******************************/ 241 | 242 | -------------------------------------------------------------------------------- /py/report/semantic/components/video.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Video 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributorss 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | !function(e,o,t,n){"use strict";e.fn.video=function(t){{var a,i=e(this),r=i.selector||"",l=(new Date).getTime(),c=[],u=arguments[0],s="string"==typeof u,m=[].slice.call(arguments,1);o.requestAnimationFrame||o.mozRequestAnimationFrame||o.webkitRequestAnimationFrame||o.msRequestAnimationFrame||function(e){setTimeout(e,0)}}return i.each(function(){var d,p=e.isPlainObject(t)?e.extend(!0,{},e.fn.video.settings,t):e.extend({},e.fn.video.settings),f=p.selector,g=p.className,h=p.error,v=p.metadata,b=p.namespace,y=p.templates,w="."+b,x="module-"+b,F=(e(o),e(this)),C=F.find(f.placeholder),E=F.find(f.playButton),T=F.find(f.embed),A=this,P=F.data(x);d={initialize:function(){d.debug("Initializing video"),d.create(),C.on("click"+w,d.play),E.on("click"+w,d.play),d.instantiate()},instantiate:function(){d.verbose("Storing instance of module",d),P=d,F.data(x,d)},create:function(){var e=F.data(v.image),o=y.video(e);F.html(o),d.refresh(),e||d.play(),d.debug("Creating html for video element",o)},destroy:function(){d.verbose("Destroying previous instance of video"),d.reset(),F.removeData(x).off(w),C.off(w),E.off(w)},refresh:function(){d.verbose("Refreshing selector cache"),C=F.find(f.placeholder),E=F.find(f.playButton),T=F.find(f.embed)},change:function(e,o,t){d.debug("Changing video to ",e,o,t),F.data(v.source,e).data(v.id,o).data(v.url,t),p.onChange()},reset:function(){d.debug("Clearing video embed and showing placeholder"),F.removeClass(g.active),T.html(" "),C.show(),p.onReset()},play:function(){d.debug("Playing video");var e=F.data(v.source)||!1,o=F.data(v.url)||!1,t=F.data(v.id)||!1;T.html(d.generate.html(e,t,o)),F.addClass(g.active),p.onPlay()},get:{source:function(e){return"string"!=typeof e?!1:-1!==e.search("youtube.com")?"youtube":-1!==e.search("vimeo.com")?"vimeo":!1},id:function(e){return e.match(p.regExp.youtube)?e.match(p.regExp.youtube)[1]:e.match(p.regExp.vimeo)?e.match(p.regExp.vimeo)[2]:!1}},generate:{html:function(e,o,t){d.debug("Generating embed html");var n;return e=e||p.source,o=o||p.id,e&&o||t?(e&&o||(e=d.get.source(t),o=d.get.id(t)),"vimeo"==e?n='':"youtube"==e&&(n='')):d.error(h.noVideo),n},url:function(e){var o=p.api?1:0,t="auto"===p.autoplay?F.data("image")!==n:p.autoplay,a=p.hd?1:0,i=p.showUI?1:0,r=p.showUI?0:1,l="";return"vimeo"==e&&(l="api="+o+"&title="+i+"&byline="+i+"&portrait="+i+"&autoplay="+t,p.color&&(l+="&color="+p.color)),"ustream"==e?(l="autoplay="+t,p.color&&(l+="&color="+p.color)):"youtube"==e&&(l="enablejsapi="+o+"&autoplay="+t+"&autohide="+r+"&hq="+a+"&modestbranding=1",p.color&&(l+="&color="+p.color)),l}},setting:function(o,t){if(d.debug("Changing setting",o,t),e.isPlainObject(o))e.extend(!0,p,o);else{if(t===n)return p[o];p[o]=t}},internal:function(o,t){if(e.isPlainObject(o))e.extend(!0,d,o);else{if(t===n)return d[o];d[o]=t}},debug:function(){p.debug&&(p.performance?d.performance.log(arguments):(d.debug=Function.prototype.bind.call(console.info,console,p.name+":"),d.debug.apply(console,arguments)))},verbose:function(){p.verbose&&p.debug&&(p.performance?d.performance.log(arguments):(d.verbose=Function.prototype.bind.call(console.info,console,p.name+":"),d.verbose.apply(console,arguments)))},error:function(){d.error=Function.prototype.bind.call(console.error,console,p.name+":"),d.error.apply(console,arguments)},performance:{log:function(e){var o,t,n;p.performance&&(o=(new Date).getTime(),n=l||o,t=o-n,l=o,c.push({Name:e[0],Arguments:[].slice.call(e,1)||"",Element:A,"Execution Time":t})),clearTimeout(d.performance.timer),d.performance.timer=setTimeout(d.performance.display,100)},display:function(){var o=p.name+":",t=0;l=!1,clearTimeout(d.performance.timer),e.each(c,function(e,o){t+=o["Execution Time"]}),o+=" "+t+"ms",r&&(o+=" '"+r+"'"),i.length>1&&(o+=" ("+i.length+")"),(console.group!==n||console.table!==n)&&c.length>0&&(console.groupCollapsed(o),console.table?console.table(c):e.each(c,function(e,o){console.log(o.Name+": "+o["Execution Time"]+"ms")}),console.groupEnd()),c=[]}},invoke:function(o,t,i){var r,l,c,u=P;return t=t||m,i=A||i,"string"==typeof o&&u!==n&&(o=o.split(/[\. ]/),r=o.length-1,e.each(o,function(t,a){var i=t!=r?a+o[t+1].charAt(0).toUpperCase()+o[t+1].slice(1):o;if(e.isPlainObject(u[i])&&t!=r)u=u[i];else{if(u[i]!==n)return l=u[i],!1;if(!e.isPlainObject(u[a])||t==r)return u[a]!==n?(l=u[a],!1):(d.error(h.method,o),!1);u=u[a]}})),e.isFunction(l)?c=l.apply(i,t):l!==n&&(c=l),e.isArray(a)?a.push(c):a!==n?a=[a,c]:c!==n&&(a=c),l}},s?(P===n&&d.initialize(),d.invoke(u)):(P!==n&&P.invoke("destroy"),d.initialize())}),a!==n?a:this},e.fn.video.settings={name:"Video",namespace:"video",debug:!1,verbose:!0,performance:!0,metadata:{id:"id",image:"image",source:"source",url:"url"},source:!1,url:!1,id:!1,aspectRatio:16/9,onPlay:function(){},onReset:function(){},onChange:function(){},onPause:function(){},onStop:function(){},width:"auto",height:"auto",autoplay:"auto",color:"#442359",hd:!0,showUI:!1,api:!0,regExp:{youtube:/^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/,vimeo:/http:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/},error:{noVideo:"No video specified",method:"The method you called is not defined"},className:{active:"active"},selector:{embed:".embed",placeholder:".placeholder",playButton:".play"}},e.fn.video.settings.templates={video:function(e){var o="";return e&&(o+=''),o+='
'}}}(jQuery,window,document); -------------------------------------------------------------------------------- /py/report/semantic/components/comment.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Comment 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributorss 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Standard 15 | *******************************/ 16 | 17 | 18 | /*-------------- 19 | Comments 20 | ---------------*/ 21 | 22 | .ui.comments { 23 | margin: 1.5em 0em; 24 | max-width: 650px; 25 | } 26 | .ui.comments:first-child { 27 | margin-top: 0em; 28 | } 29 | .ui.comments:last-child { 30 | margin-bottom: 0em; 31 | } 32 | 33 | /*-------------- 34 | Comment 35 | ---------------*/ 36 | 37 | .ui.comments .comment { 38 | position: relative; 39 | background: none; 40 | margin: 0.5em 0em 0em; 41 | padding: 0.5em 0em 0em; 42 | border: none; 43 | border-top: none; 44 | line-height: 1.2; 45 | } 46 | .ui.comments .comment:first-child { 47 | margin-top: 0em; 48 | padding-top: 0em; 49 | } 50 | 51 | /*-------------------- 52 | Nested Comments 53 | ---------------------*/ 54 | 55 | .ui.comments .comment .comments { 56 | margin: 0em 0em 0.5em 0.5em; 57 | padding: 1em 0em 1em 1em; 58 | } 59 | .ui.comments .comment .comments:before { 60 | position: absolute; 61 | top: 0px; 62 | left: 0px; 63 | } 64 | .ui.comments .comment .comments .comment { 65 | border: none; 66 | border-top: none; 67 | background: none; 68 | } 69 | 70 | /*-------------- 71 | Avatar 72 | ---------------*/ 73 | 74 | .ui.comments .comment .avatar { 75 | display: block; 76 | width: 2.5em; 77 | height: auto; 78 | float: left; 79 | margin: 0.2em 0em 0em; 80 | } 81 | .ui.comments .comment img.avatar, 82 | .ui.comments .comment .avatar img { 83 | display: block; 84 | margin: 0em auto; 85 | width: 100%; 86 | height: 100%; 87 | border-radius: 0.25rem; 88 | } 89 | 90 | /*-------------- 91 | Content 92 | ---------------*/ 93 | 94 | .ui.comments .comment > .content { 95 | display: block; 96 | } 97 | 98 | /* If there is an avatar move content over */ 99 | .ui.comments .comment > .avatar ~ .content { 100 | margin-left: 3.5em; 101 | } 102 | 103 | /*-------------- 104 | Author 105 | ---------------*/ 106 | 107 | .ui.comments .comment .author { 108 | font-size: 1em; 109 | color: rgba(0, 0, 0, 0.8); 110 | font-weight: bold; 111 | } 112 | .ui.comments .comment a.author { 113 | cursor: pointer; 114 | } 115 | .ui.comments .comment a.author:hover { 116 | color: #00b2f3; 117 | } 118 | 119 | /*-------------- 120 | Metadata 121 | ---------------*/ 122 | 123 | .ui.comments .comment .metadata { 124 | display: inline-block; 125 | margin-left: 0.5em; 126 | color: rgba(0, 0, 0, 0.4); 127 | font-size: 0.875em; 128 | } 129 | .ui.comments .comment .metadata > * { 130 | display: inline-block; 131 | margin: 0em 0.5em 0em 0em; 132 | } 133 | .ui.comments .comment .metadata > :last-child { 134 | margin-right: 0em; 135 | } 136 | 137 | /*-------------------- 138 | Comment Text 139 | ---------------------*/ 140 | 141 | .ui.comments .comment .text { 142 | margin: 0.25em 0em 0.5em; 143 | font-size: 1em; 144 | word-wrap: break-word; 145 | color: rgba(0, 0, 0, 0.8); 146 | line-height: 1.3; 147 | } 148 | 149 | /*-------------------- 150 | User Actions 151 | ---------------------*/ 152 | 153 | .ui.comments .comment .actions { 154 | font-size: 0.875em; 155 | } 156 | .ui.comments .comment .actions a { 157 | cursor: pointer; 158 | display: inline-block; 159 | margin: 0em 0.75em 0em 0em; 160 | color: rgba(0, 0, 0, 0.4); 161 | } 162 | .ui.comments .comment .actions a:last-child { 163 | margin-right: 0em; 164 | } 165 | .ui.comments .comment .actions a.active, 166 | .ui.comments .comment .actions a:hover { 167 | color: rgba(0, 0, 0, 0.8); 168 | } 169 | 170 | /*-------------------- 171 | Reply Form 172 | ---------------------*/ 173 | 174 | .ui.comments > .reply.form { 175 | margin-top: 1em; 176 | } 177 | .ui.comments .comment .reply.form { 178 | width: 100%; 179 | margin-top: 1em; 180 | } 181 | .ui.comments .reply.form textarea { 182 | font-size: 1em; 183 | height: 12em; 184 | } 185 | 186 | 187 | /******************************* 188 | State 189 | *******************************/ 190 | 191 | .ui.collapsed.comments, 192 | .ui.comments .collapsed.comments, 193 | .ui.comments .collapsed.comment { 194 | display: none; 195 | } 196 | 197 | 198 | /******************************* 199 | Variations 200 | *******************************/ 201 | 202 | 203 | /*-------------------- 204 | Threaded 205 | ---------------------*/ 206 | 207 | .ui.threaded.comments .comment .comments { 208 | margin: -1.5em 0 -1em 1.25em; 209 | padding: 3em 0em 2em 2.25em; 210 | box-shadow: -1px 0px 0px rgba(39, 41, 43, 0.15); 211 | } 212 | 213 | /*-------------------- 214 | Minimal 215 | ---------------------*/ 216 | 217 | .ui.minimal.comments .comment .actions { 218 | opacity: 0; 219 | position: absolute; 220 | top: 0px; 221 | right: 0px; 222 | left: auto; 223 | -webkit-transition: opacity 0.2s ease; 224 | transition: opacity 0.2s ease; 225 | -webkit-transition-delay: 0.1s; 226 | transition-delay: 0.1s; 227 | } 228 | .ui.minimal.comments .comment > .content:hover > .actions { 229 | opacity: 1; 230 | } 231 | 232 | /*-------------------- 233 | Sizes 234 | ---------------------*/ 235 | 236 | .ui.small.comments { 237 | font-size: 0.9em; 238 | } 239 | .ui.comments { 240 | font-size: 1em; 241 | } 242 | .ui.large.comments { 243 | font-size: 1.1em; 244 | } 245 | .ui.huge.comments { 246 | font-size: 1.2em; 247 | } 248 | 249 | 250 | /******************************* 251 | Theme Overrides 252 | *******************************/ 253 | 254 | 255 | 256 | /******************************* 257 | User Variable Overrides 258 | *******************************/ 259 | 260 | -------------------------------------------------------------------------------- /py/report/semantic/components/checkbox.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 1.11.6 - Checkbox 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2014 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | !function(e,n,t,o){"use strict";e.fn.checkbox=function(t){var c,i=e(this),r=i.selector||"",a=(new Date).getTime(),l=[],s=arguments[0],u="string"==typeof s,d=[].slice.call(arguments,1);return i.each(function(){var i,b,g=e.extend(!0,{},e.fn.checkbox.settings,t),h=g.className,f=g.namespace,p=g.selector,m=g.error,k="."+f,v="module-"+f,y=e(this),x=e(this).find(p.label).first(),C=e(this).find(p.input),D=y.data(v),E=this;b={initialize:function(){b.verbose("Initializing checkbox",g),b.create.label(),b.add.events(),b.is.checked()?(b.set.checked(),g.fireOnInit&&g.onChecked.call(C.get())):(b.remove.checked(),g.fireOnInit&&g.onUnchecked.call(C.get())),b.observeChanges(),b.instantiate()},instantiate:function(){b.verbose("Storing instance of module",b),D=b,y.data(v,b)},destroy:function(){b.verbose("Destroying module"),b.remove.events(),y.removeData(v)},refresh:function(){y=e(this),x=e(this).find(p.label).first(),C=e(this).find(p.input)},observeChanges:function(){"MutationObserver"in n&&(i=new MutationObserver(function(){b.debug("DOM tree modified, updating selector cache"),b.refresh()}),i.observe(E,{childList:!0,subtree:!0}),b.debug("Setting up mutation observer",i))},attachEvents:function(n,t){var o=e(n);t=e.isFunction(b[t])?b[t]:b.toggle,o.length>0?(b.debug("Attaching checkbox events to element",n,t),o.on("click"+k,t)):b.error(m.notFound)},event:{keydown:function(e){var n=e.which,t={enter:13,space:32,escape:27};n==t.escape&&(b.verbose("Escape key pressed blurring field"),y.blur()),e.ctrlKey||n!=t.enter&&n!=t.space||(b.verbose("Enter key pressed, toggling checkbox"),b.toggle.call(this),e.preventDefault())}},is:{radio:function(){return y.hasClass(h.radio)},checked:function(){return C.prop("checked")!==o&&C.prop("checked")},unchecked:function(){return!b.is.checked()}},can:{change:function(){return!(y.hasClass(h.disabled)||y.hasClass(h.readOnly)||C.prop("disabled"))},uncheck:function(){return"boolean"==typeof g.uncheckable?g.uncheckable:!b.is.radio()}},set:{checked:function(){y.addClass(h.checked)},tab:function(){C.attr("tabindex")===o&&C.attr("tabindex",0)}},create:{label:function(){C.prevAll(p.label).length>0?(C.prev(p.label).detach().insertAfter(C),b.debug("Moving existing label",x)):b.has.label()||(x=e("