1 !<arch> 2 __.PKGDEF 0 0 0 644 1848 ` 3 go object linux amd64 go1.8 X:framepointer 4 build id "0b966bb2df5a96632bf4cb424fb6cd197a185ae4" 5 ---- 6 7 build id "0b966bb2df5a96632bf4cb424fb6cd197a185ae4" 8 9 $$B 10 version 3 11 12 svg Q|SGOROOT/src/cmd/pprof/internal/svg/svg.go. Massage Buffer bytes 16 buf"offbootstrap"lastRead readOp. Bytes<b2esc:0x22"Cap< esc:0x1Grow<b1n2Len<Next<n3"Read<b3 esc:0x9"p4n1&err2ReadByte<."&ReadBytes<.0"delim4" line1&6ReadFrom<.0 ReaderioD,"pn&errr4 25 4&6ReadRune<b4|Sr1 size2&err3ReadString<."< >&6 Reset<"String< Truncate<"|SUnreadByte<&UnreadRune<& Write<."204&6WriteByte<"c3&WriteRune<.|SL4&6WriteString<. s404&6 WriteTo<.0 Writerd"FH&Jw4 32 4&6grow<*readSlice<."<">&6 in2 Lpan.goinit>< L.goNewerrors text2& errorStrings ErrorDe2 ttBttt(t 42 >%`m4(8t&*(*` data5"(ttt*4t** 47 %(t 48 >%z 49 4/ 50 - <nil>X ttzt 52 >%8 53 -ubytes.Buffer: UnreadByte: previous operation was not a read(t 54 >%t 55 %4t 56 4/t 57 >%8 58 -ybytes.Buffer: UnreadRune: previous operation was not ReadRunetXt4tXt(t 59 >% 60 4/2X&VPD4t 61 $$ 62 _go_.o 0 0 0 644 11362 ` 63 go object linux amd64 go1.8 X:framepointer 64 build id "0b966bb2df5a96632bf4cb424fb6cd197a185ae4" 65 ---- 66 67 68 ! 69 go17ldbytes.aregexp.astrings.a"".Massage2runtime.slicebytetostringgo.string."&;"$go.string."&;"strings.Replace"".viewBox@regexp.(*Regexp).FindStringIndex^go.string."<svg width=\"100%\" height=\"100%\""*runtime.concatstring3"".graphIdgo.string..gostring.7653.0ffac498c6c7d6b9ce5741b7d365b5b96e946d48b0fa9e969442a1f74a470bd1"".svgClose go.string."</g>"$runtime.panicslice$runtime.panicindex0runtime.morestack_noctxtsvg.lentype.intsvg.ptrtype.*uint8~r1type.stringin"type.bytes.BufferTgclocals1c813cfee512a963fce1af57a94e47e9Tgclocals9fb7f0986f647f17cb53dda1484e0f7aR$GOROOT/src/cmd/pprof/internal/svg/svg.go"".init"".initdone"runtime.throwinitbytes.initregexp.initstrings.initgo.string."<svg\\s*width=\"[^\"]+\"\\s*height=\"[^\"]+\"\\s*viewBox=\"[^\"]+\""$regexp.MustCompile(runtime.writeBarrier<go.string."<g id=\"graph\\d\""$go.string."</svg>".runtime.writebarrierptrTgclocals33cdeccccebe80329f1fdbee7f5874cbX$GOROOT/src/cmd/pprof/internal/svg/svgpan.go$go.info."".Massagego.info.intgo.info.*uint8(go.info.bytes.Buffergo.info.stringgo.info."".init&type.*regexp.Regexptype.uint8.type..importpath.bytes.0type..importpath.regexp.2type..importpath.strings.|dH%H;aNH`Hl$XHl$XH$HL$hHT$pH\$xH9H$H)HsH?HH!HHL$H)HT$H\$HD$ HL$(H$HL$HHD$HD$HHD$ HD$(HD$0HD$8HD$PHL$@HL$HHH$HD$HL$HD$HL$ HJH:HH\$HH9"HH@H9H$HL$PHL$HT$HHT$HD$ H)HSH?HH!HHD$(H\$0HD$8HL$@HD$PHL$HHH$HD$HL$HD$HL$ H]HMHHL$HH95H$HT$PHT$HD$HH\$HD$ H)HYH?HH!HHD$(HL$0HD$8HL$@HL$HHD$PHH$HD$HL$HD$HL$ HHHHL$HH9wtH$HT$PHT$HD$HH\$HD$ H)HYH?HH!HHD$(HL$0HD$8HL$@H$H$Hl$XH`HD$PHL$HHL$HHD$PHD$PHL$H2i 80 0!^U.-.<7<7< 81 84 A 85 py.}.y 86 dH%H;a,H Hl$Hl$<v 88 Hl$H uHH$HD$7HD$ HHH$HD$HD$ u^HHH$HD$HD$ uHHl$H H H$HD$H H$HD$H H$HD$I@?@?@H? 99 U1 100 U3// 101 8 102 &;&;<svg width="100%" height="100%"<script type="text/ecmascript"><![CDATA[ 103 /** 104 * SVGPan library 1.2.1 105 * ====================== 106 * 107 * Given an unique existing element with id "viewport" (or when missing, the first g 108 * element), including the the library into any SVG adds the following capabilities: 109 * 110 * - Mouse panning 111 * - Mouse zooming (using the wheel) 112 * - Object dragging 113 * 114 * You can configure the behavior of the pan/zoom/drag with the variables 115 * listed in the CONFIGURATION section of this file. 116 * 117 * Known issues: 118 * 119 * - Zooming (while panning) on Safari has still some issues 120 * 121 * Releases: 122 * 123 * 1.2.1, Mon Jul 4 00:33:18 CEST 2011, Andrea Leofreddi 124 * - Fixed a regression with mouse wheel (now working on Firefox 5) 125 * - Working with viewBox attribute (#4) 126 * - Added "use strict;" and fixed resulting warnings (#5) 127 * - Added configuration variables, dragging is disabled by default (#3) 128 * 129 * 1.2, Sat Mar 20 08:42:50 GMT 2010, Zeng Xiaohui 130 * Fixed a bug with browser mouse handler interaction 131 * 132 * 1.1, Wed Feb 3 17:39:33 GMT 2010, Zeng Xiaohui 133 * Updated the zoom code to support the mouse wheel on Safari/Chrome 134 * 135 * 1.0, Andrea Leofreddi 136 * First release 137 * 138 * This code is licensed under the following BSD license: 139 * 140 * Copyright 2009-2010 Andrea Leofreddi <a.leofreddi (a] itcharm.com>. All rights reserved. 141 * 142 * Redistribution and use in source and binary forms, with or without modification, are 143 * permitted provided that the following conditions are met: 144 * 145 * 1. Redistributions of source code must retain the above copyright notice, this list of 146 * conditions and the following disclaimer. 147 * 148 * 2. Redistributions in binary form must reproduce the above copyright notice, this list 149 * of conditions and the following disclaimer in the documentation and/or other materials 150 * provided with the distribution. 151 * 152 * THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``AS IS'' AND ANY EXPRESS OR IMPLIED 153 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 154 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Andrea Leofreddi OR 155 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 156 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 157 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 158 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 159 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 160 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 161 * 162 * The views and conclusions contained in the software and documentation are those of the 163 * authors and should not be interpreted as representing official policies, either expressed 164 * or implied, of Andrea Leofreddi. 165 */ 166 167 "use strict"; 168 169 /// CONFIGURATION 170 /// ====> 171 172 var enablePan = 1; // 1 or 0: enable or disable panning (default enabled) 173 var enableZoom = 1; // 1 or 0: enable or disable zooming (default enabled) 174 var enableDrag = 0; // 1 or 0: enable or disable dragging (default disabled) 175 176 /// <==== 177 /// END OF CONFIGURATION 178 179 var root = document.documentElement; 180 181 var state = 'none', svgRoot, stateTarget, stateOrigin, stateTf; 182 183 setupHandlers(root); 184 185 /** 186 * Register handlers 187 */ 188 function setupHandlers(root){ 189 setAttributes(root, { 190 "onmouseup" : "handleMouseUp(evt)", 191 "onmousedown" : "handleMouseDown(evt)", 192 "onmousemove" : "handleMouseMove(evt)", 193 //"onmouseout" : "handleMouseUp(evt)", // Decomment this to stop the pan functionality when dragging out of the SVG element 194 }); 195 196 if(navigator.userAgent.toLowerCase().indexOf('webkit') >= 0) 197 window.addEventListener('mousewheel', handleMouseWheel, false); // Chrome/Safari 198 else 199 window.addEventListener('DOMMouseScroll', handleMouseWheel, false); // Others 200 } 201 202 /** 203 * Retrieves the root element for SVG manipulation. The element is then cached into the svgRoot global variable. 204 */ 205 function getRoot(root) { 206 if(typeof(svgRoot) == "undefined") { 207 var g = null; 208 209 g = root.getElementById("viewport"); 210 211 if(g == null) 212 g = root.getElementsByTagName('g')[0]; 213 214 if(g == null) 215 alert('Unable to obtain SVG root element'); 216 217 setCTM(g, g.getCTM()); 218 219 g.removeAttribute("viewBox"); 220 221 svgRoot = g; 222 } 223 224 return svgRoot; 225 } 226 227 /** 228 * Instance an SVGPoint object with given event coordinates. 229 */ 230 function getEventPoint(evt) { 231 var p = root.createSVGPoint(); 232 233 p.x = evt.clientX; 234 p.y = evt.clientY; 235 236 return p; 237 } 238 239 /** 240 * Sets the current transform matrix of an element. 241 */ 242 function setCTM(element, matrix) { 243 var s = "matrix(" + matrix.a + "," + matrix.b + "," + matrix.c + "," + matrix.d + "," + matrix.e + "," + matrix.f + ")"; 244 245 element.setAttribute("transform", s); 246 } 247 248 /** 249 * Dumps a matrix to a string (useful for debug). 250 */ 251 function dumpMatrix(matrix) { 252 var s = "[ " + matrix.a + ", " + matrix.c + ", " + matrix.e + "\n " + matrix.b + ", " + matrix.d + ", " + matrix.f + "\n 0, 0, 1 ]"; 253 254 return s; 255 } 256 257 /** 258 * Sets attributes of an element. 259 */ 260 function setAttributes(element, attributes){ 261 for (var i in attributes) 262 element.setAttributeNS(null, i, attributes[i]); 263 } 264 265 /** 266 * Handle mouse wheel event. 267 */ 268 function handleMouseWheel(evt) { 269 if(!enableZoom) 270 return; 271 272 if(evt.preventDefault) 273 evt.preventDefault(); 274 275 evt.returnValue = false; 276 277 var svgDoc = evt.target.ownerDocument; 278 279 var delta; 280 281 if(evt.wheelDelta) 282 delta = evt.wheelDelta / 3600; // Chrome/Safari 283 else 284 delta = evt.detail / -90; // Mozilla 285 286 var z = 1 + delta; // Zoom factor: 0.9/1.1 287 288 var g = getRoot(svgDoc); 289 290 var p = getEventPoint(evt); 291 292 p = p.matrixTransform(g.getCTM().inverse()); 293 294 // Compute new scale matrix in current mouse position 295 var k = root.createSVGMatrix().translate(p.x, p.y).scale(z).translate(-p.x, -p.y); 296 297 setCTM(g, g.getCTM().multiply(k)); 298 299 if(typeof(stateTf) == "undefined") 300 stateTf = g.getCTM().inverse(); 301 302 stateTf = stateTf.multiply(k.inverse()); 303 } 304 305 /** 306 * Handle mouse move event. 307 */ 308 function handleMouseMove(evt) { 309 if(evt.preventDefault) 310 evt.preventDefault(); 311 312 evt.returnValue = false; 313 314 var svgDoc = evt.target.ownerDocument; 315 316 var g = getRoot(svgDoc); 317 318 if(state == 'pan' && enablePan) { 319 // Pan mode 320 var p = getEventPoint(evt).matrixTransform(stateTf); 321 322 setCTM(g, stateTf.inverse().translate(p.x - stateOrigin.x, p.y - stateOrigin.y)); 323 } else if(state == 'drag' && enableDrag) { 324 // Drag mode 325 var p = getEventPoint(evt).matrixTransform(g.getCTM().inverse()); 326 327 setCTM(stateTarget, root.createSVGMatrix().translate(p.x - stateOrigin.x, p.y - stateOrigin.y).multiply(g.getCTM().inverse()).multiply(stateTarget.getCTM())); 328 329 stateOrigin = p; 330 } 331 } 332 333 /** 334 * Handle click event. 335 */ 336 function handleMouseDown(evt) { 337 if(evt.preventDefault) 338 evt.preventDefault(); 339 340 evt.returnValue = false; 341 342 var svgDoc = evt.target.ownerDocument; 343 344 var g = getRoot(svgDoc); 345 346 if( 347 evt.target.tagName == "svg" 348 || !enableDrag // Pan anyway when drag is disabled and the user clicked on an element 349 ) { 350 // Pan mode 351 state = 'pan'; 352 353 stateTf = g.getCTM().inverse(); 354 355 stateOrigin = getEventPoint(evt).matrixTransform(stateTf); 356 } else { 357 // Drag mode 358 state = 'drag'; 359 360 stateTarget = evt.target; 361 362 stateTf = g.getCTM().inverse(); 363 364 stateOrigin = getEventPoint(evt).matrixTransform(stateTf); 365 } 366 } 367 368 /** 369 * Handle mouse button release event. 370 */ 371 function handleMouseUp(evt) { 372 if(evt.preventDefault) 373 evt.preventDefault(); 374 375 evt.returnValue = false; 376 377 var svgDoc = evt.target.ownerDocument; 378 379 if(state == 'pan' || state == 'drag') { 380 // Quit pan mode 381 state = ''; 382 } 383 } 384 385 ]]></script><g id="viewport" transform="scale(0.5,0.5) translate(0,0)"></g>"".Massagesvg.len`"svg.ptrh"in~r1"<svg\s*width="[^"]+"\s*height="[^"]+"\s*viewBox="[^"]+"<g id="graph\d"</svg>"".initbytesregexpstrings 6 388 389 391 "$&(*,.0 r*24686 403 H:r<:>@BDFHJFHLFH:NNN @ @PPR6>>ww42ZT( V8V8X8Z8\DnnJLPZ^668"8>`>`>`@:bdfhgo17ld