(function(window,document,Laya){ var __un=Laya.un,__uns=Laya.uns,__static=Laya.static,__class=Laya.class,__getset=Laya.getset,__newvec=Laya.__newvec; var Box=laya.ui.Box,Browser=laya.utils.Browser,Button=laya.ui.Button,Byte=laya.utils.Byte,CSSStyle=laya.display.css.CSSStyle; var Component=laya.ui.Component,Config=Laya.Config,Event=laya.events.Event,EventDispatcher=laya.events.EventDispatcher; var Filter=laya.filters.Filter,GrahamScan=laya.maths.GrahamScan,Graphics=laya.display.Graphics,HTMLCanvas=laya.resource.HTMLCanvas; var Handler=laya.utils.Handler,HitArea=laya.utils.HitArea,Image=laya.ui.Image,Input=laya.display.Input,Label=laya.ui.Label; var List=laya.ui.List,Loader=laya.net.Loader,LoaderManager=laya.net.LoaderManager,LocalStorage=laya.net.LocalStorage; var MathUtil=laya.maths.MathUtil,Matrix=laya.maths.Matrix,Node=laya.display.Node,Point=laya.maths.Point,Pool=laya.utils.Pool; var Rectangle=laya.maths.Rectangle,Render=laya.renders.Render,RenderContext=laya.renders.RenderContext,RenderSprite=laya.renders.RenderSprite; var Resource=laya.resource.Resource,ResourceManager=laya.resource.ResourceManager,RunDriver=laya.utils.RunDriver; var Sprite=laya.display.Sprite,Stage=laya.display.Stage,Stat=laya.utils.Stat,Style=laya.display.css.Style; var Text=laya.display.Text,TextInput=laya.ui.TextInput,Texture=laya.resource.Texture,Timer=laya.utils.Timer; var Tree=laya.ui.Tree,UIEvent=laya.ui.UIEvent,URL=laya.net.URL,Utils=laya.utils.Utils,View=laya.ui.View; //class laya.debug.data.Base64AtlasManager var Base64AtlasManager=(function(){ function Base64AtlasManager(){} __class(Base64AtlasManager,'laya.debug.data.Base64AtlasManager'); Base64AtlasManager.replaceRes=function(uiO){ Base64AtlasManager.base64.replaceRes(uiO); } __static(Base64AtlasManager, ['dataO',function(){return this.dataO={"comp/button1.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGIAAABRCAYAAAApS3MNAAABSUlEQVR4Xu3a0QmFMADFUJ1JXM0h3moPZ6qg4AoNeLqAIenFn65jjLE40w2sQkxvcAMI0eggRKSDEEJUDEQ4/COEiBiIYFiEEBEDEQyLECJiIIJhEUJEDEQwLEKIiIEIhkUIETEQwbAIISIGIhgWIUTEQATDIoSIGIhgWIQQEQMRDIsQImIggnEvYvv9IzjfxDiP/XlgJsTcCyDEXP/v14UQImIggmERQkQMRDAsQoiIgQiGRQgRMRDBsAghIgYiGBYhRMRABMMihIgYiGBYhBARAxEMixAiYiCCYRFCRAxEMCxCiIiBCMa7iAjPpzG8fY3kF0KIiIEIhkUIETEQwbAIISIGIhgWIUTEQATDIoSIGIhgWIQQEQMRDIsQImIggmERQkQMRDAsQoiIgQiGRQgRMRDBsAghIgYiGBYhRMRABMMihIgYiGBcGJiOHTRZjZAAAAAASUVORK5CYII=","comp/line2.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAAG0lEQVQYV2NkoDJgpLJ5DIxtra3/qWko1V0IAJvgApS1libIAAAAAElFTkSuQmCC","view/create.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAkCAYAAAC9itu8AAAAdElEQVQ4T2NkwAIWLFjwH5t4QkICIyM2CXQxmAHka/j///9mXDYxMjL6YtgwBDUg+w8crIT8MBQ0oEca55JvWNPS9xgu4tISzADyNfz///8MnrRkgmHDENSALWng9fRQ0DA40xLecglbWhpqGoZCMUNKUQkANAHAJVkE5XwAAAAASUVORK5CYII=","view/rendertime.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAkCAYAAAC9itu8AAABeUlEQVQ4T+2Uv0tCURSAvyNdcwiXBlsaaomWFgeHlqAtCPsDJHwIiUtDSxERtErtmQ6CjkHo4FpDBQ0tbVFR0BYE0eQvOnFF7T17QlOTd3m88873OD8+rtA9uVzOBIPBlIisAwvd8B1QajQahXQ63bIx6QHFYrEEJHrv7qeqZhzHOfYA+Xw+Yow5B+YHoGwymdxW1QAQEFWNAk8i8uEDuZM3gUcLZIEJYNcNqWrVcZyd7p9t8jLwYIFTYBx47UHlcjmcSCQ+B5JtpU0LnAFj3br7kE+yTalb4BCYczVqoT3AjteW4T73FlgFNgY+1IGQz4hPLGCAI2DGbweu2Auw1Vmcqk4C+8DsEOgZOBCR9/6mVdU2vgIsAdOuIVwANRFpezatuahpTYVSop1m+y6pasm8NQqSvvW61KwslkSHuCRkgvErr0taiUXaal1Sr0siWRO/9HfpF+RN9nfpB/qqmrXrv7mktVhYVm5GLo1cct9LI5e8d84/3UvfAgdlKH0EO7MAAAAASUVORK5CYII=","view/cache.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAkCAYAAABSSLCCAAAAcElEQVQ4T2NcsGDB/4SEBEYGBgYGYtmMxCpENhhsA6mA8f///5tHNTEwkBcQpIYcSD15kUtWigi51vR/jVYdOGUQy2YkViGywWSnvTOkhiAonkY1gZIRqSEHTntkRe4g10RWQIyWe5Bgo2O5R7dkBADztyP+yFzirAAAAABJRU5ErkJggg==","comp/clip_selectBox.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAoCAYAAAAIeF9DAAAAsElEQVRoQ+3ZQQ0AMQzEwAuqEgh/Sj2pKObhIrBsrfLonHPu12MMTEGYFg+kIFaPgmA9ClIQzQDG0w0pCGYAw2khBcEMYDgtpCCYAQynhRQEM4DhtJCCYAYwnBZSEMwAhtNCCoIZwHBmd/tTh6IUBIrx/tRbiFWkIFaPFoL1KEhBNAMYTzekIJgBDKeFFAQzgOG0kIJgBjCcFlIQzACG00IKghnAcFpIQTADGE4LwYL8U/BE1dCJ3PsAAAAASUVORK5CYII=","comp/label.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAASCAYAAACQCxruAAAAmElEQVRoQ+3aMQqAQBBDUef+hx4Zq1mrbPnhWylECHmghVZ397OOqqp97TlugdNzgEXFIaaFuwROt0LmBEay5aXb920+FjIpMJItLy1wvhUyKTCSLS8tcL4VMikwki0vLXC+FTIpMJItLy1wvhUyKTCSLS89wPP1Qeh8M0zy+84gMMbruqjA15OxbtjAu7mPa5bj0fb/A8cLgD4n/wQKNiIAAAAASUVORK5CYII=","comp/clip_tree_arrow.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAQCAYAAAArij59AAAAwUlEQVQoU5WRPRKCMBCFWUt6vYQeB06RUDpoBbFDa7yDwm30FGi9dHnOMiQDBgvT5c3b7+0PRVEUlVV9A3NmzL6T//SRfMz5CgCdtVafjlmzaHAigAbM2tE8YVo1pf0yvABoc9D3wACgBbMKIgD4qqDJsqqlMV8VGL5n/88geCJKlijSMBXFZUNx/CSi9WwX1r7R99thzKKqkxXRbMUWSE2u2sEwHsxHCbrMVSq6N4xRD9HAvJstylEkarhurlqnfQC58YP5+CvQNwAAAABJRU5ErkJggg==","view/bg_panel.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAMUlEQVRYR+3QQREAAAjDMGZk/l2CDD6pgl7SduexGCBAgAABAgQIECBAgAABAgS+BQ4oyStBhXcy5AAAAABJRU5ErkJggg==","view/bg_top.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAMUlEQVRYR+3QQREAAAjDMKZp/rWBDD6pgl7SduexGCBAgAABAgQIECBAgAABAgS+BQ6WyDMhXMLeQgAAAABJRU5ErkJggg==","view/clickselect.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAqCAYAAACDdWrxAAACfElEQVRIS8WVO2iTYRSGn5OWqpMOurg0VRBdVVCsg7GgDjpZECyirl4GEYfSgBlaB5VSpApdxCJIoeKgg7dKC21ALahIiyiKKUjxAiI4qCH1lRP/hPhfAnHpGZPv+c4573nP95ukO/xHmINmtq8RtswsPiipB/gAPAFem5nCbcSWKukIsD84/A2YBh4DL8ysWLkk0qOkDcD5GLF+Ac+Ap35ZHGjAdWB5gtJvgZFYVSWdBHaFwBlg1Mw8K0ngFiAbAm+a2XBij/6HpBbgBrAEmAVeAZ1AFU40QDCWrcBZL0/S4Vq4HtgB7DWzU5XyauDBMhhWz70ryVVdb2ZuhGpI2g1MODjfiMFrxZk3s9WNwJ6snHFxQUlXgXfAPeC5mf2O2Y5oqZLcMceCw1+AseCSSTP7mSiOpM3A7RixfvgYgAd+WUQcSSnfPWBlgtIvgf5YVSVdBA6GQF/mS2bmWcvbERmHJF+payFw0MzO1TWApKXBViwL3h5/Pk4AVTjRAMFY9njJXl6wLccrcD3wAHDUzBwuRw18JtbkbkFJruomM7sf2o4u4Jals/mFRgxeFcfBQm97UyOwM+WMiwums/k3QnMps+HWpuLIRC5TCrcRW2pbT35MRiY4XDRsVmiU5uJQIZfxb0k5Ij229eQPySJ287MLGO8Rd1M0XY6AO3LjzYVSy3fAH+VICL4a6o9VtTWbnzbYGKI+IrtQ6Ns2EFuq/5jOTnWD9f4DikeFvvbqhyg2Yzo3voJSy2fAjfEJMYPRQQ2caAAfC7AW2WkvrzU79dCwnRW4Hjgg6JrrbV9VKbkKw1Csyd2Ca7on1y2krHOub3t16//2n79SarbsH7BKtfejoCjmAAAAAElFTkSuQmCC","view/resize.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAqCAYAAACDdWrxAAABeUlEQVRIS+2UvUpdURCFvxXRKJpIEBURsVAIiiBoaaGCjY2VLyH4MBaCPoWlnQlpI6SxsQmkURQL5eK/6JK57iuRnMPZtxAkuOFUhzWz96xvjcg8tluAT5LOQqJMHba/AgPAD0nOEtruAOaB6Lon6U+ucAoYTLe7Bb5XCm1/BCaAXqAVOAHyOkYn27PA5/TGWmXHxvBeT2i7TVIM4MUp7ZhGPlY3V/pVKUxEjAIjyac74LIAjK70PwCoyfYXYDJwyqDoHtiRdFOfql0naBgIrILF/ZIi1yH6h1XbYXCPpKOq7s34GEX7JB00m445YBzYlPSQ1dF2N7CaWN2W9DNXuJxAj1uGVeuVQtvh32LyuR34DexWCv+CfAXoBzYkHb8Boe1OSRcFkBdfNY18IQiUtFUpTJjNAPEFHVfAaQFyjZ3zNBzbQ8BSWkZViEbk1uIpjXR8AKbT7jwEvpVUqEk6L0pHLN5hSWWxeq7XjI/v6Sgz0vZ7Ov7DdDwCkcb1m86tSukAAAAASUVORK5CYII=","view/clickanalyse.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAqCAYAAACDdWrxAAAC7UlEQVRIS5WWT2hUZxTFfyfGFolkoUVKrHQiEaX+IfgHa54UQzUqpWYhLbQU6ULNwgYXuog6yiiTgK2LgtAu6yqbFkpRBEURQzJEBN200NqKkxoDLnQhFUrizJU7vje8SSbzZr7FwDy+c75z7z3nfU80uMxMDin9JC0zewvYAHwIrAH65wWaWQuwOdy8CVgUHnBd0sUKoJktBbYC24B1QHMVNeck3ZWZrYhtXpUg/3/gS0kzDnT2/cDqpFqBUUnnK5pjZutDgo01Tr0g6XbVrprZypBgO9AUU/EK+ErSyzLQzC5XkTkCfBR7fl/Smeh/qasOlPRp9DAkOgp8H5P9o6SriUAnMrOzgNdswNeSntcL9IYNAQ8kHYuXU5Y6u8ZIupldAO5I+nkOsNb8wjk/ljTZKFCSvMbSMrPSiOpNx9uAz3UP4IbfWSsdrcDH4eZuYHF46LCk47PT8S6wG9gbJmRhlfoPSLrhJvdERJs7E+S73dZKmnagsx8JB50UEHdY3+x0dIUEO2qcekTSr/OlY21I4N5dEJMwA6yX9CKejqkqGn8DemPPb0v6YrZXpyS1xYbsRD3AtZjsk5IuJQKdyMyGAa/ZnbNR0tN6gd6wXwAP8SfV0jGnxki6mV1xyf4ubdTkPue/Jf3TEJCMNZFRMQLtyNwqvaTrSkdHZry1MFM8bLLPgY5U8/SyeYHvncotb5b1A/t8c2QGg3sT2WBLBbD95PiGogr9Ej0Gbap8r4ZJ5kR+MPhW7WdGd5npEFaa15IE+YWW5uklf2S6/1N7OnfasG+Ad5KiAfyVzwYfVDQnlc71YTaA8Ntrvtq/y2eDgapdTZ0a60UMhjdvmcCgWDClJge7npSBqfRYYY5M6U/M/NqO1mQ+G7xf4VUH5rNBOXtviLQfzH0afizop0fZroOJQCdKpcfyUKrZFhTpfDgU/F4nMNcH9gPwLJ8Nls3xarUaI+mp9NhTg5GJbPBZQyb3OReayP17rutmHPga1PpCOk+zrlEAAAAASUVORK5CYII=","view/res.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAoCAYAAAD6xArmAAADwUlEQVRIS+3WT2gcdRQH8O/b2SwNC7l4MAEPvbilUkoPOUmLjSDrZn4hxYKH/kGwyB4tQogiu/N+GymyoWguhVBQKKkHQTHsW9fUQwqKp4AgtMXkInhILl4CkoTdmSe/6XZp2pntLli8uMedt9/3mze/33yW8Jw+9Jxy0TeYmV8FcFVVTxPRiwA6AP5U1TvZbHapUqn8nrawxGBVJWvtNVWdJ6K05h1V/dhaW08KT/wRM1sAVQCRqn5JRLdyudw9Iora7faJKIrKqnrBNSWiahAEC0+GHwpm5utEdD+KopsuBMDbzPxt0oqstRdV9Za7lslkzlar1Z8erzsUHATBJhG93C34fmJi4ly5XG6nzTEIgjoRzanqkrX2amowM98F8Fq3wK34PWb+Ii14cXExv7e3V6hWq78+axQrANwt/kVEl5j5h0G2IzMfUdWCtfa3R/VPzvhTAG8AOM/MfwwYehTANwB+ZOYPE4ODIDhJRJvMvD9IqLW2GEXRbSJ6AcBtZr6UGPzoS2Y+lc/nt+bm5v5Oa2CtvaKqywC8bs06M7+eGszMn7nTBqDOzPNpwcvLyyPb29vfAZh2Naq6Za0tpAbXarUzURS53eGKL1trv0oKZ+a3AHytqplMJlOOoui4tfaDvqOw1lZUtabubBOtqOqN0dHRB/v7++62XwHwDoB33dkAUGPmoO92e/yitXZeVT8BkE1acbdpPQiCj4hIBw52hQsLC8c6nc77AN4E8FK3yQ4R/Qzgc2b+Je0ZDPU+fjiZp1eXFD5U8CB7u+/DGybgXxnFMA3/m1GISGwegNMAeuYBuON53lKpVBrePBG5RkTuSPc1b2ZmZnDzRKRnHoDYvIODg3u5XM69/E8AKAO40G1aNcb0N6/ZbF5X1fsAbjpInXnGmETzGo3GRdew+0DPGmPSzRORTQA988bHx89NTk6mmtdoNGLziGjJ9/1085rN5l1VPWSeMSbVvLW1tXwYhoXp6en+5olIbB6A2Dzf9wcyb319/cju7m5hdnY22TwRic3zPO98qVQayLxWq3U0DMPYPGNMsnmrq6snx8bGNqempgYyT0SKzjoAsXnGmP7mNZvNU9lsdqtYLKaaJyJXABwyzxiTbp6IxOYRUd33/VTzNjY2RnZ2dnrmAdgyxqSbJyJnAMTmEdFl3/cTzROR2DzHk6qWiei4Maa/eSJScZY99FRXPM+7MTIy8iAMQ6/dbsfmEVHPPGPM4OaJiBtDqnmuqfuL4Pv+8Oa1Wq1jYRg+ZR6A2DxjzP/mPRupfwAf56Q4urCh6QAAAABJRU5ErkJggg==","view/tab_panel.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAABICAYAAADyMAW8AAAAcUlEQVRYR+3WsQ3AMAhE0TCMeyTvP1tShRQo7lxYegxA8fUPLuac97VhwuKXKhTlFxRQ9GPDClawYvGEDwxIZu7pFRZXr4ACinY1ghWsYMX/NxWQr22edyvGGHt6hcV1NqGAon8QVrCCFYteISDnBuQB3xJuQcDkEngAAAAASUVORK5CYII=","view/btn_close.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAqCAYAAACz+XvQAAACmUlEQVRIS7WWS0/bUBCFz7mJmyZxENm06mNVoVZC7LqGn9FNqy55/BSWSEhs2/4uuqFVoA150JLKJvGdaiIH2TfXNoKQpeP5PHPO3GMTK/5xxTwsAUWkBeBZ+qAByb/Zh4pIA8CL9NqY5Dj7vw9YA/ABwDsAfwB8ITnUIhF5CuATgNcAfgH4RnJSCkwLl6AA/lXBtLZQQxFxoTr6q6LOFl2WmuJAtcY7ZuXIixsczfRyTlPfhpSN7BpwBeBtFdQLFJE2gI8AXi7GBBBl3Fdnv5L87XbpWxuFfQbw3NXM0dQLLdrDIH3ylGTiLLYB8CS9lpCc3tmU+xzL1Z9lEXl/n06KavjowCiK1uM4fqMd1Ov1s3a7fZntZjabtSeTiQYHgiC4aLVavZwpbofT6TQYDAaH1tod3bMwDHc7nc5PLZrNZmG/3z8WkS1jzGm32z1oNBqjUqD+6YM2m81xFWyeNkUaulAAlyKyWdTZbdqUmZKFakEVrLRDV7P5zY6m3rQp6tA1AMC5tXY7he51Op0fdwbGcdwdDodHWc2MMdcL9wGM1tbW9sMw/L6UNm6HChuNRifW2g1XM0dTL3TJZS1KkkTDFbVaLQqCIJcm6k0URRpxuvg39Xo9rtzDh5zt1Z/lXq+32rR5dKC1dt0YM08bAGd65BxN1ZB52ojIBcl82rgdWmsDkocAdgDoW22X5DxtSIZJkhyT3AJwCuCAZD5tfCP7oMaYcRVs/tAiDT1QHX2zqLPbtCkzxYFqjXfM3GKXAR3NtC6nqTccioAeA84BbCuU5B4Af9r4gCLSBXCU1UxErjPuj0Rk3xiznDYuMIWdANhwNXM09UKXXNai9LtQ9y4yxuS/XUijr9L0lXBDMp82j370HhJdWvsftiHJYFPSIqEAAAAASUVORK5CYII=","comp/combobox.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFsAAABCCAYAAAA476rKAAACfElEQVR4Xu3bMYsTURQF4PMmExgIWkgEU5hskyJYxGYKY5VS7NzCylL8Bftj3NbKQjuxTBWbaUwhKdIYLCJotlACA5m8kQTZZZkkeN9dbuNJOXPPu/DN5ZHkMa7dbpfgx0TAEdvEedeE2HbWxDa0JjaxLQUMe3HPJrahQECrNE3RarUOJheLBbIsq9znZAdgJ0mC4XCIer1eSa/Xa4xGI+R5TuwA272RTqeDfr9fuTeZTDCfz/dmONkK/cFggGazebnCcrnEeDw+uCKxFdiNRmO3nURRBO/9bvtYrVbEVpgejXa7XfR6PUynU8xms6O1nGzlU3DO7fbu7V5dlsf/0yO2ElsSJ7ZES1lLbCWgJE5siZaylthKQEmc2BItZS2xlYCSOLElWspaYisBJXFiS7SUtcRWAkrixJZoKWuJrQSUxIkt0VLWElsJKIkTW6L1t5an6wFooRGerofKBeZ4uh4IFxrj6XqoXECOp+sBaJoIT9c1esIsT9eFYFbl/J5tJc13agyliU1sWwHDbtyziW0oYNiKk22JfXJ6xnfXjcDdFttnb43a/b9tovQ5iG30/IltBL1tQ2xiGwoYtuJkE9tQILBV/ugl4rh2MF1sPJJP59fuc7IDsTe37mHz8Bki+MoKHhFqn9+j9vs7sQN9K7G89xRx837levHzG5Lph8p1TrZK3iF//ApxdLVI4YFk/BpA9Uc5sVXYwObOCfyDJ3AoUcIh+vIRtYuve1clthJ7G8/7p4hv30Xx6weSybuDKxL7BrARxcjTF0iyN4AviH0Tpto1ONlaQUGe2AIsbSmxtYKCPLEFWNpSYmsFBXliC7C0pZfY2oWY/zeBP8uaLni/AFTVAAAAAElFTkSuQmCC","comp/textinput.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFsAAAAWCAYAAACv8OArAAAAZElEQVRYR+3UQQkAMAwEwcZI/LtsoSL2NTGwMByZ3b3HJQIDO3H+EdidNezQGjbsUiBs+dmwQ4EwZdmwQ4EwZdmwQ4EwZdmwQ4EwZdmwQ4EwZdmwQ4EwZdmwQ4EwZdmwQ4Ew9QBe0R29X9x+dwAAAABJRU5ErkJggg==","comp/vscroll.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAhCAYAAAA/F0BXAAAAOklEQVRIS2N8+OzVf2YWFgYmJiYGcgHjqCEYQTcaJpipaTRMRsOEmDJmNJ2MppPRdEJMCIymE2JCCQAYonwDuu2VMAAAAABJRU5ErkJggg==","comp/vscroll$down.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAzCAYAAABxCePHAAAC/klEQVRIS+2WS0wTURSG/zszBcrLFVvjio0LiAqRRDAmGpRodFE1MQQQkOKGqBujRo3ExLjB4MaKgDzUaGQhvoJGYwAjYoioERcuDGxYEIwPkBY6nWvObXuLnXZaSklYOIu5M/fxzZn/nvPPsInJKa5qGhRFQaIH+w8xSbcymtTd+gBFYXAdyjM9sf7ORxgGR0t5/j9jpkhq2t5B0xQwBrgqNsnJ9V0j4BzQdQNtNYXWkKz0NDiaXkBTFTCFoaWmCHVtQ+AGh+4z0HNiO2bmPNYQGiXQvkuPoaqqiIgi8Pl8eHBqtwlA86MKS6Cy8z1gjIFzjqcXHBEBlpBgRNuOd+HVlYqogJiQIChcg/BtW5k8SaSSkxPJ5PRPTttHfkI7kcghIpn8NYfp33NLXp+TnYG1OWvA3ox9499nPSjdkCsgHJxOIjc43VMrugL9dEUD4Oj/PA4CsUfDX/jOjbmisHTDCCzi4t4QgLDrQF+qTYOmqhgYGw9BvLpv0ZNjQwieaU9b7ZCDriFhSt3VBSZNartHA6aUJ7SK+jqO5n5pSp1HiqSw1e3Di0ypwBpiU1XsudwnTanraDEqrg2GmZLbGkJh2jQVZY29JlPqPe03JX/uxLE7Nk3DjjP3pCn1Ne7HrNsjdYoLQsmWYtNQ3NCBgeZKzLrn/foEoogbQgvSUmz4454P7VQikGhpHzGSZdVOUqqYTGli6gemZ9yJ+0lSTalk/TrxtQOYaBnESbTinokev4UG+p+9/xoyJQKQn8x7vf7JjEFZ1FJBBvuC12RINIdAwtkIQuksnxgHhKBUZ6scQtLSNyiWJpav47z9STjbjfJ8k5iVN0eEs911bhZjUTWpbR+RztZ6uFBERNCq1rfS2e43lFhDsjPscDS9lM7W4dyCquuvpbM9PFkq0iHm7mSl2yP+bj05uxdeXZe5FHOL6Xdr17nQ79bziwew4NXFqwUTMiaEtKBPwtZjnRi8WgXPglfqsyQITc60pwpAeNpH1GRZtRM0pWVVcTJM6S+dYaRsIf025wAAAABJRU5ErkJggg==","comp/vscroll$bar.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAA/CAYAAAAGyyO8AAABYElEQVRYR+2Wv0sDMRTH30tarCg6dRWnQnFT6OiqoP+tk+Cig+AiHayDiNSlg+jgD47K1US+Lwm5s4o/mkElN1xy73KfcF/efTi+Ht3Y0X1Btw8FffdoLy3QSnuZ+HhwZe+exrS13hGGJYsTWSszN0rJ1zHDDbJ0eDYkgHjv5Nxub3TIGEsTY/xDVq6NAN7MfW2u2aCG1nQ0GEZIOXmp7Pw5BPDF+VaGIGQfbM6k0ng5kw8/wF/eJzP5JInZkjg2CSS8zk6vCys7Wb8r5qqsncAP+pdR1Lu9rvgVT4uYg+3F+PCtAzjzu/taKdKKBSS2/wkEMBg/Q+rB50zqzZb7ZPoD/GeZ1HySxGxJHJsEEl5nc22VmCFalpFJTjLKNUtFxlDfP72IogYAP8PPZekWM5OqjErFWpjjbxprABJRA/JYjOOOX4Bgo6bWGYKsfMg5k+lmy5n8uUxm8kkSs6Vw7Cstibc9Fv5vWQAAAABJRU5ErkJggg==","comp/vscroll$up.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAzCAYAAABxCePHAAADF0lEQVRIS92WTUhUURTHz31vPv0KKmkXrtxUGNomkCANLdCUpEatJFuIClIEFRl9kGH0BYWQElLpotGKEJXAtKQooYUFpi1axLQZMCyyZJqv926cM2/uTM288emoUHfx3v16v3fuuef+72Hume/c7/cBAwaLKWaLBZjLPc0Zk0CSJGBs4SDOObDP7i9ckuXkIbLJRJDFFrJk2SGNvZNwy7ExoZEJLWnqfQ+4SlUFaHNs0gXpQhq6x0GWGe0Y7oCicGivyYsLigup7XgFJlkCJjFwNm2HqrZR4CqHoKLC3fr8GFAMpPLqEJhMoZjpay6Bnx4vpKfYoLx1kCwKBlXoOV78BygGsudCH1nwtNVBgHBBUFFzL1n0+Gx5YghOxhINiAbFG1uZODESxf+bJShKrulv8HUusp1G/IBz1qTZIGvdamBjU584Aopzs+lbDhwfFFgc2/imLq0fazgAHF5MumBtuh3YwJsPfGdeNqgY1qqqfcSprRLgr7rWZzWbwCTL8HLKFYEEgkrUn+eHIDzNbltBSG33O+jcnxNZmrYcw5Yc7hoXotRenRPyz0IgBzrGYkTp9qEtxiEV10eEKD08Wgh7bzwTonSvIV/soK5jd53rE6I0eGY3/PL5wWYxQ+nFgShRKqK6LqTwhJNEafRKNQHCcWK3WmDHqR5NlMoSQzAWUV+9vkBMsKXYLCSbs3Oe+SGqqupGrIL3h3YclifYkjo7yZ7izIzUUGrhnvXAzA+PURkR8xCwPnMVsCUVpW0bsiCUKOH9S0980JvaLJSQUTal9Q+9/RgRJQSgnvgCgdBkxkCKektSpC9cR0HCOQgiZUMI3njijwYg+COzLP9rkLr7E3Dn4Gbhp7BPDC+n0TkhlK2zJpccuSBIfVdsutVdt9U4pLbjtVC2B0cKYN/N50LZHh0rFGGguztV14aFsvWfLiVhSrVboaSlXyjbk/NlBNKFVLT0k7INX3KAx+sXfkBlKzjpJItGLlcmhmSkptAB83h9MTuCICxBRUkMwUmY5+uFPY7LmJ7GW05SZycsSos9xUsmSr8BfgGeWI6+BgEAAAAASUVORK5CYII=","comp/button.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE0AAABFCAYAAAAPWmvdAAABA0lEQVR4Xu3ZMRGDUBRFwXwfKSgxFhfRgAbUxEakkCEO3qmX+p9m5w7NW9v7cz18I4EFbeT1fwxtbgYtmEGDVgRC458GLQiExNKgBYGQWBq0IBASS4MWBEJiadCCQEgsDVoQCImlQQsCIbE0aEEgJJZW0Pbj64Q3hFvQhmL3CQ8atLlAKCwNWhAIiaVBCwIhsTRoQSAklgYtCITE0qAFgZBYGrQgEBJLgxYEQmJp0IJASCwNWhAIiaUVtOfrdMIbwi1oQ7H7hAcN2lwgFJYGLQiExNKgBYGQWBq0IBASS4MWBEJiadCCQEgsDVoQCImlQQsCIbE0aEEgJJYGLQiExNIC2g/MxaMp6CSauwAAAABJRU5ErkJggg==","view/bg_tool.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAMklEQVRYR+3QQREAAAjDMCYG/DsEGXxSBb2ke7YeiwECBAgQIECAAAECBAgQIEDgW+AAAeIuAVS/mngAAAAASUVORK5CYII=","comp/minBtn.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA8CAYAAAB1odqiAAAArUlEQVRYR+3X0QmAMAwE0GQN19B9nM193CmiIH7ZXOAoRc/fpjl8jVDdOj/eOc8USBcXqUjLAtDQRMSOdHb3JatTYCZUXodIy10bGxTI1Lx6/YA0Ima6W2tKFcjmdpGKtCow7NBAdxozy+804Gfx/cDqbLzWDzs0ekNY4B9nOMEehMKTVIEEyKeFSKmc18+MppRtipJuYPCa1SkwEyqvo6Tlxm8bFEijvBt9n/QA/fOPydLHcUIAAAAASUVORK5CYII=","view/zoom_out.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAoCAYAAAD6xArmAAACy0lEQVRIS92WQU8TQRTH/28oQkj0CL0QOMAJQkz4DkS6A+GA+A00Hrhj0uy8NiTwEdBPAOrB0Fnq3U8g6gkOSjxUjpCQCu08M5u2qaVAt7YmOqfNZPa3b9/+Z35L6NOgPnHx98Gbm5sTlUplA0AGQBpACcBBKpXazmaz3+5607YVM/MjEXlNRPdbASJyTkRrzPz+Nvg1MDNPAvgI4AGA10qpvHPuSCk17ZwLAazV4HPM/PUmeDvwSwBPAbxl5sf+RmYWZo7XMvOehwPYYebnScAnAMaVUrNhGH5pBefz+Rnn3GcAJ8w8kQT8E8A9AEMA/HXrqM9fMrO/bjvataJvFdd7/IaZfS9/67ExZpeIngB4xczPklQ8KSKHPmoispdKpXKjo6PHp6enU5VKxXhoV6moVXhnjpVS5wDOwjD81K7qG7e033lXV1cviMjvvDEAP0TkYHBwcKtarT4UkXcALolo1RhTaIV3dVYYY9aIyOfZDw9fMcYUm+FdgWvtYgCmBisrpRbCMPxQh3cNbgM3zJzvCdhDcrncuojMA8gy8/eegTvO8U0Lk87/UY9ve9h/BI6iyJ+1GyLScB4RHQDYDoKgO+dFURSfFQCuOQ9A7LwgCJI5r1gsTlar1YbznHP5crl8NDw8PK2Uip3n4QMDA3OLi4udO89a23Ce1jp2nrVWtNbxh7bWxs4jop0gCDp3XhRFJyIy7pybXV5ejp3XDN7f359RSsXO01p37jxrbey8i4uLoZGRkWvOa5q/1Fp37rx+VtxwntY6dl5zK6Io2hWR2Hla686dV0vFoY+aP8xFJJdOp49LpdIUEZkaNHkqfIWd5JiIzkXkLAiCZM7zO09EYueJyBgRxc4joi0ADeeJyOrS0lJvnBdFkf8xbDhPKbWSyWR647xCocC+53XnAVjQWvfGeS1wo7XunfOstesA5pVS2Uwm8w877xeHf444cscwYAAAAABJRU5ErkJggg==","view/refresh2.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAA/CAYAAAAPIIPGAAAEIElEQVRYR+2XTUhjVxTH/+fGpBrGT/xoBQdFFMMQLNLNbLooLbaFzqKMUhCSZwsuhGG6KCNd6DuRLgqzmGVxUd8LUrpoYWZTKO1yNi2F1oVtceEHflSLqNEav8bklPuqgsl75sUPSsucTQj33v895+R/7y+XcA1B16CJ/6GoYRiDItKfzWZjExMTv5/XtoLlx2Kxm0qp1wH0AHgTwC4RfWRZ1mdewp6ig4ODN9Lp9CMieh+AchH41Lbtj92EXUUHBgaCh4eH3wJ4zSObGSLqtSzrZ9+ihmF8CODR8YIflFL3MplMNxF9IiJWIBC4Pz4+/ldR5RuG8QuAlwGsAWi3bTsVj8dvAWhOJpPfFPK2a/mGYewDeAHAV7Zt9+aK9PX1VYRCoVcApNxa4CX6J4B6AE9t2341V9QwjO8AvAFg27btytxxL9EvAbynJxNRj2VZX58sjMfjd4joyT9D9NiyrHf9iup+/gggBCALQPfxVwARAO8cWywD4LZt2z/5EtWT+vv774rIBIBSlx/mmT5dyWTyC9+WOpkYi8XalVIPRKQbwItEpHv9PRE9tCzrt6IsVcgyhcYLnv1CAkWXfxFBxzEXXXipq+8imz7P9CJdO3+N754y86A+vYFAIDY8PHw58DHzTQB54DNNs3jwMfONY6R4go+Z/YNvbGwsuLKyci74APQys3/wMfMZ8InIPaVUt4g44AuHw/eHhoaKAx8znwEfM6dGR0dviUizaZoXA59pmvtE5ICPmfPAx8wVABzwubXA1VLM7IBPRJ4mEok88DHzKfiY2R/4mPkUfCLSk0gkTsHHzHdE5Immnog8TiQS/sDHzK7gE5EIEZ2CTyl1e2RkxD/4TNO8S0Su4BORZ0qpftM0iwefaZrtAB4QkQM+AA74ADxk5ufgc78CfV99xdy61yMajUbfAvA5gJeKycZj7gqADygajf5xRYIn+6xoUbmCDM9I/LuidXV1qK2txdzcHPb39ZPAOwpmGgqFUFFRgerqauczm81iaWkJa2v64eLhU6+eKqXQ1NTkZOcWq6urWF5edh1zzZSI0NbWhvLyctdFBwcHmJ2dxe7urn/R+vp6J0sd6XQaCwsLqKysRGNjI9bX17G4uIhMRr8jiig/EokgHA7j6OgIU1NTjkBZWRl0f7e2tgo60LX8rq4u/UjC5uamU2ZuBAIBZ1O9mVsLXEU7OztRUlKCnZ0dTE9P54nqfmsnaNHJycm8cVfRlpYW1NTUOJN1pjrjk6iqqkJra6vzNZVKYWZmxp+oLq2jo8NpgQ7dx729PZSWlkKL6hARpwr9Q+aGp/m12Zubm6H9mhtacH5+HhsbG/4tdTJTZ9bQ0OD0LxgMOm7Y3t6GNv55R7XgMS3oH5cJ/y3Rq775V3X5bx8zSv8DuWzoa2vgb5tumbHGlerDAAAAAElFTkSuQmCC","view/settings2.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAA/CAYAAAAPIIPGAAAD2ElEQVRYR+1Xz08bRxT+ZjAGYQoH4rS9IBJBQJEsUC8VKNdQtamUE0fLayqhKHeOaGbFkT8gFVLZtXzk1qqKSs4NUg8RXCIQVoOQ2jRFHHCwBRj2VW+zttY/14BXVaPOyR7NfPN9771536xACEOEgImPDHRhYaHv/Pz8kEMVjUbjq6urxVZhayo/lUo9chzndTabfWMYxkMAGx7QrG3bL5LJ5B0p5f1MJvNz7QENQdPp9LdE9CMAZrcHYAaoxJ8AvARwD8AtAI9t2/7JD9wQdH5+/q7jOLzx04DqeCelnFlbW/s9EJQXGIbxq8eQ//4mhPieiJjlEwBf8qQQYtOyLFZRNeqYJpPJWCQSeUBEzz3JrwqFwvT6+vo575ybm4vGYrFNAF8AICnlbKlU2sxms4Uych2oYRh5AJ9UFggxb1mW5aeSTqfTRLTmm3tv2/bAVUCfWpb1zA9qGAaHwD/XGjQU+WVGHU0Ug4ZSUjXFnwMwXVP8nP1RAPG2i5/Z+q9pKpWaFUL8wvNE9FUmk9m48jWtLWavofztNZTb124oN2neH1mTvmoo/pcfHDGtdZ9nLbw4rrW+nvGZpvlISvl6aWnpjWmaD4nINT4hxKxS6sXy8vIdx3HuK6XaMz6ttWt8QohDInKNTwjhJtWzlJdCiHtEdEtK+VgpFWx8Wuu7RMQbWxofEb0TQsxordszPq11Q+MjoidCCNf4AGxqrYONb2VlJVYsFh84jvPck/yKW5/W2jU+rXWUwdj4OBQcYzbCxcXF5sanlMoLIaqMTylVZXymaVYZHxG9N02zufE1AH2qlKoyPqUUh6AyFwgaivzyVehoorxkdL6k/MUPIEdE0/7i5zcUGx8Rxdsufmbrv6ZKqSrjM01z48rXtLbFeA3FNT4At6/dUIJ7V/MV/6HOn0gkvgbwA4DPbyLZ2/sWwHcikUj82SHAMqe3DMrv+I6Ofw9USonJyUlXzfb2NhzHaamsKdPBwUGcnp7i7OwMAwMDGBsbc4H29vaQz+fR09OD3t5eHB8f1x3QEJQBR0dHcXFx4QL39/dXbTw5OXEBI5EIcrlcHXBDUGYxPj6O7u7uljJLpRJ2d3ddNf7RVD6DlhkWCgUcHrof0YjH44jFYu5vnt/Z2QmWz0lhsHIMi8Wiu/HDF6T7mMDExAT6+vjR8iHGHA5/8uqYTk1Noaurq3L6/v4+jo6OqtgMDQ1hZGSkMnd5eYmtra3K/0DQg4ODivTyLg7B8PBw+6ChyC8f39FEMWgoJRVK8TPbjl/T2mruWEO5SYMNo/P/xaDfeB712U3YeXv/ALDwD+TbY8Dbd9BBAAAAAElFTkSuQmCC","view/setting.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAkCAYAAAC9itu8AAACAklEQVQ4T5XUS4iOcRTH8c9xCeVeiiiXhSJRJFIusRO2lEtZKFlgY6GxZDUrk2TFwii22JJLlERRLKRQJmXBkHIb8+hM/2d6ememed93957n93v+55zf9/mHll9VVTNxopTPR8T3piTyT1VVs7AL9zEd+4roOn5gK25HxLfacAjL8A8TWw6ta28jorc2LMLhIu7Ds2Jah4XlRVci4mNUVTUDadiLFF/G5GL4iyOYjxsYMnQ1BDfxujk0VmJPecFAO4bV2Nk05Bqzz3Za6ut86JJDx2vN4Hbj3hjBbcOt4eCaQZXUj5daT4pGoNFimI1zpdYVEf2jsTQX+5MX5NaOFdFFJHzJ2bWI+FJv6SRWYACTWliqa68ioqc2LMWpwtJ7PCymzVhSWOqOiHeZdPachqNIcXdBJV/2B6cLa5cwZLjQYOkqnuNsOeEM1uJgE43xDBsaH9QQfJ21VNBoHfpBaWHLiKGLoeO1ZnAHkpcxgkvOeoeDa0FjTnNLEfF1PJamYkcR3YmIX6OxNA35Kb7BFKwvoqf4jeV4GRE/azQ2Yh4GMaGFpbr2OSKe1Ibse1MRJ84fimkxMqc0Pc55MrjsOYvZRoofNW6/vPUSwEQ+2+tPQ14h9fX4Ap+aQ2MB1pQTB9sx5K24qmnorKWCRvtDF0PHa+0suBaW0ry91O5mus3n/wHmQwUTIH+tVgAAAABJRU5ErkJggg==","view/refresh.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAkCAYAAAC9itu8AAACiElEQVQ4T4WVS4iPYRTGf4/7/X6XcivXcktEUhTKQkqyYCOKjWyUhezFThbIlJ3LYrIRkoWGUhhhTMko4zJujYRpxgxHj9737/P3zfh239c57/uc5/zO+UQ3T0QsBRYCtZI+5jBVx0fEcGA6MA+YCXQCVyXddWwlISL6ARuARcXvhQPrJF3/nRARvYHtwLRuFLYCFyW15ITl6XTHvwIuJzlrgHrgiqSOiqSI2ANMAL4BxyW1R8RYYKSkp8Vb8w2HgD7AE0kXSozoD0wC2nPCAWAw0CyppiRhBzAD6MgJW4D5KdDFNeSkiJgFbEvONeYE698N2K0ArPsDMAZwguN+AmeKfZgLbAb6llj7A7gk6eFfnY6I0cDKpNc1tQFNwG1JvvFPp0sKXQ2sAGokveuJpVHAHGBJ4ul76vLNapbs9dYk6R8oU7driyztA2Z3w5L1n5LUnBPWptMd/xw4l+RscsHAeeNSZMloTAG+AIcltUXERPdB0qMylk4klu5LOlni2ABgqm3Oko4BQ4Fnko6WJOxPzlXg2wV4hv2czuOYhmsBsDf1rD7fYP0HkyyzZN0twHjACZmlI0WWFgM7e2DprKQ71SyNA9YDBnFYcq0RuOZ5/h9LdsVS6yV97YmlgYDn2X3wjUa7QdKLapY8015ePrWMJVtembhewLI0YWU4eZvck/Q525pXo4M/AY+TLMP40u+SuooseVjsitm/IakzItz5QcXhKSZsBCyrpdjlwuZwfSO8mLOkdYAHqFXSrRKWvErtXFdOcJcnp0AX96ZwuldQ5uxtTrD+VUmWWXqfujwk8eQ4f68rsuRG+d/gZVb9eIk9kPS6miXvIv91rNc12TXPc5MkTyO/AFhJCujHqZlCAAAAAElFTkSuQmCC","comp/checkbox.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAqCAYAAACDdWrxAAABbUlEQVRIS+2TP0gCURzHv88GRYsrExyOo5cEQVEtWdQQpE4N0R+HxmirXXCrKYigqMF2IRqCQByaLJqNIFpyUIzu4rIwpExODy88ITD/cJ603Rsf7/OGz+/zI5TSEAE20cZRgBMySKni8XrbwICrWAwG2ESZIadFS53J0R25brCyHZNud1vbcRuPV7fDAOu9GXJatNSZHN2R6wb/PfJCrxOZCR8Gbk6hWc6Xg8PrcgBETMIVPdIGSjYG/NoOSHcfkLqDK3qsBSRIrgRAuBF1quUPEUPhYGMwb2dhywrqQ3F0Dt++jSokJMBdhmDO52pB2WwFP7OK8rgH9os99IgppNf3QWwMFP4RNHKALrmoflIj53l6CaWpRcBkgiIkYHl6gDTrh5JJg57v/kJ1YOUixw7jfWELxMpAKUmAXAR7tg3LZ7am3IbjKDBOvPiDqkUmcoj+9H1d7k3nmHdweBubB70ON9wRzQH8pVVQb+Q/zZAEfpwDCU4AAAAASUVORK5CYII=","comp/btn_close.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA8CAYAAAB1odqiAAAE6UlEQVRYR+3Y30+bVRgH8G/T0t/0Jy0USrIsC0E2GMKAVYcRpmSbEzIGZhqyxCxeceGVF3pjvJl/wYyJWZYY4hZBFnBuBBUW2ewYAxlsSMiyLKH8aEt/0vZtSxvM+562We15C6jlxr53zfO8z+ec5z2nOTmCk598tY19fAQs+Hlvz76QX1zpAwd+1NMNXzieU1QtFeKbvn4CXvqgC95wLKegRirC1e8GCPjh+53wMnRwedkG54aLG4yhSI/ycnPawHaKJ5M1MhGuXR8k4MX3OnjBx3NPcLX3DPfepSu3odfrYC4r5X7bVlbhcrnT4kdrjlA7xYLffj9EwJ6udnhCW9TEJ08XUgWTqE6n5XLdbk9G7MjhKmodrbwAfQPDBLxw7h1ecH3dDq/Xm1GYrZqceXIgGo0GJSXFvOCNmz8RsLv9NNyhKO+icTqc8Pl8acDLyWyr1Wo1DEYDbw2dXIz+4TsE7DzbBneQH2SruDZc8Pv9GSiLqVQq6Iv0WVe5TiHG4K1RAnaceguuYCTrCx63G4FAgAoqlUpodbqs7+sVEgyN/ELAs20t2Ajwgz6vF6FgMGtL5QoF1BoNL1qklODW6DgBT518gxcM+P1gQqFdLRqZXA6lSkVFWXDk198I2NZyAs7NMDXR7XRmYBKZjMuNMEzmljHQF46hUIrR8XsEbG228IJ+T/rGFkskkMoVHBgOBRGNRNI2vkpL/5YsODZhJeCbJ47D4WeoM4wyDLai5PsWiCUQJ2aXTN4pnswzqmS4e+8BAZstDbxg1qW3hyALTlinCPh6Uz1C0Rg2w/S/tz3UpaYWSgsgF4twf3IagvOXr297PR5YGuv+bd2s71sfzkCj1ULQe+3u9vraGlg0lw+LlZhMEIzUNu7vmYYFmz/9LJeTS9We+PIymaGl6wLizo2cokJDEawDNxLg+W7EHTkGjUWw/tBPwOMdnYg7nNQZep4/Q2B9jYspS0zQHjyUlrdTPJksNBrwYGiQgE3vtiNup4O2SSuOzk5y7z2ubYKyuBiaAwe5394XzxGw29Pi5iYLdeDCYgMmfxxOgKfPIG53UBNt049SBVNo4g864HRmxMz1x3hAIybv3CZg49ttiK/bqYneFRuCLldGYTY5OfPkQBR6PTRl6cfIVEtLivHw51ECNrS2Ir62zrtKfWtrCHo8acDLyWyrFVot1CYTbw2hqQRTY2MJsLk5K8hW8TkcCPp8GSiHqdVQG41ZtxUHTkwQ8NhrFsRXyUrke3wuF0L+TSooVxVCrc9+iBKWmvDodysB65saEFtZ5cX8Hi+YQDBrS2VKBVRa/jONqKwU05NTBKyrexWxlRUquOnfBBNidrVoZHIZClWF1DqisjLMzPxBwNraasRsdHDD6c7ApDIJVzTMRDJiRQb6EUNkLsPs7DwBa6qrELPZqCNzu/1pG1siEUOhkHK5wWAYkUg0La7T0U9tIrMZc/MLBKw+XImtZTrIMBFEouQkIBEXQJaYXXJ0O8WTeQXlZsw/XSRg1SsVvGDWpbuHIAsu/LlEwMrKCsQDAcQ93j2U2H2qUKuBUKnE4uISBF9f/Hj7wJwVhyordl/hH2Q+W1zCixoLOdNUj98Ei+byYbH5lnPkmJhL6O+18/c0/1m38/c0qVbm72nYVuTvadgu5O9pUtsif0+Tv6dhF8P/657mLz4NfQVdLmZiAAAAAElFTkSuQmCC","comp/textarea.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFsAAAAXCAYAAABkrDOOAAAA4klEQVRoQ+3ZvQrCMBiF4e9rU+sPOErRqxDRe/KG9Fp0EAc3VzuIg1ML4uDmlkaaquDenMUTyJoDD+8W3ZyKlaoshSeogHOy1m1euOmoI1EU+auqQUf/8XHnnBzLp3jsWdaVJEnEGEPsADXU2Ifro8Gej/uSpqnHruvmaVegqirZX+4N9mIy8Nh13XEct7vE18RaK7vzjdiIFoiNUH5vEJvYQAHgFMsmNlAAOMWyiQ0UAE6xbGIDBYBTLJvYQAHgFMsmNlAAOMWyiQ0UAE79lM2fmrDy358a/q6Hhf68ng175QueKdEXxUGVVwAAAABJRU5ErkJggg==","view/re.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAoCAYAAAD6xArmAAACpklEQVRIS+WWPUgcQRiG3+8O70QEUwTB1EJgsTGdRRrhOMjOtEtSRbBIBMFKuCtkZleES2uRQoWQJggKKW7Of7GyTRvBLkVShhS73OXMfWGOU85Es7uXs0m2XeZh+OZ95xnCHX10R1ykBvu+P5fP59+VSqVvf9pUarBS6jWAR0Q0rbWOboP3BCaiOQAHAKTW+vtN8L8BW96W4zjPPM/78Ss8FlypVEYajYbHzALAJIAHALJdoDWl1Esi4m74rWBmpiAI5pk5AHAvJj0VrXU5Fmyhvu+/AfA8YRxfaa1LsWDf92eZeSMJlJnXtdYvEo1Ca30G4GEH/ImI1lqt1nE+nz9vNBrLnVTY39uO4zxNdHgrKytjzWbzs13FzKfDw8PFxcXF8HL3Nscd8BEAN3HcgiCYbLVaHyyIiGaUUm+7R9JzQZRSo0T0BUCGmRd831/tBttK53K5zXK5/DV1pZVSG0Q0C2BXa/0kySEmKojWeoiZD4hoKpvNTiwtLX1MC7+1IFrrQWZeJaJxx3EKN5186lF0LwiC4DEz31dKvU+z69i7Ig0stnm9wv4zsDGm7bxCodBf5xlj2s5j5mkpZf+c1wHPEdFBGIbS87z+OO8S3EnAVhRFvTnv8PBwpF6ve0QkiGiSmX9znuu66ZxXq9XmAcQ6j5krUspkzqvVaqmcJ4SId54xxl6ZiZwHYN113WTOq1arZ0R05TwAa5lM5rher5/ncrllAPYl1HZeFEXJnLe3tzd2cXHRdh6A04GBgWKxWLxyXlcqjqIochPHbWdn58p5AGaEENec13NB9vf3R5vNZtt5RLTguu4159lKA9gUQqR3njHGHpx9tOxKKfvnvGq1OmQrC2AKwIQQon/OOzk5GQzD0I5hPIqi/jvPGNN2npTyH3feTzoJOzgswwlqAAAAAElFTkSuQmCC","view/search.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAqCAYAAABcOxDuAAABX0lEQVRIS+3VsUrEQBAG4H9HiDZiJQg+gJVaiKAoWClYXWeZ7D6CtbWFr5Ai2ayQxkLQRgsLGwtBUQsRC6sDCxHxEIvIZSRwxRGSu83pNUe23c0H+89kR2AISwzBxAiinuctCSH2AawD+AFwRkR7QRC85CO0ur5SaoOZzwGM54A3IlrJw1aolPIewEJJUY+01jvde31RKeUMgNceXdLSWk9VQl3XnSWiZhnKzF9RFE1WQrPDUsonAHNFsBDiJAzDRmXUdd1tIjoFMJaDW0KI1TAMH61RpdQ0Mx8z8zMzHxLRAYBlAG0Al2ma7hpjHqxbqgNeAJgHcKW1XutEMeE4Ttv3/axXC1dh9XPgbZqmW8aYd9t3ohCVUt4BWARwkyTJZhzHH7Zgdq4MvQbw7ThOw/f9zypgKVoVsS7UX+C+v+kgeI0Oklrvb0Yw03rwlZW8Hnz14OvqjXrw1e/pPyfwCww91CttlMG7AAAAAElFTkSuQmCC","view/save.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAoCAYAAAD6xArmAAAA1klEQVRIS+2VzQ3DIAyFwxwdoMMAA/VQ8ZByyEBhmA7QOVxxKLIaOcIoSZUfrlifHw/wM91Ky6zE7SZgANTaDEDhzYJ5odSMC7nA5U7+b4X2dVQr3ic4hHCTlMcY33xPZUUGcwBvdEJwjcfGGIQQ4rd2qenWA3hyAUuABwCP31NtN+i1v02qP4DicRybM885J2ceB/NCyUupfuLxBS4WbmKF9rNUv4p9gq21d0l5SunF91RWZDAH8EYnBNd4nDPPWitnXst0I6Leez+feVowEQ3e+wNk3ge7C/Qp3GfwkgAAAABJRU5ErkJggg=="};},'base64',function(){return this.base64=new Base64Atlas(Base64AtlasManager.dataO);} ]); return Base64AtlasManager; })() /** *... *@author ww */ //class laya.debug.DebugPanel var DebugPanel=(function(){ function DebugPanel(){ this.tShowObj=null; this.preValueO={}; this.div=null; this.debug_view=null; this.height=300; this.clickedHandler=null; this.fromMe=false; this._treeDataList=null; this._init(); } __class(DebugPanel,'laya.debug.DebugPanel'); var __proto=DebugPanel.prototype; __proto.removeNoDisplayKeys=function(arr){ var i=0; for (i=arr.length-1;i >=0;i--){ if (DebugPanel.noDisplayKeys[arr[i]]){ arr.splice(i,1); } } } __proto.updateShowKeys=function(){ DebugPanel.tObjKeys.length=0; if (!this.tShowObj) return; DebugPanel.tObjKeys=ClassTool.getObjectDisplayAbleKeys(this.tShowObj,DebugPanel.tObjKeys); if (this.tShowObj==Laya.stage){ this.removeNoDisplayKeys(DebugPanel.tObjKeys); } DebugPanel.tObjKeys.sort(MathUtil.sortSmallFirst); } __proto._init=function(){ var _$this=this; this.div=Browser.document.createElement('div'); Browser.document.body.appendChild(this.div); this.clickedHandler=new Handler(this,this.onClickSelected); this.debug_view=Browser.window.layaair_debug_view; this.debug_view.initLayaAirDebugView(this.div); this.debug_view.tree.attachEvent("onSelect",function(id){ var dataO; dataO=_$this.getDataByID(id,_$this._treeDataList[0]); if (dataO.target){ DebugTool.showDisBound(dataO.target); _$this.showTargetInfo(dataO.target); } }); this.debug_view.setValueChangeHandler(function(data,new_value){ _$this.onValueChange(data,new_value); }); this.debug_view.onRefresh(function(){ DebugPanel.I.setRoot(Laya.stage); }); this.debug_view.onInspectElement(function(){ ClickSelectTool.I.beginClickSelect(_$this.clickedHandler); }); this.debug_view.onLogInfo(function(){ console.log(_$this.tShowObj); }); this.debug_view.onPrintEnabledNodeChain(function(){ DebugTool.traceDisMouseEnable(_$this.tShowObj); }); this.debug_view.onPrintSizeChain(function(){ DebugTool.traceDisSizeChain(_$this.tShowObj); }); this.debug_view.onToggleVisibility(function(selectd){ if (_$this.tShowObj){ _$this.tShowObj.visible=_$this.debug_view.getVisibility(); } }); this.debug_view.onToggleDebugBorder(function(selectd){ if (!_$this.tShowObj) return; SpriteRenderHook.showDisplayBorder(_$this.tShowObj,_$this.debug_view.getShowDebugBorder()); }); this.debug_view.onToggleShowCurrentCache(function(selectd){ CacheAnalyser.showRecacheSprite=_$this.debug_view.getShowCurrentCache(); }); this.debug_view.onToggleShowAllCache(function(selectd){ CacheAnalyser.showCacheSprite=_$this.debug_view.getShowAllCache(); }); this.debug_view.onToggleShowAtlas(function(selectd){ console.log("toggle show atlas:",_$this.debug_view.getShowAtlas()); if (_$this.debug_view.getShowAtlas()){ AtlasTools.getInstance().start(); } else { AtlasTools.getInstance().end(); } }); JSTools.showToBody(this.div,0,0); Laya.stage.on(/*laya.events.Event.RESIZE*/"resize",this,this.adptPos); this.adptPos(); } __proto.onClickSelected=function(target){ var dataO; if (!this._treeDataList) return; this.debug_view.tree.selectItem(IDTools.getObjID(target)); this.debug_view.bounceUpInspectButton(); } __proto.updateLoop=function(){ if (this.tShowObj){ this.showTargetInfo(this.tShowObj); } } __proto.onSelectItem=function(obj){ var tTarget; tTarget=obj.target; this.showTargetInfo(tTarget); } __proto.onValueChange=function(obj,newValue){ if (obj["type"]=="number"){ newValue=DebugPanel.mParseFloat(newValue); } if (obj["type"]=="boolean"){ newValue=newValue.toString()=="true"; } if (this.tShowObj){ var key; key=obj["key"]; this.preValueO[key]=this.tShowObj[key]=newValue; } } __proto.showTargetInfo=function(tTarget){ if (!tTarget) return; this.debug_view.setVisibility(tTarget.visible); this.debug_view.setShowDebugBorder(SpriteRenderHook.isDisplayShowBorder(tTarget)); var i=0,len=0; len=DebugPanel.tObjKeys.length; var key; if (this.tShowObj==tTarget){ for (i=0;i < len;i++){ key=DebugPanel.tObjKeys[i]; if (this.preValueO[key] !=tTarget[key]){ this.debug_view.changeValueByLabel(key,tTarget[key]); } } } else { this.tShowObj=tTarget; this.updateShowKeys(); var dataList; dataList=DebugPanel.getObjectData(tTarget); this.debug_view.setContents(dataList); } for (i=0;i < len;i++){ key=DebugPanel.tObjKeys[i]; this.preValueO[key]=tTarget[key]; } } __proto.adptPos=function(){ if (this.fromMe)return; this.fromMe=true; JSTools.setPos(this.div,0,Browser.clientHeight-this.height); this.debug_view.resize(Browser.clientWidth,this.height); if (!DebugPanel.overlay){ Laya.stage.setScreenSize(Browser.clientWidth *Browser.pixelRatio,(Browser.clientHeight-this.height)*Browser.pixelRatio); } this.fromMe=false; } __proto.setRoot=function(sprite){ var mtreeo; mtreeo=DebugPanel.getSpriteTreeArr(sprite); this._treeDataList=[mtreeo]; var wraped; wraped={}; wraped.id=0; wraped.item=[mtreeo]; this.debug_view.setTree(wraped); Laya.timer.loop(500,this,this.updateLoop); } __proto.getDataByID=function(targetID,nodeO){ if (!nodeO) return null; if (targetID==nodeO.id) return nodeO; var childs; childs=nodeO["item"]; if (!childs) return null; var i=0,len=0; len=childs.length; var tRst; for (i=0;i < len;i++){ tRst=this.getDataByID(targetID,childs[i]); if (tRst) return tRst; } return null; } __proto.getDataByTarget=function(target,nodeO){ if (!nodeO) return null; if (target==nodeO.target) return nodeO; var childs; childs=nodeO["item"]; if (!childs) return null; var i=0,len=0; len=childs.length; var tRst; for (i=0;i < len;i++){ tRst=this.getDataByTarget(target,childs[i]); if (tRst) return tRst; } return null; } DebugPanel.init=function(underGame,bgColor){ (underGame===void 0)&& (underGame=true); (bgColor===void 0)&& (bgColor="#ffffff"); if (!DebugPanel.I){ DebugPanel.overlay=!underGame; DivScripts.init(); DebugTool.initBasicFunctions(); RenderSpriteHook.init(); SpriteRenderHook.init(); DebugPanel.I=new DebugPanel(); DebugPanel.I.setRoot(Laya.stage); CacheAnalyser.showRecacheSprite=false; if (bgColor){ DebugPanel.I.div.style.background=bgColor; } } } DebugPanel.getSpriteTreeArr=function(sprite){ var rst; rst={}; rst["text"]=""+ClassTool.getNodeClassAndName(sprite); rst.target=sprite; IDTools.idObj(sprite); rst.id=IDTools.getObjID(sprite); var childs; childs=sprite._childs; var i=0,len=0; len=childs.length; var tchild; var childsList; childsList=[]; rst["item"]=childsList; for (i=0;i < len;i++){ childsList.push(DebugPanel.getSpriteTreeArr(childs[i])); } return rst; } DebugPanel.getObjectData=function(data){ var dataList; var tData; var key; var tValue; var tType; dataList=[]; var keys; keys=DebugPanel.tObjKeys; var i=0,len=0; len=keys.length; for (i=0;i < len;i++){ key=keys[i]; tValue=data[key]; tType=typeof(tValue); if (key.charAt(0)=="_") continue ; if (DebugPanel.displayTypes[tType]){ tData={}; tData["key"]=key; tData["value"]=tValue; tData["type"]=tType; dataList.push(tData); } } return dataList; } DebugPanel.mParseFloat=function(v){ var rst=NaN; rst=parseFloat(v); if (isNaN(rst)) return 0; return rst; } DebugPanel.I=null; DebugPanel.overlay=false; DebugPanel.ChildrenSign="item"; DebugPanel.LabelSign="text"; DebugPanel.tObjKeys=[]; __static(DebugPanel, ['displayTypes',function(){return this.displayTypes={"boolean":true,"number":true,"string":true};},'displayKeys',function(){return this.displayKeys=[["x","number"],["y","number"],["width","number"],["width","number"],["width","number"],["width","number"],["width","number"],["width","number"],["width","number"],["width","number"],["width","number"],];},'noDisplayKeys',function(){return this.noDisplayKeys={"desginWidth":true,"desginHeight":true };} ]); return DebugPanel; })() /** * *@author ww *@version 1.0 * *@created 2015-9-24 下午3:00:38 */ //class laya.debug.DebugTool var DebugTool=(function(){ function DebugTool(){} __class(DebugTool,'laya.debug.DebugTool'); __getset(1,DebugTool,'target',function(){ return DebugTool._target; },function(v){ DebugTool._target=v; }); __getset(1,DebugTool,'isThisShow',function(){ return false; }); /** *设置是否显示帧率信息 *@param value 是否显示true|false */ __getset(1,DebugTool,'showStatu',null,function(value){ if (value){ Stat.show(); } else{ Stat.hide(); DebugTool.clearDebugLayer(); } }); /** *是否自动显示点击对象的边框 *@param value */ __getset(1,DebugTool,'showBound',function(){ return DebugTool._showBound; },function(value){ DebugTool._showBound=value; if (!DebugTool._showBound){ DebugTool.clearDebugLayer(); } }); DebugTool.getMenuShowEvent=function(){ if (Browser.onMobile){ return /*laya.events.Event.DOUBLE_CLICK*/"doubleclick"; }else{ return /*laya.events.Event.RIGHT_CLICK*/"rightclick"; } } DebugTool.init=function(cacheAnalyseEnable,loaderAnalyseEnable,createAnalyseEnable,renderAnalyseEnable,showCacheRec){ (cacheAnalyseEnable===void 0)&& (cacheAnalyseEnable=true); (loaderAnalyseEnable===void 0)&& (loaderAnalyseEnable=true); (createAnalyseEnable===void 0)&& (createAnalyseEnable=true); (renderAnalyseEnable===void 0)&& (renderAnalyseEnable=true); (showCacheRec===void 0)&& (showCacheRec=false); DebugTool.enableCacheAnalyse=cacheAnalyseEnable; if (DebugTool.enableCacheAnalyse){ RenderSpriteHook.init(); } if (renderAnalyseEnable){ SpriteRenderHook.init(); } DebugTool.enableNodeCreateAnalyse=createAnalyseEnable; if (DebugTool.enableNodeCreateAnalyse){ ClassCreateHook.I.hookClass(Node); } if (loaderAnalyseEnable){ LoaderHook.init(); } CacheAnalyser.showCacheSprite=showCacheRec; NodeInfoPanel.init(); DebugTool.initBasicFunctions(); } DebugTool.initBasicFunctions=function(){ DisplayHook.initMe(); if (!DebugTool.debugLayer){ DebugInfoLayer.init(); DebugTool.debugLayer=DebugInfoLayer.I.graphicLayer; DebugTool.debugLayer.mouseEnabled=false; DebugTool.debugLayer.mouseThrough=true; DebugTool.showStatu=true; Laya.stage.on(/*laya.events.Event.KEY_DOWN*/"keydown",null,DebugTool.keyHandler); DebugTool.cmdToTypeO[ /*laya.renders.RenderSprite.IMAGE*/0x01]="IMAGE"; DebugTool.cmdToTypeO[ /*laya.renders.RenderSprite.ALPHA*/0x02]="ALPHA"; DebugTool.cmdToTypeO[ /*laya.renders.RenderSprite.TRANSFORM*/0x04]="TRANSFORM"; DebugTool.cmdToTypeO[ /*laya.renders.RenderSprite.CANVAS*/0x10]="CANVAS"; DebugTool.cmdToTypeO[ /*laya.renders.RenderSprite.GRAPHICS*/0x200]="GRAPHICS"; DebugTool.cmdToTypeO[ /*laya.renders.RenderSprite.CUSTOM*/0x400]="CUSTOM"; DebugTool.cmdToTypeO[ /*laya.renders.RenderSprite.CHILDS*/0x800]="CHILDS"; DebugExport.export(); } } DebugTool.dTrace=function(str){ if (DebugTool._traceFun !=null){ DebugTool._traceFun(str); } console.log(str); } DebugTool.keyHandler=function(e){ var key; key=String.fromCharCode(e.keyCode); if (!e.altKey) return; switch (e.keyCode){ case 38: DebugTool.showParent(); break ; case 40: DebugTool.showChild(); break ; case 37: DebugTool.showBrother(DebugTool.target,1); break ; case 39: DebugTool.showBrother(DebugTool.target,-1); break ; } DebugTool.dealCMDKey(key); } DebugTool.dealCMDKey=function(key){ switch (key){ case "上": DebugTool.showParent(); break ; case "下": DebugTool.showChild(); break ; case "左": DebugTool.showBrother(DebugTool.target,1); break ; case "右": DebugTool.showBrother(DebugTool.target,-1); break ; case "B": DebugTool.showAllBrother(); break ; case "C": DebugTool.showAllChild(); break ; case "E": DebugTool.traceDisMouseEnable(); break ; case "S": DebugTool.traceDisSizeChain(); break ; case "D": DisControlTool.downDis(DebugTool.target); break ; case "U": DisControlTool.upDis(DebugTool.target); break ; case "N": DebugTool.getNodeInfo(); break ; case "M": DebugTool.showAllUnderMosue(); break ; case "I": break ; case "O": ObjectCreateView.I.show(); break ; case "L": DisController.I.switchType(); break ; case "Q": DebugTool.showNodeInfo(); break ; case "F": DebugTool.showToolPanel(); break ; case "P": DebugTool.showToolFilter(); break ; case "V": DebugTool.selectNodeUnderMouse(); break ; case "A": if (NodeToolView.I.target){ MouseEventAnalyser.analyseNode(NodeToolView.I.target); } break ; case "K": NodeUtils.traceStage(); break ; case "T": DebugTool.switchNodeTree(); break ; case "R": RenderCostRankView.I.show(); break ; case "X": NodeTree.I.fresh(); break ; case "mCMD": DebugTool.traceCMD(); break ; case "allCMD": DebugTool.traceCMDR(); break ; } } DebugTool.switchNodeTree=function(){ ToolPanel.I.switchShow(/*laya.debug.view.nodeInfo.ToolPanel.Tree*/"Tree"); } DebugTool.analyseMouseHit=function(){ if (DebugTool.target) MouseEventAnalyser.analyseNode(DebugTool.target); } DebugTool.selectNodeUnderMouse=function(){ DisplayHook.instance.selectDisUnderMouse(); DebugTool.showDisBound(); return; } DebugTool.showToolPanel=function(){ ToolPanel.I.switchShow(/*laya.debug.view.nodeInfo.ToolPanel.Find*/"Find"); } DebugTool.showToolFilter=function(){ ToolPanel.I.switchShow(/*laya.debug.view.nodeInfo.ToolPanel.Filter*/"Filter"); } DebugTool.showNodeInfo=function(){ if (NodeInfoPanel.I.isWorkState){ NodeInfoPanel.I.recoverNodes(); } else{ NodeInfoPanel.I.showDisInfo(DebugTool.target); } } DebugTool.switchDisController=function(){ if (DisController.I.target){ DisController.I.target=null; } else{ if (DebugTool.target){ DisController.I.target=DebugTool.target; } } } DebugTool.showParent=function(sprite){ if (!sprite) sprite=DebugTool.target; if (!sprite){ console.log("no targetAvalible"); return null; } DebugTool.target=sprite.parent; DebugTool.autoWork(); } DebugTool.showChild=function(sprite){ if (!sprite) sprite=DebugTool.target; if (!sprite){ console.log("no targetAvalible"); return null; } if (sprite.numChildren > 0){ DebugTool.target=sprite.getChildAt(0); DebugTool.autoWork(); } } DebugTool.showAllChild=function(sprite){ if (!sprite) sprite=DebugTool.target; if (!sprite){ console.log("no targetAvalible"); return null; } DebugTool.selectedNodes=DisControlTool.getAllChild(sprite); DebugTool.showSelected(); } DebugTool.showAllUnderMosue=function(){ DebugTool.selectedNodes=DisControlTool.getObjectsUnderGlobalPoint(Laya.stage); DebugTool.showSelected(); } DebugTool.showParentChain=function(sprite){ if (!sprite) return; DebugTool.selectedNodes=[]; var tar; tar=sprite.parent; while (tar){ DebugTool.selectedNodes.push(tar); tar=tar.parent; } DebugTool.showSelected(); } DebugTool.showAllBrother=function(sprite){ if (!sprite) sprite=DebugTool.target; if (!sprite){ console.log("no targetAvalible"); return null; } if (!sprite.parent) return; DebugTool.selectedNodes=DisControlTool.getAllChild(sprite.parent); DebugTool.showSelected(); } DebugTool.showBrother=function(sprite,dID){ (dID===void 0)&& (dID=1); if (!sprite) sprite=DebugTool.target; if (!sprite){ console.log("no targetAvalible"); return null; }; var p; p=sprite.parent; if (!p) return; var n=0; n=p.getChildIndex(sprite); n+=dID; if (n < 0) n+=p.numChildren; if (n >=p.numChildren) n-=p.numChildren; DebugTool.target=p.getChildAt(n); DebugTool.autoWork(); } DebugTool.clearDebugLayer=function(){ if (DebugTool.debugLayer.graphics) DebugTool.debugLayer.graphics.clear(); } DebugTool.showSelected=function(){ if (!DebugTool.autoShowSelected) return; if (!DebugTool.selectedNodes || DebugTool.selectedNodes.length < 1) return; console.log("selected:",DebugTool.selectedNodes); var i=0; var len=0; len=DebugTool.selectedNodes.length; DebugTool.clearDebugLayer(); for (i=0;i < len;i++){ DebugTool.showDisBound(DebugTool.selectedNodes[i],false); } } DebugTool.getClassCreateInfo=function(className){ return RunProfile.getRunInfo(className); } DebugTool.autoWork=function(){ if (!DebugTool.isThisShow) return; if (DebugTool.showBound) DebugTool.showDisBound(); if (DebugTool.autoTraceSpriteInfo && DebugTool.target){ TraceTool.traceSpriteInfo(DebugTool.target,DebugTool.autoTraceBounds,DebugTool.autoTraceSize,DebugTool.autoTraceTree); } if (!DebugTool.target) return; if (DebugTool.autoTraceCMD){ DebugTool.traceCMD(); } if (DebugTool.autoTraceCMDR){ DebugTool.traceCMDR(); } if (DebugTool.autoTraceEnable){ DebugTool.traceDisMouseEnable(DebugTool.target); } } DebugTool.traceDisMouseEnable=function(tar){ console.log("----------------traceDisMouseEnable--------------------"); if (!tar) tar=DebugTool.target; if (!tar){ console.log("no targetAvalible"); return null; }; var strArr; strArr=[]; DebugTool.selectedNodes=[]; while (tar){ strArr.push(ClassTool.getNodeClassAndName(tar)+": mouseEnabled:"+tar.mouseEnabled+" hitFirst:"+tar.hitTestPrior); DebugTool.selectedNodes.push(tar); tar=tar.parent; } console.log(strArr.join("\n")); DebugTool.showSelected(); return strArr.join("\n"); } DebugTool.traceDisSizeChain=function(tar){ console.log("---------------------traceDisSizeChain-------------------"); if (!tar) tar=DebugTool.target; if (!tar){ console.log("no targetAvalible"); return null; } DebugTool.selectedNodes=[]; var strArr; strArr=[]; while (tar){ strArr.push(ClassTool.getNodeClassAndName(tar)+": x:"+tar.x+" y:"+tar.y+" w:"+tar.width+" h:"+tar.height+" scaleX:"+tar.scaleX+" scaleY:"+tar.scaleY); DebugTool.selectedNodes.push(tar); tar=tar.parent; } console.log(strArr.join("\n")); DebugTool.showSelected(); return strArr.join("\n"); } DebugTool.showDisBound=function(sprite,clearPre,color){ (clearPre===void 0)&& (clearPre=true); (color===void 0)&& (color="#ff0000"); if (!sprite) sprite=DebugTool.target; if (!sprite){ console.log("no targetAvalible"); return null; } if (clearPre) DebugTool.clearDebugLayer(); var pointList; pointList=sprite._getBoundPointsM(true); if (!pointList || pointList.length < 1) return; pointList=GrahamScan.pListToPointList(pointList,true); WalkTools.walkArr(pointList,sprite.localToGlobal,sprite); pointList=GrahamScan.pointListToPlist(pointList); DebugTool._disBoundRec=Rectangle._getWrapRec(pointList,DebugTool._disBoundRec); DebugTool.debugLayer.graphics.drawRect(DebugTool._disBoundRec.x,DebugTool._disBoundRec.y,DebugTool._disBoundRec.width,DebugTool._disBoundRec.height,null,color); DebugInfoLayer.I.setTop(); } DebugTool.showDisBoundToSprite=function(sprite,graphicSprite,color,lineWidth){ (color===void 0)&& (color="#ff0000"); (lineWidth===void 0)&& (lineWidth=1); var pointList; pointList=sprite._getBoundPointsM(true); if (!pointList || pointList.length < 1) return; pointList=GrahamScan.pListToPointList(pointList,true); WalkTools.walkArr(pointList,sprite.localToGlobal,sprite); pointList=GrahamScan.pointListToPlist(pointList); DebugTool._disBoundRec=Rectangle._getWrapRec(pointList,DebugTool._disBoundRec); graphicSprite.graphics.drawRect(DebugTool._disBoundRec.x,DebugTool._disBoundRec.y,DebugTool._disBoundRec.width,DebugTool._disBoundRec.height,null,color,lineWidth); } DebugTool.getNodeInfo=function(){ DebugTool.counter.reset(); WalkTools.walkTarget(Laya.stage,DebugTool.addNodeInfo); console.log("node info:"); DebugTool.counter.traceSelf(); return DebugTool.counter.data; } DebugTool.findByClass=function(className){ DebugTool._classList=[]; DebugTool._tFindClass=className; WalkTools.walkTarget(Laya.stage,DebugTool.addClassNode); DebugTool.selectedNodes=DebugTool._classList; DebugTool.showSelected(); return DebugTool._classList; } DebugTool.addClassNode=function(node){ var type; type=node["constructor"].name; if (type==DebugTool._tFindClass){ DebugTool._classList.push(node); } } DebugTool.traceCMD=function(sprite){ if (!sprite) sprite=DebugTool.target; if (!sprite){ console.log("no targetAvalible"); return null; } console.log("self CMDs:"); console.log(sprite.graphics.cmds); var renderSprite; renderSprite=RenderSprite.renders[sprite._renderType]; console.log("renderSprite:",renderSprite); DebugTool._rSpList.length=0; while (renderSprite && renderSprite["_sign"] > 0){ DebugTool._rSpList.push(DebugTool.cmdToTypeO[renderSprite["_sign"]]); renderSprite=renderSprite._next; } console.log("fun:",DebugTool._rSpList.join(",")); DebugTool.counter.reset(); DebugTool.addCMDs(sprite.graphics.cmds); DebugTool.counter.traceSelf(); return DebugTool.counter.data; } DebugTool.addCMDs=function(cmds){ WalkTools.walkArr(cmds,DebugTool.addCMD); } DebugTool.addCMD=function(cmd){ DebugTool.counter.add(cmd.callee); } DebugTool.traceCMDR=function(sprite){ if (!sprite) sprite=DebugTool.target; if (!sprite){ console.log("no targetAvalible"); return 0; } DebugTool.counter.reset(); WalkTools.walkTarget(sprite,DebugTool.getCMdCount); console.log("cmds include children"); DebugTool.counter.traceSelf(); return DebugTool.counter.data; } DebugTool.getCMdCount=function(target){ if (!target) return 0; if (! (target instanceof laya.display.Sprite )) return 0; if (!target.graphics.cmds) return 0; DebugTool.addCMDs(target.graphics.cmds); var rst=target.graphics.cmds.length; return rst; } DebugTool.addNodeInfo=function(node){ var type; type=node["constructor"].name; DebugTool.counter.add(type); } DebugTool.find=function(filter,ifShowSelected){ (ifShowSelected===void 0)&& (ifShowSelected=true); var rst; rst=DebugTool.findTarget(Laya.stage,filter); DebugTool.selectedNodes=rst; if (DebugTool.selectedNodes){ DebugTool.target=DebugTool.selectedNodes[0]; } if (ifShowSelected) DebugTool.showSelected(); return rst; } DebugTool.findByName=function(name){ DebugTool.nameFilter.name=name; return DebugTool.find(DebugTool.nameFilter); } DebugTool.findNameStartWith=function(startStr){ DebugTool.nameFilter.name=DebugTool.getStartWithFun(startStr); return DebugTool.find(DebugTool.nameFilter); } DebugTool.findNameHas=function(hasStr,showSelected){ (showSelected===void 0)&& (showSelected=true); DebugTool.nameFilter.name=DebugTool.getHasFun(hasStr); return DebugTool.find(DebugTool.nameFilter,showSelected); } DebugTool.getStartWithFun=function(startStr){ var rst=function (str){ if (!str) return false; if (str.indexOf(startStr)==0) return true; return false; }; return rst; } DebugTool.getHasFun=function(hasStr){ var rst=function (str){ if (!str) return false; if (str.indexOf(hasStr)>=0) return true; return false; }; return rst; } DebugTool.findTarget=function(target,filter){ var rst=[]; if (DebugTool.isFit(target,filter)) rst.push(target); var i=0; var len=0; var tChild; len=target.numChildren; for (i=0;i < len;i++){ tChild=target.getChildAt(i); if ((tChild instanceof laya.display.Sprite )){ rst=rst.concat(DebugTool.findTarget(tChild,filter)); } } return rst; } DebugTool.findClassHas=function(target,str){ var rst=[]; if (ClassTool.getClassName(target).indexOf(str)>=0) rst.push(target); var i=0; var len=0; var tChild; len=target.numChildren; for (i=0;i < len;i++){ tChild=target.getChildAt(i); if ((tChild instanceof laya.display.Sprite )){ rst=rst.concat(DebugTool.findClassHas(tChild,str)); } } return rst; } DebugTool.isFit=function(tar,filter){ if (!tar) return false; if (!filter) return true; if ((typeof filter=='function')){ return (filter)(tar); }; var key; for (key in filter){ if ((typeof (filter[key])=='function')){ if (!filter[key](tar[key])) return false; } else{ if (tar[key] !=filter[key]) return false; } } return true; } DebugTool.log=function(__args){ var args=arguments; var arr; arr=DTrace.getArgArr(args); if (DebugTool._logFun!=null){ DebugTool._logFun(arr.join(" ")); } } DebugTool.enableCacheAnalyse=false; DebugTool.enableNodeCreateAnalyse=true; DebugTool._traceFun=null; DebugTool.debugLayer=null; DebugTool._target=null; DebugTool.selectedNodes=[]; DebugTool.autoShowSelected=true; DebugTool._showBound=true; DebugTool._disBoundRec=null; DebugTool.autoTraceEnable=false; DebugTool.autoTraceBounds=false; DebugTool.autoTraceSize=false; DebugTool.autoTraceTree=true; DebugTool.autoTraceCMD=true; DebugTool.autoTraceCMDR=false; DebugTool.autoTraceSpriteInfo=true; DebugTool._classList=null; DebugTool._tFindClass=null; DebugTool._rSpList=[]; DebugTool._logFun=null; __static(DebugTool, ['text',function(){return this.text=new Stat();},'cmdToTypeO',function(){return this.cmdToTypeO={ };},'counter',function(){return this.counter=new CountTool();},'nameFilter',function(){return this.nameFilter={"name":"name"};} ]); return DebugTool; })() /** *... *@author ww */ //class laya.debug.divui.DivScripts var DivScripts=(function(){ function DivScripts(){} __class(DivScripts,'laya.debug.divui.DivScripts'); DivScripts.init=function(){ var script; script=Base64Tool.decodeToByte(DivScripts.data).readUTFBytes(); Laya._runScript(script); } DivScripts.data="ZnVuY3Rpb24gZGh0bWx4RXZlbnQoZSx0LGkpe2UuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIodCxpLCExKTplLmF0dGFjaEV2ZW50JiZlLmF0dGFjaEV2ZW50KCJvbiIrdCxpKX1mdW5jdGlvbiBkaHRtbFhUcmVlT2JqZWN0KGUsdCxpLG4pe2lmKGRodG1seEV2ZW50LmluaXRUb3VjaCYmZGh0bWx4RXZlbnQuaW5pdFRvdWNoKCksX2lzSUUpdHJ5e2RvY3VtZW50LmV4ZWNDb21tYW5kKCJCYWNrZ3JvdW5kSW1hZ2VDYWNoZSIsITEsITApfWNhdGNoKG8pe30ib2JqZWN0IiE9dHlwZW9mIGU/dGhpcy5wYXJlbnRPYmplY3Q9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk6dGhpcy5wYXJlbnRPYmplY3Q9ZSx0aGlzLnBhcmVudE9iamVjdC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIix0aGlzLl9pdGltX2RnPSEwLHRoaXMuZGxtdHI9IiwiLHRoaXMuZHJvcExvd2VyPSExLHRoaXMuZW5hYmxlSUVJbWFnZUZpeCghMCksdGhpcy54bWxzdGF0ZT0wLHRoaXMubXl0eXBlPSJ0cmVlIix0aGlzLnNtY2hlY2s9ITAsdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWksdGhpcy5yb290SWQ9bix0aGlzLmNoaWxkQ2FsYz1udWxsLHRoaXMuZGVmX2ltZ194PSIxOHB4Iix0aGlzLmRlZl9pbWdfeT0iMThweCIsdGhpcy5kZWZfbGluZV9pbWdfeD0iMThweCIsdGhpcy5kZWZfbGluZV9pbWdfeT0iMjRweCIsdGhpcy5fZHJhZ2dlZD1uZXcgQXJyYXksdGhpcy5fc2VsZWN0ZWQ9bmV3IEFycmF5LHRoaXMuc3R5bGVfcG9pbnRlcj0icG9pbnRlciIsdGhpcy5fYWltZ3M9ITAsdGhpcy5odG1sY0E9IiBbIix0aGlzLmh0bWxjQj0iXSIsdGhpcy5sV2luPXdpbmRvdyx0aGlzLmNNZW51PTAsdGhpcy5tbGl0ZW1zPTAsdGhpcy5pY29uVVJMPSIiLHRoaXMuZGFkbW9kZT0wLHRoaXMuc2xvd1BhcnNlPSExLHRoaXMuYXV0b1Njcm9sbD0hMCx0aGlzLmhmTW9kZT0wLHRoaXMubm9kZUN1dD1uZXcgQXJyYXksdGhpcy5YTUxzb3VyY2U9MCx0aGlzLlhNTGxvYWRpbmdXYXJuaW5nPTAsdGhpcy5faWRwdWxsPXt9LHRoaXMuX3B1bGxTaXplPTAsdGhpcy50cmVlTGluZXNPbj0hMCx0aGlzLnRzY2hlY2s9ITEsdGhpcy50aW1nZW49ITAsdGhpcy5kcGNweT0hMSx0aGlzLl9sZF9pZD1udWxsLHRoaXMuX2R5bkRlbGV0ZUJyYW5jaGVzPXt9LHRoaXMuX29pZV9vblhMRT1bXSx0aGlzLmltUGF0aD13aW5kb3cuZGh4X2dsb2JhbEltZ1BhdGh8fCIiLHRoaXMuY2hlY2tBcnJheT1uZXcgQXJyYXkoImljb25VbmNoZWNrQWxsLmdpZiIsImljb25DaGVja0FsbC5naWYiLCJpY29uQ2hlY2tHcmF5LmdpZiIsImljb25VbmNoZWNrRGlzLmdpZiIsImljb25DaGVja0Rpcy5naWYiLCJpY29uQ2hlY2tEaXMuZ2lmIiksdGhpcy5yYWRpb0FycmF5PW5ldyBBcnJheSgicmFkaW9fb2ZmLmdpZiIsInJhZGlvX29uLmdpZiIsInJhZGlvX29uLmdpZiIsInJhZGlvX29mZi5naWYiLCJyYWRpb19vbi5naWYiLCJyYWRpb19vbi5naWYiKSx0aGlzLmxpbmVBcnJheT1uZXcgQXJyYXkoImxpbmUyLmdpZiIsImxpbmUzLmdpZiIsImxpbmU0LmdpZiIsYmxhbmtfYmFzZTY0LGJsYW5rX2Jhc2U2NCwibGluZTEuZ2lmIiksdGhpcy5taW51c0FycmF5PW5ldyBBcnJheSgibWludXMyLmdpZiIsIm1pbnVzMy5naWYiLCJtaW51czQuZ2lmIiwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRWdBWUFKRUNBTEd2clo2ZG5mVDA5QUFBQUNINUJBRUFBQUlBTEFBQUFBQVNBQmdBQUFJY2xJK3B5KzBQbzV5MFdoc0NEV0IzbUdYZnd3SG1oYWJxeXJaVEFRQTciLCJtaW51czUuZ2lmIiksdGhpcy5wbHVzQXJyYXk9bmV3IEFycmF5KCJwbHVzMi5naWYiLCJwbHVzMy5naWYiLCJwbHVzNC5naWYiLCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFZ0FZQUpFQ0FLR2duN0d2cmZUMDlBQUFBQ0g1QkFFQUFBSUFMQUFBQUFBU0FCZ0FBQUljbEkrcHkrMFBvNXkwVW5CRHlIc0NMUUZmT0U2ZGhhYnF5clpKQVFBNyIsInBsdXM1LmdpZiIpLHRoaXMuaW1hZ2VBcnJheT1uZXcgQXJyYXkoImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVnQVNBS0VDQUplWGw3R3ZyZi8vLy8vLy95SDVCQUVLQUFJQUxBQUFBQUFTQUJJQUFBSXpsSStwQXUyOURBaTAxamlUWFJuTm0zVEhCNDVCYUoyZXVsQm94TENTL0s2d09OODBYcHQ2citCOUhrU2FJSVdFS1EwRkFEcz0iLCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFZ0FTQUtFQ0FKZVhsN0d2cmYvLy8vLy8veUg1QkFFS0FBSUFMQUFBQUFBU0FCSUFBQUl6bEkrcHl3Y1BtM21oV2drQ3NqQk92VmtpbUVsRzlabENCbFhkKzJYampMS2c1R3FvZVpYcXZzT1FYSy9palVaVEtWVUZBRHM9IiwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRWdBU0FLRUNBSmVYbDdHdnJmLy8vLy8vL3lINUJBRUtBQUlBTEFBQUFBQVNBQklBQUFJd2xJK3B5d2NQbTNtaFdna0NzakJPdlZraW1FbEc5WmxDdVlJWTZUWXMrNmJtSERPNGlnZmREM0dOaGhlVjBWUUFBRHM9IiksdGhpcy5jdXRJbWc9bmV3IEFycmF5KDAsMCwwKSx0aGlzLmN1dEltYWdlPSJidXRfY3V0LmdpZiIsZGh4NC5fZXZlbnRhYmxlKHRoaXMpLHRoaXMuaHRtbE5vZGU9bmV3IGRodG1sWFRyZWVJdGVtT2JqZWN0KHRoaXMucm9vdElkLCIiLDAsdGhpcyksdGhpcy5odG1sTm9kZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0uc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5odG1sTm9kZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5jbGFzc05hbWU9ImhpZGRlblJvdyIsdGhpcy5hbGxUcmVlPXRoaXMuX2NyZWF0ZVNlbGYoKSx0aGlzLmFsbFRyZWUuYXBwZW5kQ2hpbGQodGhpcy5odG1sTm9kZS5odG1sTm9kZSksZGh0bWx4LiRjdXN0b21TY3JvbGwmJmRodG1seC5DdXN0b21TY3JvbGwuZW5hYmxlKHRoaXMpLF9pc0ZGJiYodGhpcy5hbGxUcmVlLmNoaWxkTm9kZXNbMF0ud2lkdGg9IjEwMCUiLHRoaXMuYWxsVHJlZS5jaGlsZE5vZGVzWzBdLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKTt2YXIgcj10aGlzO2lmKHRoaXMuYWxsVHJlZS5vbnNlbGVjdHN0YXJ0PW5ldyBGdW5jdGlvbigicmV0dXJuIGZhbHNlOyIpLF9pc01hY09TJiYodGhpcy5hbGxUcmVlLm9uY29udGV4dG1lbnU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuX2RvQ29udENsaWNrKGV8fHdpbmRvdy5ldmVudCwhMCl9KSx0aGlzLmFsbFRyZWUub25tb3VzZWRvd249ZnVuY3Rpb24oZSl7cmV0dXJuIHIuX2RvQ29udENsaWNrKGV8fHdpbmRvdy5ldmVudCl9LHRoaXMuWE1MTG9hZGVyPXRoaXMuX3BhcnNlWE1MVHJlZSxfaXNJRSYmdGhpcy5wcmV2ZW50SUVDYXNoaW5nKCEwKSx0aGlzLnNlbGVjdGlvbkJhcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSx0aGlzLnNlbGVjdGlvbkJhci5jbGFzc05hbWU9InNlbGVjdGlvbkJhciIsdGhpcy5zZWxlY3Rpb25CYXIuaW5uZXJIVE1MPSImbmJzcDsiLHRoaXMuc2VsZWN0aW9uQmFyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuYWxsVHJlZS5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkJhciksd2luZG93LmFkZEV2ZW50TGlzdGVuZXImJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7dHJ5e3IuZGVzdHJ1Y3RvcigpfWNhdGNoKGUpe319LCExKSx3aW5kb3cuYXR0YWNoRXZlbnQmJndpbmRvdy5hdHRhY2hFdmVudCgib251bmxvYWQiLGZ1bmN0aW9uKCl7dHJ5e3IuZGVzdHJ1Y3RvcigpfWNhdGNoKGUpe319KSx0aGlzLnNldEltYWdlc1BhdGg9dGhpcy5zZXRJbWFnZVBhdGgsdGhpcy5zZXRJY29uc1BhdGg9dGhpcy5zZXRJY29uUGF0aCx0aGlzLnNldFNraW4oIm1hdGVyaWFsIiksZGh0bWx4LmltYWdlX3BhdGgpe3ZhciBsPWRodG1seC5pbWFnZV9wYXRoLHM9dGhpcy5wYXJlbnRPYmplY3QuY2xhc3NOYW1lLm1hdGNoKC9kaHh0cmVlX2RoeF8oW2Etel9dKikvaSk7bnVsbCE9cyYmbnVsbCE9c1sxXSYmKGwrPSJkaHh0cmVlXyIrc1sxXSsiLyIpLHRoaXMuc2V0SW1hZ2VQYXRoKGwpfXJldHVybiB0aGlzfWZ1bmN0aW9uIGNPYmplY3QoKXtyZXR1cm4gdGhpc31mdW5jdGlvbiBkaHRtbFhUcmVlSXRlbU9iamVjdChlLHQsaSxuLG8scil7cmV0dXJuIHRoaXMuaHRtbE5vZGU9IiIsdGhpcy5hY29sb3I9IiIsdGhpcy5zY29sb3I9IiIsdGhpcy50cj0wLHRoaXMuY2hpbGRzQ291bnQ9MCx0aGlzLnRlbXBET01NPTAsdGhpcy50ZW1wRE9NVT0wLHRoaXMuZHJhZ1NwYW49MCx0aGlzLmRyYWdNb3ZlPTAsdGhpcy5zcGFuPTAsdGhpcy5jbG9zZWJsZT0xLHRoaXMuY2hpbGROb2Rlcz1uZXcgQXJyYXksdGhpcy51c2VyRGF0YT1uZXcgY09iamVjdCx0aGlzLmNoZWNrc3RhdGU9MCx0aGlzLnRyZWVOb2Q9bix0aGlzLmxhYmVsPXQsdGhpcy5wYXJlbnRPYmplY3Q9aSx0aGlzLmFjdGlvbkhhbmRsZXI9byx0aGlzLmltYWdlcz1uZXcgQXJyYXkobi5pbWFnZUFycmF5WzBdLG4uaW1hZ2VBcnJheVsxXSxuLmltYWdlQXJyYXlbMl0pLHRoaXMuaWQ9bi5fZ2xvYmFsSWRTdG9yYWdlQWRkKGUsdGhpcyksdGhpcy50cmVlTm9kLmNoZWNrQm94T2ZmP3RoaXMuaHRtbE5vZGU9dGhpcy50cmVlTm9kLl9jcmVhdGVJdGVtKDEsdGhpcyxyKTp0aGlzLmh0bWxOb2RlPXRoaXMudHJlZU5vZC5fY3JlYXRlSXRlbSgwLHRoaXMsciksdGhpcy5odG1sTm9kZS5vYmpCZWxvbmc9dGhpcyx0aGlzfWZ1bmN0aW9uIGpzb25Qb2ludGVyKGUsdCl7dGhpcy5kPWUsdGhpcy5kcD10fWZ1bmN0aW9uIGRoeF9pbml0X3RyZWVzKCl7Zm9yKHZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkaXYiKSx0PTA7dDxlLmxlbmd0aDt0KyspImRodG1seFRyZWUiPT1lW3RdLmNsYXNzTmFtZSYmZGh0bWxYVHJlZUZyb21IVE1MKGVbdF0pfXZhciBibGFua19iYXNlNjQ9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVnQVNBSUFBQVAvLy8vLy8veUg1QkFVVUFBRUFMQUFBQUFBU0FCSUFBQUlQakkrcHkrMFBvNXkwMm91ejNwd1hBRHM9IjsidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdy5kaHgmJih3aW5kb3cuZGh4PXdpbmRvdy5kaHg0PXt2ZXJzaW9uOiI1LjAiLHNraW46bnVsbCxsYXN0SWQ6MSxuZXdJZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhc3RJZCsrfSx6aW06e2RhdGE6e30sc3RlcDo1LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIDEwMH0sbGFzdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZmlyc3QoKTtmb3IodmFyIHQgaW4gdGhpcy5kYXRhKWU9TWF0aC5tYXgoZSx0aGlzLmRhdGFbdF0pO3JldHVybiBlfSxyZXNlcnZlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRhdGFbZV09dGhpcy5sYXN0KCkrdGhpcy5zdGVwLHRoaXMuZGF0YVtlXX0sY2xlYXI6ZnVuY3Rpb24oZSl7bnVsbCE9dGhpcy5kYXRhW2VdJiYodGhpcy5kYXRhW2VdPW51bGwsZGVsZXRlIHRoaXMuZGF0YVtlXSl9fSxzMmI6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYoZT1lLnRvTG93ZXJDYXNlKCkpLDE9PWV8fDE9PWV8fCJ0cnVlIj09ZXx8IjEiPT1lfHwieWVzIj09ZXx8InkiPT1lfHwib24iPT1lfSxzMmo6ZnVuY3Rpb24ocyl7dmFyIG9iaj1udWxsO2RoeDQudGVtcD1udWxsO3RyeXtldmFsKCJkaHg0LnRlbXA9IitzKX1jYXRjaChlKXtkaHg0LnRlbXA9bnVsbH1yZXR1cm4gb2JqPWRoeDQudGVtcCxkaHg0LnRlbXA9bnVsbCxvYmp9LGFic0xlZnQ6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYoZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSksdGhpcy5nZXRPZmZzZXQoZSkubGVmdH0sYWJzVG9wOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmKGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSkpLHRoaXMuZ2V0T2Zmc2V0KGUpLnRvcH0sX2FPZnM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsaT0wO2U7KXQrPXBhcnNlSW50KGUub2Zmc2V0VG9wKSxpKz1wYXJzZUludChlLm9mZnNldExlZnQpLGU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJue3RvcDp0LGxlZnQ6aX19LF9hT2ZzUmVjdDpmdW5jdGlvbihlKXt2YXIgdD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9ZG9jdW1lbnQuYm9keSxuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxvPXdpbmRvdy5wYWdlWU9mZnNldHx8bi5zY3JvbGxUb3B8fGkuc2Nyb2xsVG9wLHI9d2luZG93LnBhZ2VYT2Zmc2V0fHxuLnNjcm9sbExlZnR8fGkuc2Nyb2xsTGVmdCxsPW4uY2xpZW50VG9wfHxpLmNsaWVudFRvcHx8MCxzPW4uY2xpZW50TGVmdHx8aS5jbGllbnRMZWZ0fHwwLGE9dC50b3Arby1sLGQ9dC5sZWZ0K3ItcztyZXR1cm57dG9wOk1hdGgucm91bmQoYSksbGVmdDpNYXRoLnJvdW5kKGQpfX0sZ2V0T2Zmc2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdD90aGlzLl9hT2ZzUmVjdChlKTp0aGlzLl9hT2ZzKGUpfSxfaXNPYmo6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJiJvYmplY3QiPT10eXBlb2YgZSYmInVuZGVmaW5lZCI9PXR5cGVvZiBlLmxlbmd0aH0sX2NvcHlPYmo6ZnVuY3Rpb24oZSl7aWYodGhpcy5faXNPYmooZSkpe3ZhciB0PXt9O2Zvcih2YXIgaSBpbiBlKSJvYmplY3QiPT10eXBlb2YgZVtpXSYmbnVsbCE9ZVtpXT90W2ldPXRoaXMuX2NvcHlPYmooZVtpXSk6dFtpXT1lW2ldfWVsc2UgZm9yKHZhciB0PVtdLGk9MDtpPGUubGVuZ3RoO2krKykib2JqZWN0Ij09dHlwZW9mIGVbaV0mJm51bGwhPWVbaV0/dFtpXT10aGlzLl9jb3B5T2JqKGVbaV0pOnRbaV09ZVtpXTtyZXR1cm4gdH19LHdpbmRvdy5kaHg0LmlzSUU9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIik+PTB8fG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiVHJpZGVudCIpPj0wLHdpbmRvdy5kaHg0LmlzSUU2PW51bGw9PXdpbmRvdy5YTUxIdHRwUmVxdWVzdCYmbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIik+PTAsd2luZG93LmRoeDQuaXNJRTc9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIDcuMCIpPj0wJiZuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIlRyaWRlbnQiKTwwLHdpbmRvdy5kaHg0LmlzSUU4PW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTVNJRSA4LjAiKT49MCYmbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJUcmlkZW50Iik+PTAsd2luZG93LmRoeDQuaXNJRTk9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIDkuMCIpPj0wJiZuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIlRyaWRlbnQiKT49MCx3aW5kb3cuZGh4NC5pc0lFMTA9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIDEwLjAiKT49MCYmbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJUcmlkZW50Iik+PTAmJjEhPXdpbmRvdy5uYXZpZ2F0b3IucG9pbnRlckVuYWJsZWQsd2luZG93LmRoeDQuaXNJRTExPW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiVHJpZGVudCIpPj0wJiYxPT13aW5kb3cubmF2aWdhdG9yLnBvaW50ZXJFbmFibGVkLHdpbmRvdy5kaHg0LmlzRWRnZT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkVkZ2UiKT49MCx3aW5kb3cuZGh4NC5pc09wZXJhPW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiT3BlcmEiKT49MCx3aW5kb3cuZGh4NC5pc0Nocm9tZT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkNocm9tZSIpPj0wJiYhd2luZG93LmRoeDQuaXNFZGdlLHdpbmRvdy5kaHg0LmlzS0hUTUw9KG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiU2FmYXJpIik+PTB8fG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiS29ucXVlcm9yIik+PTApJiYhd2luZG93LmRoeDQuaXNFZGdlLHdpbmRvdy5kaHg0LmlzRkY9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94Iik+PTAsd2luZG93LmRoeDQuaXNJUGFkPW5hdmlnYXRvci51c2VyQWdlbnQuc2VhcmNoKC9pUGFkL2dpKT49MCx3aW5kb3cuZGh4NC5kbmQ9e2V2czp7fSxwX2VuOih3aW5kb3cuZGh4NC5pc0lFfHx3aW5kb3cuZGh4NC5pc0VkZ2UpJiYod2luZG93Lm5hdmlnYXRvci5wb2ludGVyRW5hYmxlZHx8d2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKSxfbVRvdWNoOmZ1bmN0aW9uKGUpe3JldHVybiB3aW5kb3cuZGh4NC5pc0lFMTAmJmUucG9pbnRlclR5cGU9PWUuTVNQT0lOVEVSX1RZUEVfTU9VU0V8fHdpbmRvdy5kaHg0LmlzSUUxMSYmIm1vdXNlIj09ZS5wb2ludGVyVHlwZXx8d2luZG93LmRoeDQuaXNFZGdlJiYibW91c2UiPT1lLnBvaW50ZXJUeXBlfSxfdG91Y2hPbjpmdW5jdGlvbihlKXtudWxsPT1lJiYoZT1kb2N1bWVudC5ib2R5KSxlLnN0eWxlLnRvdWNoQWN0aW9uPWUuc3R5bGUubXNUb3VjaEFjdGlvbj0iIixlPW51bGx9LF90b3VjaE9mZjpmdW5jdGlvbihlKXtudWxsPT1lJiYoZT1kb2N1bWVudC5ib2R5KSxlLnN0eWxlLnRvdWNoQWN0aW9uPWUuc3R5bGUubXNUb3VjaEFjdGlvbj0ibm9uZSIsZT1udWxsfX0sMT09d2luZG93Lm5hdmlnYXRvci5wb2ludGVyRW5hYmxlZD93aW5kb3cuZGh4NC5kbmQuZXZzPXtzdGFydDoicG9pbnRlcmRvd24iLG1vdmU6InBvaW50ZXJtb3ZlIixlbmQ6InBvaW50ZXJ1cCJ9OjE9PXdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZD93aW5kb3cuZGh4NC5kbmQuZXZzPXtzdGFydDoiTVNQb2ludGVyRG93biIsbW92ZToiTVNQb2ludGVyTW92ZSIsZW5kOiJNU1BvaW50ZXJVcCJ9OiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LmFkZEV2ZW50TGlzdGVuZXImJih3aW5kb3cuZGh4NC5kbmQuZXZzPXtzdGFydDoidG91Y2hzdGFydCIsbW92ZToidG91Y2htb3ZlIixlbmQ6InRvdWNoZW5kIn0pKSwidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdy5kaHg0Ll9ldmVudGFibGUmJih3aW5kb3cuZGh4NC5fZXZlbnRhYmxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuImNsZWFyIj09dD8oZS5kZXRhY2hBbGxFdmVudHMoKSxlLmRoeGV2cz1udWxsLGUuYXR0YWNoRXZlbnQ9bnVsbCxlLmRldGFjaEV2ZW50PW51bGwsZS5jaGVja0V2ZW50PW51bGwsZS5jYWxsRXZlbnQ9bnVsbCxlLmRldGFjaEFsbEV2ZW50cz1udWxsLHZvaWQoZT1udWxsKSk6KGUuZGh4ZXZzPXtkYXRhOnt9fSxlLmF0dGFjaEV2ZW50PWZ1bmN0aW9uKGUsdCl7ZT1TdHJpbmcoZSkudG9Mb3dlckNhc2UoKSx0aGlzLmRoeGV2cy5kYXRhW2VdfHwodGhpcy5kaHhldnMuZGF0YVtlXT17fSk7dmFyIGk9d2luZG93LmRoeDQubmV3SWQoKTtyZXR1cm4gdGhpcy5kaHhldnMuZGF0YVtlXVtpXT10LGl9LGUuZGV0YWNoRXZlbnQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMuZGh4ZXZzLmRhdGEpe3ZhciBpPTA7Zm9yKHZhciBuIGluIHRoaXMuZGh4ZXZzLmRhdGFbdF0pbj09ZT8odGhpcy5kaHhldnMuZGF0YVt0XVtuXT1udWxsLGRlbGV0ZSB0aGlzLmRoeGV2cy5kYXRhW3RdW25dKTppKys7MD09aSYmKHRoaXMuZGh4ZXZzLmRhdGFbdF09bnVsbCxkZWxldGUgdGhpcy5kaHhldnMuZGF0YVt0XSl9fSxlLmNoZWNrRXZlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9U3RyaW5nKGUpLnRvTG93ZXJDYXNlKCksbnVsbCE9dGhpcy5kaHhldnMuZGF0YVtlXX0sZS5jYWxsRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZihlPVN0cmluZyhlKS50b0xvd2VyQ2FzZSgpLG51bGw9PXRoaXMuZGh4ZXZzLmRhdGFbZV0pcmV0dXJuITA7dmFyIGk9ITA7Zm9yKHZhciBuIGluIHRoaXMuZGh4ZXZzLmRhdGFbZV0paT10aGlzLmRoeGV2cy5kYXRhW2VdW25dLmFwcGx5KHRoaXMsdCkmJmk7cmV0dXJuIGl9LGUuZGV0YWNoQWxsRXZlbnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuZGh4ZXZzLmRhdGEpe2Zvcih2YXIgdCBpbiB0aGlzLmRoeGV2cy5kYXRhW2VdKXRoaXMuZGh4ZXZzLmRhdGFbZV1bdF09bnVsbCxkZWxldGUgdGhpcy5kaHhldnMuZGF0YVtlXVt0XTt0aGlzLmRoeGV2cy5kYXRhW2VdPW51bGwsZGVsZXRlIHRoaXMuZGh4ZXZzLmRhdGFbZV19fSx2b2lkKGU9bnVsbCkpfSxkaHg0Ll9ldmVudGFibGUoZGh4NCkpLCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93LmRodG1seCYmKHdpbmRvdy5kaHRtbHg9e2V4dGVuZDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgaSBpbiB0KWVbaV18fChlW2ldPXRbaV0pO3JldHVybiBlfSxleHRlbmRfYXBpOmZ1bmN0aW9uKGUsdCxpKXt2YXIgbj13aW5kb3dbZV07biYmKHdpbmRvd1tlXT1mdW5jdGlvbihlKXtpZihlJiYib2JqZWN0Ij09dHlwZW9mIGUmJiFlLnRhZ05hbWUpe3ZhciBpPW4uYXBwbHkodGhpcyx0Ll9pbml0P3QuX2luaXQoZSk6YXJndW1lbnRzKTtmb3IodmFyIG8gaW4gZGh0bWx4KXRbb10mJnRoaXNbdFtvXV0oZGh0bWx4W29dKTtmb3IodmFyIG8gaW4gZSl0W29dP3RoaXNbdFtvXV0oZVtvXSk6MD09PW8uaW5kZXhPZigib24iKSYmdGhpcy5hdHRhY2hFdmVudChvLGVbb10pfWVsc2UgdmFyIGk9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHQuX3BhdGNoJiZ0Ll9wYXRjaCh0aGlzKSxpfHx0aGlzfSx3aW5kb3dbZV0ucHJvdG90eXBlPW4ucHJvdG90eXBlLGkmJmRodG1seC5leHRlbmQod2luZG93W2VdLnByb3RvdHlwZSxpKSl9LHVybDpmdW5jdGlvbihlKXtyZXR1cm4tMSE9ZS5pbmRleE9mKCI/Iik/IiYiOiI/In19KSxfaXNGRj0hMSxfaXNJRT0hMSxfaXNPcGVyYT0hMSxfaXNLSFRNTD0hMSxfaXNNYWNPUz0hMSxfaXNDaHJvbWU9ITEsX0ZGcnY9ITEsX0tIVE1McnY9ITEsX09wZXJhUnY9ITEsLTEhPW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTWFjaW50b3NoIikmJihfaXNNYWNPUz0hMCksbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImNocm9tZSIpPi0xJiYoX2lzQ2hyb21lPSEwKSwtMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJTYWZhcmkiKXx8LTEhPW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiS29ucXVlcm9yIik/KF9LSFRNTHJ2PXBhcnNlRmxvYXQobmF2aWdhdG9yLnVzZXJBZ2VudC5zdWJzdHIobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJTYWZhcmkiKSs3LDUpKSxfS0hUTUxydj41MjU/KF9pc0ZGPSEwLF9GRnJ2PTEuOSk6X2lzS0hUTUw9ITApOi0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk9wZXJhIik/KF9pc09wZXJhPSEwLF9PcGVyYVJ2PXBhcnNlRmxvYXQobmF2aWdhdG9yLnVzZXJBZ2VudC5zdWJzdHIobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJPcGVyYSIpKzYsMykpKTotMSE9bmF2aWdhdG9yLmFwcE5hbWUuaW5kZXhPZigiTWljcm9zb2Z0Iik/KF9pc0lFPSEwLCgtMSE9bmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZigiTVNJRSA4LjAiKXx8LTEhPW5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoIk1TSUUgOS4wIil8fC0xIT1uYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCJNU0lFIDEwLjAiKXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPjcpJiYiQmFja0NvbXBhdCIhPWRvY3VtZW50LmNvbXBhdE1vZGUmJihfaXNJRT04KSk6Ik5ldHNjYXBlIj09bmF2aWdhdG9yLmFwcE5hbWUmJi0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIlRyaWRlbnQiKT9faXNJRT04OihfaXNGRj0hMCxfRkZydj1wYXJzZUZsb2F0KG5hdmlnYXRvci51c2VyQWdlbnQuc3BsaXQoInJ2OiIpWzFdKSksInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3cuZGh0bWx4RXZlbnQsbnVsbD09ZGh0bWx4RXZlbnQudG91Y2hEZWxheSYmKGRodG1seEV2ZW50LnRvdWNoRGVsYXk9MmUzKSwidW5kZWZpbmVkIj09dHlwZW9mIGRodG1seEV2ZW50LmluaXRUb3VjaCYmKGRodG1seEV2ZW50LmluaXRUb3VjaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtpZihpKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFdmVudCgiSFRNTEV2ZW50cyIpO2UuaW5pdEV2ZW50KCJkYmxjbGljayIsITAsITApLGkuZGlzcGF0Y2hFdmVudChlKSx0PWk9bnVsbH19dmFyIHQsaSxuLG87ZGh0bWx4RXZlbnQoZG9jdW1lbnQuYm9keSwidG91Y2hzdGFydCIsZnVuY3Rpb24ocil7aT1yLnRvdWNoZXNbMF0udGFyZ2V0LG49ci50b3VjaGVzWzBdLmNsaWVudFgsbz1yLnRvdWNoZXNbMF0uY2xpZW50WSx0PXdpbmRvdy5zZXRUaW1lb3V0KGUsZGh0bWx4RXZlbnQudG91Y2hEZWxheSl9KSxkaHRtbHhFdmVudChkb2N1bWVudC5ib2R5LCJ0b3VjaG1vdmUiLGZ1bmN0aW9uKGUpe3QmJihNYXRoLmFicyhlLnRvdWNoZXNbMF0uY2xpZW50WC1uKT41MHx8TWF0aC5hYnMoZS50b3VjaGVzWzBdLmNsaWVudFktbyk+NTApJiYod2luZG93LmNsZWFyVGltZW91dCh0KSx0PWk9ITEpfSksZGh0bWx4RXZlbnQoZG9jdW1lbnQuYm9keSwidG91Y2hlbmQiLGZ1bmN0aW9uKGUpe3QmJih3aW5kb3cuY2xlYXJUaW1lb3V0KHQpLHQ9aT0hMSl9KSxkaHRtbHhFdmVudC5pbml0VG91Y2g9ZnVuY3Rpb24oKXt9fSksZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2RvQ29udENsaWNrPWZ1bmN0aW9uKGUsdCl7aWYoIXQmJjIhPWUuYnV0dG9uKXJldHVybiB0aGlzLl9hY01lbnUmJih0aGlzLl9hY01lbnUuaGlkZUNvbnRleHRNZW51P3RoaXMuX2FjTWVudS5oaWRlQ29udGV4dE1lbnUoKTp0aGlzLmNNZW51Ll9jb250ZXh0RW5kKCkpLCEwO2Zvcih2YXIgaT1faXNJRT9lLnNyY0VsZW1lbnQ6ZS50YXJnZXQ7aSYmIkJPRFkiIT1pLnRhZ05hbWUmJiFpLnBhcmVudE9iamVjdDspaT1pLnBhcmVudE5vZGU7aWYoIWl8fCFpLnBhcmVudE9iamVjdClyZXR1cm4hMDt2YXIgbj1pLnBhcmVudE9iamVjdDtpZih0aGlzLmNhbGxFdmVudCgib25SaWdodENsaWNrIixbbi5pZCxlXSl8fCgoZS5zcmNFbGVtZW50fHxlLnRhcmdldCkub25jb250ZXh0bWVudT1mdW5jdGlvbihlKXtyZXR1cm4oZXx8ZXZlbnQpLmNhbmNlbEJ1YmJsZT0hMCwhMX0pLHRoaXMuX2FjTWVudT1uLmNNZW51fHx0aGlzLmNNZW51LHRoaXMuX2FjTWVudSl7aWYoIXRoaXMuY2FsbEV2ZW50KCJvbkJlZm9yZUNvbnRleHRNZW51Iixbbi5pZF0pKXJldHVybiEwO2lmKF9pc01hY09TfHwoKGUuc3JjRWxlbWVudHx8ZS50YXJnZXQpLm9uY29udGV4dG1lbnU9ZnVuY3Rpb24oZSl7cmV0dXJuKGV8fGV2ZW50KS5jYW5jZWxCdWJibGU9ITAsITF9KSx0aGlzLl9hY01lbnUuc2hvd0NvbnRleHRNZW51KXt2YXIgbz13aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9d2luZG93LmRvY3VtZW50LmJvZHksbD1uZXcgQXJyYXkoby5zY3JvbGxMZWZ0fHxyLnNjcm9sbExlZnQsby5zY3JvbGxUb3B8fHIuc2Nyb2xsVG9wKTtpZihfaXNJRSl2YXIgcz1lLmNsaWVudFgrbFswXSxhPWUuY2xpZW50WStsWzFdO2Vsc2UgdmFyIHM9ZS5wYWdlWCxhPWUucGFnZVk7dGhpcy5fYWNNZW51LnNob3dDb250ZXh0TWVudShzLTEsYS0xKSx0aGlzLmNvbnRleHRJRD1uLmlkLGUuY2FuY2VsQnViYmxlPSEwLHRoaXMuX2FjTWVudS5fc2tpcF9oaWRlPSEwfWVsc2UgaS5jb250ZXh0TWVudUlkPW4uaWQsaS5jb250ZXh0TWVudT10aGlzLl9hY01lbnUsaS5hPXRoaXMuX2FjTWVudS5fY29udGV4dFN0YXJ0LGkuYShpLGUpLGkuYT1udWxsO3JldHVybiExfXJldHVybiEwfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5lbmFibGVJRUltYWdlRml4PWZ1bmN0aW9uKGUpe2U/KHRoaXMuX2dldEltZz1mdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO3JldHVybiBlLmlubmVySFRNTD0iJm5ic3A7IixlLmNsYXNzTmFtZT0iZGh4X2JnX2ltZ19maXgiLGV9LHRoaXMuX3NldFNyYz1mdW5jdGlvbihlLHQpe2Uuc3R5bGUuYmFja2dyb3VuZEltYWdlPSJ1cmwoIit0KyIpIn0sdGhpcy5fZ2V0U3JjPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc3R5bGUuYmFja2dyb3VuZEltYWdlO3JldHVybiB0LnN1YnN0cig0LHQubGVuZ3RoLTUpLnJlcGxhY2UoLyheIil8KCIkKS9nLCIiKX0pOih0aGlzLl9nZXRJbWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZT09dGhpcy5yb290SWQ/ImRpdiI6ImltZyIpfSx0aGlzLl9zZXRTcmM9ZnVuY3Rpb24oZSx0KXtlLnNyYz10fSx0aGlzLl9nZXRTcmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3JjfSl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLmRlc3RydWN0b3I9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5faWRwdWxsKXt2YXIgdD10aGlzLl9pZHB1bGxbZV07dCYmKHQucGFyZW50T2JqZWN0PW51bGwsdC50cmVlTm9kPW51bGwsdC5jaGlsZE5vZGVzPW51bGwsdC5zcGFuPW51bGwsdC50ci5ub2RlbT1udWxsLHQudHI9bnVsbCx0Lmh0bWxOb2RlLm9iakJlbG9uZz1udWxsLHQuaHRtbE5vZGU9bnVsbCx0aGlzLl9pZHB1bGxbZV09bnVsbCl9dGhpcy5wYXJlbnRPYmplY3QuaW5uZXJIVE1MPSIiLHRoaXMuYWxsVHJlZS5vbnNlbGVjdHN0YXJ0PW51bGwsdGhpcy5hbGxUcmVlLm9uY29udGV4dG1lbnU9bnVsbCx0aGlzLmFsbFRyZWUub25tb3VzZWRvd249bnVsbDtmb3IodmFyIGUgaW4gdGhpcyl0aGlzW2VdPW51bGx9LGNPYmplY3QucHJvdG90eXBlPW5ldyBPYmplY3QsY09iamVjdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZT10aGlzLG5ldyBlfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5fZ2xvYmFsSWRTdG9yYWdlQWRkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2dsb2JhbElkU3RvcmFnZUZpbmQoZSwxLDEpPyhlPWUrIl8iKyhuZXcgRGF0ZSkudmFsdWVPZigpLHRoaXMuX2dsb2JhbElkU3RvcmFnZUFkZChlLHQpKToodGhpcy5faWRwdWxsW2VdPXQsdGhpcy5fcHVsbFNpemUrKyxlKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2dsb2JhbElkU3RvcmFnZVN1Yj1mdW5jdGlvbihlKXt0aGlzLl9pZHB1bGxbZV0mJih0aGlzLl91bnNlbGVjdEl0ZW0odGhpcy5faWRwdWxsW2VdKSx0aGlzLl9pZHB1bGxbZV09bnVsbCx0aGlzLl9wdWxsU2l6ZS0tKSx0aGlzLl9sb2NrZXImJnRoaXMuX2xvY2tlcltlXSYmKHRoaXMuX2xvY2tlcltlXT0hMSl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl9nbG9iYWxJZFN0b3JhZ2VGaW5kPWZ1bmN0aW9uKGUsdCxpLG4pe3ZhciBvPXRoaXMuX2lkcHVsbFtlXTtpZihvKXtpZihvLnVuUGFyc2VkJiYhaSYmdGhpcy5yZVBhcnNlKG8sMCksdGhpcy5fc3JuZCYmIW8uaHRtbE5vZGUmJnRoaXMuX2J1aWxkU1JORChvLGkpLG4mJnRoaXMuX2Vkc2Jwc0EpZm9yKHZhciByPTA7cjx0aGlzLl9lZHNicHNBLmxlbmd0aDtyKyspaWYodGhpcy5fZWRzYnBzQVtyXVsyXT09ZSlyZXR1cm4gZGh4NC5jYWxsRXZlbnQoIm9uZ2V0SXRlbUVycm9yIixbIlJlcXVlc3RlZCBpdGVtIHN0aWxsIGluIHBhcnNpbmcgcHJvY2Vzcy4iLGVdKSxudWxsO3JldHVybiBvfXJldHVybiB0aGlzLnNsb3dQYXJzZSYmMCE9ZSYmIXQ/dGhpcy5wcmVQYXJzZShlKTpudWxsfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5fZHJhd05ld1RyPWZ1bmN0aW9uKGUsdCl7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIiksbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO3JldHVybiBuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgIikpLG8uY29sU3Bhbj0zLG8uYXBwZW5kQ2hpbGQoZSksaS5hcHBlbmRDaGlsZChuKSxpLmFwcGVuZENoaWxkKG8pLGl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKGUsdCxpKXtpZigic3RyaW5nIj09dHlwZW9mIHQmJihpPXQsdD1udWxsKSwianNvbiI9PT1pKXJldHVybiB0aGlzLl9sb2FkSlNPTk9iamVjdChlLHQpO2lmKCJjc3YiPT09aSlyZXR1cm4gdGhpcy5fbG9hZENTVlN0cmluZyhlLHQpO2lmKCJqc2FycmF5Ij09PWkpcmV0dXJuIHRoaXMuX2xvYWRKU0FycmF5KGUsdCk7dmFyIG49dGhpczt0aGlzLnBhcnNDb3VudHx8dGhpcy5jYWxsRXZlbnQoIm9uWExTIixbbixudWxsXSksdGhpcy54bWxzdGF0ZT0xLHRoaXMuWE1MTG9hZGVyKHtyZXNwb25zZVhNTDpkaHg0LmFqYXgucGFyc2UoZSl9LHQpfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5fYXR0YWNoQ2hpbGROb2RlPWZ1bmN0aW9uKGUsdCxpLG4sbyxyLGwscyxhLGQsaCl7ZCYmZC5wYXJlbnRPYmplY3QmJihlPWQucGFyZW50T2JqZWN0KSwwPT1lLlhNTGxvYWQmJnRoaXMuWE1Mc291cmNlJiYhdGhpcy5YTUxsb2FkaW5nV2FybmluZyYmKGUuWE1MbG9hZD0xLHRoaXMuX2xvYWREeW5YTUwoZS5pZCkpO3ZhciBjPWUuY2hpbGRzQ291bnQsdT1lLmNoaWxkTm9kZXM7aWYoaCYmaC50ci5wcmV2aW91c1NpYmxpbmcmJihoLnRyLnByZXZpb3VzU2libGluZy5wcmV2aW91c1NpYmxpbmc/ZD1oLnRyLnByZXZpb3VzU2libGluZy5ub2RlbTpzPXMucmVwbGFjZSgiVE9QIiwiIikrIixUT1AiKSxkKXt2YXIgcCxfO2ZvcihwPTA7Yz5wO3ArKylpZih1W3BdPT1kKXtmb3IoXz1jO18hPXA7Xy0tKXVbMStfXT11W19dO2JyZWFrfXArKyxjPXB9aWYocylmb3IodmFyIG09cy5zcGxpdCgiLCIpLGc9MDtnPG0ubGVuZ3RoO2crKylzd2l0Y2gobVtnXSl7Y2FzZSJUT1AiOmZvcihlLmNoaWxkc0NvdW50PjAmJihkPW5ldyBPYmplY3QsZC50cj1lLmNoaWxkTm9kZXNbMF0udHIucHJldmlvdXNTaWJsaW5nKSxlLl9oYXNfdG9wPSEwLHA9YztwPjA7cC0tKXVbcF09dVtwLTFdO2M9MH12YXIgZjsoZj10aGlzLl9pZHB1bGxbdF0pJiYtMT09Zi5zcGFufHwoZj11W2NdPW5ldyBkaHRtbFhUcmVlSXRlbU9iamVjdCh0LGksZSx0aGlzLG4sMSksdD11W2NdLmlkLGUuY2hpbGRzQ291bnQrKyksZi5odG1sTm9kZXx8KGYubGFiZWw9aSxmLmh0bWxOb2RlPXRoaXMuX2NyZWF0ZUl0ZW0odGhpcy5jaGVja0JveE9mZj8xOjAsZiksZi5odG1sTm9kZS5vYmpCZWxvbmc9ZiksbyYmKGYuaW1hZ2VzWzBdPW8pLHImJihmLmltYWdlc1sxXT1yKSxsJiYoZi5pbWFnZXNbMl09bCk7dmFyIGI9dGhpcy5fZHJhd05ld1RyKGYuaHRtbE5vZGUpO2lmKCh0aGlzLlhNTGxvYWRpbmdXYXJuaW5nfHx0aGlzLl9oQWRJKSYmKGYuaHRtbE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSxkJiZkLnRyJiZkLnRyLm5leHRTaWJsaW5nP2UuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5pbnNlcnRCZWZvcmUoYixkLnRyLm5leHRTaWJsaW5nKTp0aGlzLnBhcnNpbmdPbj09ZS5pZD90aGlzLnBhcnNlZEFycmF5W3RoaXMucGFyc2VkQXJyYXkubGVuZ3RoXT1iOmUuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5hcHBlbmRDaGlsZChiKSxkJiYhZC5zcGFuJiYoZD1udWxsKSx0aGlzLlhNTHNvdXJjZSYmKGEmJjAhPWE/Zi5YTUxsb2FkPTA6Zi5YTUxsb2FkPTEpLGYudHI9YixiLm5vZGVtPWYsMD09ZS5pdGVtSWQmJihiLmNoaWxkTm9kZXNbMF0uY2xhc3NOYW1lPSJoaWRkZW5Sb3ciKSwoZS5fcl9sb2dpY3x8dGhpcy5fZnJidHIpJiZ0aGlzLl9zZXRTcmMoZi5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLHRoaXMuaW1QYXRoK3RoaXMucmFkaW9BcnJheVswXSkscylmb3IodmFyIG09cy5zcGxpdCgiLCIpLGc9MDtnPG0ubGVuZ3RoO2crKylzd2l0Y2gobVtnXSl7Y2FzZSJTRUxFQ1QiOnRoaXMuc2VsZWN0SXRlbSh0LCExKTticmVhaztjYXNlIkNBTEwiOnRoaXMuc2VsZWN0SXRlbSh0LCEwKTticmVhaztjYXNlIkNISUxEIjpmLlhNTGxvYWQ9MDticmVhaztjYXNlIkNIRUNLRUQiOnRoaXMuWE1MbG9hZGluZ1dhcm5pbmc/dGhpcy5zZXRDaGVja0xpc3QrPXRoaXMuZGxtdHIrdDp0aGlzLnNldENoZWNrKHQsMSk7YnJlYWs7Y2FzZSJIQ0hFQ0tFRCI6dGhpcy5fc2V0Q2hlY2soZiwidW5zdXJlIik7YnJlYWs7Y2FzZSJPUEVOIjpmLm9wZW5NZT0xfWlmKCF0aGlzLlhNTGxvYWRpbmdXYXJuaW5nJiYodGhpcy5fZ2V0T3BlblN0YXRlKGUpPDAmJiF0aGlzLl9oQWRJJiZ0aGlzLm9wZW5JdGVtKGUuaWQpLGQmJih0aGlzLl9jb3JyZWN0UGx1cyhkKSx0aGlzLl9jb3JyZWN0TGluZShkKSksdGhpcy5fY29ycmVjdFBsdXMoZSksdGhpcy5fY29ycmVjdExpbmUoZSksdGhpcy5fY29ycmVjdFBsdXMoZiksZS5jaGlsZHNDb3VudD49MiYmKHRoaXMuX2NvcnJlY3RQbHVzKHVbZS5jaGlsZHNDb3VudC0yXSksdGhpcy5fY29ycmVjdExpbmUodVtlLmNoaWxkc0NvdW50LTJdKSksMiE9ZS5jaGlsZHNDb3VudCYmdGhpcy5fY29ycmVjdFBsdXModVswXSksdGhpcy50c2NoZWNrJiZ0aGlzLl9jb3JyZWN0Q2hlY2tTdGF0ZXMoZSksdGhpcy5fb25yYWRoKSlpZigxPT10aGlzLnhtbHN0YXRlKXt2YXIgdj10aGlzLm9uWExFO3RoaXMub25YTEU9ZnVuY3Rpb24oZSl7dGhpcy5fb25yYWRoKHQpLHYmJnYoZSl9fWVsc2UgdGhpcy5fb25yYWRoKHQpO3JldHVybiBmfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5fcGFyc2VJdGVtPWZ1bmN0aW9uKGUsdCxpLG4pe3ZhciBvO2lmKHRoaXMuX3NybmQmJighdGhpcy5faWRwdWxsW289ZS5nZXQoImlkIildfHwhdGhpcy5faWRwdWxsW29dLnNwYW4pKXJldHVybiB2b2lkIHRoaXMuX2FkZEl0ZW1TUk5EKHQuaWQsbyxlKTt2YXIgcj1lLmdldF9hbGwoKTtpZigib2JqZWN0Ij09dHlwZW9mIHRoaXMud2FpdFVwZGF0ZVhNTCYmIXRoaXMud2FpdFVwZGF0ZVhNTFtyLmlkXSlyZXR1cm4gdm9pZCB0aGlzLl9wYXJzZShlLHIuaWQsMSk7bnVsbCE9PXIudGV4dCYmInVuZGVmaW5lZCIhPXR5cGVvZiByLnRleHR8fChyLnRleHQ9ZS5zdWIoIml0ZW10ZXh0Iiksci50ZXh0JiYoci50ZXh0PXIudGV4dC5jb250ZW50KCkpKTt2YXIgbD1bXTtpZihyLnNlbGVjdCYmbC5wdXNoKCJTRUxFQ1QiKSxyLnRvcCYmbC5wdXNoKCJUT1AiKSxyLmNhbGwmJih0aGlzLm5vZGVBc2tpbmdDYWxsPXIuaWQpLC0xPT1yLmNoZWNrZWQ/bC5wdXNoKCJIQ0hFQ0tFRCIpOnIuY2hlY2tlZCYmbC5wdXNoKCJDSEVDS0VEIiksci5vcGVuJiZsLnB1c2goIk9QRU4iKSx0aGlzLndhaXRVcGRhdGVYTUwpaWYodGhpcy5fZ2xvYmFsSWRTdG9yYWdlRmluZChyLmlkKSl2YXIgcz10aGlzLnVwZGF0ZUl0ZW0oci5pZCxyLnRleHQsci5pbTAsci5pbTEsci5pbTIsci5jaGVja2VkLHIuY2hpbGQpO2Vsc2V7MD09dGhpcy5ucGw/bC5wdXNoKCJUT1AiKTppPXQuY2hpbGROb2Rlc1t0aGlzLm5wbF07dmFyIHM9dGhpcy5fYXR0YWNoQ2hpbGROb2RlKHQsci5pZCxyLnRleHQsMCxyLmltMCxyLmltMSxyLmltMixsLmpvaW4oIiwiKSxyLmNoaWxkLDAsaSk7ci5pZD1zLmlkLGk9bnVsbH1lbHNlIHZhciBzPXRoaXMuX2F0dGFjaENoaWxkTm9kZSh0LHIuaWQsci50ZXh0LDAsci5pbTAsci5pbTEsci5pbTIsbC5qb2luKCIsIiksci5jaGlsZCxufHwwLGkpO2lmKHIudG9vbHRpcCYmKHMuc3Bhbi5wYXJlbnROb2RlLnBhcmVudE5vZGUudGl0bGU9ci50b29sdGlwKSxyLnN0eWxlJiYocy5zcGFuLnN0eWxlLmNzc1RleHQ/cy5zcGFuLnN0eWxlLmNzc1RleHQrPSI7IityLnN0eWxlOnMuc3Bhbi5zZXRBdHRyaWJ1dGUoInN0eWxlIixzLnNwYW4uZ2V0QXR0cmlidXRlKCJzdHlsZSIpKyI7ICIrci5zdHlsZSkpLHIucmFkaW8mJihzLl9yX2xvZ2ljPSEwKSxyLm5vY2hlY2tib3gpe3ZhciBhPXMuc3Bhbi5wYXJlbnROb2RlLnByZXZpb3VzU2libGluZy5wcmV2aW91c1NpYmxpbmc7YS5zdHlsZS5kaXNwbGF5PSJub25lIixzLm5vY2hlY2tib3g9ITB9ci5kaXNhYmxlZCYmKG51bGwhPXIuY2hlY2tlZCYmdGhpcy5fc2V0Q2hlY2socyxyLmNoZWNrZWQpLHRoaXMuZGlzYWJsZUNoZWNrYm94KHMsMSkpLHMuX2FjYz1yLmNoaWxkfHwwLHRoaXMucGFyc2VyRXh0ZW5zaW9uJiZ0aGlzLnBhcnNlckV4dGVuc2lvbi5fcGFyc2VFeHRlbnNpb24uY2FsbCh0aGlzLGUscix0P3QuaWQ6MCksdGhpcy5zZXRJdGVtQ29sb3IocyxyLmFDb2wsci5zQ29sKSwiMSI9PXIubG9ja2VkJiZ0aGlzLmxvY2tJdGVtKHMuaWQsITAsITApLChyLmltd2lkdGh8fHIuaW1oZWlnaHQpJiZ0aGlzLnNldEljb25TaXplKHIuaW13aWR0aCxyLmltaGVpZ2h0LHMpLCIwIiE9ci5jbG9zZWFibGUmJiIxIiE9ci5jbG9zZWFibGV8fHRoaXMuc2V0SXRlbUNsb3NlYWJsZShzLHIuY2xvc2VhYmxlKTt2YXIgZD0iIjtyLnRvcG9mZnNldCYmdGhpcy5zZXRJdGVtVG9wT2Zmc2V0KHMsci50b3BvZmZzZXQpLHRoaXMuc2xvd1BhcnNlJiYib2JqZWN0IiE9dHlwZW9mIHRoaXMud2FpdFVwZGF0ZVhNTD8oIXMuY2hpbGRzQ291bnQmJmUuc3ViX2V4aXN0cygiaXRlbSIpJiYocy51blBhcnNlZD1lLmNsb25lKCkpLGUuZWFjaCgidXNlcmRhdGEiLGZ1bmN0aW9uKGUpe3RoaXMuc2V0VXNlckRhdGEoci5pZCxlLmdldCgibmFtZSIpLGUuY29udGVudCgpKX0sdGhpcykpOmUuc3ViX2V4aXN0cygiaXRlbSIpJiYoZD10aGlzLl9wYXJzZShlLHIuaWQsMSkpLCIiIT1kJiYodGhpcy5ub2RlQXNraW5nQ2FsbD1kKSxlLmVhY2goInVzZXJkYXRhIixmdW5jdGlvbih0KXt0aGlzLnNldFVzZXJEYXRhKGUuZ2V0KCJpZCIpLHQuZ2V0KCJuYW1lIiksdC5jb250ZW50KCkpfSx0aGlzKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX3BhcnNlPWZ1bmN0aW9uKGUsdCxpLG4pe2lmKHRoaXMuX3NybmQmJiF0aGlzLnBhcmVudE9iamVjdC5vZmZzZXRIZWlnaHQpe3ZhciBvPXRoaXM7cmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5fcGFyc2UoZSx0LGksbil9LDEwMCl9aWYoZS5leGlzdHMoKSl7aWYodGhpcy5za2lwTG9jaz0hMCwhdCl7dD1lLmdldCgiaWQiKSx0aGlzLl9keW5EZWxldGVCcmFuY2hlc1t0XSYmKHRoaXMuZGVsZXRlQ2hpbGRJdGVtcyh0KSx0aGlzLl9keW5EZWxldGVCcmFuY2hlc1t0XS0tLHRoaXMuX2R5bkRlbGV0ZUJyYW5jaGVzW3RdfHxkZWxldGUgdGhpcy5fZHluRGVsZXRlQnJhbmNoZXNbdF0pO3ZhciByPWUuZ2V0KCJkaHhfc2VjdXJpdHkiKTtyJiYoZGh0bWx4LnNlY3VyaXR5X2tleT1yKSxlLmdldCgicmFkaW8iKSYmKHRoaXMuaHRtbE5vZGUuX3JfbG9naWM9ITApLHRoaXMucGFyc2luZ09uPXQsdGhpcy5wYXJzZWRBcnJheT1uZXcgQXJyYXksdGhpcy5zZXRDaGVja0xpc3Q9IiIsdGhpcy5ub2RlQXNraW5nQ2FsbD0iIn12YXIgbD10aGlzLl9nbG9iYWxJZFN0b3JhZ2VGaW5kKHQpO2lmKCFsKXJldHVybiBkaHg0LmNhbGxFdmVudCgib25EYXRhU3RydWN0dXJlRXJyb3IiLFsiWE1MIHJlZmVycyB0byBub3QgZXhpc3RpbmcgcGFyZW50Il0pO2lmKHRoaXMucGFyc0NvdW50PXRoaXMucGFyc0NvdW50P3RoaXMucGFyc0NvdW50KzE6MSx0aGlzLlhNTGxvYWRpbmdXYXJuaW5nPTEsIWwuY2hpbGRzQ291bnR8fG58fHRoaXMuX2Vkc2Jwc3x8bC5faGFzX3RvcCl2YXIgcz0wO2Vsc2UgdmFyIHM9MDtpZih0aGlzLm5wbD0wLGUuZWFjaCgiaXRlbSIsZnVuY3Rpb24obixvKXtyZXR1cm4gbC5YTUxsb2FkPTEsdGhpcy5fcGFyc2VJdGVtKG4sbCwwLHMpLHRoaXMuX2Vkc2JwcyYmdGhpcy5ucGw9PXRoaXMuX2Vkc2Jwc0M/KHRoaXMuX2Rpc3RyaWJ1dGVkU3RhcnQoZSxvKzEsdCxpLGwuY2hpbGRzQ291bnQpLC0xKTp2b2lkIHRoaXMubnBsKyt9LHRoaXMsbiksIWkpe2lmKGUuZWFjaCgidXNlcmRhdGEiLGZ1bmN0aW9uKHQpe3RoaXMuc2V0VXNlckRhdGEoZS5nZXQoImlkIiksdC5nZXQoIm5hbWUiKSx0LmNvbnRlbnQoKSl9LHRoaXMpLGwuWE1MbG9hZD0xLHRoaXMud2FpdFVwZGF0ZVhNTCl7dGhpcy53YWl0VXBkYXRlWE1MPSExO2Zvcih2YXIgYT1sLmNoaWxkc0NvdW50LTE7YT49MDthLS0pbC5jaGlsZE5vZGVzW2FdLl9kbWFyayYmdGhpcy5kZWxldGVJdGVtKGwuY2hpbGROb2Rlc1thXS5pZCl9Zm9yKHZhciBhPSh0aGlzLl9nbG9iYWxJZFN0b3JhZ2VGaW5kKHRoaXMucGFyc2luZ09uKSwwKTthPHRoaXMucGFyc2VkQXJyYXkubGVuZ3RoO2ErKylsLmh0bWxOb2RlLmNoaWxkTm9kZXNbMF0uYXBwZW5kQ2hpbGQodGhpcy5wYXJzZWRBcnJheVthXSk7dGhpcy5wYXJzZWRBcnJheT1bXSx0aGlzLmxhc3RMb2FkZWRYTUxJZD10LHRoaXMuWE1MbG9hZGluZ1dhcm5pbmc9MDtmb3IodmFyIGQ9dGhpcy5zZXRDaGVja0xpc3Quc3BsaXQodGhpcy5kbG10ciksaD0wO2g8ZC5sZW5ndGg7aCsrKWRbaF0mJnRoaXMuc2V0Q2hlY2soZFtoXSwxKTt0aGlzLlhNTHNvdXJjZSYmdGhpcy50c2NoZWNrJiZ0aGlzLnNtY2hlY2smJmwuaWQhPXRoaXMucm9vdElkJiYoMD09PWwuY2hlY2tzdGF0ZT90aGlzLl9zZXRTdWJDaGVja2VkKDAsbCk6MT09PWwuY2hlY2tzdGF0ZSYmdGhpcy5fc2V0U3ViQ2hlY2tlZCgxLGwpKSx0aGlzLl9yZWRyYXdGcm9tKHRoaXMsbnVsbCxuKSxlLmdldCgib3JkZXIiKSYmIm5vbmUiIT1lLmdldCgib3JkZXIiKSYmdGhpcy5fcmVvcmRlckJyYW5jaChsLGUuZ2V0KCJvcmRlciIpLCEwKSwiIiE9dGhpcy5ub2RlQXNraW5nQ2FsbCYmdGhpcy5jYWxsRXZlbnQoIm9uQ2xpY2siLFt0aGlzLm5vZGVBc2tpbmdDYWxsLHRoaXMuZ2V0U2VsZWN0ZWRJdGVtSWQoKV0pLHRoaXMuX2JyYW5jaFVwZGF0ZSYmdGhpcy5fYnJhbmNoVXBkYXRlTmV4dChlKX1pZigxPT10aGlzLnBhcnNDb3VudCl7aWYodGhpcy5wYXJzaW5nT249bnVsbCx0aGlzLl9zcm5kJiZsLmlkIT10aGlzLnJvb3RJZCYmKHRoaXMucHJlcGFyZVNSKGwuaWQpLHRoaXMuWE1Mc291cmNlJiZ0aGlzLm9wZW5JdGVtKGwuaWQpKSxlLnRocm91Z2goIml0ZW0iLCJvcGVuIixudWxsLGZ1bmN0aW9uKGUpe3RoaXMub3Blbkl0ZW0oZS5nZXQoImlkIikpfSx0aGlzKSwhdGhpcy5fZWRzYnBzfHwhdGhpcy5fZWRzYnBzQS5sZW5ndGgpe3ZhciBjPXRoaXM7d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmNhbGxFdmVudCgib25YTEUiLFtjLHRdKX0sMSksdGhpcy54bWxzdGF0ZT0wfXRoaXMuc2tpcExvY2s9ITF9dGhpcy5wYXJzQ291bnQtLTt2YXIgYz10aGlzO3JldHVybiB0aGlzLl9lZHNicHMmJndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5fZGlzdHJpYnV0ZWRTdGVwKHQpfSx0aGlzLl9lZHNicHNEKSwhaSYmdGhpcy5vblhMRSYmdGhpcy5vblhMRSh0aGlzLHQpLHRoaXMubm9kZUFza2luZ0NhbGx9fSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5fcmVkcmF3RnJvbT1mdW5jdGlvbihlLHQsaSxuKXtpZih0KW89dDtlbHNle3ZhciBvPWUuX2dsb2JhbElkU3RvcmFnZUZpbmQoZS5sYXN0TG9hZGVkWE1MSWQpO2lmKGUubGFzdExvYWRlZFhNTElkPS0xLCFvKXJldHVybiAwfWZvcih2YXIgcj0wLGw9aT9pLTE6MDtsPG8uY2hpbGRzQ291bnQ7bCsrKWlmKHRoaXMuX2JyYW5jaFVwZGF0ZSYmMSE9dGhpcy5fZ2V0T3BlblN0YXRlKG8pfHx0JiYxIT1ufHwoby5jaGlsZE5vZGVzW2xdLmh0bWxOb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5PSIiKSwxPT1vLmNoaWxkTm9kZXNbbF0ub3Blbk1lJiYodGhpcy5fb3Blbkl0ZW0oby5jaGlsZE5vZGVzW2xdKSxvLmNoaWxkTm9kZXNbbF0ub3Blbk1lPTApLGUuX3JlZHJhd0Zyb20oZSxvLmNoaWxkTm9kZXNbbF0pLG51bGwhPXRoaXMuY2hpbGRDYWxjKXtpZigoby5jaGlsZE5vZGVzW2xdLnVuUGFyc2VkfHwhby5jaGlsZE5vZGVzW2xdLlhNTGxvYWQmJnRoaXMuWE1Mc291cmNlKSYmKG8uY2hpbGROb2Rlc1tsXS5fYWNjP28uY2hpbGROb2Rlc1tsXS5zcGFuLmlubmVySFRNTD1vLmNoaWxkTm9kZXNbbF0ubGFiZWwrdGhpcy5odG1sY0Erby5jaGlsZE5vZGVzW2xdLl9hY2MrdGhpcy5odG1sY0I6by5jaGlsZE5vZGVzW2xdLnNwYW4uaW5uZXJIVE1MPW8uY2hpbGROb2Rlc1tsXS5sYWJlbCksby5jaGlsZE5vZGVzW2xdLmNoaWxkTm9kZXMubGVuZ3RoJiZ0aGlzLmNoaWxkQ2FsYyl7aWYoMT09dGhpcy5jaGlsZENhbGMmJihvLmNoaWxkTm9kZXNbbF0uc3Bhbi5pbm5lckhUTUw9by5jaGlsZE5vZGVzW2xdLmxhYmVsK3RoaXMuaHRtbGNBK28uY2hpbGROb2Rlc1tsXS5jaGlsZHNDb3VudCt0aGlzLmh0bWxjQiksMj09dGhpcy5jaGlsZENhbGMpe3ZhciBzPW8uY2hpbGROb2Rlc1tsXS5jaGlsZHNDb3VudC0oby5jaGlsZE5vZGVzW2xdLnB1cmVDaGlsZHN8fDApO3MmJihvLmNoaWxkTm9kZXNbbF0uc3Bhbi5pbm5lckhUTUw9by5jaGlsZE5vZGVzW2xdLmxhYmVsK3RoaXMuaHRtbGNBK3MrdGhpcy5odG1sY0IpLG8ucHVyZUNoaWxkcz9vLnB1cmVDaGlsZHMrKzpvLnB1cmVDaGlsZHM9MX1pZigzPT10aGlzLmNoaWxkQ2FsYyYmKG8uY2hpbGROb2Rlc1tsXS5zcGFuLmlubmVySFRNTD1vLmNoaWxkTm9kZXNbbF0ubGFiZWwrdGhpcy5odG1sY0Erby5jaGlsZE5vZGVzW2xdLl9hY2MrdGhpcy5odG1sY0IpLDQ9PXRoaXMuY2hpbGRDYWxjKXt2YXIgcz1vLmNoaWxkTm9kZXNbbF0uX2FjYztzJiYoby5jaGlsZE5vZGVzW2xdLnNwYW4uaW5uZXJIVE1MPW8uY2hpbGROb2Rlc1tsXS5sYWJlbCt0aGlzLmh0bWxjQStzK3RoaXMuaHRtbGNCKX19ZWxzZSA0PT10aGlzLmNoaWxkQ2FsYyYmcisrO3IrPW8uY2hpbGROb2Rlc1tsXS5fYWNjLDM9PXRoaXMuY2hpbGRDYWxjJiZyKyt9by51blBhcnNlZHx8IW8uWE1MbG9hZCYmdGhpcy5YTUxzb3VyY2V8fChvLl9hY2M9ciksZS5fY29ycmVjdExpbmUobyksZS5fY29ycmVjdFBsdXMobyksdGhpcy5jaGlsZENhbGMmJiF0JiZlLl9maXhDaGlsZENvdW50TGFiZWwobyl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl9jcmVhdGVTZWxmPWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuY2xhc3NOYW1lPSJjb250YWluZXJUYWJsZVN0eWxlIixlLnN0eWxlLndpZHRoPXRoaXMud2lkdGgsZS5zdHlsZS5oZWlnaHQ9dGhpcy5oZWlnaHQsdGhpcy5wYXJlbnRPYmplY3QuYXBwZW5kQ2hpbGQoZSksZX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX3hjbG9zZUFsbD1mdW5jdGlvbihlKXtpZighZS51blBhcnNlZCl7aWYodGhpcy5yb290SWQhPWUuaWQpe2lmKCFlLmh0bWxOb2RlKXJldHVybjtmb3IodmFyIHQ9ZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMsaT10Lmxlbmd0aCxuPTE7aT5uO24rKyl0W25dLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3RoaXMuX2NvcnJlY3RQbHVzKGUpfWZvcih2YXIgbj0wO248ZS5jaGlsZHNDb3VudDtuKyspZS5jaGlsZE5vZGVzW25dLmNoaWxkc0NvdW50JiZ0aGlzLl94Y2xvc2VBbGwoZS5jaGlsZE5vZGVzW25dKX19LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl94b3BlbkFsbD1mdW5jdGlvbihlKXt0aGlzLl9IaWRlU2hvdyhlLDIpO2Zvcih2YXIgdD0wO3Q8ZS5jaGlsZHNDb3VudDt0KyspdGhpcy5feG9wZW5BbGwoZS5jaGlsZE5vZGVzW3RdKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2NvcnJlY3RQbHVzPWZ1bmN0aW9uKGUpe2lmKGUuaHRtbE5vZGUpe3ZhciB0PWUuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0ubGFzdENoaWxkLGk9ZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1syXS5jaGlsZE5vZGVzWzBdLG49dGhpcy5saW5lQXJyYXk7aWYodGhpcy5YTUxzb3VyY2UmJiFlLlhNTGxvYWQpe3ZhciBuPXRoaXMucGx1c0FycmF5O2lmKHRoaXMuX3NldFNyYyhpLHRoaXMuaWNvblVSTCtlLmltYWdlc1syXSksdGhpcy5fdHh0aW1nKXJldHVybiB0LmlubmVySFRNTD0iWytdIn1lbHNlIGlmKGUuY2hpbGRzQ291bnR8fGUudW5QYXJzZWQpaWYoZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMV0mJiJub25lIiE9ZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMV0uc3R5bGUuZGlzcGxheSl7aWYoIWUud3NpZ24pdmFyIG49dGhpcy5taW51c0FycmF5O2lmKHRoaXMuX3NldFNyYyhpLHRoaXMuaWNvblVSTCtlLmltYWdlc1sxXSksdGhpcy5fdHh0aW1nKXJldHVybiB0LmlubmVySFRNTD0iWy1dIn1lbHNle2lmKCFlLndzaWduKXZhciBuPXRoaXMucGx1c0FycmF5O2lmKHRoaXMuX3NldFNyYyhpLHRoaXMuaWNvblVSTCtlLmltYWdlc1syXSksdGhpcy5fdHh0aW1nKXJldHVybiB0LmlubmVySFRNTD0iWytdIn1lbHNlIHRoaXMuX3NldFNyYyhpLHRoaXMuaWNvblVSTCtlLmltYWdlc1swXSk7dmFyIG89MjtlLnRyZWVOb2QudHJlZUxpbmVzT24/KGUucGFyZW50T2JqZWN0JiYobz10aGlzLl9nZXRDb3VudFN0YXR1cyhlLmlkLGUucGFyZW50T2JqZWN0KSksdGhpcy5fc2V0U3JjKHQsdGhpcy5pbVBhdGgrbltvXSkpOnRoaXMuX3NldFNyYyh0LHRoaXMuaW1QYXRoK25bM10pfX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2NvcnJlY3RMaW5lPWZ1bmN0aW9uKGUpe2lmKGUuaHRtbE5vZGUpe3ZhciB0PWUucGFyZW50T2JqZWN0O2lmKHQpaWYoMCE9dGhpcy5fZ2V0TGluZVN0YXR1cyhlLmlkLHQpJiZ0aGlzLnRyZWVMaW5lc09uKWZvcih2YXIgaT0xO2k8PWUuY2hpbGRzQ291bnQmJmUuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzW2ldO2krKyllLmh0bWxOb2RlLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1tpXS5jaGlsZE5vZGVzWzBdLnN0eWxlLmJhY2tncm91bmRJbWFnZT0idXJsKCIrdGhpcy5pbVBhdGgrdGhpcy5saW5lQXJyYXlbNV0rIikiLGUuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzW2ldLmNoaWxkTm9kZXNbMF0uc3R5bGUuYmFja2dyb3VuZFJlcGVhdD0icmVwZWF0LXkiO2Vsc2UgZm9yKHZhciBpPTE7aTw9ZS5jaGlsZHNDb3VudCYmZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbaV07aSsrKWUuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzW2ldLmNoaWxkTm9kZXNbMF0uc3R5bGUuYmFja2dyb3VuZEltYWdlPSIiLGUuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzW2ldLmNoaWxkTm9kZXNbMF0uc3R5bGUuYmFja2dyb3VuZFJlcGVhdD0iIn19LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl9nZXRMaW5lU3RhdHVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuY2hpbGROb2Rlc1t0LmNoaWxkc0NvdW50LTFdLmlkPT1lPzA6MX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX0hpZGVTaG93PWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX2xvY2tlcnx8dGhpcy5za2lwTG9ja3x8IXRoaXMuX2xvY2tlcltlLmlkXSl7aWYodGhpcy5YTUxzb3VyY2UmJiFlLlhNTGxvYWQpe2lmKDE9PXQpcmV0dXJuO3JldHVybiBlLlhNTGxvYWQ9MSx2b2lkIHRoaXMuX2xvYWREeW5YTUwoZS5pZCl9ZS51blBhcnNlZCYmdGhpcy5yZVBhcnNlKGUpO3ZhciBpPWUuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLG49aS5sZW5ndGg7aWYobj4xKXsibm9uZSI9PWlbMV0uc3R5bGUuZGlzcGxheSYmMSE9dHx8Mj09dD9ub2Rlc3R5bGU9IiI6KHRoaXMuYWxsVHJlZS5jaGlsZE5vZGVzWzBdLmJvcmRlcj0iMSIsdGhpcy5hbGxUcmVlLmNoaWxkTm9kZXNbMF0uYm9yZGVyPSIwIixub2Rlc3R5bGU9Im5vbmUiKTtmb3IodmFyIG89MTtuPm87bysrKWlbb10uc3R5bGUuZGlzcGxheT1ub2Rlc3R5bGV9dGhpcy5fY29ycmVjdFBsdXMoZSl9fSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5fZ2V0T3BlblN0YXRlPWZ1bmN0aW9uKGUpe2lmKCFlLmh0bWxOb2RlKXJldHVybiAwO3ZhciB0PWUuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzO3JldHVybiB0Lmxlbmd0aDw9MT8wOiJub25lIiE9dFsxXS5zdHlsZS5kaXNwbGF5PzE6LTF9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLm9uUm93Q2xpY2syPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnRPYmplY3QudHJlZU5vZDtyZXR1cm4gZS5jYWxsRXZlbnQoIm9uRGJsQ2xpY2siLFt0aGlzLnBhcmVudE9iamVjdC5pZCxlXSk/KHRoaXMucGFyZW50T2JqZWN0LmNsb3NlYmxlJiYiMCIhPXRoaXMucGFyZW50T2JqZWN0LmNsb3NlYmxlP2UuX0hpZGVTaG93KHRoaXMucGFyZW50T2JqZWN0KTplLl9IaWRlU2hvdyh0aGlzLnBhcmVudE9iamVjdCwyKSxlLmNoZWNrRXZlbnQoIm9uT3BlbkVuZCIpJiYoZS54bWxzdGF0ZT8oZS5fb2llX29uWExFLnB1c2goZS5vblhMRSksZS5vblhMRT1lLl9lcG5GSGUpOmUuY2FsbEV2ZW50KCJvbk9wZW5FbmQiLFt0aGlzLnBhcmVudE9iamVjdC5pZCxlLl9nZXRPcGVuU3RhdGUodGhpcy5wYXJlbnRPYmplY3QpXSkpLCExKTohMX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUub25Sb3dDbGljaz1mdW5jdGlvbigpe3ZhciBlPXRoaXMucGFyZW50T2JqZWN0LnRyZWVOb2Q7cmV0dXJuIGUuY2FsbEV2ZW50KCJvbk9wZW5TdGFydCIsW3RoaXMucGFyZW50T2JqZWN0LmlkLGUuX2dldE9wZW5TdGF0ZSh0aGlzLnBhcmVudE9iamVjdCldKT8odGhpcy5wYXJlbnRPYmplY3QuY2xvc2VibGUmJiIwIiE9dGhpcy5wYXJlbnRPYmplY3QuY2xvc2VibGU/ZS5fSGlkZVNob3codGhpcy5wYXJlbnRPYmplY3QpOmUuX0hpZGVTaG93KHRoaXMucGFyZW50T2JqZWN0LDIpLHZvaWQoZS5jaGVja0V2ZW50KCJvbk9wZW5FbmQiKSYmKGUueG1sc3RhdGU/KGUuX29pZV9vblhMRS5wdXNoKGUub25YTEUpLGUub25YTEU9ZS5fZXBuRkhlKTplLmNhbGxFdmVudCgib25PcGVuRW5kIixbdGhpcy5wYXJlbnRPYmplY3QuaWQsZS5fZ2V0T3BlblN0YXRlKHRoaXMucGFyZW50T2JqZWN0KV0pKSkpOjB9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLmdldFNlbGVjdGVkSXRlbUlkPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBBcnJheSx0PTA7dDx0aGlzLl9zZWxlY3RlZC5sZW5ndGg7dCsrKWVbdF09dGhpcy5fc2VsZWN0ZWRbdF0uaWQ7cmV0dXJuIGUuam9pbih0aGlzLmRsbXRyKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX3NlbGVjdEl0ZW09ZnVuY3Rpb24oZSx0KXtpZih0aGlzLmNoZWNrRXZlbnQoIm9uU2VsZWN0IikmJih0aGlzLl9vblNTQ0ZvbGQ9dGhpcy5nZXRTZWxlY3RlZEl0ZW1JZCgpKSx0aGlzLl9hbXNlbCYmdCYmKHQuY3RybEtleXx8dC5tZXRhS2V5fHx0LnNoaWZ0S2V5KXx8dGhpcy5fdW5zZWxlY3RJdGVtcygpLGUuaV9zZWwmJnRoaXMuX2Ftc2VsJiZ0JiYodC5jdHJsS2V5fHx0Lm1ldGFLZXkpKXRoaXMuX3Vuc2VsZWN0SXRlbShlKTtlbHNlIGlmKCEoZS5pX3NlbHx8dGhpcy5fYW1zZWxTJiYwIT10aGlzLl9zZWxlY3RlZC5sZW5ndGgmJnRoaXMuX3NlbGVjdGVkWzBdLnBhcmVudE9iamVjdCE9ZS5wYXJlbnRPYmplY3QpKWlmKHRoaXMuX2Ftc2VsJiZ0JiZ0LnNoaWZ0S2V5JiYwIT10aGlzLl9zZWxlY3RlZC5sZW5ndGgmJnRoaXMuX3NlbGVjdGVkW3RoaXMuX3NlbGVjdGVkLmxlbmd0aC0xXS5wYXJlbnRPYmplY3Q9PWUucGFyZW50T2JqZWN0KXt2YXIgaT10aGlzLl9nZXRJbmRleCh0aGlzLl9zZWxlY3RlZFt0aGlzLl9zZWxlY3RlZC5sZW5ndGgtMV0pLG49dGhpcy5fZ2V0SW5kZXgoZSk7aWYoaT5uKXt2YXIgbz1pO2k9bixuPW99Zm9yKHZhciByPWk7bj49cjtyKyspZS5wYXJlbnRPYmplY3QuY2hpbGROb2Rlc1tyXS5pX3NlbHx8dGhpcy5fbWFya0l0ZW0oZS5wYXJlbnRPYmplY3QuY2hpbGROb2Rlc1tyXSl9ZWxzZSB0aGlzLl9tYXJrSXRlbShlKTtpZih0aGlzLmNoZWNrRXZlbnQoIm9uU2VsZWN0Iikpe3ZhciBsPXRoaXMuZ2V0U2VsZWN0ZWRJdGVtSWQoKTtsIT10aGlzLl9vblNTQ0ZvbGQmJnRoaXMuY2FsbEV2ZW50KCJvblNlbGVjdCIsW2xdKX19LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl9tYXJrSXRlbT1mdW5jdGlvbihlKXtlLnNjb2xvciYmKGUuc3Bhbi5zdHlsZS5jb2xvcj1lLnNjb2xvciksZS5zcGFuLmNsYXNzTmFtZT0ic2VsZWN0ZWRUcmVlUm93IixlLnNwYW4ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNsYXNzTmFtZT0ic2VsZWN0ZWRUcmVlUm93RnVsbCIsZS5pX3NlbD0hMCx0aGlzLl9zZWxlY3RlZFt0aGlzLl9zZWxlY3RlZC5sZW5ndGhdPWV9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLmdldEluZGV4QnlJZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nbG9iYWxJZFN0b3JhZ2VGaW5kKGUpO3JldHVybiB0P3RoaXMuX2dldEluZGV4KHQpOm51bGx9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl9nZXRJbmRleD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5wYXJlbnRPYmplY3QsaT0wO2k8dC5jaGlsZHNDb3VudDtpKyspaWYodC5jaGlsZE5vZGVzW2ldPT1lKXJldHVybiBpfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5fdW5zZWxlY3RJdGVtPWZ1bmN0aW9uKGUpe2lmKGUmJmUuaV9zZWwpe2Uuc3Bhbi5jbGFzc05hbWU9InN0YW5kYXJ0VHJlZVJvdyIsZS5zcGFuLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jbGFzc05hbWU9IiIsZS5hY29sb3ImJihlLnNwYW4uc3R5bGUuY29sb3I9ZS5hY29sb3IpLGUuaV9zZWw9ITE7Zm9yKHZhciB0PTA7dDx0aGlzLl9zZWxlY3RlZC5sZW5ndGg7dCsrKWlmKCF0aGlzLl9zZWxlY3RlZFt0XS5pX3NlbCl7dGhpcy5fc2VsZWN0ZWQuc3BsaWNlKHQsMSk7YnJlYWt9fX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX3Vuc2VsZWN0SXRlbXM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuX3NlbGVjdGVkLmxlbmd0aDtlKyspe3ZhciB0PXRoaXMuX3NlbGVjdGVkW2VdO3Quc3Bhbi5jbGFzc05hbWU9InN0YW5kYXJ0VHJlZVJvdyIsdC5zcGFuLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jbGFzc05hbWU9IiIsdC5hY29sb3ImJih0LnNwYW4uc3R5bGUuY29sb3I9dC5hY29sb3IpLHQuaV9zZWw9ITF9dGhpcy5fc2VsZWN0ZWQ9bmV3IEFycmF5fSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5vblJvd1NlbGVjdD1mdW5jdGlvbihlLHQsaSl7ZT1lfHx3aW5kb3cuZXZlbnQ7dmFyIG49dGhpcy5wYXJlbnRPYmplY3Q7dCYmKG49dC5wYXJlbnRPYmplY3QpO3ZhciBvPW4udHJlZU5vZCxyPW8uZ2V0U2VsZWN0ZWRJdGVtSWQoKTtlJiZlLnNraXBVblNlbHx8by5fc2VsZWN0SXRlbShuLGUpLGl8fChuLmFjdGlvbkhhbmRsZXI/bi5hY3Rpb25IYW5kbGVyKG4uaWQscik6by5jYWxsRXZlbnQoIm9uQ2xpY2siLFtuLmlkLHJdKSl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl9jcmVhdGVJdGVtPWZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpO24uY2VsbFNwYWNpbmc9MCxuLmNlbGxQYWRkaW5nPTAsbi5ib3JkZXI9MCx0aGlzLmhmTW9kZSYmKG4uc3R5bGUudGFibGVMYXlvdXQ9ImZpeGVkIiksbi5zdHlsZS5tYXJnaW49MCxuLnN0eWxlLnBhZGRpbmc9MDt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSxsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7aWYobC5jbGFzc05hbWU9InN0YW5kYXJ0VHJlZUltYWdlIix0aGlzLl90eHRpbWcpe3ZhciBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuYXBwZW5kQ2hpbGQocykscy5jbGFzc05hbWU9ImRoeF90cmVlX3RleHRTaWduIn1lbHNle3ZhciBzPXRoaXMuX2dldEltZyh0LmlkKTtzLmJvcmRlcj0iMCIsIklNRyI9PXMudGFnTmFtZSYmKHMuYWxpZ249ImFic21pZGRsZSIpLGwuYXBwZW5kQ2hpbGQocykscy5zdHlsZS5wYWRkaW5nPTAscy5zdHlsZS5tYXJnaW49MCxzLnN0eWxlLndpZHRoPXRoaXMuZGVmX2xpbmVfaW1nX3h9dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKSxkPXRoaXMuX2dldEltZyh0aGlzLmNCUk9mP3RoaXMucm9vdElkOnQuaWQpO2QuY2hlY2tlZD0wLHRoaXMuX3NldFNyYyhkLHRoaXMuaW1QYXRoK3RoaXMuY2hlY2tBcnJheVswXSksZC5zdHlsZS53aWR0aD0iMThweCIsZC5zdHlsZS5oZWlnaHQ9IjE4cHgiLGV8fChhLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSxhLmFwcGVuZENoaWxkKGQpLHRoaXMuY0JST2Z8fCJJTUciIT1kLnRhZ05hbWV8fChkLmFsaWduPSJhYnNtaWRkbGUiKSxkLm9uY2xpY2s9dGhpcy5vbkNoZWNrQm94Q2xpY2ssZC50cmVlTm9kPXRoaXMsZC5wYXJlbnRPYmplY3Q9dCx3aW5kb3cuX0tIVE1McnY/YS53aWR0aD0iMTZweCI6YS53aWR0aD0iMjBweCI7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtoLmNsYXNzTmFtZT0ic3RhbmRhcnRUcmVlSW1hZ2UiO3ZhciBjPXRoaXMuX2dldEltZyh0aGlzLnRpbWdlbj90LmlkOnRoaXMucm9vdElkKTtjLm9ubW91c2Vkb3duPXRoaXMuX3ByZXZlbnROc0RyYWcsYy5vbmRyYWdzdGFydD10aGlzLl9wcmV2ZW50TnNEcmFnLGMuYm9yZGVyPSIwIix0aGlzLl9haW1ncyYmKGMucGFyZW50T2JqZWN0PXQsCiJJTUciPT1jLnRhZ05hbWUmJihjLmFsaWduPSJhYnNtaWRkbGUiKSxjLm9uY2xpY2s9dGhpcy5vblJvd1NlbGVjdCksaXx8dGhpcy5fc2V0U3JjKGMsdGhpcy5pY29uVVJMK3RoaXMuaW1hZ2VBcnJheVswXSksaC5hcHBlbmRDaGlsZChjKSxjLnN0eWxlLnBhZGRpbmc9MCxjLnN0eWxlLm1hcmdpbj0wLHRoaXMudGltZ2VuPyhoLnN0eWxlLndpZHRoPWMuc3R5bGUud2lkdGg9dGhpcy5kZWZfaW1nX3gsYy5zdHlsZS5oZWlnaHQ9dGhpcy5kZWZfaW1nX3kpOihjLnN0eWxlLndpZHRoPSIwcHgiLGMuc3R5bGUuaGVpZ2h0PSIwcHgiLChfaXNPcGVyYXx8d2luZG93Ll9LSFRNTHJ2KSYmKGguc3R5bGUuZGlzcGxheT0ibm9uZSIpKTt2YXIgdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO3JldHVybiB1LmNsYXNzTmFtZT0iZGh4VGV4dENlbGwgc3RhbmRhcnRUcmVlUm93Iix0LnNwYW49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLHQuc3Bhbi5jbGFzc05hbWU9InN0YW5kYXJ0VHJlZVJvdyIsdGhpcy5tbGl0ZW1zPyh0LnNwYW4uc3R5bGUud2lkdGg9dGhpcy5tbGl0ZW1zLHQuc3Bhbi5zdHlsZS5kaXNwbGF5PSJibG9jayIpOnUubm9XcmFwPSEwLGRoeDQuaXNJRTg/dS5zdHlsZS53aWR0aD0iOTk5OTlweCI6d2luZG93Ll9LSFRNTHJ2fHwodS5zdHlsZS53aWR0aD0iMTAwJSIpLHQuc3Bhbi5pbm5lckhUTUw9dC5sYWJlbCx1LmFwcGVuZENoaWxkKHQuc3BhbiksdS5wYXJlbnRPYmplY3Q9dCxsLnBhcmVudE9iamVjdD10LHUub25jbGljaz10aGlzLm9uUm93U2VsZWN0LGwub25jbGljaz10aGlzLm9uUm93Q2xpY2ssdS5vbmRibGNsaWNrPXRoaXMub25Sb3dDbGljazIsdGhpcy5ldHRpcCYmKHIudGl0bGU9dC5sYWJlbCksdGhpcy5kcmFnQW5kRHJvcE9mZiYmKHRoaXMuX2FpbWdzJiYodGhpcy5kcmFnZ2VyLmFkZERyYWdnYWJsZUl0ZW0oaCx0aGlzKSxoLnBhcmVudE9iamVjdD10KSx0aGlzLmRyYWdnZXIuYWRkRHJhZ2dhYmxlSXRlbSh1LHRoaXMpKSx0LnNwYW4uc3R5bGUucGFkZGluZ0xlZnQ9IjVweCIsdC5zcGFuLnN0eWxlLnBhZGRpbmdSaWdodD0iNXB4Iix1LnN0eWxlLnZlcnRpY2FsQWxpZ249IiIsdS5zdHlsZS5mb250U2l6ZT0iMTBwdCIsdS5zdHlsZS5jdXJzb3I9dGhpcy5zdHlsZV9wb2ludGVyLHIuYXBwZW5kQ2hpbGQobCksci5hcHBlbmRDaGlsZChhKSxyLmFwcGVuZENoaWxkKGgpLHIuYXBwZW5kQ2hpbGQodSksby5hcHBlbmRDaGlsZChyKSxuLmFwcGVuZENoaWxkKG8pLCh0aGlzLmVobHR8fHRoaXMuY2hlY2tFdmVudCgib25Nb3VzZUluIil8fHRoaXMuY2hlY2tFdmVudCgib25Nb3VzZU91dCIpKSYmKHIub25tb3VzZW1vdmU9dGhpcy5faXRlbU1vdXNlSW4scltfaXNJRT8ib25tb3VzZWxlYXZlIjoib25tb3VzZW91dCJdPXRoaXMuX2l0ZW1Nb3VzZU91dCksbn0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuc2V0T25SaWdodENsaWNrSGFuZGxlcj1mdW5jdGlvbihlKXt0aGlzLmF0dGFjaEV2ZW50KCJvblJpZ2h0Q2xpY2siLGUpfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5zZXRPbkNsaWNrSGFuZGxlcj1mdW5jdGlvbihlKXt0aGlzLmF0dGFjaEV2ZW50KCJvbkNsaWNrIixlKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuc2V0T25TZWxlY3RTdGF0ZUNoYW5nZT1mdW5jdGlvbihlKXt0aGlzLmF0dGFjaEV2ZW50KCJvblNlbGVjdCIsZSl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLnNldFhNTEF1dG9Mb2FkaW5nPWZ1bmN0aW9uKGUpe3RoaXMuWE1Mc291cmNlPWV9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLnNldE9uQ2hlY2tIYW5kbGVyPWZ1bmN0aW9uKGUpe3RoaXMuYXR0YWNoRXZlbnQoIm9uQ2hlY2siLGUpfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5zZXRPbk9wZW5IYW5kbGVyPWZ1bmN0aW9uKGUpe3RoaXMuYXR0YWNoRXZlbnQoIm9uT3BlblN0YXJ0IixlKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuc2V0T25PcGVuU3RhcnRIYW5kbGVyPWZ1bmN0aW9uKGUpe3RoaXMuYXR0YWNoRXZlbnQoIm9uT3BlblN0YXJ0IixlKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuc2V0T25PcGVuRW5kSGFuZGxlcj1mdW5jdGlvbihlKXt0aGlzLmF0dGFjaEV2ZW50KCJvbk9wZW5FbmQiLGUpfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5zZXRPbkRibENsaWNrSGFuZGxlcj1mdW5jdGlvbihlKXt0aGlzLmF0dGFjaEV2ZW50KCJvbkRibENsaWNrIixlKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUub3BlbkFsbEl0ZW1zPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dsb2JhbElkU3RvcmFnZUZpbmQoZSk7cmV0dXJuIHQ/dm9pZCB0aGlzLl94b3BlbkFsbCh0KTowfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5nZXRPcGVuU3RhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2xvYmFsSWRTdG9yYWdlRmluZChlKTtyZXR1cm4gdD90aGlzLl9nZXRPcGVuU3RhdGUodCk6IiJ9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLmNsb3NlQWxsSXRlbXM9ZnVuY3Rpb24oZSl7ZT09PXdpbmRvdy51bmRlZmluZWQmJihlPXRoaXMucm9vdElkKTt2YXIgdD10aGlzLl9nbG9iYWxJZFN0b3JhZ2VGaW5kKGUpO3JldHVybiB0Pyh0aGlzLl94Y2xvc2VBbGwodCksdGhpcy5hbGxUcmVlLmNoaWxkTm9kZXNbMF0uYm9yZGVyPSIxIix2b2lkKHRoaXMuYWxsVHJlZS5jaGlsZE5vZGVzWzBdLmJvcmRlcj0iMCIpKTowfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5zZXRVc2VyRGF0YT1mdW5jdGlvbihlLHQsaSl7dmFyIG49dGhpcy5fZ2xvYmFsSWRTdG9yYWdlRmluZChlLDAsITApO24mJigiaGludCI9PXQmJihuLmh0bWxOb2RlLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS50aXRsZT1pKSwidW5kZWZpbmVkIj09dHlwZW9mIG4udXNlckRhdGFbInRfIit0XSYmKG4uX3VzZXJkYXRhbGlzdD9uLl91c2VyZGF0YWxpc3QrPSIsIit0Om4uX3VzZXJkYXRhbGlzdD10KSxuLnVzZXJEYXRhWyJ0XyIrdF09aSl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLmdldFVzZXJEYXRhPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5fZ2xvYmFsSWRTdG9yYWdlRmluZChlLDAsITApO2lmKGkpcmV0dXJuIGkudXNlckRhdGFbInRfIit0XX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuZ2V0SXRlbUNvbG9yPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dsb2JhbElkU3RvcmFnZUZpbmQoZSk7aWYoIXQpcmV0dXJuIDA7dmFyIGk9bmV3IE9iamVjdDtyZXR1cm4gdC5hY29sb3ImJihpLmFjb2xvcj10LmFjb2xvciksdC5zY29sb3ImJihpLnNjb2xvcj10LnNjb2xvciksaX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuc2V0SXRlbUNvbG9yPWZ1bmN0aW9uKGUsdCxpKXtpZihlJiZlLnNwYW4pdmFyIG49ZTtlbHNlIHZhciBuPXRoaXMuX2dsb2JhbElkU3RvcmFnZUZpbmQoZSk7cmV0dXJuIG4/KG4uaV9zZWw/KGl8fHQpJiYobi5zcGFuLnN0eWxlLmNvbG9yPWl8fHQpOnQmJihuLnNwYW4uc3R5bGUuY29sb3I9dCksaSYmKG4uc2NvbG9yPWkpLHQmJihuLmFjb2xvcj10KSx2b2lkIDApOjB9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLnNldE9uTW91c2VJbkhhbmRsZXI9ZnVuY3Rpb24oZSl7dGhpcy5laGx0PSEwLHRoaXMuYXR0YWNoRXZlbnQoIm9uTW91c2VJbiIsZSl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLnNldE9uTW91c2VPdXRIYW5kbGVyPWZ1bmN0aW9uKGUpe3RoaXMuZWhsdD0hMCx0aGlzLmF0dGFjaEV2ZW50KCJvbk1vdXNlT3V0IixlKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuZW5hYmxlVHJlZUxpbmVzPWZ1bmN0aW9uKGUpe3RoaXMudHJlZUxpbmVzT249ZGh4NC5zMmIoZSl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLm9wZW5JdGVtPWZ1bmN0aW9uKGUpe3RoaXMuc2tpcExvY2s9ITA7dmFyIHQ9dGhpcy5fZ2xvYmFsSWRTdG9yYWdlRmluZChlKTtyZXR1cm4gdD90aGlzLl9vcGVuSXRlbSh0KTowfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5fb3Blbkl0ZW09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0T3BlblN0YXRlKGUpO2lmKDA+dHx8dGhpcy5YTUxzb3VyY2UmJiFlLlhNTGxvYWQpe2lmKCF0aGlzLmNhbGxFdmVudCgib25PcGVuU3RhcnQiLFtlLmlkLHRdKSlyZXR1cm4gMDt0aGlzLl9IaWRlU2hvdyhlLDIpLHRoaXMuY2hlY2tFdmVudCgib25PcGVuRW5kIikmJih0aGlzLm9uWExFPT10aGlzLl9lcG5GSGUmJnRoaXMuX2VwbkZIZSh0aGlzLGUuaWQsITApLHRoaXMueG1sc3RhdGUmJnRoaXMuWE1Mc291cmNlPyh0aGlzLl9vaWVfb25YTEUucHVzaCh0aGlzLm9uWExFKSx0aGlzLm9uWExFPXRoaXMuX2VwbkZIZSk6dGhpcy5jYWxsRXZlbnQoIm9uT3BlbkVuZCIsW2UuaWQsdGhpcy5fZ2V0T3BlblN0YXRlKGUpXSkpfWVsc2UgdGhpcy5fc3JuZCYmdGhpcy5fSGlkZVNob3coZSwyKTtlLnBhcmVudE9iamVjdCYmIXRoaXMuX3NraXBfb3Blbl9wYXJlbnQmJnRoaXMuX29wZW5JdGVtKGUucGFyZW50T2JqZWN0KX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2dldEFsbEZhdEl0ZW1zPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iIixpPTA7aTxlLmNoaWxkc0NvdW50O2krKylpZihlLmNoaWxkTm9kZXNbaV0udW5QYXJzZWR8fGUuY2hpbGROb2Rlc1tpXS5jaGlsZHNDb3VudD4wKXtpZih0P3QrPXRoaXMuZGxtdHIrZS5jaGlsZE5vZGVzW2ldLmlkOnQ9IiIrZS5jaGlsZE5vZGVzW2ldLmlkLGUuY2hpbGROb2Rlc1tpXS51blBhcnNlZCl2YXIgbj10aGlzLl9nZXRBbGxGYXRJdGVtc1hNTChlLmNoaWxkTm9kZXNbaV0udW5QYXJzZWQsMSk7ZWxzZSB2YXIgbj10aGlzLl9nZXRBbGxGYXRJdGVtcyhlLmNoaWxkTm9kZXNbaV0pO24mJih0Kz10aGlzLmRsbXRyK24pfXJldHVybiB0fSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5zZWxlY3RJdGVtPWZ1bmN0aW9uKGUsdCxpKXt0PWRoeDQuczJiKHQpO3ZhciBuPXRoaXMuX2dsb2JhbElkU3RvcmFnZUZpbmQoZSk7aWYoIW58fCFuLnBhcmVudE9iamVjdClyZXR1cm4gMDt0aGlzLlhNTGxvYWRpbmdXYXJuaW5nP24ucGFyZW50T2JqZWN0Lm9wZW5NZT0xOnRoaXMuX29wZW5JdGVtKG4ucGFyZW50T2JqZWN0KTt2YXIgbz1udWxsO2kmJihvPW5ldyBPYmplY3Qsby5jdHJsS2V5PSEwLG4uaV9zZWwmJihvLnNraXBVblNlbD0hMCkpLHQ/dGhpcy5vblJvd1NlbGVjdChvLG4uaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbM10sITEpOnRoaXMub25Sb3dTZWxlY3QobyxuLmh0bWxOb2RlLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzNdLCEwKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2NvbXByZXNzQ2hpbGRMaXN0PWZ1bmN0aW9uKGUsdCl7ZS0tO2Zvcih2YXIgaT0wO2U+aTtpKyspMD09dFtpXSYmKHRbaV09dFtpKzFdLHRbaSsxXT0wKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2RlbGV0ZU5vZGU9ZnVuY3Rpb24oZSx0LGkpe2lmKCF0fHwhdC5wYXJlbnRPYmplY3QpcmV0dXJuIDA7dmFyIG49MCxvPTA7dC50ci5uZXh0U2libGluZyYmKG49dC50ci5uZXh0U2libGluZy5ub2RlbSksdC50ci5wcmV2aW91c1NpYmxpbmcmJihvPXQudHIucHJldmlvdXNTaWJsaW5nLm5vZGVtKTtmb3IodmFyIHI9dC5wYXJlbnRPYmplY3QsbD1yLmNoaWxkc0NvdW50LHM9ci5jaGlsZE5vZGVzLGE9MDtsPmE7YSsrKWlmKHNbYV0uaWQ9PWUpe2l8fHIuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5yZW1vdmVDaGlsZChzW2FdLnRyKSxzW2FdPTA7YnJlYWt9dGhpcy5fY29tcHJlc3NDaGlsZExpc3QobCxzKSxpfHxyLmNoaWxkc0NvdW50LS0sbiYmKHRoaXMuX2NvcnJlY3RQbHVzKG4pLHRoaXMuX2NvcnJlY3RMaW5lKG4pKSxvJiYodGhpcy5fY29ycmVjdFBsdXMobyksdGhpcy5fY29ycmVjdExpbmUobykpLHRoaXMudHNjaGVjayYmdGhpcy5fY29ycmVjdENoZWNrU3RhdGVzKHIpLGl8fHRoaXMuX2dsb2JhbElkU3RvcmFnZVJlY1N1Yih0KX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuZGVsZXRlQ2hpbGRJdGVtcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nbG9iYWxJZFN0b3JhZ2VGaW5kKGUpO2lmKHQpZm9yKHZhciBpPXQuY2hpbGRzQ291bnQsbj0wO2k+bjtuKyspdGhpcy5fZGVsZXRlTm9kZSh0LmNoaWxkTm9kZXNbMF0uaWQsdC5jaGlsZE5vZGVzWzBdKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2dsb2JhbElkU3RvcmFnZVJlY1N1Yj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUuY2hpbGRzQ291bnQ7dCsrKXRoaXMuX2dsb2JhbElkU3RvcmFnZVJlY1N1YihlLmNoaWxkTm9kZXNbdF0pLHRoaXMuX2dsb2JhbElkU3RvcmFnZVN1YihlLmNoaWxkTm9kZXNbdF0uaWQpO3RoaXMuX2dsb2JhbElkU3RvcmFnZVN1YihlLmlkKTt2YXIgaT1lO2kuc3Bhbj1udWxsLGkudHIubm9kZW09bnVsbCxpLnRyPW51bGwsaS5odG1sTm9kZT1udWxsfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5fYXV0b1Njcm9sbD1mdW5jdGlvbihlLHQsaSl7dGhpcy5hdXRvU2Nyb2xsJiYoZSYmKHQ9ZGh4NC5hYnNUb3AoZSksaT1kaHg0LmFic1RvcCh0aGlzLmFsbFRyZWUpLXRoaXMuYWxsVHJlZS5zY3JvbGxUb3ApLHQtaS1wYXJzZUludCh0aGlzLmFsbFRyZWUuc2Nyb2xsVG9wKT5wYXJzZUludCh0aGlzLmFsbFRyZWUub2Zmc2V0SGVpZ2h0KS01MCYmKHRoaXMuYWxsVHJlZS5zY3JvbGxUb3A9cGFyc2VJbnQodGhpcy5hbGxUcmVlLnNjcm9sbFRvcCkrMjApLHQtaTxwYXJzZUludCh0aGlzLmFsbFRyZWUuc2Nyb2xsVG9wKSszMCYmKHRoaXMuYWxsVHJlZS5zY3JvbGxUb3A9cGFyc2VJbnQodGhpcy5hbGxUcmVlLnNjcm9sbFRvcCktMjApKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuZW5hYmxlVGV4dFNpZ25zPWZ1bmN0aW9uKGUpe3RoaXMuX3R4dGltZz1kaHg0LnMyYihlKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUucHJldmVudElFQ2FjaGluZz1mdW5jdGlvbihlKXtkaHg0LmFqYXguY2FjaGU9IWV9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLnByZXZlbnRJRUNhc2hpbmc9ZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUucHJldmVudElFQ2FjaGluZyxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5zZXRJY29uU2l6ZT1mdW5jdGlvbihlLHQsaSl7aWYoaSl7aWYoaSYmaS5zcGFuKXZhciBuPWk7ZWxzZSB2YXIgbj10aGlzLl9nbG9iYWxJZFN0b3JhZ2VGaW5kKGkpO2lmKCFuKXJldHVybiAwO3ZhciBvPW4uc3Bhbi5wYXJlbnROb2RlLnByZXZpb3VzU2libGluZy5jaGlsZE5vZGVzWzBdO2UmJihvLnN0eWxlLndpZHRoPWUrInB4Iix3aW5kb3cuX0tIVE1McnYmJihvLnBhcmVudE5vZGUuc3R5bGUud2lkdGg9ZSsicHgiKSksdCYmKG8uc3R5bGUuaGVpZ2h0PXQrInB4Iix3aW5kb3cuX0tIVE1McnYmJihvLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0PXQrInB4IikpfWVsc2UgdGhpcy5kZWZfaW1nX3g9ZSsicHgiLHRoaXMuZGVmX2ltZ195PXQrInB4In0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuZW5hYmxlU2luZ2xlUmFkaW9Nb2RlPWZ1bmN0aW9uKGUpe3RoaXMuX2ZyYnRycz1kaHg0LnMyYihlKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUub3Blbk9uSXRlbUFkZGVkPWZ1bmN0aW9uKGUpe3RoaXMuX2hBZEk9IWRoeDQuczJiKGUpfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5vcGVuT25JdGVtQWRkaW5nPWZ1bmN0aW9uKGUpe3RoaXMuX2hBZEk9IWRoeDQuczJiKGUpfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5nZXRBbGxJdGVtc1dpdGhLaWRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldEFsbEZhdEl0ZW1zKHRoaXMuaHRtbE5vZGUpfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5zZXRTa2luPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGFyZW50T2JqZWN0LmNsYXNzTmFtZS5yZXBsYWNlKC9kaHh0cmVlX1teIF0qL2dpLCIiKTt0aGlzLnBhcmVudE9iamVjdC5jbGFzc05hbWU9dCsiIGRoeHRyZWVfIitlLCJkaHhfdGVycmFjZSIhPWUmJiJkaHhfd2ViIiE9ZSYmIm1hdGVyaWFsIiE9ZXx8dGhpcy5lbmFibGVUcmVlTGluZXMoITEpLCJtYXRlcmlhbCI9PWUmJnRoaXMuc2V0SWNvblNpemUoIjI1IiwiMjUiKX0sanNvblBvaW50ZXIucHJvdG90eXBlPXt0ZXh0OmZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciBpPVtdLG49MDtuPGUubGVuZ3RoO24rKylpLnB1c2goInsiK3QoZVtuXSkrIn0iKTtyZXR1cm4gaS5qb2luKCIsIil9LHQ9ZnVuY3Rpb24oaSl7dmFyIG49W107Zm9yKHZhciBvIGluIGkpIm9iamVjdCI9PXR5cGVvZiBpW29dP28ubGVuZ3RoP24ucHVzaCgnIicrbysnIjpbJytlKGlbb10pKyJdIik6bi5wdXNoKCciJytvKyciOnsnK3QoaVtvXSkrIn0iKTpuLnB1c2goJyInK28rJyI6IicraVtvXSsnIicpO3JldHVybiBuLmpvaW4oIiwiKX07cmV0dXJuInsiK3QodGhpcy5kKSsifSJ9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kW2VdfSxleGlzdHM6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuZH0sY29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmQuY29udGVudH0sZWFjaDpmdW5jdGlvbihlLHQsaSl7dmFyIG49dGhpcy5kW2VdLG89bmV3IGpzb25Qb2ludGVyO2lmKG4pZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspby5kPW5bcl0sdC5hcHBseShpLFtvLHJdKX0sZ2V0X2FsbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LHN1YjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpzb25Qb2ludGVyKHRoaXMuZFtlXSx0aGlzLmQpfSxzdWJfZXhpc3RzOmZ1bmN0aW9uKGUpe3JldHVybiEhdGhpcy5kW2VdfSxlYWNoX3g6ZnVuY3Rpb24oZSx0LGksbixvKXt2YXIgcj10aGlzLmRbZV0sbD1uZXcganNvblBvaW50ZXIoMCx0aGlzLmQpO2lmKHIpZm9yKG89b3x8MDtvPHIubGVuZ3RoO28rKylpZihyW29dW3RdJiYobC5kPXJbb10sLTE9PWkuYXBwbHkobixbbCxvXSkpKXJldHVybn0sdXA6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqc29uUG9pbnRlcih0aGlzLmRwLHRoaXMuZCl9LHNldDpmdW5jdGlvbihlLHQpe3RoaXMuZFtlXT10fSxjbG9uZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpzb25Qb2ludGVyKHRoaXMuZCx0aGlzLmRwKX0sdGhyb3VnaDpmdW5jdGlvbihlLHQsaSxuLG8pe3ZhciByPXRoaXMuZFtlXTtpZihyLmxlbmd0aClmb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrKyl7aWYobnVsbCE9cltsXVt0XSYmIiIhPXJbbF1bdF0mJighaXx8cltsXVt0XT09aSkpe3ZhciBzPW5ldyBqc29uUG9pbnRlcihyW2xdLHRoaXMuZCk7bi5hcHBseShvLFtzLGxdKX12YXIgYT10aGlzLmQ7dGhpcy5kPXJbbF0sdGhpcy5zdWJfZXhpc3RzKGUpJiZ0aGlzLnRocm91Z2goZSx0LGksbixvKSx0aGlzLmQ9YX19fSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5sb2FkSlNPTk9iamVjdD1mdW5jdGlvbihlLHQpe3JldHVybiB3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUuaW5mbyYmd2luZG93LmNvbnNvbGUuaW5mbygibG9hZEpTT05PYmplY3Qgd2FzIGRlcHJlY2F0ZWQiLCJodHRwOi8vZG9jcy5kaHRtbHguY29tL21pZ3JhdGlvbl9faW5kZXguaHRtbCNtaWdyYXRpb25mcm9tNDN0bzQ0IiksdGhpcy5fbG9hZEpTT05PYmplY3QoZSx0KX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2xvYWRKU09OT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dGhpcy5wYXJzQ291bnR8fHRoaXMuY2FsbEV2ZW50KCJvblhMUyIsW3RoaXMsbnVsbF0pLHRoaXMueG1sc3RhdGU9MTt2YXIgaT1uZXcganNvblBvaW50ZXIoZSk7dGhpcy5fcGFyc2UoaSksdGhpcy5fcD1pLHQmJnQoKX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXI/d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGRoeF9pbml0X3RyZWVzLCExKTp3aW5kb3cuYXR0YWNoRXZlbnQmJndpbmRvdy5hdHRhY2hFdmVudCgib25sb2FkIixkaHhfaW5pdF90cmVlcyk7dmFyIHN0eWxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7c3R5bGUuaW5uZXJIVE1MPSdAa2V5ZnJhbWVzIGRoeF9sb2FkZXJfcm90YXRlezEwMCV7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpO319QGtleWZyYW1lcyBkaHhfbG9hZGVyX2Rhc2h7MCV7c3Ryb2tlLWRhc2hhcnJheToxLDIwMDtzdHJva2UtZGFzaG9mZnNldDowO301MCV7c3Ryb2tlLWRhc2hhcnJheTo4OSwyMDA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTM1cHg7fTEwMCV7c3Ryb2tlLWRhc2hhcnJheTo4OSwyMDA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTEyNHB4O319LmRodG1seE1lbnVfbWF0ZXJpYWxfTWlkZGxle3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHg7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O292ZXJmbG93OmhpZGRlbjtib3JkZXI6bm9uZTtmb250LXNpemU6MTRweDtmb250LWZhbWlseTpSb2JvdG8sQXJpYWwsSGVsdmV0aWNhO2NvbG9yOiM0MDQwNDA7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1raHRtbC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstby11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7fS5kaHRtbHhNZW51X21hdGVyaWFsX01pZGRsZSBkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9Ub3BMZXZlbF9JdGVtX05vcm1hbCwuZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfVG9wTGV2ZWxfSXRlbV9EaXNhYmxlZCwuZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfVG9wTGV2ZWxfSXRlbV9TZWxlY3RlZHtwb3NpdGlvbjpyZWxhdGl2ZTtmbG9hdDpsZWZ0O2ZvbnQ6aW5oZXJpdDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4O21hcmdpbjowO3BhZGRpbmc6MCA4cHg7Y3Vyc29yOmRlZmF1bHQ7d2hpdGUtc3BhY2U6bm93cmFwOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7LW8tdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO30uZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfVG9wTGV2ZWxfSXRlbV9Ob3JtYWwgZGl2LnRvcF9sZXZlbF90ZXh0LC5kaHRtbHhNZW51X21hdGVyaWFsX01pZGRsZSBkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9Ub3BMZXZlbF9JdGVtX0Rpc2FibGVkIGRpdi50b3BfbGV2ZWxfdGV4dCwuZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfVG9wTGV2ZWxfSXRlbV9TZWxlY3RlZCBkaXYudG9wX2xldmVsX3RleHR7ZmxvYXQ6bGVmdDttYXJnaW46MCAzcHg7fS5kaHRtbHhNZW51X21hdGVyaWFsX01pZGRsZSBkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9Ub3BMZXZlbF9JdGVtX05vcm1hbCBpLC5kaHRtbHhNZW51X21hdGVyaWFsX01pZGRsZSBkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9Ub3BMZXZlbF9JdGVtX0Rpc2FibGVkIGksLmRodG1seE1lbnVfbWF0ZXJpYWxfTWlkZGxlIGRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1RvcExldmVsX0l0ZW1fU2VsZWN0ZWQgaXtoZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0O2Zsb2F0OmxlZnQ7Y29sb3I6aW5oZXJpdDttYXJnaW46MCA0cHg7Zm9udC1zaXplOjEuMmVtO30uZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfVG9wTGV2ZWxfSXRlbV9EaXNhYmxlZHtjb2xvcjojYTZhNmE2O30uZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfVG9wTGV2ZWxfSXRlbV9TZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlYmViZWI7fS5kaHRtbHhNZW51X21hdGVyaWFsX01pZGRsZSBpbWcuZGh0bWx4TWVudV9Ub3BMZXZlbF9JdGVtX0ljb257ZmxvYXQ6bGVmdDttYXJnaW46NXB4IDNweCAwIDNweDt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2N1cnNvcjpkZWZhdWx0O30uZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LnRvcF9zZXB7cG9zaXRpb246cmVsYXRpdmU7ZmxvYXQ6bGVmdDtoZWlnaHQ6MjJweDt3aWR0aDowO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGZkZmRmO21hcmdpbjozcHggOHB4IDAgOHB4O2ZvbnQtc2l6ZToxcHg7b3ZlcmZsb3c6aGlkZGVuO2N1cnNvcjpkZWZhdWx0Oy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7LW8tdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO30uZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfVG9wTGV2ZWxfVGV4dF9yaWdodCwuZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfVG9wTGV2ZWxfVGV4dF9sZWZ0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHg7Y3Vyc29yOmRlZmF1bHQ7Zm9udC1zaXplOjE0cHg7Zm9udC1mYW1pbHk6Um9ib3RvLEFyaWFsLEhlbHZldGljYTtjb2xvcjojNDA0MDQwOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7LW8tdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO30uZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfVG9wTGV2ZWxfVGV4dF9yaWdodHtyaWdodDo2cHg7fS5kaHRtbHhNZW51X21hdGVyaWFsX01pZGRsZSBkaXYuZGh0bWx4TWVudV9Ub3BMZXZlbF9UZXh0X2xlZnR7bGVmdDo2cHg7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29ue3Bvc2l0aW9uOmFic29sdXRlO3BhZGRpbmc6NXB4IDA7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO292ZXJmbG93OmhpZGRlbjtjdXJzb3I6ZGVmYXVsdDtsaW5lLWhlaWdodDpub3JtYWw7b3ZlcmZsb3cteTphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4xMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4yNCk7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1raHRtbC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstby11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRke3BhZGRpbmc6MDttYXJnaW46MDtsaW5lLWhlaWdodDpub3JtYWw7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtZmFtaWx5OlJvYm90byxBcmlhbCxIZWx2ZXRpY2E7Y29sb3I6IzQwNDA0MDt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gdGQuc3ViX2l0ZW1faWNvbnt3aWR0aDoxOHB4O3RleHQtYWxpZ246Y2VudGVyO31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ZC5zdWJfaXRlbV9pY29uIGltZy5zdWJfaWNvbnttYXJnaW46NHB4IDZweCAwIDZweDt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ZC5zdWJfaXRlbV9pY29uIGl7d2lkdGg6MThweDtoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDoyOXB4O21hcmdpbjowIDZweDtmb250LXNpemU6MS4yZW07dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6aW5oZXJpdDt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gdGQuc3ViX2l0ZW1faWNvbiBkaXYuc3ViX2ljb257bWFyZ2luOjAgNnB4O3dpZHRoOjE4cHg7aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MzBweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgNXB4O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1ncy9kaHhtZW51X21hdGVyaWFsL2RoeG1lbnVfY2hyZC5wbmciKTt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gdGQuc3ViX2l0ZW1faWNvbiBkaXYuc3ViX2ljb24uY2hieF8we2JhY2tncm91bmQtcG9zaXRpb246MCA1cHg7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRkLnN1Yl9pdGVtX2ljb24gZGl2LnN1Yl9pY29uLmNoYnhfMXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOHB4IDVweDt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gdGQuc3ViX2l0ZW1faWNvbiBkaXYuc3ViX2ljb24ucmRidF8we2JhY2tncm91bmQtcG9zaXRpb246LTcycHggNXB4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ZC5zdWJfaXRlbV9pY29uIGRpdi5zdWJfaWNvbi5yZGJ0XzF7YmFja2dyb3VuZC1wb3NpdGlvbjotOTBweCA1cHg7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRkLnN1Yl9pdGVtX3RleHQgZGl2LnN1Yl9pdGVtX3RleHR7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MzBweDtwYWRkaW5nOjAgMjJweCAwIDFweDtvdmVyZmxvdzpoaWRkZW47fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRkLnN1Yl9pdGVtX2hre3BhZGRpbmc6MCAxMHB4IDAgOHB4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ZC5zdWJfaXRlbV9oayBkaXYuc3ViX2l0ZW1faGt7Y29sb3I6IzhkOGQ4ZDtmb250LXNpemU6MTJweDt0ZXh0LWFsaWduOnJpZ2h0O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ZCBkaXYuY29tcGxleF9hcnJvd3tmbG9hdDpyaWdodDt3aWR0aDoxMHB4O21hcmdpbjowIDFweCAwIDExcHg7aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MzBweDtiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1ncy9kaHhtZW51X21hdGVyaWFsL2RoeG1lbnVfc3ViYXIucG5nIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246MCAxMHB4O292ZXJmbG93OmhpZGRlbjtmb250LXNpemU6MXB4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ZCBkaXYuY29tcGxleF9hcnJvd19sb2FkaW5ne3dpZHRoOjE2cHg7aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MzBweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWdzL2RoeG1lbnVfbWF0ZXJpYWwvZGh4bWVudV9sb2FkZXIuZ2lmIik7ZmxvYXQ6cmlnaHQ7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRyLnN1Yl9pdGVtX3NlbGVjdGVkIHRke2JhY2tncm91bmQtY29sb3I6I2ViZWJlYjt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gdHIuc3ViX2l0ZW1fc2VsZWN0ZWQgdGQgZGl2LmNvbXBsZXhfYXJyb3d7YmFja2dyb3VuZC1wb3NpdGlvbjotMTBweCAxMHB4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ci5zdWJfaXRlbV9kaXMgdGQuc3ViX2l0ZW1faGsgZGl2LnN1Yl9pdGVtX2hre2NvbG9yOiNjMGMwYzA7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRyLnN1Yl9pdGVtX2RpcyB0ZCBkaXYuc3ViX2l0ZW1fdGV4dCxkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ci5zdWJfaXRlbV9kaXMgdGQgdGQuc3ViX2l0ZW1faWNvbiBpe2NvbG9yOiNhNmE2YTY7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRyLnN1Yl9pdGVtX2RpcyB0ZCBkaXYuY29tcGxleF9hcnJvd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMHB4IDEwcHg7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRyLnN1Yl9pdGVtX2RpcyB0ZCBkaXYuc3ViX2ljb24uY2hieF8we2JhY2tncm91bmQtcG9zaXRpb246LTM2cHggNXB4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ci5zdWJfaXRlbV9kaXMgdGQgZGl2LnN1Yl9pY29uLmNoYnhfMXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi01NHB4IDVweDt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gdHIuc3ViX2l0ZW1fZGlzIHRkIGRpdi5zdWJfaWNvbi5yZGJ0XzB7YmFja2dyb3VuZC1wb3NpdGlvbjotMTA4cHggNXB4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ci5zdWJfaXRlbV9kaXMgdGQgZGl2LnN1Yl9pY29uLnJkYnRfMXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjZweCA1cHg7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRyLnN1Yl9pdGVtX2RpcyB0ZCBpe2NvbG9yOiNhNmE2YTY7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRyLnN1Yl9zZXAgdGR7cGFkZGluZzo1cHggM3B4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ci5zdWJfc2VwIHRkIGRpdi5zdWJfc2Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxcHg7bGluZS1oZWlnaHQ6MXB4O2hlaWdodDowO3dpZHRoOjEwMCU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RmZGZkZjt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX0Fycm93VXAsZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX0Fycm93VXBfT3ZlcixkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiBkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfQXJyb3dVcF9EaXNhYmxlZHtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZmRmZGY7YmFja2dyb3VuZC1pbWFnZTp1cmwoImltZ3MvZGh4bWVudV9tYXRlcmlhbC9kaHhtZW51X2Fycm93X3VwLnBuZyIpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciAycHg7cGFkZGluZzo4cHggMDttYXJnaW4tYm90dG9tOjNweDt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX0Fycm93VXBfRGlzYWJsZWR7YmFja2dyb3VuZC1pbWFnZTp1cmwoImltZ3MvZGh4bWVudV9tYXRlcmlhbC9kaHhtZW51X2Fycm93X3VwX2Rpcy5wbmciKTt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX0Fycm93RG93bixkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiBkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfQXJyb3dEb3duX092ZXIsZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX0Fycm93RG93bl9EaXNhYmxlZHtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MXB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNkZmRmZGY7YmFja2dyb3VuZC1pbWFnZTp1cmwoImltZ3MvZGh4bWVudV9tYXRlcmlhbC9kaHhtZW51X2Fycm93X2Rvd24ucG5nIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIDZweDtwYWRkaW5nOjhweCAwO21hcmdpbi10b3A6M3B4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiBkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfQXJyb3dEb3duX0Rpc2FibGVke2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWdzL2RoeG1lbnVfbWF0ZXJpYWwvZGh4bWVudV9hcnJvd19kb3duX2Rpcy5wbmciKTt9aWZyYW1lLmRodG1seE1lbnVfSUU2Q292ZXJGaXhfbWF0ZXJpYWx7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOm5vbmU7YmFja2dyb3VuZDojMDAwO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEob3BhY2l0eT0xMDApO30uZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUuZGlyX2xlZnQgZGl2LmFsaWduX2xlZnR7ZmxvYXQ6bGVmdDt9LmRodG1seE1lbnVfbWF0ZXJpYWxfTWlkZGxlLmRpcl9sZWZ0IGRpdi5hbGlnbl9yaWdodHtmbG9hdDpyaWdodDt9LmRoeG1lbnVfc2tpbl9kZXRlY3R7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDotMTAwcHg7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowIHNvbGlkIHdoaXRlO3dpZHRoOjQwcHg7aGVpZ2h0OjEwcHg7b3ZlcmZsb3c6aGlkZGVuO31Aa2V5ZnJhbWVzIGRoeF9sb2FkZXJfcm90YXRlezEwMCV7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpO319QGtleWZyYW1lcyBkaHhfbG9hZGVyX2Rhc2h7MCV7c3Ryb2tlLWRhc2hhcnJheToxLDIwMDtzdHJva2UtZGFzaG9mZnNldDowO301MCV7c3Ryb2tlLWRhc2hhcnJheTo4OSwyMDA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTM1cHg7fTEwMCV7c3Ryb2tlLWRhc2hhcnJheTo4OSwyMDA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTEyNHB4O319LmRlZmF1bHRUcmVlVGFibGV7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO30uY29udGFpbmVyVGFibGVTdHlsZXtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDowO2ZvbnQtc2l6ZToxMnB4Oy1raHRtbC11c2VyLXNlbGVjdDpub25lO30uY29udGFpbmVyVGFibGVTdHlsZVJUTCBzcGFue2RpcmVjdGlvbjpydGw7dW5pY29kZS1iaWRpOmJpZGktb3ZlcnJpZGU7fS5jb250YWluZXJUYWJsZVN0eWxlUlRMe2RpcmVjdGlvbjpydGw7b3ZlcmZsb3c6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MDtmb250LXNpemU6MTJweDt9LnN0YW5kYXJ0VHJlZVJvd3tmb250LWZhbWlseTpSb2JvdG8sQXJpYWwsSGVsdmV0aWNhO2ZvbnQtc2l6ZTo7LW1vei11c2VyLXNlbGVjdDpub25lO2xpbmUtaGVpZ2h0OjI0cHg7fS5zZWxlY3RlZFRyZWVSb3d7Zm9udC1mYW1pbHk6Um9ib3RvLEFyaWFsLEhlbHZldGljYTtmb250LXNpemU6Oy1tb3otdXNlci1zZWxlY3Q6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Y29sb3I6IzM5Yzt9LmRoeHRyZWVfbWF0ZXJpYWwgLnNlbGVjdGVkVHJlZVJvd0Z1bGwgLmRoeFRleHRDZWxse2JhY2tncm91bmQtY29sb3I6I2VlZTtjb2xvcjojMzljO30uZHJhZ0FuZERyb3BSb3d7Y29sb3I6IzM5Yzt9LnN0YW5kYXJ0VHJlZVJvd19sb3J7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtiYWNrZ3JvdW5kLWNvbG9yOjtmb250LWZhbWlseTpSb2JvdG8sQXJpYWwsSGVsdmV0aWNhO2ZvbnQtc2l6ZTo7LW1vei11c2VyLXNlbGVjdDpub25lO30uc3RhbmRhcnRUcmVlSW1hZ2V7aGVpZ2h0OjI0cHg7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlcjowO3BhZGRpbmc6MDttYXJnaW46MDtmb250LXNpemU6MXB4O30uc3RhbmRhcnRUcmVlSW1hZ2UgaW1ne3dpZHRoOjE4cHg7aGVpZ2h0OjI0cHg7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtib3JkZXI6MDtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udC1zaXplOjFweDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LWtodG1sLXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lOy1vLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt9LmhpZGRlblJvd3t3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO30uZHJhZ1NwYW5EaXYsLmRyYWdTcGFuRGl2IHRke2ZvbnQtZmFtaWx5OlJvYm90byxBcmlhbCxIZWx2ZXRpY2E7Zm9udC1zaXplOjtsaW5lLWhlaWdodDo7dmVydGljYWwtYWxpZ246Y2VudGVyO2JhY2tncm91bmQtY29sb3I6d2hpdGU7ei1pbmRleDo5OTk7fS5kcmFnU3BhbkRpdiB0ZHtwYWRkaW5nOjVweDt9LmFfZGh4X2hpZGRlbl9pbnB1dHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTFweDtsZWZ0Oi0xcHg7d2lkdGg6MXB4O2hlaWdodDoxcHg7Ym9yZGVyOm5vbmU7YmFja2dyb3VuZDpub25lO30uYV9kaHhfaGlkZGVuX2lucHV0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMXB4O2xlZnQ6LTFweDt3aWR0aDoxcHg7aGVpZ2h0OjFweDtib3JkZXI6bm9uZTtiYWNrZ3JvdW5kOm5vbmU7fS5zZWxlY3Rpb25CYXJ7dG9wOjA7YmFja2dyb3VuZC1jb2xvcjpibGFjaztwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47aGVpZ2h0OjJweDt6LWluZGV4OjExO30uaW50cmVlZWRpdFJvd3tmb250LXNpemU6OHB0O2hlaWdodDoxNnB4O2JvcmRlcjoxcHggc29saWQgc2lsdmVyO3BhZGRpbmc6MDttYXJnaW46MDttYXJnaW4tbGVmdDo0cHg7LW1vei11c2VyLXNlbGVjdDp0ZXh0Oy1raHRtbC11c2VyLXNlbGVjdDp0ZXh0O30uZGh4X3RyZWVfdGV4dFNpZ257Zm9udC1zaXplOjhwdDtmb250LWZhbWlseTptb25vc3BhY2U7d2lkdGg6MjFweDtjb2xvcjo7cGFkZGluZzowO21hcmdpbjowO2N1cnNvcjpwb2ludGVyO3RleHQtYWxpZ246Y2VudGVyO30uZGh4X3RyZWVfb3BhY2l0eXtvcGFjaXR5OjA7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShvcGFjaXR5PTApOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7LW8tdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO30uZGh4X2JnX2ltZ19maXh7d2lkdGg6MThweDtoZWlnaHQ6MjRweDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbi14OmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6Y2VudGVyO30uZGh4dHJlZV9za2luX2RldGVjdHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOi0xMDBweDttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjAgc29saWQgd2hpdGU7d2lkdGg6NDBweDtoZWlnaHQ6MTBweDtvdmVyZmxvdzpoaWRkZW47fScsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7dmFyIGxheWFhaXJfZGVidWdfdmlldz17fTt3aW5kb3cubGF5YWFpcl9kZWJ1Z192aWV3PWxheWFhaXJfZGVidWdfdmlldyxsYXlhYWlyX2RlYnVnX3ZpZXcuaW5pdExheWFBaXJEZWJ1Z1ZpZXc9ZnVuY3Rpb24oZSl7ZS5zdHlsZS5ib3JkZXI9IjFweCBzb2xpZCBibGFjayI7dmFyIHQ9TWF0aC5taW4oMjUwLC4zKmUub2Zmc2V0V2lkdGgpLGk9JzxkaXYgY2xhc3M9InRvcC1iYW5uZXIiPlxuPC9kaXY+XG48ZGl2PlxuPGRpdiBzdHlsZT0ib3ZlcmZsb3c6aGlkZGVuOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNDQ0OyBwYWRkaW5nOjVweCI+XG48ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0Ij5cbjxidXR0b24gaWQ9Im5vZGVfZnVuY3Rpb25hbGl0eV9jb250cm9sIj7lrqHmn6XlhYPntKA8L2J1dHRvbj5cbjxidXR0b24gaWQ9InJlZnJlc2hfY29udHJvbCI+5Yi35pawPC9idXR0b24+XG48L2Rpdj5cbjxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0Ij5cbjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InNob3dfY3VycmVudF9jYWNoZV9jb250cm9sIj7mmL7npLrlvZPliY1jYWNoZemHjee7mDwvaW5wdXQ+XG48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJzaG93X2FsbF9jYWNoZV9jb250cm9sIj7mmL7npLrmiYDmnIljYWNoZeWMuuWfnzwvaW5wdXQ+XG48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJzaG93X2F0bGFzX2NvbnRyb2wiPuaYvuekuuWkp+WbvuWQiOmbhjwvaW5wdXQ+XG48L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz0iaGdyb3VwIj5cbjxkaXYgc3R5bGU9ImZsb2F0OmxlZnQ7d2lkdGg6Jyt0KydweDsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCBibGFjayIgaWQ9InRyZWVfY29udGFpbmVyIj48L2Rpdj5cbjxkaXYgc3R5bGU9Im92ZXJmbG93OmhpZGRlbiI+XG48ZGl2IGlkPSJjb250ZW50X3Rvb2xiYXIiIHN0eWxlPSJ3aWR0aDoxMDAlO21hcmdpbjoxMHB4Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ2aXNpYmlsaXR5X2NvbnRyb2wiPuWPr+ingTwvaW5wdXQ+XG48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJzaG93X2JvcmRlcl9jb250cm9sIj7mmL7npLrovrnmoYY8L2lucHV0PlxuPGJ1dHRvbiBpZD0ibG9nX2luZm9fY29udHJvbCI+5omT5Y2w5Yiw5o6n5Yi25Y+wPC9idXR0b24+XG48YnV0dG9uIGlkPSJlbmFibGVkX25vZGVfY2hhaW5fY29udHJvbCI+ZW5hYmxl6ZO+PC9idXR0b24+XG48YnV0dG9uIGlkPSJzaXplX2NoYWluX2NvbnRyb2wiPnNpemXpk748L2J1dHRvbj5cbjwvZGl2PjxkaXYgc3R5bGU9Im92ZXJmbG93OmF1dG8iPjx0YWJsZSBpZD0iY29udGVudF90YWJsZSIgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgI2NjY2NjYztib3JkZXItY29sbGFwc2U6Y29sbGFwc2UiPjwvdGFibGU+XG48L2Rpdj48L2Rpdj5cbjwvZGl2PlxuPC9kaXY+JztlLmlubmVySFRNTD1pLHRoaXMuY29udGFpbmVyPWUsdGhpcy50cmVlPW5ldyBkaHRtbFhUcmVlT2JqZWN0KHRyZWVfY29udGFpbmVyLCIxMDAlIiwiMTAwJSIsMCksbm9kZV9mdW5jdGlvbmFsaXR5X2NvbnRyb2wub25jbGljaz1mdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLGxheWFhaXJfZGVidWdfdmlldy5vbl9pbnNwZWN0X2VsZW1lbnRfY2FsbGJhY2soKSxub2RlX2Z1bmN0aW9uYWxpdHlfY29udHJvbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiNGRkYiLG5vZGVfZnVuY3Rpb25hbGl0eV9jb250cm9sLnN0eWxlLmNvbG9yPSJyZ2IoMTA3LCAxNjMsIDI1NSkifX0sbGF5YWFpcl9kZWJ1Z192aWV3LnNldFRyZWU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJlZS5nZXRBbGxJdGVtc1dpdGhLaWRzKCkuc3BsaXQoIiwiKSxpPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIG89dFtuXSxyPXRoaXMudHJlZS5nZXRPcGVuU3RhdGUobyk7MT09ciYmaS5wdXNoKG8pfXRoaXMudHJlZS5kZWxldGVDaGlsZEl0ZW1zKDApLHRoaXMudHJlZS5wYXJzZShlLCJqc29uIik7Zm9yKHZhciBuPTA7bjxpLmxlbmd0aDtuKyspdGhpcy50cmVlLm9wZW5JdGVtKGlbbl0pfSxsYXlhYWlyX2RlYnVnX3ZpZXcucmVzaXplPWZ1bmN0aW9uKGUsdCl7dGhpcy5jb250YWluZXIuc3R5bGUud2lkdGg9ZSsicHgiLHRoaXMuY29udGFpbmVyLnN0eWxlLmhlaWdodD10KyJweCI7dmFyIGk9dGhpcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0LXRyZWVfY29udGFpbmVyLm9mZnNldFRvcDt0cmVlX2NvbnRhaW5lci5zdHlsZS5oZWlnaHQ9aSsicHgiLGNvbnRlbnRfdG9vbGJhci5zdHlsZS53aWR0aD1lLXRyZWVfY29udGFpbmVyLm9mZnNldFdpZHRoKyJweCIsY29udGVudF90YWJsZS5wYXJlbnRFbGVtZW50LnN0eWxlLmhlaWdodD1pLWNvbnRlbnRfdG9vbGJhci5vZmZzZXRIZWlnaHQtMjErInB4Iixjb250ZW50X3RhYmxlLnN0eWxlLndpZHRoPWUtdHJlZV9jb250YWluZXIub2Zmc2V0V2lkdGgtMTYrInB4In0sbGF5YWFpcl9kZWJ1Z192aWV3LmJvdW5jZVVwSW5zcGVjdEJ1dHRvbj1mdW5jdGlvbigpe25vZGVfZnVuY3Rpb25hbGl0eV9jb250cm9sLnN0eWxlLmJhY2tncm91bmRDb2xvcj0iYnV0dG9uZmFjZSIsbm9kZV9mdW5jdGlvbmFsaXR5X2NvbnRyb2wuc3R5bGUuY29sb3I9ImJsYWNrIn0sbGF5YWFpcl9kZWJ1Z192aWV3LnNldFZhbHVlSW5wdXRIYW5kbGVyPWZ1bmN0aW9uKGUpe3RoaXMudmFsdWVfaW5wdXRfY2FsbGJhY2s9ZX0sbGF5YWFpcl9kZWJ1Z192aWV3LnNldFZhbHVlQ2hhbmdlSGFuZGxlcj1mdW5jdGlvbihlKXt0aGlzLnZhbHVlX2NoYW5nZV9jYWxsYmFjaz1lfSxsYXlhYWlyX2RlYnVnX3ZpZXcuYWRkQ29udGVudD1mdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO3QuaW5uZXJIVE1MPSc8dGQgc3R5bGU9IndpZHRoOjEwMHB4O2ZvbnQtc2l6ZToxM3B4O2JvcmRlcjoxcHggc29saWQgI0NDQztwYWRkaW5nLWxlZnQ6MTBweCI+JytlLmtleSsnPC90ZD5cbjx0ZCBzdHlsZT0id2lkdGg6MjAwcHg7Ym9yZGVyOjFweCBzb2xpZCAjQ0NDOyI+PGlucHV0IHN0eWxlPSJib3JkZXI6bm9uZTt3aWR0aDoxMDAlO2hlaWdodDoyNXB4O3BhZGRpbmctbGVmdDoxMHB4OyIgdmFsdWU9JytlLnZhbHVlKyI+PC90ZD4iLGNvbnRlbnRfdGFibGUuYXBwZW5kQ2hpbGQodCk7dmFyIGk9dC5sYXN0RWxlbWVudENoaWxkLmxhc3RFbGVtZW50Q2hpbGQ7aS5kYXRhPWUsaS5vbmlucHV0PWZ1bmN0aW9uKGUpe3RoaXMudmFsdWVfaW5wdXRfY2FsbGJhY2smJnRoaXMudmFsdWVfaW5wdXRfY2FsbGJhY2soZS50YXJnZXQuZGF0YSxlLnRhcmdldC52YWx1ZSl9LmJpbmQodGhpcyksaS5vbmNoYW5nZT1mdW5jdGlvbihlKXt0aGlzLnZhbHVlX2NoYW5nZV9jYWxsYmFjayYmdGhpcy52YWx1ZV9jaGFuZ2VfY2FsbGJhY2soZS50YXJnZXQuZGF0YSxlLnRhcmdldC52YWx1ZSl9LmJpbmQodGhpcyl9LGxheWFhaXJfZGVidWdfdmlldy5zZXRDb250ZW50cz1mdW5jdGlvbihlKXtjb250ZW50X3RhYmxlLmlubmVySFRNTD0iIjtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIGk9ZVt0XTt0aGlzLmFkZENvbnRlbnQoaSl9fSxsYXlhYWlyX2RlYnVnX3ZpZXcuY2hhbmdlVmFsdWVBdD1mdW5jdGlvbihlLHQpe2NvbnRlbnRfdGFibGUuY2hpbGRyZW5bZV0ubGFzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZC52YWx1ZT10fSxsYXlhYWlyX2RlYnVnX3ZpZXcuY2hhbmdlVmFsdWVCeUxhYmVsPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpPWNvbnRlbnRfdGFibGUuY2hpbGRyZW4ubGVuZ3RoLTE7aT49MDtpLS0paWYoY29udGVudF90YWJsZS5jaGlsZHJlbltpXS5maXJzdEVsZW1lbnRDaGlsZC5pbm5lclRleHQ9PWUpe2NvbnRlbnRfdGFibGUuY2hpbGRyZW5baV0ubGFzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZC52YWx1ZT10O2JyZWFrfX0sbGF5YWFpcl9kZWJ1Z192aWV3LnNldFZpc2liaWxpdHk9ZnVuY3Rpb24oZSl7dmlzaWJpbGl0eV9jb250cm9sLmNoZWNrZWQ9ISFlfSxsYXlhYWlyX2RlYnVnX3ZpZXcuc2V0U2hvd0RlYnVnQm9yZGVyPWZ1bmN0aW9uKGUpe3Nob3dfYm9yZGVyX2NvbnRyb2wuY2hlY2tlZD0hIWV9LGxheWFhaXJfZGVidWdfdmlldy5nZXRWaXNpYmlsaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHZpc2liaWxpdHlfY29udHJvbC5jaGVja2VkfSxsYXlhYWlyX2RlYnVnX3ZpZXcuZ2V0U2hvd0RlYnVnQm9yZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHNob3dfYm9yZGVyX2NvbnRyb2wuY2hlY2tlZH0sbGF5YWFpcl9kZWJ1Z192aWV3LmdldFNob3dDdXJyZW50Q2FjaGU9ZnVuY3Rpb24oKXtyZXR1cm4gc2hvd19jdXJyZW50X2NhY2hlX2NvbnRyb2wuY2hlY2tlZH0sbGF5YWFpcl9kZWJ1Z192aWV3LmdldFNob3dBbGxDYWNoZT1mdW5jdGlvbigpe3JldHVybiBzaG93X2FsbF9jYWNoZV9jb250cm9sLmNoZWNrZWR9LGxheWFhaXJfZGVidWdfdmlldy5nZXRTaG93QXRsYXM9ZnVuY3Rpb24oKXtyZXR1cm4gc2hvd19hdGxhc19jb250cm9sLmNoZWNrZWR9LGxheWFhaXJfZGVidWdfdmlldy5vbkluc3BlY3RFbGVtZW50PWZ1bmN0aW9uKGUpe3RoaXMub25faW5zcGVjdF9lbGVtZW50X2NhbGxiYWNrPWV9LGxheWFhaXJfZGVidWdfdmlldy5vbkxvZ0luZm89ZnVuY3Rpb24oZSl7bG9nX2luZm9fY29udHJvbC5vbmNsaWNrPWV9LGxheWFhaXJfZGVidWdfdmlldy5vblJlZnJlc2g9ZnVuY3Rpb24oZSl7cmVmcmVzaF9jb250cm9sLm9uY2xpY2s9ZX0sbGF5YWFpcl9kZWJ1Z192aWV3Lm9uUHJpbnRFbmFibGVkTm9kZUNoYWluPWZ1bmN0aW9uKGUpe2VuYWJsZWRfbm9kZV9jaGFpbl9jb250cm9sLm9uY2xpY2s9ZX0sbGF5YWFpcl9kZWJ1Z192aWV3Lm9uUHJpbnRTaXplQ2hhaW49ZnVuY3Rpb24oZSl7c2l6ZV9jaGFpbl9jb250cm9sLm9uY2xpY2s9ZX0sbGF5YWFpcl9kZWJ1Z192aWV3Lm9uVG9nZ2xlVmlzaWJpbGl0eT1mdW5jdGlvbihlKXt2aXNpYmlsaXR5X2NvbnRyb2wub25jaGFuZ2U9ZX0sbGF5YWFpcl9kZWJ1Z192aWV3Lm9uVG9nZ2xlRGVidWdCb3JkZXI9ZnVuY3Rpb24oZSl7c2hvd19ib3JkZXJfY29udHJvbC5vbmNoYW5nZT1lfSxsYXlhYWlyX2RlYnVnX3ZpZXcub25Ub2dnbGVTaG93Q3VycmVudENhY2hlPWZ1bmN0aW9uKGUpe3Nob3dfY3VycmVudF9jYWNoZV9jb250cm9sLm9uY2hhbmdlPWV9LGxheWFhaXJfZGVidWdfdmlldy5vblRvZ2dsZVNob3dBbGxDYWNoZT1mdW5jdGlvbihlKXtzaG93X2FsbF9jYWNoZV9jb250cm9sLm9uY2hhbmdlPWV9LGxheWFhaXJfZGVidWdfdmlldy5vblRvZ2dsZVNob3dBdGxhcz1mdW5jdGlvbihlKXtzaG93X2F0bGFzX2NvbnRyb2wub25jaGFuZ2U9ZX07"; return DivScripts; })() /** *tianpeng *@author */ //class laya.debug.tools.AtlasTools var AtlasTools=(function(){ function AtlasTools(){ this.mSprite=null; this.mIndex=0; this.mTextureDic={}; } __class(AtlasTools,'laya.debug.tools.AtlasTools'); var __proto=AtlasTools.prototype; __proto.start=function(){ if (!Render.isWebGL)return; if (this.mSprite==null){ this.mSprite=new Sprite(); } Laya.stage.addChild(this.mSprite); this.showNext(); } __proto.end=function(){ if (!Render.isWebGL)return; if (this.mSprite){ Laya.stage.removeChild(this.mSprite); } } __proto.showNext=function(){ if (!Render.isWebGL)return; if (this.mSprite==null){ this.mSprite=new Sprite(); } Laya.stage.addChild(this.mSprite); this.mIndex++; var resManager; /*__JS__ */resManager=laya.webgl.atlas.AtlasResourceManager.instance;; var tCount=resManager.getAtlaserCount(); if (this.mIndex >=tCount){ this.mIndex=0; }; var tTexture; if (this.mTextureDic[this.mIndex]){ tTexture=this.mTextureDic[this.mIndex]; }else { var tAtlaser=resManager.getAtlaserByIndex(this.mIndex); if (tAtlaser && tAtlaser.texture){ tTexture=new Texture(tAtlaser.texture,null); this.mTextureDic[this.mIndex]=tTexture; } } if (tTexture){ this.mSprite.graphics.clear(); this.mSprite.graphics.save(); this.mSprite.graphics.alpha(0.9); this.mSprite.graphics.drawRect(0,0,1024,1024,"#efefefe"); this.mSprite.graphics.restore(); this.mSprite.graphics.drawTexture(tTexture,0,0,1024,1024); this.mSprite.graphics.fillText((this.mIndex+1).toString()+"/"+tCount.toString(),25,100,"40px Arial","#ff0000","left"); } } AtlasTools.getInstance=function(){ return AtlasTools.mInstance=AtlasTools.mInstance|| new AtlasTools(); } AtlasTools.mInstance=null; return AtlasTools; })() /** *... *@author ww */ //class laya.debug.tools.Base64Atlas var Base64Atlas=(function(){ function Base64Atlas(data,idKey){ this.data=null; this.replaceO=null; this.idKey=null; this._loadedHandler=null; this.data=data; if (!idKey)idKey=Math.random()+"key"; this.idKey=idKey; this.init(); } __class(Base64Atlas,'laya.debug.tools.Base64Atlas'); var __proto=Base64Atlas.prototype; //preLoad(); __proto.init=function(){ this.replaceO={}; var key; for (key in this.data){ this.replaceO[key]=this.idKey+"/"+key; } } __proto.getAdptUrl=function(url){ return this.replaceO[url]; } __proto.preLoad=function(completeHandler){ this._loadedHandler=completeHandler; Laya.loader.load(Base64ImageTool.getPreloads(this.data),new Handler(this,this.preloadEnd)); } __proto.preloadEnd=function(){ var key; for (key in this.data){ var tx; tx=Laya.loader.getRes(this.data[key]); Loader.cacheRes(this.replaceO[key],tx); } if (this._loadedHandler){ this._loadedHandler.run(); } } __proto.replaceRes=function(uiObj){ ObjectTools.replaceValue(uiObj,this.replaceO); } return Base64Atlas; })() /** *... *@author ww */ //class laya.debug.tools.Base64ImageTool var Base64ImageTool=(function(){ function Base64ImageTool(){} __class(Base64ImageTool,'laya.debug.tools.Base64ImageTool'); Base64ImageTool.getCanvasPic=function(img){ img=img.bitmap; var canvas=Browser.createElement("canvas"); var ctx=canvas.getContext('2d'); canvas.height=img.height; canvas.width=img.width; ctx.drawImage(img.source,0,0); return canvas; } Base64ImageTool.getBase64Pic=function(img){ return Base64ImageTool.getCanvasPic(img).toDataURL("image/png"); } Base64ImageTool.getPreloads=function(base64Data){ var rst; rst=[]; var key; for (key in base64Data){ rst.push({url:base64Data[key],type:/*laya.net.Loader.IMAGE*/"image" }); } return rst; } return Base64ImageTool; })() /** *base64编码解码类 *@author ww */ //class laya.debug.tools.Base64Tool var Base64Tool=(function(){ function Base64Tool(){} __class(Base64Tool,'laya.debug.tools.Base64Tool'); Base64Tool.init=function(){ if (Base64Tool.lookup) return; Base64Tool.lookup=new Uint8Array(256) for (var i=0;i < Base64Tool.chars.length;i++){ Base64Tool.lookup[Base64Tool.chars.charCodeAt(i)]=i; } } Base64Tool.encode=function(arraybuffer){ var bytes=new Uint8Array(arraybuffer),i=0,len=bytes.length,base64=""; for (i=0;i < len;i+=3){ base64+=Base64Tool.chars[bytes[i] >> 2]; base64+=Base64Tool.chars[((bytes[i] & 3)<< 4)| (bytes[i+1] >> 4)]; base64+=Base64Tool.chars[((bytes[i+1] & 15)<< 2)| (bytes[i+2] >> 6)]; base64+=Base64Tool.chars[bytes[i+2] & 63]; } if ((len % 3)===2){ base64=base64.substring(0,base64.length-1)+"="; } else if (len % 3===1){ base64=base64.substring(0,base64.length-2)+"=="; } return base64; } Base64Tool.encodeStr=function(str){ var byte; byte=new Byte(); byte.writeUTFString(str); return Base64Tool.encodeByte(byte); } Base64Tool.encodeStr2=function(str){ var byte; byte=new Byte(); byte.writeUTFBytes(str); return Base64Tool.encodeByte(byte); } Base64Tool.encodeByte=function(byte,start,end){ (start===void 0)&& (start=0); (end===void 0)&& (end=-1); if (end < 0){ end=byte.length; } return Base64Tool.encode(byte.buffer.slice(start,end)); } Base64Tool.decodeToByte=function(base64){ return new Byte(Base64Tool.decode(base64)); } Base64Tool.decode=function(base64){ Base64Tool.init(); var bufferLength=base64.length *0.75,len=base64.length,i=0,p=0,encoded1=0,encoded2=0,encoded3=0,encoded4=0; if (base64[base64.length-1]==="="){ bufferLength--; if (base64[base64.length-2]==="="){ bufferLength--; } }; var arraybuffer=new ArrayBuffer(bufferLength),bytes=new Uint8Array(arraybuffer); for (i=0;i < len;i+=4){ encoded1=Base64Tool.lookup[base64.charCodeAt(i)]; encoded2=Base64Tool.lookup[base64.charCodeAt(i+1)]; encoded3=Base64Tool.lookup[base64.charCodeAt(i+2)]; encoded4=Base64Tool.lookup[base64.charCodeAt(i+3)]; bytes[p++]=(encoded1 << 2)| (encoded2 >> 4); bytes[p++]=((encoded2 & 15)<< 4)| (encoded3 >> 2); bytes[p++]=((encoded3 & 3)<< 6)| (encoded4 & 63); } return arraybuffer; } Base64Tool.chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; Base64Tool.lookup=null; return Base64Tool; })() /** *... *@author ww */ //class laya.debug.tools.CacheAnalyser var CacheAnalyser=(function(){ function CacheAnalyser(){} __class(CacheAnalyser,'laya.debug.tools.CacheAnalyser'); var __proto=CacheAnalyser.prototype; __proto.renderCanvas=function(sprite,time){ (time===void 0)&& (time=0); if (!CacheAnalyser.showCacheSprite)return; if (DebugInfoLayer.I.isDebugItem(sprite))return; DebugTool.showDisBoundToSprite(sprite,DebugInfoLayer.I.cacheViewLayer,DebugConsts.CANVAS_REC_COLOR,4); } __proto.reCacheCanvas=function(sprite,time){ (time===void 0)&& (time=0); if (!CacheAnalyser.showRecacheSprite)return; if (DebugInfoLayer.I.isDebugItem(sprite))return; var info; info=CacheAnalyser.getNodeInfoByNode(sprite); info.addCount(time); CacheAnalyser.counter.addTime(sprite,time); if (!info.parent){ DebugInfoLayer.I.nodeRecInfoLayer.addChild(info); } } CacheAnalyser.renderLoopBegin=function(){ DebugInfoLayer.I.cacheViewLayer.graphics.clear(); } CacheAnalyser.getNodeInfoByNode=function(node){ IDTools.idObj(node); var key=0; key=IDTools.getObjID(node); if (!CacheAnalyser._nodeInfoDic[key]){ CacheAnalyser._nodeInfoDic[key]=new ReCacheRecInfo(); } (CacheAnalyser._nodeInfoDic [key]).setTarget(node); return CacheAnalyser._nodeInfoDic[key]; } CacheAnalyser._nodeInfoDic={}; CacheAnalyser.showCacheSprite=false; CacheAnalyser.showRecacheSprite=true; __static(CacheAnalyser, ['counter',function(){return this.counter=new ObjTimeCountTool();},'I',function(){return this.I=new CacheAnalyser();} ]); return CacheAnalyser; })() /** * *@author ww *@version 1.0 * *@created 2017-3-2 下午12:11:59 */ //class laya.debug.tools.CallLaterTool var CallLaterTool=(function(){ function CallLaterTool(){ this._getHandler=null; this._indexHandler=null; this._pool=null; this._laters=null; } __class(CallLaterTool,'laya.debug.tools.CallLaterTool'); var __proto=CallLaterTool.prototype; /** *延迟执行。 *@param caller 执行域(this)。 *@param method 定时器回调函数。 *@param args 回调参数。 */ __proto.callLater=function(caller,method,args){ if (this._getHandler(caller,method)==null){ CallLaterTool.oldCallLater.call(this,caller,method,args); if(CallLaterTool._isRecording){ CallLaterTool._recordedCallLaters.push(this._laters[this._laters.length-1]); } } } CallLaterTool.initCallLaterRecorder=function(){ if(CallLaterTool.oldCallLater)return; CallLaterTool.oldCallLater=Laya.timer["callLater"]; Laya.timer["callLater"]=CallLaterTool["prototype"]["callLater"]; } CallLaterTool.beginRecordCallLater=function(){ CallLaterTool.initCallLaterRecorder(); CallLaterTool._isRecording=true; } CallLaterTool.runRecordedCallLaters=function(){ CallLaterTool._isRecording=false; var timer; timer=Laya.timer; var laters=timer["_laters"]; laters=CallLaterTool._recordedCallLaters; for (var i=0,n=laters.length-1;i <=n;i++){ var handler=laters[i]; if(CallLaterTool._recordedCallLaters.indexOf(handler)<0)continue ; handler.method!==null && handler.run(false); timer["_recoverHandler"](handler); laters.splice(i,1); } CallLaterTool._recordedCallLaters.length=0; } CallLaterTool._recordedCallLaters=[]; CallLaterTool._isRecording=false; CallLaterTool.oldCallLater=null; return CallLaterTool; })() /** *... *@author ww */ //class laya.debug.tools.CanvasTools var CanvasTools=(function(){ function CanvasTools(){} __class(CanvasTools,'laya.debug.tools.CanvasTools'); CanvasTools.createCanvas=function(width,height){ var rst=new HTMLCanvas("2D"); rst.getContext('2d'); rst.size(width,height); return rst; } CanvasTools.renderSpriteToCanvas=function(sprite,canvas,offsetX,offsetY){ RenderSprite.renders[sprite._renderType]._fun(sprite,canvas.context,offsetX,offsetY); } CanvasTools.getImageDataFromCanvas=function(canvas,x,y,width,height){ (x===void 0)&& (x=0); (y===void 0)&& (y=0); (width===void 0)&& (width=0); (height===void 0)&& (height=0); if (width <=0) width=canvas.width; if (height <=0) height=canvas.height; var imgdata=canvas.context.getImageData(x,y,width,height); return imgdata; } CanvasTools.getImageDataFromCanvasByRec=function(canvas,rec){ var imgdata=canvas.context.getImageData(rec.x,rec.y,rec.width,rec.height); return imgdata; } CanvasTools.getDifferCount=function(imageData1,imageData2){ var data1=imageData1.data; var data2=imageData2.data; var differCount=0; differCount=0; CanvasTools.walkImageData(imageData1,myWalkFun); return differCount; function myWalkFun (i,j,tarPos,data){ if (!CanvasTools.isPoinSame(tarPos,data1,data2))differCount++; } } CanvasTools.getDifferRate=function(imageData1,imageData2){ return CanvasTools.getDifferCount(imageData1,imageData2)/(imageData1.width *imageData1.height); } CanvasTools.getCanvasDisRec=function(canvas){ var rst; rst=new Rectangle; var imgdata; imgdata=CanvasTools.getImageDataFromCanvas(canvas,0,0); var maxX=0; var minX=0; var maxY=0; var minY=0; maxX=maxY=0; minX=imgdata.width; minY=imgdata.height; var i=0,iLen=0; var j=0,jLen=0; iLen=imgdata.width; jLen=imgdata.height; var data; data=imgdata.data; var tarPos=0; for (j=0;j < jLen;j++){ for (i=0;i < iLen;i++){ if (!CanvasTools.isEmptyPoint(data,tarPos)){ if (minX > i) minX=i; if (maxX < i) maxX=i; if (minY > j) minY=j; if (maxY < j) maxY=j; } tarPos+=4; } } rst.setTo(minX,minY,maxX-minX+1,maxY-minY+1); return rst; } CanvasTools.fillCanvasRec=function(canvas,rec,color){ var ctx=canvas.context; ctx.fillStyle=color; ctx.fillRect(rec.x,rec.y,rec.width,rec.height); } CanvasTools.isEmptyPoint=function(data,pos){ if (data[pos]==0 && data[pos+1]==0 && data[pos+2]==0 && data[pos+3]==0){ return true; } else{ return false; } } CanvasTools.isPoinSame=function(pos,data1,data2){ if (data1[pos]==data2[pos] && data1[pos+1]==data2[pos+1] && data1[pos+2]==data2[pos+2] && data1[pos+3]==data2[pos+3]){ return true; } else{ return false; } } CanvasTools.walkImageData=function(imgdata,walkFun){ var i=0,iLen=0; var j=0,jLen=0; iLen=imgdata.width; jLen=imgdata.height; var tarPos=0; var data=imgdata.data; for (i=0;i < iLen;i++){ for (j=0;j < jLen;j++){ walkFun(i,j,tarPos,data); tarPos+=4; } } } CanvasTools.getSpriteByCanvas=function(canvas){ var rst; rst=new Sprite(); rst.graphics.drawTexture(new Texture(canvas),0,0,canvas.width,canvas.height); return rst; } CanvasTools.renderSpritesToCanvas=function(canvas,sprites,offx,offy,startIndex){ (offx===void 0)&& (offx=0); (offy===void 0)&& (offy=0); (startIndex===void 0)&& (startIndex=0); var i=0,len=0; len=sprites.length; for (i=startIndex;i < len;i++){ CanvasTools.renderSpriteToCanvas(sprites[i],canvas,offx,offy); } } CanvasTools.clearCanvas=function(canvas){ var preWidth=NaN; var preHeight=NaN; preWidth=canvas.width; preHeight=canvas.height; canvas.size(preWidth+1,preHeight); canvas.size(preWidth,preHeight); } CanvasTools.getImagePixels=function(x,y,width,data,colorLen){ (colorLen===void 0)&& (colorLen=4); var pos=0; pos=(x *width+y)*colorLen; var i=0,len=0; var rst; rst=[]; len=colorLen; for (i=0;i < len;i++){ rst.push(data[pos+i]); } return rst; } return CanvasTools; })() /** * *@author ww *@version 1.0 * *@created 2015-10-23 下午2:24:04 */ //class laya.debug.tools.ClassTool var ClassTool=(function(){ function ClassTool(){} __class(ClassTool,'laya.debug.tools.ClassTool'); ClassTool.defineProperty=function(obj,name,des){ /*__JS__ */Object.defineProperty(obj,name,des);; } ClassTool.getOwnPropertyDescriptor=function(obj,name){ var rst; /*__JS__ */rst=Object.getOwnPropertyDescriptor(obj,name);; return rst; } ClassTool.getOwnPropertyDescriptors=function(obj){ var rst; /*__JS__ */rst=Object.getOwnPropertyDescriptors(obj);; return rst; } ClassTool.getOwnPropertyNames=function(obj){ var rst; /*__JS__ */rst=Object.getOwnPropertyNames(obj);; return rst; } ClassTool.getObjectGetSetKeys=function(obj,rst){ if (!rst)rst=[]; var keys; keys=laya.debug.tools.ClassTool.getOwnPropertyNames(obj); var key; for (key in keys){ key=keys[key]; if (key.indexOf("_$get_")>=0){ key=key.replace("_$get_",""); rst.push(key); } } if (obj["__proto__"]){ ClassTool.getObjectGetSetKeys(obj["__proto__"],rst); } return rst; } ClassTool.getObjectDisplayAbleKeys=function(obj,rst){ if (!rst)rst=[]; var key; var tValue; var tType; for (key in obj){ tValue=obj[key]; tType=typeof(tValue); if (key.charAt(0)=="_")continue ; rst.push(key); } ClassTool.getObjectGetSetKeys(obj,rst); rst=ObjectTools.getNoSameArr(rst); return rst; } ClassTool.getClassName=function(tar){ if ((typeof tar=='function'))return tar.name; return tar["constructor"].name; } ClassTool.getNodeClassAndName=function(tar){ if (!tar)return "null"; var rst; if (tar.name){ rst=ClassTool.getClassName(tar)+"("+tar.name+")"; }else{ rst=ClassTool.getClassName(tar); } return rst; } ClassTool.getClassNameByClz=function(clz){ return clz["name"]; } ClassTool.getClassByName=function(className){ var rst; rst=Laya._runScript(className); return rst; } ClassTool.createObjByName=function(className){ var clz; clz=ClassTool.getClassByName(className); return new clz(); } __static(ClassTool, ['displayTypes',function(){return this.displayTypes={"boolean":true,"number":true,"string":true };} ]); return ClassTool; })() /** *... *@author ww */ //class laya.debug.tools.ClickSelectTool var ClickSelectTool=(function(){ function ClickSelectTool(){ this.completeHandler=null; this.tSelectTar=null; this._selectTip=new Sprite(); this._selectTip.setBounds(new Rectangle(0,0,0,0)); Notice.listen(/*laya.debug.tools.DisplayHook.ITEM_CLICKED*/"ItemClicked",this,this.itemClicked); } __class(ClickSelectTool,'laya.debug.tools.ClickSelectTool'); var __proto=ClickSelectTool.prototype; __proto.beginClickSelect=function(complete){ this.completeHandler=complete; ClickSelectTool.isClickSelectState=true; this.clickSelectChange(); } __proto.clickSelectChange=function(){ if (!Browser.onPC)return; this.tSelectTar=null; this.clearSelectTip(); if (ClickSelectTool.isClickSelectState){ Laya.timer.loop(200,this,this.updateSelectTar,null,true); }else{ Laya.timer.clear(this,this.updateSelectTar); } } __proto.clearSelectTip=function(){ this._selectTip.removeSelf(); } __proto.updateSelectTar=function(){ this.clearSelectTip(); this.tSelectTar=DisplayHook.instance.getDisUnderMouse(); if (!this.tSelectTar){ return; } if (DebugInfoLayer.I.isDebugItem(this.tSelectTar))return; var g; g=this._selectTip.graphics; g.clear(); var rec; rec=NodeUtils.getGRec(this.tSelectTar); DebugInfoLayer.I.popLayer.addChild(this._selectTip); g.drawRect(0,0,rec.width,rec.height,null,DebugConsts.CLICK_SELECT_COLOR,2); this._selectTip.pos(rec.x,rec.y); } __proto.itemClicked=function(tar){ if (!ClickSelectTool.isClickSelectState)return; if (ClickSelectTool.ignoreDebugTool){ if (DebugInfoLayer.I.isDebugItem(tar))return; } if ((tar instanceof laya.debug.uicomps.ContextMenuItem )|| (tar.parent instanceof laya.debug.uicomps.ContextMenuItem )){ return; } DebugTool.showDisBound(tar); if (this.completeHandler){ this.completeHandler.runWith(tar); } ClickSelectTool.isClickSelectState=false; this.clickSelectChange(); } __getset(1,ClickSelectTool,'I',function(){ if (!ClickSelectTool._I)ClickSelectTool._I=new ClickSelectTool(); return ClickSelectTool._I; }); ClickSelectTool._I=null; ClickSelectTool.isClickSelectState=false; ClickSelectTool.ignoreDebugTool=false; return ClickSelectTool; })() /** *... *@author ww */ //class laya.debug.tools.ColorTool var ColorTool=(function(){ function ColorTool(){ this.red=NaN; this.green=NaN; this.blue=NaN; } __class(ColorTool,'laya.debug.tools.ColorTool'); ColorTool.toHexColor=function(color){ return Utils.toHexColor(color); } ColorTool.getRGBByRGBStr=function(str){ str.charAt(0)=='#' && (str=str.substr(1)); var color=/*__JS__ */parseInt(str,16); var flag=(str.length==8); var _color; _color=[((0x00FF0000 & color)>> 16),((0x0000FF00 & color)>> 8),(0x000000FF & color)]; return _color; } ColorTool.getColorBit=function(value){ var rst; rst=Math.floor(value).toString(16); rst=rst.length > 1 ? rst :"0"+rst; return rst; } ColorTool.getRGBStr=function(rgb){ return "#"+ColorTool.getColorBit(rgb[0])+ColorTool.getColorBit(rgb[1])+ColorTool.getColorBit(rgb[2]); } ColorTool.traseHSB=function(hsb){ console.log("hsb:",hsb[0],hsb[1],hsb[2]); } ColorTool.rgb2hsb=function(rgbR,rgbG,rgbB){ var rgb=[rgbR,rgbG,rgbB]; rgb.sort(MathTools.sortNumSmallFirst); var max=rgb[2]; var min=rgb[0]; var hsbB=max / 255.0; var hsbS=max==0 ? 0 :(max-min)/ max; var hsbH=0; if(max==min){ hsbH=1; } else if (rgbR==0 && rgbG==0&&rgbB==0){ }else if (max==rgbR && rgbG >=rgbB){ hsbH=(rgbG-rgbB)*60 / (max-min)+0; } else if (max==rgbR && rgbG < rgbB){ hsbH=(rgbG-rgbB)*60 / (max-min)+360; } else if (max==rgbG){ hsbH=(rgbB-rgbR)*60 / (max-min)+120; } else if (max==rgbB){ hsbH=(rgbR-rgbG)*60 / (max-min)+240; } return [hsbH,hsbS,hsbB]; } ColorTool.hsb2rgb=function(h,s,v){ var r=0,g=0,b=0; var i=Math.floor((h / 60)% 6); var f=(h / 60)-i; var p=v *(1-s); var q=v *(1-f *s); var t=v *(1-(1-f)*s); switch (i){ case 0: r=v; g=t; b=p; break ; case 1: r=q; g=v; b=p; break ; case 2: r=p; g=v; b=t; break ; case 3: r=p; g=q; b=v; break ; case 4: r=t; g=p; b=v; break ; case 5: r=v; g=p; b=q; break ; default : break ; } return [Math.floor(r *255.0),Math.floor(g *255.0),Math.floor(b *255.0)]; } return ColorTool; })() /** * *@author ww *@version 1.0 * *@created 2015-9-29 下午12:53:31 */ //class laya.debug.tools.CommonTools var CommonTools=(function(){ function CommonTools(){} __class(CommonTools,'laya.debug.tools.CommonTools'); CommonTools.bind=function(fun,scope){ var rst; /*__JS__ */rst=fun.bind(scope); return rst; } CommonTools.insertP=function(tar,x,y,scaleX,scaleY,rotation){ var nSp; nSp=new Sprite(); tar.parent.addChild(nSp); nSp.x=x; nSp.y=y; nSp.scaleX=scaleX; nSp.scaleY=scaleY; nSp.rotation=rotation; nSp.addChild(tar); CommonTools.count++; nSp.name="insertP:"+CommonTools.count; } CommonTools.insertChild=function(tar,x,y,scaleX,scaleY,rotation,color){ (color===void 0)&& (color="#ff00ff"); var nSp; nSp=new Sprite(); tar.addChild(nSp); nSp.x=x; nSp.y=y; nSp.scaleX=scaleX; nSp.scaleY=scaleY; nSp.rotation=rotation; nSp.graphics.drawRect(0,0,20,20,color); nSp.name="child:"+tar.numChildren; return nSp; } CommonTools.createSprite=function(width,height,color){ (color===void 0)&& (color="#ff0000"); var sp; sp=new Sprite(); sp.graphics.drawRect(0,0,width,height,color); sp.size(width,height); return sp; } CommonTools.createBtn=function(txt,width,height){ (width===void 0)&& (width=100); (height===void 0)&& (height=40); var sp; sp=new Sprite(); sp.size(width,height); sp.graphics.drawRect(0,0,sp.width,sp.height,"#ff0000"); sp.graphics.fillText(txt,sp.width *0.5,sp.height *0.5,null,"#ffff00","center"); return sp; } CommonTools.count=0; return CommonTools; })() /** * *@author ww *@version 1.0 * *@created 2015-9-24 下午6:37:56 */ //class laya.debug.tools.CountTool var CountTool=(function(){ function CountTool(){ this.data={}; this.preO={}; this.changeO={}; this.count=0; } __class(CountTool,'laya.debug.tools.CountTool'); var __proto=CountTool.prototype; __proto.reset=function(){ this.data={}; this.count=0; } __proto.add=function(name,num){ (num===void 0)&& (num=1); this.count++; if(!this.data.hasOwnProperty(name)){ this.data[name]=0; } this.data[name]=this.data[name]+num; } __proto.getKeyCount=function(key){ if(!this.data.hasOwnProperty(key)){ this.data[key]=0; } return this.data[key]; } __proto.getKeyChange=function(key){ if (!this.changeO[key])return 0; return this.changeO[key]; } __proto.record=function(){ var key; for (key in this.changeO){ this.changeO[key]=0; } for (key in this.data){ if (!this.preO[key])this.preO[key]=0; this.changeO[key]=this.data[key]-this.preO[key]; this.preO[key]=this.data[key] } } __proto.getCount=function(dataO){ var rst=0; var key; for (key in dataO){ rst+=dataO[key]; } return rst; } __proto.traceSelf=function(dataO){ if (!dataO)dataO=this.data; var tCount=0; tCount=this.getCount(dataO); console.log("total:"+tCount); return "total:"+tCount+"\n"+TraceTool.traceObj(dataO); } __proto.traceSelfR=function(dataO){ if (!dataO)dataO=this.data; var tCount=0; tCount=this.getCount(dataO); console.log("total:"+tCount); return "total:"+tCount+"\n"+TraceTool.traceObjR(dataO); } return CountTool; })() /** *... *@author ww */ //class laya.debug.tools.DebugConsts var DebugConsts=(function(){ function DebugConsts(){} __class(DebugConsts,'laya.debug.tools.DebugConsts'); DebugConsts.CLICK_SELECT_COLOR="#ff0000"; DebugConsts.CANVAS_REC_COLOR="#FF00FF"; DebugConsts.RECACHE_REC_COLOR="#00ff00"; DebugConsts.SPRITE_REC_COLOR="#ff0000"; DebugConsts.SPRITE_REC_LINEWIDTH=2; return DebugConsts; })() /** * *@author ww *@version 1.0 * *@created 2015-10-31 下午3:35:16 */ //class laya.debug.tools.DebugExport var DebugExport=(function(){ function DebugExport(){} __class(DebugExport,'laya.debug.tools.DebugExport'); DebugExport.export=function(){ var _window; /*__JS__ */_window=window;; var key; for(key in DebugExport._exportsDic){ _window[key]=DebugExport._exportsDic[key]; } } __static(DebugExport, ['_exportsDic',function(){return this._exportsDic={ "DebugTool":DebugTool, "Watcher":Watcher };} ]); return DebugExport; })() /** *... *@author ww */ //class laya.debug.tools.DebugTxt var DebugTxt=(function(){ function DebugTxt(){} __class(DebugTxt,'laya.debug.tools.DebugTxt'); DebugTxt.init=function(){ if (DebugTxt._txt)return; DebugTxt._txt=new Text(); DebugTxt._txt.pos(100,100); DebugTxt._txt.color="#ff00ff"; DebugTxt._txt.zOrder=999; DebugTxt._txt.fontSize=24; DebugTxt._txt.text="debugTxt inited"; Laya.stage.addChild(DebugTxt._txt); } DebugTxt.getArgArr=function(arg){ var rst; rst=[]; var i=0,len=arg.length; for(i=0;i-1;i--){ var child=sprite._childs[i]; if((child instanceof laya.display.Sprite )) DisControlTool.getObjectsUnderPoint(child,x,y,rst,filterFun); } } return rst; } DisControlTool.getObjectsUnderGlobalPoint=function(sprite,filterFun){ var point=new Point(); point.setTo(Laya.stage.mouseX,Laya.stage.mouseY); if(sprite.parent) point=(sprite.parent).globalToLocal(point); return DisControlTool.getObjectsUnderPoint(sprite,point.x,point.y,null,filterFun); } DisControlTool.findFirstObjectsUnderGlobalPoint=function(){ var disList; disList=DisControlTool.getObjectsUnderGlobalPoint(Laya.stage); if (!disList)return null; var i=0,len=0; var tDis; len=disList.length; for (i=len-1;i>=0;i--){ tDis=disList[i]; if (tDis && tDis.numChildren < 1){ return tDis; } } return tDis; } DisControlTool.visibleAndEnableObjFun=function(tar){ return tar.visible&&tar.mouseEnabled; } DisControlTool.visibleObjFun=function(tar){ return tar.visible; } DisControlTool.getMousePoint=function(sprite){ var point=new Point(); point.setTo(Laya.stage.mouseX,Laya.stage.mouseY); point=sprite.globalToLocal(point); return point; } DisControlTool.isChildE=function(parent,child){ if (!parent)return false; while (child){ if (child.parent==parent)return true; child=child.parent; } return false; } DisControlTool.isInTree=function(pNode,child){ return pNode==child || DisControlTool.isChildE(pNode,child); } DisControlTool.setTop=function(tar){ if(tar&&tar.parent){ var tParent; tParent=tar.parent; tParent.setChildIndex(tar,tParent.numChildren-1); } } DisControlTool.clearItemRelativeInfo=function(item){ var Nan="NaN"; item.getLayout().left=Nan; item.getLayout().right=Nan; item.getLayout().top=Nan; item.getLayout().bottom=Nan; } DisControlTool.swap=function(tarA,tarB){ if (tarA==tarB)return; var iA=0; iA=tarA.parent.getChildIndex(tarA); var iB=0; iB=tarB.parent.getChildIndex(tarB); var bP; bP=tarB.parent; tarA.parent.addChildAt(tarB,iA); bP.addChildAt(tarA,iB); } DisControlTool.insertToTarParent=function(tarA,tars,after){ (after===void 0)&& (after=false); var tIndex=0; var parent; if(!tarA)return; parent=tarA.parent; if(!parent)return; tIndex=parent.getChildIndex(tarA); if(after)tIndex++; DisControlTool.insertToParent(parent,tars,tIndex); } DisControlTool.insertToParent=function(parent,tars,index){ (index===void 0)&& (index=-1); if(!parent)return; if(index<0)index=parent.numChildren; var i=0,len=0; len=tars.length; for(i=0;i=tParent.numChildren){ newIndex=tParent.numChildren-1; } console.log("setChildIndex:"+newIndex); tParent.setChildIndex(child,newIndex); } } DisControlTool.downDis=function(child){ if(child&&child.parent){ var tParent; tParent=child.parent; var newIndex=0; newIndex=tParent.getChildIndex(child)-1; if(newIndex<0)newIndex=0; console.log("setChildIndex:"+newIndex); tParent.setChildIndex(child,newIndex); } } DisControlTool.setResizeAbleEx=function(node){ var clickItem; clickItem=node.getChildByName("resizeBtn"); if (clickItem){ SimpleResizer.setResizeAble(clickItem,node); } } DisControlTool.setResizeAble=function(node){ node.on(/*laya.events.Event.CLICK*/"click",null,DisControlTool.resizeHandler,[node]); } DisControlTool.resizeHandler=function(tar){ DisResizer.setUp(tar); } DisControlTool.setDragingItem=function(dragBar,tar){ dragBar.on(/*laya.events.Event.MOUSE_DOWN*/"mousedown",null,DisControlTool.dragingHandler,[tar]); tar.on(/*laya.events.Event.DRAG_END*/"dragend",null,DisControlTool.dragingEnd,[tar]); } DisControlTool.dragingHandler=function(tar){ if (tar){ tar.startDrag(); } } DisControlTool.dragingEnd=function(tar){ DisControlTool.intFyDisPos(tar); console.log(tar.x,tar.y); } DisControlTool.showToStage=function(dis,offX,offY){ (offX===void 0)&& (offX=0); (offY===void 0)&& (offY=0); var rec=dis.getBounds(); dis.x=Laya.stage.mouseX+offX; dis.y=Laya.stage.mouseY+offY; if (dis.x+rec.width > Laya.stage.width){ dis.x-=rec.width+offX; } if (dis.y+rec.height > Laya.stage.height){ dis.y-=rec.height+offY; } DisControlTool.intFyDisPos(dis); } DisControlTool.intFyDisPos=function(dis){ if (!dis)return; dis.x=Math.round(dis.x); dis.y=Math.round(dis.y); } DisControlTool.showOnly=function(disList,showItem){ var i=0,len=0; len=disList.length; for (i=0;i < len;i++){ disList[i].visible=disList[i]==showItem; } } DisControlTool.showOnlyByIndex=function(disList,index){ DisControlTool.showOnly(disList,disList[index]); } DisControlTool.addOnly=function(disList,showItem,parent){ var i=0,len=0; len=disList.length; for (i=0;i < len;i++){ if (disList[i] !=showItem){ disList[i].removeSelf(); }else{ parent.addChild(disList[i]); } } } DisControlTool.addOnlyByIndex=function(disList,index,parent){ DisControlTool.addOnly(disList,disList[index],parent); } __static(DisControlTool, ['tempP',function(){return this.tempP=new Point();} ]); return DisControlTool; })() /** * *@author ww *@version 1.0 * *@created 2015-12-24 下午4:20:25 */ //class laya.debug.tools.DisEditor var DisEditor=(function(){ function DisEditor(){ this.tar=null; this.rec=new Sprite(); this.rootContainer=new Sprite(); } __class(DisEditor,'laya.debug.tools.DisEditor'); var __proto=DisEditor.prototype; __proto.setTarget=function(target){ this.tar=target; var g; g=this.rec.graphics; g.clear(); var bounds; bounds=this.tar.getSelfBounds(); g.drawRect(bounds.x,bounds.y,bounds.width,bounds.height,null,"#00ff00"); this.createSameDisChain(); Laya.stage.addChild(this.rootContainer); } __proto.createSameDisChain=function(){ var tParent; var cpParent; var preTar; preTar=this.rec; tParent=this.tar; while(tParent&&tParent!=Laya.stage){ cpParent=new Sprite(); cpParent.addChild(preTar); cpParent.x=tParent.x; cpParent.y=tParent.y; cpParent.scaleX=tParent.scaleX; cpParent.scaleY=tParent.scaleY; cpParent.rotation=tParent.rotation; cpParent.scrollRect=tParent.scrollRect; preTar=cpParent; tParent=tParent.parent; } this.rootContainer.removeChildren(); this.rootContainer.addChild(preTar); } return DisEditor; })() /** *调试拾取显示对象类 *@author ww */ //class laya.debug.tools.DisplayHook var DisplayHook=(function(){ function DisplayHook(){ this.mouseX=NaN; this.mouseY=NaN; this._stage=null; this._target=null; this.isGetting=false; this._matrix=new Matrix(); this._point=new Point(); this._rect=new Rectangle(); this._event=Event.EMPTY; this._stage=Laya.stage; this.init(Render.context.canvas); } __class(DisplayHook,'laya.debug.tools.DisplayHook'); var __proto=DisplayHook.prototype; __proto.init=function(canvas){ var _$this=this; if (Browser.window.navigator.msPointerEnabled){ canvas.style['-ms-content-zooming']='none'; canvas.style['-ms-touch-action']='none'; }; var _this=this; Browser.document.addEventListener('mousedown',function(e){ _$this._event._stoped=false; DisplayHook.isFirst=true; _this.check(_this._stage,e.offsetX,e.offsetY,_this.onMouseDown,true,false); },true); Browser.document.addEventListener('touchstart',function(e){ _$this._event._stoped=false; DisplayHook.isFirst=true; var touches=e.changedTouches; for (var i=0,n=touches.length;i < n;i++){ var touch=touches[i]; initEvent(touch,e); _this.check(_this._stage,_this.mouseX,_this.mouseY,_this.onMouseDown,true,false); } },true); function initEvent (e,event){ _this._event._stoped=false; _this._event.nativeEvent=event || e; _this._target=null; if (e.offsetX){ _this.mouseX=e.offsetX; _this.mouseY=e.offsetY; }else { _this.mouseX=e.clientX-Laya.stage.offset.x; _this.mouseY=e.clientY-Laya.stage.offset.y; } } } __proto.onMouseMove=function(ele,hit){ this.sendEvent(ele,/*laya.events.Event.MOUSE_MOVE*/"mousemove"); return; if (hit && ele !=this._stage && ele!==this._target){ if (this._target){ if (this._target.$_MOUSEOVER){ this._target.$_MOUSEOVER=false; this._target.event(/*laya.events.Event.MOUSE_OUT*/"mouseout"); } } this._target=ele; if (!ele.$_MOUSEOVER){ ele.$_MOUSEOVER=true; this.sendEvent(ele,/*laya.events.Event.MOUSE_OVER*/"mouseover"); } }else if (!hit && this._target && ele===this._target){ this._target=null; if (ele.$_MOUSEOVER){ ele.$_MOUSEOVER=false; this.sendEvent(ele,/*laya.events.Event.MOUSE_OUT*/"mouseout"); } } } __proto.onMouseUp=function(ele,hit){ hit && this.sendEvent(ele,/*laya.events.Event.MOUSE_UP*/"mouseup"); } __proto.onMouseDown=function(ele,hit){ if (hit){ ele.$_MOUSEDOWN=true; this.sendEvent(ele,/*laya.events.Event.MOUSE_DOWN*/"mousedown"); } } __proto.sendEvent=function(ele,type){ if (!this._event._stoped){ ele.event(type,this._event.setTo(type,ele,ele)); if (type===/*laya.events.Event.MOUSE_UP*/"mouseup" && ele.$_MOUSEDOWN){ ele.$_MOUSEDOWN=false; ele.event(/*laya.events.Event.CLICK*/"click",this._event.setTo(/*laya.events.Event.CLICK*/"click",ele,ele)); } } } __proto.selectDisUnderMouse=function(){ DisplayHook.isFirst=true; this.check(Laya.stage,Laya.stage.mouseX,Laya.stage.mouseY,null,true,false); SelectInfosView.I.setSelectTarget(DebugTool.target); } __proto.getDisUnderMouse=function(){ this.isGetting=true; DisplayHook.isFirst=true; DebugTool.target=null; this.check(Laya.stage,Laya.stage.mouseX,Laya.stage.mouseY,null,true,false); this.isGetting=false; return DebugTool.target; } __proto.check=function(sp,mouseX,mouseY,callBack,hitTest,mouseEnable){ if (sp==DebugTool.debugLayer)return false; if (sp==DebugInfoLayer.I)return false; if (this.isGetting && sp==DebugInfoLayer.I)return false; if (!sp.visible || sp.getSelfBounds().width<=0)return false; var isHit=false; mouseEnable=true if (mouseEnable){ var graphicHit=false; if (hitTest){ this._rect=sp.getBounds(); isHit=this._rect.contains(mouseX,mouseY); this._point.setTo(mouseX,mouseY); sp.fromParentPoint(this._point); mouseX=this._point.x; mouseY=this._point.y; } if (isHit){ var flag=false; for (var i=sp._childs.length-1;i >-1;i--){ var child=sp._childs[i]; (flag=this.check(child,mouseX,mouseY,callBack,hitTest,true)); if (flag)break ; } graphicHit=sp.getGraphicBounds().contains(mouseX,mouseY); isHit=flag||graphicHit; if(isHit&&!flag&&DisplayHook.isFirst){ DisplayHook.isFirst=false; if(! ((sp instanceof laya.debug.tools.debugUI.DButton ))){ DebugTool.target=sp; if (!this.isGetting){ DebugTool.autoWork(); Notice.notify("ItemClicked",sp); } } } } } return isHit; } DisplayHook.initMe=function(){ if(!DisplayHook.instance){ DisplayHook.instance=new DisplayHook(); } } DisplayHook.ITEM_CLICKED="ItemClicked"; DisplayHook.instance=null; DisplayHook.isFirst=false; return DisplayHook; })() /** *简单的显示对象对象池 *从父容器上移除时即被视为可被重用 *@author ww *@version 1.0 * *@created 2015-11-13 下午8:05:13 */ //class laya.debug.tools.DisPool var DisPool=(function(){ function DisPool(){} __class(DisPool,'laya.debug.tools.DisPool'); DisPool.getDis=function(clz){ var clzName; clzName=ClassTool.getClassNameByClz(clz); if(!DisPool._objDic[clzName]){ DisPool._objDic[clzName]=[]; }; var disList; disList=DisPool._objDic[clzName]; var i=0,len=0; len=disList.length; for(i=0;i0&& SpriteRenderForVisibleAnalyse.tarRec.height > 0){ SpriteRenderForVisibleAnalyse.isTarRecOK=true; SpriteRenderForVisibleAnalyse.preImageData=CanvasTools.getImageDataFromCanvasByRec(SpriteRenderForVisibleAnalyse.mainCanvas,SpriteRenderForVisibleAnalyse.tarRec); SpriteRenderForVisibleAnalyse.tarImageData=CanvasTools.getImageDataFromCanvasByRec(SpriteRenderForVisibleAnalyse.mainCanvas,SpriteRenderForVisibleAnalyse.tarRec); }else{ console.log("tarRec Not OK:",SpriteRenderForVisibleAnalyse.tarRec); } }else{ if (SpriteRenderForVisibleAnalyse.isTarRecOK){ SpriteRenderForVisibleAnalyse.tImageData=CanvasTools.getImageDataFromCanvasByRec(SpriteRenderForVisibleAnalyse.mainCanvas,SpriteRenderForVisibleAnalyse.tarRec); var dRate=NaN; dRate=CanvasTools.getDifferRate(SpriteRenderForVisibleAnalyse.preImageData,SpriteRenderForVisibleAnalyse.tImageData); SpriteRenderForVisibleAnalyse.preImageData=SpriteRenderForVisibleAnalyse.tImageData; if (dRate > 0){ VisibleAnalyser.addCoverNode(me,dRate); } } } } __proto.analyseNode=function(node){ VisibleAnalyser.resetCoverList(); if (Sprite["prototype"]["render"] !=SpriteRenderForVisibleAnalyse.I.render){ this.preFun=Sprite["prototype"]["render"]; } this.target=node; Sprite["prototype"]["render"]=this.render; if (!SpriteRenderForVisibleAnalyse.tarCanvas) SpriteRenderForVisibleAnalyse.tarCanvas=CanvasTools.createCanvas(Laya.stage.width,Laya.stage.height); if (!SpriteRenderForVisibleAnalyse.mainCanvas) SpriteRenderForVisibleAnalyse.mainCanvas=CanvasTools.createCanvas(Laya.stage.width,Laya.stage.height); this.isTargetRenderd=false; SpriteRenderForVisibleAnalyse.isVisibleTesting=true; SpriteRenderForVisibleAnalyse.allowRendering=false; CanvasTools.clearCanvas(SpriteRenderForVisibleAnalyse.mainCanvas); CanvasTools.clearCanvas(SpriteRenderForVisibleAnalyse.tarCanvas); SpriteRenderForVisibleAnalyse.isTarRecOK=false; var ctx=new RenderContext(SpriteRenderForVisibleAnalyse.mainCanvas.width,SpriteRenderForVisibleAnalyse.mainCanvas.height,SpriteRenderForVisibleAnalyse.mainCanvas); SpriteRenderForVisibleAnalyse.mainCanvas=ctx.canvas; this.render.call(Laya.stage,ctx,0,0); if (!SpriteRenderForVisibleAnalyse.isTarRecOK){ SpriteRenderForVisibleAnalyse.coverRate=0; }else{ SpriteRenderForVisibleAnalyse.coverRate=CanvasTools.getDifferRate(SpriteRenderForVisibleAnalyse.preImageData,SpriteRenderForVisibleAnalyse.tarImageData); } VisibleAnalyser.coverRate=SpriteRenderForVisibleAnalyse.coverRate; VisibleAnalyser.isTarRecOK=SpriteRenderForVisibleAnalyse.isTarRecOK; console.log("coverRate:",SpriteRenderForVisibleAnalyse.coverRate); this.isTargetRenderd=false; SpriteRenderForVisibleAnalyse.isVisibleTesting=false; SpriteRenderForVisibleAnalyse.allowRendering=true; Sprite["prototype"]["render"]=this.preFun; } __proto.noRenderMode=function(){ return; RenderSprite["prototype"]["_graphics"]=this.m_graphics; RenderSprite["prototype"]["_image"]=this.m_image; RenderSprite["prototype"]["_image2"]=this.m_image2; } __proto.normalMode=function(){ RenderSprite["prototype"]["_graphics"]=this.pgraphic; RenderSprite["prototype"]["_image"]=this.pimage; RenderSprite["prototype"]["_image2"]=this.pimage2; } __proto.inits=function(){ this.noRenderMode(); } __proto.m_graphics=function(sprite,context,x,y){ if (laya.debug.tools.enginehook.SpriteRenderForVisibleAnalyse.allowRendering){ var tf=sprite._style._tf; sprite._graphics && sprite._graphics._render(sprite,context,x-tf.translateX,y-tf.translateY); }; var next=this._next; next._fun.call(next,sprite,context,x,y); } __proto.m_image=function(sprite,context,x,y){ if (laya.debug.tools.enginehook.SpriteRenderForVisibleAnalyse.allowRendering){ var style=sprite._style; context.ctx.drawTexture2(x,y,style._tf.translateX,style._tf.translateY,sprite.transform,style.alpha,style.blendMode,sprite._graphics._one); } } __proto.m_image2=function(sprite,context,x,y){ if (laya.debug.tools.enginehook.SpriteRenderForVisibleAnalyse.allowRendering){ var tf=sprite._style._tf; context.ctx.drawTexture2(x,y,tf.translateX,tf.translateY,sprite.transform,1,null,sprite._graphics._one); } } SpriteRenderForVisibleAnalyse.tarCanvas=null; SpriteRenderForVisibleAnalyse.mainCanvas=null; SpriteRenderForVisibleAnalyse.preImageData=null; SpriteRenderForVisibleAnalyse.tImageData=null; SpriteRenderForVisibleAnalyse.tarImageData=null; SpriteRenderForVisibleAnalyse.tarRec=null; SpriteRenderForVisibleAnalyse.isTarRecOK=false; SpriteRenderForVisibleAnalyse.isVisibleTesting=false; SpriteRenderForVisibleAnalyse.allowRendering=true; SpriteRenderForVisibleAnalyse.coverRate=NaN; __static(SpriteRenderForVisibleAnalyse, ['I',function(){return this.I=new SpriteRenderForVisibleAnalyse();} ]); return SpriteRenderForVisibleAnalyse; })() /** *... *@author ww */ //class laya.debug.tools.enginehook.SpriteRenderHook var SpriteRenderHook=(function(){ function SpriteRenderHook(){ /**@private */ this._repaint=1; this._renderType=1; this._x=0; this._y=0; } __class(SpriteRenderHook,'laya.debug.tools.enginehook.SpriteRenderHook'); var __proto=SpriteRenderHook.prototype; /** *更新、呈现显示对象。 *@param context 渲染的上下文引用。 *@param x X轴坐标。 *@param y Y轴坐标。 */ __proto.render=function(context,x,y){ if ((this)==Laya.stage){ CacheAnalyser.renderLoopBegin(); }; var preTime=0; preTime=Browser.now(); Stat.spriteCount++; if (this["ShowBorderSign"]){ DebugTool.showDisBoundToSprite(this,DebugInfoLayer.I.cacheViewLayer,DebugConsts.SPRITE_REC_COLOR,DebugConsts.SPRITE_REC_LINEWIDTH); } RenderSprite.renders[this._renderType]._fun(this,context,x+this._x,y+this._y); this._repaint=0; RenderAnalyser.I.render(this,Browser.now()-preTime); } SpriteRenderHook.init=function(){ if (SpriteRenderHook.I)return; SpriteRenderHook.I=new SpriteRenderHook(); SpriteRenderHook.setRenderHook(); } SpriteRenderHook.setRenderHook=function(){ Sprite["prototype"]["render"]=SpriteRenderHook.I.render; } SpriteRenderHook.showDisplayBorder=function(sprite,ifShowBorder){ (ifShowBorder===void 0)&& (ifShowBorder=true); sprite["ShowBorderSign"]=ifShowBorder; } SpriteRenderHook.isDisplayShowBorder=function(sprite){ return sprite["ShowBorderSign"]; } SpriteRenderHook.I=null; SpriteRenderHook.ShowBorderSign="ShowBorderSign"; return SpriteRenderHook; })() /** *本类调用原生observe接口,仅支持部分浏览器,chrome有效 *变化输出为异步方式,所以无法跟踪到是什么函数导致变化 *@author ww *@version 1.0 * *@created 2015-10-26 上午9:35:45 */ //class laya.debug.tools.exp.Observer var Observer=(function(){ function Observer(){} __class(Observer,'laya.debug.tools.exp.Observer'); Observer.observe=function(obj,callBack){ /*__JS__ */Object.observe(obj,callBack); } Observer.unobserve=function(obj,callBack){ /*__JS__ */Object.unobserve(obj,callBack); } Observer.observeDiffer=function(obj,sign,msg){ (msg===void 0)&& (msg="obDiffer"); var differFun=function (){ DifferTool.differ(sign,obj,msg); } Observer.observe(obj,differFun); } return Observer; })() /** *本类调用原生watch接口,仅火狐有效 *@author ww *@version 1.0 * *@created 2015-10-26 上午9:48:18 */ //class laya.debug.tools.exp.Watch var Watch=(function(){ function Watch(){} __class(Watch,'laya.debug.tools.exp.Watch'); Watch.watch=function(obj,name,callBack){ /*__JS__ */obj.watch(name,callBack); } Watch.unwatch=function(obj,name,callBack){ /*__JS__ */obj.unwatch(name,callBack); } return Watch; })() /** * *@author ww *@version 1.0 * *@created 2015-10-30 下午1:06:56 */ //class laya.debug.tools.FilterTool var FilterTool=(function(){ function FilterTool(){} __class(FilterTool,'laya.debug.tools.FilterTool'); FilterTool.getArrByFilter=function(arr,filterFun){ var i=0,len=arr.length; var rst=[]; for(i=0;i=0;i--){ if (GetSetProfile.noDisplayKeys[arr[i]]){ arr.splice(i,1); } } } GetSetProfile.getClassCount=function(className){ return GetSetProfile.countDic[className]; } GetSetProfile.addClassCount=function(className){ if (!GetSetProfile.countDic[className]){ GetSetProfile.countDic[className]=1; } else { GetSetProfile.countDic[className]=GetSetProfile.countDic[className]+1; } } GetSetProfile.init=function(){ if (GetSetProfile._inited) return; GetSetProfile._inited=true; var createFun=function (sp){ GetSetProfile.classCreated(sp); } FunHook.hook(Node,"call",null,createFun); GetSetProfile.handlerO={}; GetSetProfile.handlerO["get"]=function (target,key,receiver){ console.log("get",target,key,receiver); return /*__JS__ */Reflect.get(target,key,receiver); }; GetSetProfile.handlerO["set"]=function (target,key,value,receiver){ console.log("set",target,key,value,receiver); return /*__JS__ */Reflect.set(target,key,value,receiver); } } GetSetProfile.classCreated=function(obj,oClas){ if (GetSetProfile.fromMe) return; var className; className=ClassTool.getClassName(obj); GetSetProfile.addClassCount(className); GetSetProfile.addClassCount("ALL"); IDTools.idObj(obj); var classDes; classDes=GetSetProfile.hookClassDic[className]; if (!classDes){ GetSetProfile.profileClass(obj["constructor"]); classDes=GetSetProfile.hookClassDic[className]; if (!classDes) return; } GetSetProfile.hookObj2(obj,classDes); } GetSetProfile.hookObj=function(obj,keys){ var handler=GetSetProfile.handlerO; /*__JS__ */new Proxy(obj,handler); } GetSetProfile.hookObj2=function(obj,keys){ var i=0,len=0; len=keys.length; for (i=0;i < len;i++){ GetSetProfile.hookVar(obj,keys[i]); } } GetSetProfile.profileClass=function(clz){ var className; className=ClassTool.getClassName(clz); GetSetProfile.fromMe=true; var tO=new clz(); GetSetProfile.fromMe=false; var keys; keys=ClassTool.getObjectDisplayAbleKeys(tO); keys=ObjectTools.getNoSameArr(keys); var i=0,len=0; len=keys.length; var tV; var key; for (i=len-1;i >=0;i--){ key=keys[i]; tV=tO[key]; if ((typeof tV=='function')){ keys.splice(i,1); } } len=keys.length; GetSetProfile.removeNoDisplayKeys(keys); GetSetProfile.hookClassDic[className]=keys; } GetSetProfile.hookPrototype=function(tO,key){ console.log("hook:",key); try { GetSetProfile.hookVar(tO,key); } catch (e){ console.log("fail",key); } } GetSetProfile.reportCall=function(obj,name,type){ IDTools.idObj(obj); var objID=0; objID=IDTools.getObjID(obj); var className; className=ClassTool.getClassName(obj); GetSetProfile.recordInfo(className,name,type,objID); GetSetProfile.recordInfo("ALL",name,type,objID); } GetSetProfile.recordInfo=function(className,name,type,objID){ var propCallsDic; if (!GetSetProfile.infoDic[className]){ GetSetProfile.infoDic[className]={}; } propCallsDic=GetSetProfile.infoDic[className]; var propCalls; if (!propCallsDic[name]){ propCallsDic[name]={}; } propCalls=propCallsDic[name]; var propCallO; if (!propCalls[type]){ propCalls[type]={}; } propCallO=propCalls[type]; if (!propCallO[objID]){ propCallO[objID]=1; if (!propCallO["objCount"]){ propCallO["objCount"]=1; } else { propCallO["objCount"]=propCallO["objCount"]+1; } } else { propCallO[objID]=propCallO[objID]+1; } if (!propCallO["count"]){ propCallO["count"]=1; } else { propCallO["count"]=propCallO["count"]+1; } } GetSetProfile.showInfo=function(){ var rstO; rstO={}; var rstO1; rstO1={}; var arr; arr=[]; var arr1; arr1=[]; var className; var keyName; var type; for (className in GetSetProfile.infoDic){ var tClassO; var tClassO1; tClassO=GetSetProfile.infoDic[className]; rstO[className]=tClassO1={}; for (keyName in tClassO){ var tKeyO; var tKeyO1; tKeyO=tClassO[keyName]; tClassO1[keyName]=tKeyO1={}; for(type in tKeyO){ var tDataO; var tDataO1; tDataO=tKeyO[type]; tDataO["rate"]=tDataO["objCount"] / GetSetProfile.getClassCount(className); tKeyO1[type]=tDataO["rate"]; var tSKey; tSKey=className+"_"+keyName+"_"+type; rstO1[tSKey]=tDataO["rate"]; if (className=="ALL"){ if (type=="get"){ arr.push([tSKey,tDataO["rate"],tDataO["count"]]); }else{ arr1.push([tSKey,tDataO["rate"],tDataO["count"]]); } } } } } console.log(GetSetProfile.infoDic); console.log(GetSetProfile.countDic); console.log(rstO); console.log(rstO1); console.log("nodeCount:",GetSetProfile.getClassCount("ALL")); console.log("sort by rate"); GetSetProfile.showStaticInfo(arr,arr1,"1"); console.log("sort by count"); GetSetProfile.showStaticInfo(arr,arr1,"2"); } GetSetProfile.showStaticInfo=function(arr,arr1,sortKey){ console.log("get:"); GetSetProfile.showStaticArray(arr,sortKey); console.log("set:"); GetSetProfile.showStaticArray(arr1,sortKey); } GetSetProfile.showStaticArray=function(arr,sortKey){ (sortKey===void 0)&& (sortKey="1"); arr.sort(MathUtil.sortByKey(sortKey,true,true)); var i=0,len=0; len=arr.length; var tArr; for (i=0;i < len;i++){ tArr=arr[i]; console.log(tArr[0],Math.floor(tArr[1]*100),tArr[2]); } } GetSetProfile.hookVar=function(obj,name,setHook,getHook){ if (!setHook) setHook=[]; if (!getHook) getHook=[]; var preO=obj; var preValue; var newKey="___@"+newKey; var des; des=ClassTool.getOwnPropertyDescriptor(obj,name); var ndes={}; var mSet=function (value){ preValue=value; }; var mGet=function (){ return preValue; }; var mSet1=function (value){ var _t=/*__JS__ */this; GetSetProfile.reportCall(_t,name,"set"); }; var mGet1=function (){ var _t=/*__JS__ */this; GetSetProfile.reportCall(_t,name,"get"); return preValue; } getHook.push(mGet1); setHook.push(mSet1); while (!des && obj["__proto__"]){ obj=obj["__proto__"]; des=ClassTool.getOwnPropertyDescriptor(obj,name); } if (des){ ndes.set=des.set ? des.set :mSet; ndes.get=des.get ? des.get :mGet; if (!des.get){ preValue=preO[name]; } ndes.enumerable=des.enumerable; setHook.push(ndes.set); getHook.push(ndes.get); FunHook.hookFuns(ndes,"set",setHook); FunHook.hookFuns(ndes,"get",getHook,getHook.length-1); ClassTool.defineProperty(preO,name,ndes); } if (!des){ ndes.set=mSet; ndes.get=mGet; preValue=preO[name]; setHook.push(ndes.set); getHook.push(ndes.get); FunHook.hookFuns(ndes,"set",setHook); FunHook.hookFuns(ndes,"get",getHook,getHook.length-1); ClassTool.defineProperty(preO,name,ndes); } } GetSetProfile._inited=false; GetSetProfile.handlerO=null; GetSetProfile.ALL="ALL"; GetSetProfile.countDic={}; GetSetProfile.fromMe=false; GetSetProfile.hookClassDic={}; GetSetProfile.infoDic={}; __static(GetSetProfile, ['noDisplayKeys',function(){return this.noDisplayKeys={"conchModel":true};} ]); return GetSetProfile; })() /** *本类用于在对象的函数上挂钩子 *@author ww *@version 1.0 * *@created 2015-10-23 下午1:13:13 */ //class laya.debug.tools.hook.FunHook var FunHook=(function(){ function FunHook(){} __class(FunHook,'laya.debug.tools.hook.FunHook'); FunHook.hook=function(obj,funName,preFun,aftFun){ FunHook.hookFuns(obj,funName,[preFun,obj[funName],aftFun],1); } FunHook.hookAllFun=function(obj){ var key; var arr; arr=ClassTool.getOwnPropertyNames(obj); for(key in arr){ key=arr[key]; if (FunHook.special[key])continue ; console.log("try hook:",key); if((typeof (obj[key])=='function')){ console.log("hook:",key); FunHook.hookFuns(obj,key,[FunHook.getTraceMsg("call:"+key),obj[key]],1); } } if(obj["__proto__"]){ FunHook.hookAllFun(obj["__proto__"]); }else{ console.log("end:",obj); } } FunHook.getTraceMsg=function(msg){ var rst; rst=function (){ console.log(msg); } return rst; } FunHook.hookFuns=function(obj,funName,funList,rstI){ (rstI===void 0)&& (rstI=-1); var _preFun=obj[funName]; var newFun; newFun=function (__args){ var args=arguments; var rst; var i=0; var len=0; len=funList.length; for(i=0;i 0)return JSTools._pixelRatio; var canvas=Browser.createElement("canvas"); var context=canvas.getContext('2d'); var devicePixelRatio=Browser.window.devicePixelRatio || 1; var backingStoreRatio=context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; var ratio=devicePixelRatio / backingStoreRatio; console.log("pixelRatioc:",ratio); JSTools._pixelRatio=ratio; return ratio; } JSTools._pixelRatio=-1; return JSTools; })() /** *布局工具类,目前只支持水平方向布局 *@author ww */ //class laya.debug.tools.layout.Layouter var Layouter=(function(){ function Layouter(){ /** *布局用的数据,与布局方法有关 */ this.data=null; /** *布局涉及的对象 */ this._items=null; /** *布局用的函数 */ this.layoutFun=null; /** *布局起始x */ this._sX=0; /** *布局宽 */ this._width=0; } __class(Layouter,'laya.debug.tools.layout.Layouter'); var __proto=Layouter.prototype; __proto.layout=function(){ this.layoutFun(this._width,this._items,this.data,this._sX); } /** *重新布局 * */ __proto.changed=function(){ Laya.timer.callLater(this,this.layout); } /** *根据当前的对象状态计算位置大小 * */ __proto.calSize=function(){ var i=0,len=0; var tItem; tItem=this.items[0]; this._sX=tItem.x; var maxX=NaN; maxX=this._sX+tItem.width; len=this.items.length; for (i=1;i < len;i++){ tItem=this.items[i]; if (this._sX > tItem.x){ this._sX=tItem.x; } if (maxX < tItem.x+tItem.width){ maxX=tItem.x+tItem.width; } } this._width=maxX-this._sX; } __getset(0,__proto,'width',function(){ return this._width; },function(v){ this._width=v; this.changed(); }); __getset(0,__proto,'x',function(){ return this._sX; },function(v){ this._sX=v; this.changed(); }); __getset(0,__proto,'items',function(){ return this._items; },function(arr){ this._items=arr; this.calSize(); }); return Layouter; })() /** *... *@author ww */ //class laya.debug.tools.layout.LayoutFuns var LayoutFuns=(function(){ function LayoutFuns(){} __class(LayoutFuns,'laya.debug.tools.layout.LayoutFuns'); LayoutFuns.sameWidth=function(totalWidth,items,data,sX){ (sX===void 0)&& (sX=0); var dWidth=0; if (data && data.dWidth) dWidth=data.dWidth; var perWidth=NaN; perWidth=(totalWidth-(items.length-1)*dWidth)/ items.length; var tItem; var i=0,len=0; var tX=NaN; tX=sX; len=items.length; for (i=0;i < len;i++){ tItem=items[i]; tItem.x=tX; tItem.width=perWidth; tX+=dWidth+perWidth; } } LayoutFuns.getSameWidthLayout=function(items,dWidth){ var data; data={}; data.dWidth=dWidth; return LayoutFuns.getLayouter(items,data,laya.debug.tools.layout.LayoutFuns.sameWidth); } LayoutFuns.getLayouter=function(items,data,fun){ var layouter; layouter=new Layouter(); layouter.items=items; layouter.data=data; layouter.layoutFun=fun; return layouter; } LayoutFuns.sameDis=function(totalWidth,items,data,sX){ (sX===void 0)&& (sX=0); var dWidth=NaN; dWidth=totalWidth; var tItem; var i=0,len=0; len=items.length; LayoutFuns.prepareForLayoutWidth(totalWidth,items); for (i=0;i < len;i++){ tItem=items[i]; dWidth-=tItem.width; } if (items.length > 1) dWidth=dWidth / (items.length-1); var tX=NaN; tX=sX; len=items.length; for (i=0;i < len;i++){ tItem=items[i]; tItem.x=tX; tX+=dWidth+tItem.width; } } LayoutFuns.getSameDisLayout=function(items,rateSame){ (rateSame===void 0)&& (rateSame=false); var data; data={}; if (rateSame){ var i=0,len=0; len=items.length; var tItem; var totalWidth=NaN; totalWidth=0; for (i=0;i < len;i++){ tItem=items[i]; totalWidth+=tItem.width; } totalWidth=tItem.x+tItem.width; for (i=0;i < len;i++){ tItem=items[i]; LayoutFuns.setItemRate(tItem,tItem.width / totalWidth); } } return LayoutFuns.getLayouter(items,data,laya.debug.tools.layout.LayoutFuns.sameDis); } LayoutFuns.fullFill=function(totalWidth,items,data,sX){ (sX===void 0)&& (sX=0); var dL=0,dR=0; if (data){ if (data.dL) dL=data.dL; if (data.dR) dR=data.dR; }; var item; var i=0,len=0; len=items.length; for (i=0;i < len;i++){ item=items[i]; item.x=sX+dL; item.width=totalWidth-dL-dR; } } LayoutFuns.getFullFillLayout=function(items,dL,dR){ (dL===void 0)&& (dL=0); (dR===void 0)&& (dR=0); var data; data={}; data.dL=dL; data.dR=dR; return LayoutFuns.getLayouter(items,data,laya.debug.tools.layout.LayoutFuns.fullFill); } LayoutFuns.fixPos=function(totalWidth,items,data,sX){ (sX===void 0)&& (sX=0); var dLen=0; var poss=[]; var isRate=false; if (data){ if (data.dLen) dLen=data.dLen; if (data.poss) poss=data.poss; if (data.isRate) isRate=data.isRate; }; var item; var i=0,len=0; len=poss.length; var tX=NaN; tX=sX; var tValue=NaN; var preItem; preItem=null; for (i=0;i < len;i++){ item=items[i]; tValue=sX+poss[i]; if (isRate){ tValue=sX+poss[i] *totalWidth; } item.x=tValue; if (preItem){ preItem.width=item.x-dLen-preItem.x; } preItem=item; }; var lastItem; lastItem=items[items.length-1]; lastItem.width=sX+totalWidth-dLen-lastItem.x; } LayoutFuns.getFixPos=function(items,dLen,isRate,poss){ (dLen===void 0)&& (dLen=0); (isRate===void 0)&& (isRate=false); var data; data={}; var layout; layout=LayoutFuns.getLayouter(items,data,LayoutFuns.fixPos); var i=0,len=0; var sX=NaN; var totalWidth=NaN; sX=layout.x; totalWidth=layout.width; if (!poss){ poss=[]; len=items.length; var tValue=NaN; for (i=0;i < len;i++){ tValue=items[i].x-sX; if (isRate){ tValue=tValue / totalWidth; } else{ } poss.push(tValue); } } data.dLen=dLen; data.poss=poss; data.isRate=isRate; return layout; } LayoutFuns.clearItemsRelativeInfo=function(items){ var i=0,len=0; len=items.length; for (i=0;i < len;i++){ LayoutFuns.clearItemRelativeInfo(items[i]); } } LayoutFuns.clearItemRelativeInfo=function(item){ var Nan="NaN"; item.getLayout().left=Nan; item.getLayout().right=Nan; } LayoutFuns.prepareForLayoutWidth=function(totalWidth,items){ var i=0,len=0; len=items.length; for (i=0;i < len;i++){ LayoutFuns.prepareItemForLayoutWidth(totalWidth,items[i]); } } LayoutFuns.getSumWidth=function(items){ var sum=NaN; sum=0; var i=0,len=0; len=items.length; for (i=0;i < len;i++){ sum+=items[i].width; } return sum; } LayoutFuns.prepareItemForLayoutWidth=function(totalWidth,item){ if (LayoutFuns.getItemRate(item)> 0){ item.width=totalWidth *LayoutFuns.getItemRate(item); } } LayoutFuns.setItemRate=function(item,rate){ item["layoutRate"]=rate; } LayoutFuns.getItemRate=function(item){ return item["layoutRate"] ? item["layoutRate"] :-1; } LayoutFuns.setItemFreeSize=function(item,free){ (free===void 0)&& (free=true); item["layoutFreeSize"]=free; } LayoutFuns.isItemFreeSize=function(item){ return item["layoutFreeSize"]; } LayoutFuns.lockedDis=function(totalWidth,items,data,sX){ (sX===void 0)&& (sX=0); var dists; dists=data.dists; var sumDis=NaN; sumDis=data.sumDis; var sumWidth=NaN; var i=0,len=0; var tItem; var preItem; LayoutFuns.prepareForLayoutWidth(totalWidth,items); sumWidth=LayoutFuns.getSumWidth(items); var dWidth=NaN; dWidth=totalWidth-sumDis-sumWidth; var freeItem; freeItem=LayoutFuns.getFreeItem(items); if(freeItem){ freeItem.width+=dWidth; } preItem=items[0]; preItem.x=sX; len=items.length; for(i=1;i maxHeight){ maxHeight=tItem.height; } tCount++; if (tCount >=xCount){ tCount=tCount % xCount; tItem.y+=maxHeight+dY; maxHeight=0; }else{ tX+=tItem.width+dx; } } } LayoutTools.layoutToWidth=function(items,width,dX,dY,sx,sy){ var tX=NaN,tY=NaN; var tItem; var i=0,len=0; tX=sx; tY=sy; len=items.length; for(i=0;iwidth){ tX=sx; tY+=dY+tItem.height; }else{ } tItem.x=tX; tItem.y=tY; tX+=dX+tItem.width; } } return LayoutTools; })() /** *... *@author ww */ //class laya.debug.tools.MathTools var MathTools=(function(){ function MathTools(){} __class(MathTools,'laya.debug.tools.MathTools'); MathTools.sortBigFirst=function(a,b){ if (a==b) return 0; return b > a ? 1 :-1; } MathTools.sortSmallFirst=function(a,b){ if (a==b) return 0; return b > a ?-1 :1; } MathTools.sortNumBigFirst=function(a,b){ return parseFloat(b)-parseFloat(a); } MathTools.sortNumSmallFirst=function(a,b){ return parseFloat(a)-parseFloat(b); } MathTools.sortByKey=function(key,bigFirst,forceNum){ (bigFirst===void 0)&& (bigFirst=false); (forceNum===void 0)&& (forceNum=true); var _sortFun; if (bigFirst){ _sortFun=forceNum ? MathTools.sortNumBigFirst :MathTools.sortBigFirst; }else { _sortFun=forceNum ? MathTools.sortNumSmallFirst :MathTools.sortSmallFirst; } return function (a,b){ return _sortFun(a[key],b[key]); }; } return MathTools; })() /** *... *@author ww */ //class laya.debug.tools.MouseEventAnalyser var MouseEventAnalyser=(function(){ function MouseEventAnalyser(){} __class(MouseEventAnalyser,'laya.debug.tools.MouseEventAnalyser'); MouseEventAnalyser.analyseNode=function(node){ DebugTool.showDisBound(node,true); var _node; _node=node; ObjectTools.clearObj(MouseEventAnalyser.infoO); ObjectTools.clearObj(MouseEventAnalyser.nodeO); ObjectTools.clearObj(MouseEventAnalyser.hitO); var nodeList; nodeList=[]; while (node){ IDTools.idObj(node); MouseEventAnalyser.nodeO[IDTools.getObjID(node)]=node; nodeList.push(node); node=node.parent; } MouseEventAnalyser.check(Laya.stage,Laya.stage.mouseX,Laya.stage.mouseY,null); var canStr; if (MouseEventAnalyser.hitO[IDTools.getObjID(_node)]){ console.log("can hit"); canStr="can hit"; } else{ console.log("can't hit"); canStr="can't hit"; }; var i=0,len=0; nodeList=nodeList.reverse(); len=nodeList.length; var rstTxts; rstTxts=["[分析对象]:"+ClassTool.getNodeClassAndName(_node)+":"+canStr]; for (i=0;i < len;i++){ node=nodeList[i]; if (MouseEventAnalyser.hitO[IDTools.getObjID(node)]){ console.log("can hit:",ClassTool.getNodeClassAndName(node)); console.log("原因:",MouseEventAnalyser.infoO[IDTools.getObjID(node)]); rstTxts.push("can hit:"+" "+ClassTool.getNodeClassAndName(node)); rstTxts.push("原因:"+" "+MouseEventAnalyser.infoO[IDTools.getObjID(node)]); } else{ console.log("can't hit:"+ClassTool.getNodeClassAndName(node)); console.log("原因:",MouseEventAnalyser.infoO[IDTools.getObjID(node)] ? MouseEventAnalyser.infoO[IDTools.getObjID(node)] :"鼠标事件在父级已停止派发"); rstTxts.push("can't hit:"+" "+ClassTool.getNodeClassAndName(node)); rstTxts.push("原因:"+" "+(MouseEventAnalyser.infoO[IDTools.getObjID(node)] ? MouseEventAnalyser.infoO[IDTools.getObjID(node)] :"鼠标事件在父级已停止派发")); } }; var rstStr; rstStr=rstTxts.join("\n"); ToolPanel.I.showTxtInfo(rstStr); } MouseEventAnalyser.check=function(sp,mouseX,mouseY,callBack){ IDTools.idObj(sp); var isInAnlyseChain=false; isInAnlyseChain=MouseEventAnalyser.nodeO[IDTools.getObjID(sp)]; MouseEventAnalyser._point.setTo(mouseX,mouseY); sp.fromParentPoint(MouseEventAnalyser._point); mouseX=MouseEventAnalyser._point.x; mouseY=MouseEventAnalyser._point.y; var scrollRect=sp.scrollRect; if (scrollRect){ MouseEventAnalyser._rect.setTo(scrollRect.x,scrollRect.y,scrollRect.width,scrollRect.height); var isHit=MouseEventAnalyser._rect.contains(mouseX,mouseY); if (!isHit){ if (isInAnlyseChain){ MouseEventAnalyser.infoO[IDTools.getObjID(sp)]="scrollRect没有包含鼠标"+MouseEventAnalyser._rect.toString()+":"+mouseX+","+mouseY; } return false; } }; var i=0,len=0; var cList; cList=sp._childs; len=cList.length; var child; var childInChain; childInChain=null; for (i=0;i < len;i++){ child=cList[i]; IDTools.idObj(child); if (MouseEventAnalyser.nodeO[IDTools.getObjID(child)]){ childInChain=child; break ; } }; var coverByOthers=false; coverByOthers=childInChain ? true :false; var flag=false; if (sp.hitTestPrior && !sp.mouseThrough && !MouseEventAnalyser.hitTest(sp,mouseX,mouseY)){ MouseEventAnalyser.infoO[IDTools.getObjID(sp)]="hitTestPrior=true,宽高区域不包含鼠标:"+":"+mouseX+","+mouseY+" size:"+sp.width+","+sp.height; return false; } for (i=sp._childs.length-1;i >-1;i--){ child=sp._childs[i]; if (child==childInChain){ if (!childInChain.mouseEnabled){ MouseEventAnalyser.infoO[IDTools.getObjID(childInChain)]="mouseEnabled=false"; } if (!childInChain.visible){ MouseEventAnalyser.infoO[IDTools.getObjID(childInChain)]="visible=false"; } coverByOthers=false; } if (child.mouseEnabled && child.visible){ flag=MouseEventAnalyser.check(child,mouseX ,mouseY,callBack); if (flag){ MouseEventAnalyser.hitO[IDTools.getObjID(sp)]=true; MouseEventAnalyser.infoO[IDTools.getObjID(sp)]="子对象被击中"; if (child==childInChain){ MouseEventAnalyser.infoO[IDTools.getObjID(sp)]="子对象被击中,"+"击中对象在分析链中"; } else{ MouseEventAnalyser.infoO[IDTools.getObjID(sp)]="子对象被击中,"+"击中对象不在分析链中"; if (coverByOthers){ MouseEventAnalyser.infoO[IDTools.getObjID(childInChain)]="被兄弟节点挡住,兄弟节点信息:"+ClassTool.getNodeClassAndName(child)+","+child.getBounds().toString(); DebugTool.showDisBound(child,false,"#ffff00"); } } return true; } else{ if (child==childInChain){ coverByOthers=false; } } } }; var mHitRect=new Rectangle(); var graphicHit=false; graphicHit=sp.getGraphicBounds().contains(mouseX,mouseY); if (sp.width > 0 && sp.height > 0){ var hitRect=MouseEventAnalyser._rect; if (!sp.mouseThrough){ if (sp.hitArea) hitRect=sp.hitArea; else hitRect.setTo(0,0,sp.width,sp.height); mHitRect.copyFrom(hitRect); isHit=hitRect.contains(mouseX,mouseY); } else{ isHit=graphicHit; mHitRect.copyFrom(sp.getGraphicBounds()); } if (isHit){ MouseEventAnalyser.hitO[IDTools.getObjID(sp)]=true; } }else{ } if (!isHit){ if (graphicHit){ MouseEventAnalyser.infoO[IDTools.getObjID(sp)]="子对象未包含鼠标,实际绘图区域包含鼠标,设置的宽高区域不包含鼠标:"+":"+mouseX+","+mouseY+" hitRec:"+mHitRect.toString()+" graphicBounds:"+sp.getGraphicBounds().toString()+",设置mouseThrough=true或将宽高设置到实际绘图区域可解决问题"; }else{ MouseEventAnalyser.infoO[IDTools.getObjID(sp)]="子对象未包含鼠标,实际绘图区域不包含鼠标,设置的宽高区域不包含鼠标:"+":"+mouseX+","+mouseY+" hitRec:"+mHitRect.toString()+" graphicBounds:"+sp.getGraphicBounds().toString(); } } else{ MouseEventAnalyser.infoO[IDTools.getObjID(sp)]="自身区域被击中"; } return isHit; } MouseEventAnalyser.hitTest=function(sp,mouseX,mouseY){ var isHit=false; if ((sp.hitArea instanceof laya.utils.HitArea )){ return sp.hitArea.isHit(mouseX,mouseY); } if (sp.width > 0 && sp.height > 0 || sp.mouseThrough || sp.hitArea){ var hitRect=MouseEventAnalyser._rect; if (!sp.mouseThrough){ if (sp.hitArea)hitRect=sp.hitArea; else hitRect.setTo(0,0,sp.width,sp.height); isHit=hitRect.contains(mouseX,mouseY); }else { isHit=sp.getGraphicBounds().contains(mouseX,mouseY); } } return isHit; } MouseEventAnalyser.infoO={}; MouseEventAnalyser.nodeO={}; MouseEventAnalyser.hitO={}; __static(MouseEventAnalyser, ['_matrix',function(){return this._matrix=new Matrix();},'_point',function(){return this._point=new Point();},'_rect',function(){return this._rect=new Rectangle();} ]); return MouseEventAnalyser; })() /** *本类提供obj相关的一些操作 *@author ww *@version 1.0 * *@created 2015-10-21 下午2:03:36 */ //class laya.debug.tools.ObjectTools var ObjectTools=(function(){ function ObjectTools(){} __class(ObjectTools,'laya.debug.tools.ObjectTools'); ObjectTools.getFlatKey=function(tKey,aKey){ if(tKey=="")return aKey; return tKey+ObjectTools.sign+aKey; } ObjectTools.flatObj=function(obj,rst,tKey){ (tKey===void 0)&& (tKey=""); rst=rst?rst:{}; var key; var tValue; for(key in obj){ if((typeof (obj[key])=='object')){ ObjectTools.flatObj(obj[key],rst,ObjectTools.getFlatKey(tKey,key)); }else{ tValue=obj[key]; rst[ObjectTools.getFlatKey(tKey,key)]=obj[key]; } } return rst; } ObjectTools.recoverObj=function(obj){ var rst={}; var tKey; for(tKey in obj){ ObjectTools.setKeyValue(rst,tKey,obj[tKey]); } return rst; } ObjectTools.differ=function(objA,objB){ var tKey; var valueA; var valueB; objA=ObjectTools.flatObj(objA); objB=ObjectTools.flatObj(objB); var rst={}; for(tKey in objA){ if(!objB.hasOwnProperty(tKey)){ rst[tKey]="被删除"; } } for(tKey in objB){ if(objB[tKey]!=objA[tKey]){ rst[tKey]={"pre":objA[tKey],"now":objB[tKey]}; } } return rst; } ObjectTools.traceDifferObj=function(obj){ var key; var tO; for(key in obj){ if((typeof (obj[key])=='string')){ console.log(key+":",obj[key]); }else{ tO=obj[key]; console.log(key+":","now:",tO["now"],"pre:",tO["pre"]); } } } ObjectTools.setKeyValue=function(obj,flatKey,value){ if(flatKey.indexOf(ObjectTools.sign)>=0){ var keys=flatKey.split(ObjectTools.sign); var tKey; while(keys.length>1){ tKey=keys.shift(); if(!obj[tKey]){ obj[tKey]={}; console.log("addKeyObj:",tKey); } obj=obj[tKey]; if(!obj){ console.log("wrong flatKey:",flatKey); return; } } obj[keys.shift()]=value; }else{ obj[flatKey]=value; } } ObjectTools.clearObj=function(obj){ var key; for (key in obj){ delete obj[key]; } } ObjectTools.copyObjFast=function(obj){ var jsStr; jsStr=laya.debug.tools.ObjectTools.getJsonString(obj); return laya.debug.tools.ObjectTools.getObj(jsStr); } ObjectTools.copyObj=function(obj){ if((obj instanceof Array))return ObjectTools.copyArr(obj); var rst={}; var key; for(key in obj){ if(obj[key]===null||obj[key]===undefined){ rst[key]=obj[key]; }else if(((obj[key])instanceof Array)){ rst[key]=ObjectTools.copyArr(obj[key]); } else if((typeof (obj[key])=='object')){ rst[key]=ObjectTools.copyObj(obj[key]); }else{ rst[key]=obj[key]; } } return rst; } ObjectTools.copyArr=function(arr){ var rst; rst=[]; var i=0,len=0; len=arr.length; for(i=0;i src.length)pos=src.length; var preLen=src.length; var i=0,len=0; src.length+=insertArr.length; var moveLen=0; moveLen=insertArr.length; for (i=src.length-1;i >=pos;i--){ src[i]=src[i-moveLen]; } len=insertArr.length; for (i=0;i < len;i++){ src[pos+i]=insertArr[i]; } return src; } ObjectTools.clearArr=function(arr){ if (!arr)return arr; arr.length=0; return arr; } ObjectTools.removeFromArr=function(arr,item){ var i=0,len=0; len=arr.length; for(i=0;i minWidth?tWidth:minWidth; tar.height=tHeight>minHeight?tHeight:minHeight; } SimpleResizer.onMouseMoveEnd=function(e){ SimpleResizer.clearEvents(); } SimpleResizer.clearEvents=function(){ Laya.timer.clear(null,SimpleResizer.onMouseMoving); Laya.stage.off(/*laya.events.Event.MOUSE_UP*/"mouseup",null,SimpleResizer.onMouseMoveEnd); } __static(SimpleResizer, ['preMousePoint',function(){return this.preMousePoint=new Point();},'preTarSize',function(){return this.preTarSize=new Point();},'preScale',function(){return this.preScale=new Point();} ]); return SimpleResizer; })() /** *... *@author ww */ //class laya.debug.tools.ResTools var ResTools=(function(){ function ResTools(){} __class(ResTools,'laya.debug.tools.ResTools'); ResTools.getCachedResList=function(){ if (Render.isWebGL){ return ResTools.getWebGlResList(); }else{ return ResTools.getCanvasResList(); } } ResTools.getWebGlResList=function(){ var rst; rst=[]; var tResource; var _resources; _resources=ResourceManager.currentResourceManager["_resources"]; for(var i=0;i <_resources.length;i++){ tResource=_resources[i]; if(ClassTool.getClassName(tResource)=="WebGLImage"){ var url=tResource["src"]; if(url&&url.indexOf("data:image/png;base64")<0) rst.push(url); } } return rst; } ResTools.getCanvasResList=function(){ var picDic; picDic={}; var dataO; dataO=Loader.loadedMap; ResTools.collectPics(dataO,picDic); return ResTools.getArrFromDic(picDic); } ResTools.getArrFromDic=function(dic){ var key; var rst; rst=[]; for (key in dic){ rst.push(key); } return rst; } ResTools.collectPics=function(dataO,picDic){ if (!dataO)return; var key; var tTexture; for (key in dataO){ tTexture=dataO[key]; if (tTexture){ if (tTexture.bitmap&&tTexture.bitmap.src){ var url=tTexture.bitmap.src; if(url.indexOf("data:image/png;base64")<0) picDic[tTexture.bitmap.src]=true; } } } } return ResTools; })() /** *类实例创建分析工具 *@author ww *@version 1.0 * *@created 2015-9-25 下午3:31:46 */ //class laya.debug.tools.RunProfile var RunProfile=(function(){ function RunProfile(){} __class(RunProfile,'laya.debug.tools.RunProfile'); RunProfile.run=function(funName,callLen){ (callLen===void 0)&& (callLen=3); var tCount; if(!RunProfile.infoDic.hasOwnProperty(funName)){ RunProfile.infoDic[funName]=new CountTool(); } tCount=RunProfile.infoDic[funName]; var msg; msg=TraceTool.getCallLoc(callLen)+"\n"+TraceTool.getCallStack(1,callLen-3); tCount.add(msg); if(RunProfile._runShowDic[funName]){ console.log("Create:"+funName); console.log(msg); } } RunProfile.showClassCreate=function(funName){ RunProfile._runShowDic[funName]=true; } RunProfile.hideClassCreate=function(funName){ RunProfile._runShowDic[funName]=false; } RunProfile.getRunInfo=function(funName){ var rst; rst=RunProfile.infoDic[funName]; if(rst){ } return RunProfile.infoDic[funName]; } RunProfile.runTest=function(fun,count,sign){ (sign===void 0)&& (sign="runTest"); DTrace.timeStart(sign); var i=0; for(i=0;i=0){ return StringTool.insert(str,iStr,i+tarStr.length); } return str; } StringTool.insertBefore=function(str,iStr,tarStr,isLast){ (isLast===void 0)&& (isLast=false); var i=0; if(isLast){ i=str.lastIndexOf(tarStr); }else{ i=str.indexOf(tarStr); } if(i>=0){ return StringTool.insert(str,iStr,i); } return str; } StringTool.insertParamToFun=function(funStr,params){ var oldParam; oldParam=StringTool.getParamArr(funStr); var inserStr; inserStr=params.join(","); if(oldParam.length>0){ inserStr=","+inserStr; } return StringTool.insertBefore(funStr,inserStr,")",true); } StringTool.trim=function(str,vList){ if(!vList){ vList=[" ","\r","\n","\t",String.fromCharCode(65279)]; }; var rst; var i=0; var len=0; rst=str; len=vList.length; for(i=0;i=0){ i--; }; var rst; rst=str.substring(0,i) if(i>=0){ return str.substring(0,i+1); } return ""; } StringTool.trimSide=function(str){ var rst; rst=StringTool.trimLeft(str); rst=StringTool.trimRight(rst); return rst; } StringTool.isOkFileName=function(fileName){ if(laya.debug.tools.StringTool.trimSide(fileName)=="")return false; var i=0,len=0; len=fileName.length; for(i=0;i=0;i--){ str=strArr[i]; str=laya.debug.tools.StringTool.trimSide(str); if(StringTool.isEmpty(str)){ strArr.splice(i,1); }else{ strArr[i]=str; } } return strArr; } StringTool.ifNoAddToTail=function(str,sign){ if(str.indexOf(sign)>=0){ return str; } return str+sign; } StringTool.trimEmptyLine=function(str){ var i=0; var len=0; var tLines; var tLine; tLines=str.split("\n"); for(i=tLines.length-1;i>=0;i--){ tLine=tLines[i]; if(StringTool.isEmptyLine(tLine)){ tLines.splice(i,1); } } return tLines.join("\n"); } StringTool.isEmptyLine=function(str){ str=laya.debug.tools.StringTool.trim(str); if(str=="")return true; return false; } StringTool.removeCommentLine=function(lines){ var rst; rst=[]; var i=0; var tLine; var adptLine; i=0; var len=0; var index=0; len=lines.length; while(i=0){ adptLine=tLine.substring(0,index-1); StringTool.addIfNotEmpty(rst,adptLine); while(i=0){ adptLine=tLine.substring(index+2); StringTool.addIfNotEmpty(rst,adptLine); break ; } i++; } }else if(tLine.indexOf("//")>=0){ if(laya.debug.tools.StringTool.trim(tLine).indexOf("//")==0){ }else{ StringTool.addIfNotEmpty(rst,adptLine); } }else{ StringTool.addIfNotEmpty(rst,adptLine); } i++; } return rst; } StringTool.addIfNotEmpty=function(arr,str){ if(!str)return; var tStr; tStr=StringTool.trim(str); if(tStr!=""){ arr.push(str); } } StringTool.trimExt=function(str,vars){ var rst; rst=StringTool.trim(str); var i=0; var len=0; len=vars.length; for(i=0;i0){ if(arr[0]==""){ arr.shift(); }else{ break ; } } } StringTool.getWords=function(line){ var rst=StringTool.getSplitLine(line); StringTool.delelteItem(rst); return rst; } StringTool.getLinesI=function(startLine,endLine,lines){ var i=0; var rst=[]; for(i=startLine;i<=endLine;i++){ rst.push(lines[i]); } return rst; } StringTool.structfy=function(str,inWidth,removeEmpty){ (inWidth===void 0)&& (inWidth=4); (removeEmpty===void 0)&& (removeEmpty=true); if(removeEmpty){ str=laya.debug.tools.StringTool.trimEmptyLine(str); }; var lines; var tIn=0; tIn=0; var tInStr; tInStr=StringTool.getEmptyStr(0); lines=str.split("\n"); var i=0; var len=0; var tLineStr; len=lines.length; for(i=0;i=0){ tInStr=StringTool.getEmptyStr(tIn*inWidth); } tLineStr=tInStr+tLineStr; lines[i]=tLineStr; tInStr=StringTool.getEmptyStr(tIn*inWidth); } return lines.join("\n"); } StringTool.getEmptyStr=function(width){ if(!StringTool.emptyDic.hasOwnProperty(width)){ var i=0; var len=0; len=width; var rst; rst=""; for(i=0;i0||tC=="0"){ rst=10*rst+Number(tC); if(rst>0)isBegin=true; }else{ if(isBegin)return rst; } } return rst; } StringTool.getReplace=function(str,oStr,nStr){ if(!str)return ""; var rst; rst=str.replace(new RegExp(oStr,"g"),nStr); return rst; } StringTool.getWordCount=function(str,findWord){ var rg=new RegExp(findWord,"g") return str.match(rg).length; } StringTool.getResolvePath=function(path,basePath){ if(StringTool.isAbsPath(path)){ return path; }; var tSign; tSign="\\"; if(basePath.indexOf("/")>=0){ tSign="/"; } if(basePath.charAt(basePath.length-1)==tSign){ basePath=basePath.substr(0,basePath.length-1); }; var parentSign; parentSign=".."+tSign; var tISign; tISign="."+tSign; var pCount=0; pCount=StringTool.getWordCount(path,parentSign); path=laya.debug.tools.StringTool.getReplace(path,parentSign,""); path=laya.debug.tools.StringTool.getReplace(path,tISign,""); var i=0; var len=0; len=pCount; var iPos=0; for(i=0;i=0)return true; return false; } StringTool.removeLastSign=function(str,sign){ var iPos=0; iPos=str.lastIndexOf(sign); str=str.substring(0,iPos); return str; } StringTool.getParamArr=function(str){ var paramStr; paramStr=laya.debug.tools.StringTool.getBetween(str,"(",")",true); if(StringTool.trim(paramStr).length<1)return []; return paramStr.split(","); } StringTool.copyStr=function(str){ return str.substring(); } StringTool.ArrayToString=function(arr){ var rst; rst="[{items}]".replace(new RegExp("\\{items\\}","g"),StringTool.getArrayItems(arr)); return rst; } StringTool.getArrayItems=function(arr){ var rst; if(arr.length<1)return ""; rst=StringTool.parseItem(arr[0]); var i=0; var len=0; len=arr.length; for(i=1;i0)debugger; TimeTool._deep++; var timer; timer=Laya.timer; var laters=timer["_laters"]; for (var i=0,n=laters.length-1;i <=n;i++){ var handler=laters[i]; if(handler){ handler.method!==null && handler.run(false); timer["_recoverHandler"](handler); }else{ debugger; } i===n && (n=laters.length-1); } laters.length=0; TimeTool._deep--; } TimeTool.timeDic={}; TimeTool._deep=0; return TimeTool; })() /** *... *@author ww */ //class laya.debug.tools.TouchDebugTools var TouchDebugTools=(function(){ function TouchDebugTools(){} __class(TouchDebugTools,'laya.debug.tools.TouchDebugTools'); TouchDebugTools.getTouchIDs=function(events){ var rst; rst=[]; var i=0,len=0; len=events.length; for (i=0;i < len;i++){ rst.push(events[i].identifier||0); } return rst; } TouchDebugTools.traceTouchIDs=function(msg,events){ DebugTxt.dTrace(msg+":"+TouchDebugTools.getTouchIDs(events).join(",")); } return TouchDebugTools; })() /** * *@author ww *@version 1.0 * *@created 2015-9-25 上午10:48:54 */ //class laya.debug.tools.TraceTool var TraceTool=(function(){ function TraceTool(){} __class(TraceTool,'laya.debug.tools.TraceTool'); TraceTool.closeAllLog=function(){ var logFun; logFun=TraceTool.emptyLog; Browser.window.console.log=logFun; } TraceTool.emptyLog=function(){} TraceTool.traceObj=function(obj){ TraceTool.tempArr.length=0; var key; for(key in obj){ TraceTool.tempArr.push(key+":"+obj[key]); }; var rst; rst=TraceTool.tempArr.join("\n"); console.log(rst); return rst; } TraceTool.traceObjR=function(obj){ TraceTool.tempArr.length=0; var key; for(key in obj){ TraceTool.tempArr.push(obj[key]+":"+key); }; var rst; rst=TraceTool.tempArr.join("\n"); console.log(rst); return rst; } TraceTool.traceSize=function(tar){ DebugTool.dTrace("Size: x:"+tar.x+" y:"+tar.y+" w:"+tar.width+" h:"+tar.height+" scaleX:"+tar.scaleX+" scaleY:"+tar.scaleY); } TraceTool.traceSplit=function(msg){ console.log("---------------------"+msg+"---------------------------"); } TraceTool.group=function(gName){ /*__JS__ */console.group(gName);; } TraceTool.groupEnd=function(){ /*__JS__ */console.groupEnd();; } TraceTool.getCallStack=function(life,s){ (life===void 0)&& (life=1); (s===void 0)&& (s=1); var caller; caller=TraceTool.getCallStack; caller=caller.caller.caller; var msg; msg=""; while(caller&&life>0){ if(s<=0){ msg+=caller+"<-"; life--; }else{ } caller=caller.caller; s--; } return msg; } TraceTool.getCallLoc=function(index){ (index===void 0)&& (index=2); var loc; try { TraceTool.Erroer.i++; }catch (e){ var arr; arr=e.stack.replace(/Error\n/).split(/\n/); if (arr[index]){ loc=arr[index].replace(/^\s+|\s+$/,""); }else{ loc="unknow"; } } return loc; } TraceTool.traceCallStack=function(){ var loc; try { TraceTool.Erroer.i++; }catch (e){ loc=e.stack; } console.log(loc); return loc; } TraceTool.getPlaceHolder=function(len){ if(!TraceTool.holderDic.hasOwnProperty(len)){ var rst; rst=""; var i=0; for(i=0;i 0 && visibleRec.height > 0){ isInVisibleRec=true; } else{ isInVisibleRec=false; }; var gAlpha=NaN; gAlpha=NodeUtils.getGAlpha(node); var gVisible=false; gVisible=NodeUtils.getGVisible(node); var msg; msg=""; msg+="isInstage:"+isInstage+"\n"; msg+="isInVisibleRec:"+isInVisibleRec+"\n"; msg+="gVisible:"+gVisible+"\n"; msg+="gAlpha:"+gAlpha+"\n"; if (isInstage && isInVisibleRec && gVisible && gAlpha > 0){ if (Render.isWebGL){ VisibleAnalyser.anlyseRecVisible(node); }else{ SpriteRenderForVisibleAnalyse.I.analyseNode(node); } msg+="coverRate:"+VisibleAnalyser.coverRate+"\n"; if (VisibleAnalyser._coverList.length > 0){ Laya.timer.once(1000,null,VisibleAnalyser.showListLater); } } console.log(msg); OutPutView.I.showTxt(msg); } VisibleAnalyser.showListLater=function(){ NodeListPanelView.I.showList(VisibleAnalyser._coverList); } VisibleAnalyser.isCoverByBrother=function(node){ var parent=node.parent; if (!parent) return; var _childs; _childs=parent._childs; var index=0; index=_childs.indexOf(node); if (index < 0) return; var i=0,len=0; var canvas; var rec; rec=parent.getSelfBounds(); if (rec.width <=0 || rec.height <=0) return; } VisibleAnalyser.anlyseRecVisible=function(node){ VisibleAnalyser.isNodeWalked=false; VisibleAnalyser._analyseTarget=node; if (!VisibleAnalyser.mainCanvas) VisibleAnalyser.mainCanvas=CanvasTools.createCanvas(Laya.stage.width,Laya.stage.height); CanvasTools.clearCanvas(VisibleAnalyser.mainCanvas); VisibleAnalyser.tColor=1; VisibleAnalyser.resetCoverList(); WalkTools.walkTargetEX(Laya.stage,VisibleAnalyser.recVisibleWalker,null,VisibleAnalyser.filterFun); if (!VisibleAnalyser.isTarRecOK){ VisibleAnalyser.coverRate=0; } else{ VisibleAnalyser.coverRate=CanvasTools.getDifferRate(VisibleAnalyser.preImageData,VisibleAnalyser.tarImageData); } console.log("coverRate:",VisibleAnalyser.coverRate); } VisibleAnalyser.getRecArea=function(rec){ return rec.width *rec.height; } VisibleAnalyser.addCoverNode=function(node,coverRate){ var data; data={}; data.path=node; data.label=ClassTool.getNodeClassAndName(node)+":"+coverRate; data.coverRate=coverRate; VisibleAnalyser._coverList.push(data); console.log("coverByNode:",node,coverRate); } VisibleAnalyser.resetCoverList=function(){ VisibleAnalyser._coverList.length=0; } VisibleAnalyser.recVisibleWalker=function(node){ if (node==VisibleAnalyser._analyseTarget){ VisibleAnalyser.isNodeWalked=true; VisibleAnalyser.tarRec.copyFrom(NodeUtils.getGRec(node)); console.log("tarRec:",VisibleAnalyser.tarRec.toString()); if (VisibleAnalyser.tarRec.width > 0 && VisibleAnalyser.tarRec.height > 0){ VisibleAnalyser.isTarRecOK=true; VisibleAnalyser.tColor++; CanvasTools.fillCanvasRec(VisibleAnalyser.mainCanvas,VisibleAnalyser.tarRec,ColorTool.toHexColor(VisibleAnalyser.tColor)); VisibleAnalyser.preImageData=CanvasTools.getImageDataFromCanvasByRec(VisibleAnalyser.mainCanvas,VisibleAnalyser.tarRec); VisibleAnalyser.tarImageData=CanvasTools.getImageDataFromCanvasByRec(VisibleAnalyser.mainCanvas,VisibleAnalyser.tarRec); } else{ console.log("tarRec Not OK:",VisibleAnalyser.tarRec); } } else{ if (VisibleAnalyser.isTarRecOK){ var tRec; tRec=NodeUtils.getGRec(node); VisibleAnalyser.interRec=VisibleAnalyser.tarRec.intersection(tRec,VisibleAnalyser.interRec); if (VisibleAnalyser.interRec && VisibleAnalyser.interRec.width > 0 && VisibleAnalyser.interRec.height > 0){ VisibleAnalyser.tColor++; CanvasTools.fillCanvasRec(VisibleAnalyser.mainCanvas,tRec,ColorTool.toHexColor(VisibleAnalyser.tColor)); VisibleAnalyser.tImageData=CanvasTools.getImageDataFromCanvasByRec(VisibleAnalyser.mainCanvas,VisibleAnalyser.tarRec); var dRate=NaN; dRate=CanvasTools.getDifferRate(VisibleAnalyser.preImageData,VisibleAnalyser.tImageData); VisibleAnalyser.preImageData=VisibleAnalyser.tImageData; VisibleAnalyser.addCoverNode(node,dRate); } } } } VisibleAnalyser.filterFun=function(node){ if (node.visible==false) return false; if (node.alpha < 0) return false; if (DebugInfoLayer.I.isDebugItem(node))return false; return true; } VisibleAnalyser.isNodeWalked=false; VisibleAnalyser._analyseTarget=null; VisibleAnalyser.isTarRecOK=false; VisibleAnalyser.mainCanvas=null; VisibleAnalyser.preImageData=null; VisibleAnalyser.tImageData=null; VisibleAnalyser.tarImageData=null; VisibleAnalyser.coverRate=NaN; VisibleAnalyser.tColor=0; VisibleAnalyser._coverList=[]; __static(VisibleAnalyser, ['tarRec',function(){return this.tarRec=new Rectangle();},'interRec',function(){return this.interRec=new Rectangle();} ]); return VisibleAnalyser; })() /** * *@author ww *@version 1.0 * *@created 2015-9-24 下午6:15:01 */ //class laya.debug.tools.WalkTools var WalkTools=(function(){ function WalkTools(){} __class(WalkTools,'laya.debug.tools.WalkTools'); WalkTools.walkTarget=function(target,fun,_this){ fun.apply(_this,[target]); var i=0; var len=0; var tChild; len=target.numChildren; for(i=0;i 0; return rst; } NodeUtils.adptShowKeys=function(keys){ var i=0,len=0; len=keys.length; for (i=len-1;i >=0;i--){ keys[i]=StringTool.trimSide(keys[i]); if (keys[i].length < 1){ keys.splice(i,1); } } return keys; } NodeUtils.getNodeTreeData=function(sprite,keys){ NodeUtils.adptShowKeys(keys); var treeO; treeO=NodeUtils.getPropertyDesO(sprite,keys); var treeArr; treeArr=[]; NodeUtils.getTreeArr(treeO,treeArr); return treeArr; } NodeUtils.getTreeArr=function(treeO,arr,add){ (add===void 0)&& (add=true); if (add) arr.push(treeO); var tArr=treeO.childs; var i=0,len=tArr.length; for (i=0;i < len;i++){ if (!add){ tArr[i].nodeParent=null; } else{ tArr[i].nodeParent=treeO; } if (tArr[i].isDirectory){ NodeUtils.getTreeArr(tArr[i],arr); } else{ arr.push(tArr[i]); } } } NodeUtils.traceStage=function(){ console.log(NodeUtils.getFilterdTree(Laya.stage,null)); console.log("treeArr:",NodeUtils.getNodeTreeData(Laya.stage,null)); } NodeUtils.getNodeCount=function(node,visibleRequire){ (visibleRequire===void 0)&& (visibleRequire=false); if (visibleRequire){ if (!node.visible)return 0; }; var rst=0; rst=1; var i=0,len=0; var cList; cList=node._childs; len=cList.length; for (i=0;i < len;i++){ rst+=NodeUtils.getNodeCount(cList[i],visibleRequire); } return rst; } NodeUtils.getGVisible=function(node){ while (node){ if (!node.visible)return false; node=node.parent; } return true; } NodeUtils.getGAlpha=function(node){ var rst=NaN; rst=1; while (node){ rst *=node.alpha; node=node.parent; } return rst; } NodeUtils.getGPos=function(node){ var point; point=new Point(); node.localToGlobal(point); return point; } NodeUtils.getGRec=function(node){ var pointList; pointList=node._getBoundPointsM(true); if (!pointList || pointList.length < 1) return Rectangle.TEMP.setTo(0,0,0,0); pointList=GrahamScan.pListToPointList(pointList,true); WalkTools.walkArr(pointList,node.localToGlobal,node); pointList=GrahamScan.pointListToPlist(pointList); var _disBoundRec; _disBoundRec=Rectangle._getWrapRec(pointList,_disBoundRec); return _disBoundRec; } NodeUtils.getGGraphicRec=function(node){ var pointList; pointList=node.getGraphicBounds()._getBoundPoints(); if (!pointList || pointList.length < 1) return Rectangle.TEMP.setTo(0,0,0,0); pointList=GrahamScan.pListToPointList(pointList,true); WalkTools.walkArr(pointList,node.localToGlobal,node); pointList=GrahamScan.pointListToPlist(pointList); var _disBoundRec; _disBoundRec=Rectangle._getWrapRec(pointList,_disBoundRec); return _disBoundRec; } NodeUtils.getNodeCmdCount=function(node){ var rst=0; if (node.graphics){ if (node.graphics.cmds){ rst=node.graphics.cmds.length; } else{ if (node.graphics._one){ rst=1; } else{ rst=0; } } } else{ rst=0; } return rst; } NodeUtils.getNodeCmdTotalCount=function(node){ var rst=0; var i=0,len=0; var cList; cList=node._childs; len=cList.length; rst=NodeUtils.getNodeCmdCount(node); for (i=0;i < len;i++){ rst+=NodeUtils.getNodeCmdTotalCount(cList[i]); } return rst; } NodeUtils.getRenderNodeCount=function(node){ if (node.cacheAs !="none")return 1; var rst=0; var i=0,len=0; var cList; cList=node._childs; len=cList.length; rst=1; for (i=0;i < len;i++){ rst+=NodeUtils.getRenderNodeCount(cList[i]); } return rst; } NodeUtils.getReFreshRenderNodeCount=function(node){ var rst=0; var i=0,len=0; var cList; cList=node._childs; len=cList.length; rst=1; for (i=0;i < len;i++){ rst+=NodeUtils.getRenderNodeCount(cList[i]); } return rst; } NodeUtils.showCachedSpriteRecs=function(){ NodeUtils.g=DebugInfoLayer.I.graphicLayer.graphics; NodeUtils.g.clear(); WalkTools.walkTarget(Laya.stage,NodeUtils.drawCachedBounds,null); } NodeUtils.drawCachedBounds=function(sprite){ if (sprite.cacheAs=="none")return; if (DebugInfoLayer.I.isDebugItem(sprite))return; var rec; rec=NodeUtils.getGRec(sprite); NodeUtils.g.drawRect(rec.x,rec.y,rec.width,rec.height,null,"#0000ff",2); } NodeUtils.g=null; __static(NodeUtils, ['defaultKeys',function(){return this.defaultKeys=["x","y","width","height"];} ]); return NodeUtils; })() /** *... *@author ww */ //class laya.debug.view.StyleConsts var StyleConsts=(function(){ function StyleConsts(){} __class(StyleConsts,'laya.debug.view.StyleConsts'); StyleConsts.setViewScale=function(view){ view.scaleX=view.scaleY=StyleConsts.PanelScale; } __static(StyleConsts, ['PanelScale',function(){return this.PanelScale=Browser.onPC?1:Browser.pixelRatio;} ]); return StyleConsts; })() /** *本类用于模块间消息传递 *@author ww */ //class laya.debug.tools.Notice extends laya.events.EventDispatcher var Notice=(function(_super){ function Notice(){ Notice.__super.call(this); } __class(Notice,'laya.debug.tools.Notice',_super); Notice.notify=function(type,data){ Notice.I.event(type,data); } Notice.listen=function(type,_scope,fun,args,cancelBefore){ (cancelBefore===void 0)&& (cancelBefore=false); if(cancelBefore)Notice.cancel(type,_scope,fun); Notice.I.on(type,_scope,fun,args); } Notice.cancel=function(type,_scope,fun){ Notice.I.off(type,_scope,fun); } __static(Notice, ['I',function(){return this.I=new Notice();} ]); return Notice; })(EventDispatcher) /** *... *@author ww */ //class laya.debug.tools.enginehook.LoaderHook extends laya.net.LoaderManager var LoaderHook=(function(_super){ function LoaderHook(){ LoaderHook.__super.call(this); } __class(LoaderHook,'laya.debug.tools.enginehook.LoaderHook',_super); var __proto=LoaderHook.prototype; __proto.checkUrls=function(url){ var tarUrl; if ((typeof url=='string')){ tarUrl=url; }else{ tarUrl=url.url; } if (LoaderHook.preFails[tarUrl]){ if (LoaderHook.enableFailDebugger){ debugger; } } } __proto.chekUrlList=function(urls){ var i=0,len=0; len=urls.length; for (i=0;i < len;i++){ this.checkUrls(urls[i]); } } __proto.load=function(url,complete,progress,type,priority,cache,group,ignoreCache){ (priority===void 0)&& (priority=1); (cache===void 0)&& (cache=true); (ignoreCache===void 0)&& (ignoreCache=false); if ((url instanceof Array)){ this.chekUrlList(url); }else{ this.checkUrls(url); } return _super.prototype.load.call(this,url,complete,progress,type,priority,cache,group,ignoreCache); } LoaderHook.init=function(){ if (LoaderHook.isInited)return; LoaderHook.isInited=true; Laya.loader=new LoaderHook(); Laya.loader.on(/*laya.events.Event.ERROR*/"error",null,LoaderHook.onFail); LoaderHook.preFails=LocalStorage.getJSON("LoadFailItems"); if (!LoaderHook.preFails)LoaderHook.preFails={}; } LoaderHook.onFail=function(failFile){ OutPutView.I.dTrace("LoadFail:"+failFile); LoaderHook.nowFails[failFile]=true; LocalStorage.setJSON("LoadFailItems",LoaderHook.nowFails); } LoaderHook.resetFails=function(){ LoaderHook.nowFails={}; LocalStorage.setJSON("LoadFailItems",LoaderHook.nowFails); } LoaderHook.preFails={}; LoaderHook.nowFails={}; LoaderHook.enableFailDebugger=true; LoaderHook.FailSign="LoadFailItems"; LoaderHook.isInited=false; return LoaderHook; })(LoaderManager) /** *颜色选取类 *@author ww */ //class laya.debug.tools.ColorSelector extends laya.display.Sprite var ColorSelector=(function(_super){ function ColorSelector(){ this.sideColor=null; this.mainColor=null; this.demoColor=null; this.posSp=null; this.hPos=null; this.container=null; this.isChanging=false; this.tColor=null; this.tH=NaN; ColorSelector.__super.call(this); this.container=this; this.createUI(); } __class(ColorSelector,'laya.debug.tools.ColorSelector',_super); var __proto=ColorSelector.prototype; __proto.createUI=function(){ this.sideColor=new Sprite(); this.container.addChild(this.sideColor); this.posSp=new Sprite(); this.posSp.pos(100,100); this.posSp.graphics.drawCircle(0,0,5,null,"#ff0000"); this.posSp.graphics.drawCircle(0,0,6,null,"#ffff00"); this.posSp.autoSize=true; this.posSp.cacheAsBitmap=true; this.sideColor.addChild(this.posSp); this.sideColor.pos(0,0); this.sideColor.size(150,150); this.sideColor.on(/*laya.events.Event.MOUSE_DOWN*/"mousedown",this,this.sideColorClick); var i=0; this.mainColor=new Sprite(); var g; g=this.mainColor.graphics; var h=NaN; var s=NaN; var b=NaN; var rgb; for (i=0;i < 150;i++){ rgb=ColorTool.hsb2rgb(i/150*360,1,1); g.drawLine(0,i,20,i,ColorTool.getRGBStr(rgb)); } this.mainColor.pos(150+10,0); this.mainColor.size(20,i); this.mainColor.cacheAsBitmap=true; this.hPos=new Sprite(); this.hPos.graphics.drawPie(0,0,10,-10,10,"#ff0000"); this.hPos.x=this.mainColor.x+22; this.container.addChild(this.hPos); this.container.addChild(this.mainColor); this.mainColor.on(/*laya.events.Event.MOUSE_DOWN*/"mousedown",this,this.mainColorClick); this.demoColor=new Sprite(); this.demoColor.pos(this.sideColor.x,this.sideColor.y+this.sideColor.height+10); this.demoColor.size(150,20); this.container.addChild(this.demoColor); this.setColorByRGBStr("#099599"); this.posSp.on(/*laya.events.Event.DRAG_MOVE*/"dragmove",this,this.posDraging); } // posSp.on(Event.MOUSE_DOWN,this,posMouseDown); __proto.posMouseDown=function(e){} __proto.posDraging=function(){ this.updatePosSpAndShowColor(); } __proto.posDragEnd=function(){ this.isChanging=false; this.updatePosSpAndShowColor(); } __proto.setColorByRGBStr=function(rgbStr){ var rgb; rgb=ColorTool.getRGBByRGBStr(rgbStr); this.setColor(rgb[0],rgb[1],rgb[2]); } __proto.setColor=function(red,green,blue,notice){ (notice===void 0)&& (notice=true); var hsb; hsb=ColorTool.rgb2hsb(red,green,blue); var tRGB; tRGB=ColorTool.hsb2rgb(hsb[0],hsb[1],hsb[2]); this.setColorByHSB(hsb[0],hsb[1],hsb[2],notice); } __proto.setColorByHSB=function(h,s,b,notice){ (notice===void 0)&& (notice=true); this.hPos.y=this.mainColor.y+h/360*150; this.posSp.x=s *150; this.posSp.y=(1-b)*150; this.updateSideColor(h,notice); } __proto.sideColorClick=function(e){ this.isChanging=true; this.posSp.startDrag(); this.updatePosSpAndShowColor(); Laya.stage.off(/*laya.events.Event.MOUSE_UP*/"mouseup",this,this.sideColorMouseUp); Laya.stage.once(/*laya.events.Event.MOUSE_UP*/"mouseup",this,this.sideColorMouseUp); } __proto.sideColorMouseUp=function(e){ this.isChanging=false; this.updatePosSpAndShowColor(); } __proto.updatePosSpAndShowColor=function(){ this.posSp.x=this.sideColor.mouseX; this.posSp.y=this.sideColor.mouseY; if(this.posSp.x<0)this.posSp.x=0; if(this.posSp.y<0)this.posSp.y=0; if(this.posSp.x>150)this.posSp.x=150; if(this.posSp.y>150)this.posSp.y=150; this.updateDemoColor(); } __proto.updateDemoColor=function(notice){ (notice===void 0)&& (notice=true); var h=NaN; var s=NaN; var b=NaN; h=this.tH; s=this.posSp.x / 150; b=1-this.posSp.y / 150; this.tColor=ColorTool.hsb2rgb(h,s,b); var g; g=this.demoColor.graphics; g.clear(); g.drawRect(0,0,this.demoColor.width,this.demoColor.height,ColorTool.getRGBStr(this.tColor)); if(this.isChanging)return; if(notice) this.event("ColorChanged",this); } __proto.mainColorClick=function(e){ var yPos=NaN; yPos=this.mainColor.mouseY; this.hPos.y=yPos+this.mainColor.y; var h=NaN; h=yPos / 150 *360; this.updateSideColor(h); } __proto.updateSideColor=function(h,notice){ (notice===void 0)&& (notice=true); this.tH=h; var s=NaN; var b=NaN; var g; g=this.sideColor.graphics; g.clear(); this.sideColor.cacheAsBitmap=false; var rgb; rgb=ColorTool.hsb2rgb(h,1,1); var gradient=Browser.context.createLinearGradient(0,0,80,0); gradient.addColorStop(0,"white"); gradient.addColorStop(1,ColorTool.getRGBStr(rgb)); this.sideColor.graphics.drawRect(0,0,150,150,gradient); this.sideColor.graphics.loadImage("comp/colorpicker_overlay.png",0,0); this.sideColor.size(150,150); this.sideColor.cacheAsBitmap=true; this.updateDemoColor(notice); } ColorSelector.COLOR_CHANGED="ColorChanged"; ColorSelector.COLOR_CLEARED="COLOR_CLEARED"; ColorSelector.RecWidth=150; return ColorSelector; })(Sprite) /** * *@author ww *@version 1.0 * *@created 2015-12-30 下午1:59:34 */ //class laya.debug.tools.comps.Arrow extends laya.display.Sprite var Arrow=(function(_super){ function Arrow(){ Arrow.__super.call(this); this.drawMe(); } __class(Arrow,'laya.debug.tools.comps.Arrow',_super); var __proto=Arrow.prototype; __proto.drawMe=function(){ var g; g=this.graphics; g.clear(); g.drawLine(0,0,-1,-1,"#ff0000"); g.drawLine(0,0,1,-1,"#ff0000"); } return Arrow; })(Sprite) /** * *@author ww *@version 1.0 * *@created 2015-12-30 下午2:03:32 */ //class laya.debug.tools.comps.ArrowLine extends laya.display.Sprite var ArrowLine=(function(_super){ function ArrowLine(sign){ this.lineLen=160; this.arrowLen=10; this.sign="Y"; this._targetChanger=null; this._isMoving=false; this.lenControl=new Rect(); this.rotationControl=new Rect(); this.lenChanger=ValueChanger.create(this,"lineLen"); this.lenControlXChanger=ValueChanger.create(this.lenControl,"x"); (sign===void 0)&& (sign="X"); ArrowLine.__super.call(this); this.sign=sign; this.addChild(this.lenControl); this.addChild(this.rotationControl); this.lenControl.on(/*laya.events.Event.MOUSE_DOWN*/"mousedown",this,this.controlMouseDown); this.drawMe(); } __class(ArrowLine,'laya.debug.tools.comps.ArrowLine',_super); var __proto=ArrowLine.prototype; __proto.drawMe=function(){ var g; g=this.graphics; g.clear(); g.drawLine(0,0,this.lineLen,0,"#ffff00"); g.drawLine(this.lineLen,0,this.lineLen-this.arrowLen,-this.arrowLen,"#ff0000"); g.drawLine(this.lineLen,0,this.lineLen-this.arrowLen,this.arrowLen,"#ff0000"); g.fillText(this.sign,50,-5,"","#ff0000","left"); if(this._isMoving&&this._targetChanger){ g.fillText(this._targetChanger.key+":"+this._targetChanger.value.toFixed(2),this.lineLen-15,-25,"","#ffff00","center"); } this.lenControl.posTo(this.lineLen-15,0); this.rotationControl.posTo(this.lineLen+10,0); this.size(this.arrowLen,this.lineLen); } __proto.clearMoveEvents=function(){ Laya.stage.off(/*laya.events.Event.MOUSE_MOVE*/"mousemove",this,this.stageMouseMove); Laya.stage.off(/*laya.events.Event.MOUSE_UP*/"mouseup",this,this.stageMouseUp); } __proto.controlMouseDown=function(e){ this.clearMoveEvents(); this.lenControlXChanger.record(); this.lenChanger.record(); if(this.targetChanger){ this.targetChanger.record(); } this._isMoving=true; Laya.stage.on(/*laya.events.Event.MOUSE_MOVE*/"mousemove",this,this.stageMouseMove); Laya.stage.on(/*laya.events.Event.MOUSE_UP*/"mouseup",this,this.stageMouseUp); } __proto.stageMouseMove=function(e){ this.lenControlXChanger.value=this.mouseX; this.lenChanger.showValueByScale(this.lenControlXChanger.scaleValue); if(this.targetChanger){ this.targetChanger.showValueByScale(this.lenControlXChanger.scaleValue); } this.drawMe(); } __proto.stageMouseUp=function(e){ this._isMoving=false; this.noticeChange(); this.clearMoveEvents(); this.lenControlXChanger.recover(); this.lenChanger.recover(); this.drawMe(); } __proto.noticeChange=function(){ var dLen=NaN; dLen=this.lenChanger.dValue; console.log("lenChange:",dLen); } __getset(0,__proto,'targetChanger',function(){ return this._targetChanger; },function(changer){ if(this._targetChanger){ this._targetChanger.dispose(); } this._targetChanger=changer; }); return ArrowLine; })(Sprite) /** *... *@author ww */ //class laya.debug.tools.comps.AutoSizeRec extends laya.display.Sprite var AutoSizeRec=(function(_super){ function AutoSizeRec(type){ this.type=0; this._color="#ffffff"; this.preX=NaN; this.preY=NaN; AutoSizeRec.__super.call(this); } __class(AutoSizeRec,'laya.debug.tools.comps.AutoSizeRec',_super); var __proto=AutoSizeRec.prototype; __proto.setColor=function(color){ this._color=color; this.reRender(); } __proto.changeSize=function(){ this.reRender(); } __proto.reRender=function(){ var g=this.graphics; g.clear(); g.drawRect(0,0,this.width,this.height,this._color); } __proto.record=function(){ this.preX=this.x; this.preY=this.y; } __proto.getDx=function(){ return this.x-this.preX; } __proto.getDy=function(){ return this.y-this.preY; } __getset(0,__proto,'height',_super.prototype._$get_height,function(value){ Laya.superSet(Sprite,this,'height',value); this.changeSize(); }); __getset(0,__proto,'width',_super.prototype._$get_width,function(value){ Laya.superSet(Sprite,this,'width',value); this.changeSize(); }); return AutoSizeRec; })(Sprite) /** * *@author ww *@version 1.0 * *@created 2015-12-30 下午2:37:05 */ //class laya.debug.tools.comps.Axis extends laya.display.Sprite var Axis=(function(_super){ function Axis(){ this._target=null; this._lenType= [ ["width","height"], ["scaleX","scaleY"]]; this._type=1; this.xAxis=new ArrowLine("X"); this.yAxis=new ArrowLine("Y"); this.controlBox=new Rect(); this._point=new Point(); this.oPoint=new Point(); this.myRotationChanger=ValueChanger.create(this,"rotation"); this.targetRotationChanger=ValueChanger.create(null,"rotation"); this.stageMouseRotationChanger=new ValueChanger(); Axis.__super.call(this); this.mouseEnabled=true; this.size(1,1); this.initMe(); this.xAxis.rotationControl.on(/*laya.events.Event.MOUSE_DOWN*/"mousedown",this,this.controlMouseDown); this.yAxis.rotationControl.on(/*laya.events.Event.MOUSE_DOWN*/"mousedown",this,this.controlMouseDown); this.controlBox.on(/*laya.events.Event.MOUSE_DOWN*/"mousedown",this,this.controlBoxMouseDown); this.on(/*laya.events.Event.DRAG_MOVE*/"dragmove",this,this.dragging); } __class(Axis,'laya.debug.tools.comps.Axis',_super); var __proto=Axis.prototype; __proto.updateChanges=function(){ if(this._target){ var params; params=this._lenType[this._type]; this.xAxis.targetChanger=ValueChanger.create(this._target,params[0]); this.yAxis.targetChanger=ValueChanger.create(this._target,params[1]); } } __proto.switchType=function(){ this._type++; this._type=this._type%this._lenType.length; this.type=this._type; } __proto.controlBoxMouseDown=function(e){ this.startDrag(); } __proto.dragging=function(){ if (this._target){ this._point.setTo(this.x,this.y); DisControlTool.transPoint(this.parent,this._target.parent,this._point); this._target.pos(this._point.x,this._point.y); } } __proto.initMe=function(){ this.addChild(this.xAxis); this.addChild(this.yAxis); this.yAxis.rotation=90; this.addChild(this.controlBox); this.controlBox.posTo(0,0); } __proto.clearMoveEvents=function(){ Laya.stage.off(/*laya.events.Event.MOUSE_MOVE*/"mousemove",this,this.stageMouseMove); Laya.stage.off(/*laya.events.Event.MOUSE_UP*/"mouseup",this,this.stageMouseUp); } __proto.controlMouseDown=function(e){ this.targetRotationChanger.target=this.target; this.clearMoveEvents(); this.oPoint.setTo(0,0); this.myRotationChanger.record(); this.oPoint=this.localToGlobal(this.oPoint); this.stageMouseRotationChanger.value=this.getStageMouseRatation(); this.stageMouseRotationChanger.record(); this.targetRotationChanger.record(); Laya.stage.on(/*laya.events.Event.MOUSE_MOVE*/"mousemove",this,this.stageMouseMove); Laya.stage.on(/*laya.events.Event.MOUSE_UP*/"mouseup",this,this.stageMouseUp); } __proto.getStageMouseRatation=function(){ return MathUtil.getRotation(this.oPoint.x,this.oPoint.y,Laya.stage.mouseX,Laya.stage.mouseY); } __proto.stageMouseMove=function(e){ this.stageMouseRotationChanger.value=this.getStageMouseRatation(); var dRotation=NaN; dRotation=-this.stageMouseRotationChanger.dValue; if(this.target){ this.targetRotationChanger.showValueByAdd(dRotation); }else{ this.myRotationChanger.showValueByAdd(dRotation); } } __proto.stageMouseUp=function(e){ this.noticeChange(); this.clearMoveEvents(); } __proto.noticeChange=function(){ console.log("rotate:",-this.stageMouseRotationChanger.dValue); } __getset(0,__proto,'target',function(){ return this._target; },function(tar){ this._target=tar; this.updateChanges(); }); __getset(0,__proto,'type',function(){ return this._type; },function(lenType){ this._type=lenType; this.updateChanges(); }); return Axis; })(Sprite) /** * *@author ww *@version 1.0 * *@created 2015-12-30 下午3:23:06 */ //class laya.debug.tools.comps.Rect extends laya.display.Sprite var Rect=(function(_super){ function Rect(){ this.recWidth=10; Rect.__super.call(this); this.drawMe(); } __class(Rect,'laya.debug.tools.comps.Rect',_super); var __proto=Rect.prototype; __proto.drawMe=function(){ var g; g=this.graphics; g.clear(); g.drawRect(0,0,this.recWidth,this.recWidth,"#22ff22"); this.size(this.recWidth,this.recWidth); } __proto.posTo=function(x,y){ this.x=x-this.recWidth*0.5; this.y=y-this.recWidth*0.5; } return Rect; })(Sprite) //class laya.debug.tools.DragBox extends laya.display.Sprite var DragBox=(function(_super){ function DragBox(type){ this._box=null; this._target=null; this._currDir=null; /**0-无,1-水平,2-垂直,3-全部*/ this._type=0; this.fixScale=NaN; DragBox.__super.call(this); this._left=this.drawBlock(); this._right=this.drawBlock(); this._top=this.drawBlock(); this._bottom=this.drawBlock(); this._topLeft=this.drawBlock(); this._topRight=this.drawBlock(); this._bottomLeft=this.drawBlock(); this._bottomRight=this.drawBlock(); this._lastPoint=new Point(); this._type=type=3; this.addChild(this._box=this.drawBorder(0,0,0xff0000)); if (type==1 || type==3){ this.addChild(this._left); this.addChild(this._right); } if (type==2 || type==3){ this.addChild(this._top); this.addChild(this._bottom); } if (type==3){ this.addChild(this._topLeft); this.addChild(this._topRight); this.addChild(this._bottomLeft); this.addChild(this._bottomRight); } this.on(/*laya.events.Event.MOUSE_DOWN*/"mousedown",this,this.onMouseDown); this.mouseThrough=true; } __class(DragBox,'laya.debug.tools.DragBox',_super); var __proto=DragBox.prototype; __proto.onMouseDown=function(e){ this._currDir=e.target; if(e.nativeEvent.shiftKey){ this.initFixScale(); } if (this._currDir !=this){ this._lastPoint.x=Laya.stage.mouseX; this._lastPoint.y=Laya.stage.mouseY; Laya.stage.on(/*laya.events.Event.MOUSE_MOVE*/"mousemove",this,this.onMouseMove); Laya.stage.on(/*laya.events.Event.MOUSE_UP*/"mouseup",this,this.onMouseUp); e.stopPropagation(); } } __proto.onMouseUp=function(e){ Laya.stage.off(/*laya.events.Event.MOUSE_MOVE*/"mousemove",this,this.onMouseMove); Laya.stage.off(/*laya.events.Event.MOUSE_UP*/"mouseup",this,this.onMouseUp); } __proto.initFixScale=function(){ this.fixScale=this._target.height / this._target.width; } __proto.onMouseMove=function(e){ var scale=1; var tx=(Laya.stage.mouseX-this._lastPoint.x)/ scale; var ty=(Laya.stage.mouseY-this._lastPoint.y)/ scale; var sameScale=false; var adptX=NaN; var adptY=NaN; if(e.nativeEvent.shiftKey){ if(this.fixScale<0)this.initFixScale(); adptY=tx *this.fixScale; adptX=ty/this.fixScale; sameScale=true; switch(this._currDir){ case this._topLeft: case this._bottomLeft: this._currDir=this._left; break ; case this._topRight: case this._bottomRight: this._currDir=this._right; break ; } } if (tx !=0 || ty !=0){ this._lastPoint.x+=tx *scale; this._lastPoint.y+=ty *scale; var tw=tx / this._target.scaleX; var th=ty / this._target.scaleY; if (this._currDir==this._left){ this._target.x+=tx; this._target.width-=tw; if (sameScale){ this._target.height=this._target.width*this.fixScale; } }else if (this._currDir==this._right){ this._target.width+=tw; if (sameScale){ this._target.height=this._target.width*this.fixScale; } }else if (this._currDir==this._top){ this._target.y+=ty; this._target.height-=th; if (sameScale){ this._target.width=this._target.height/this.fixScale; } }else if (this._currDir==this._bottom){ this._target.height+=th; if (sameScale){ this._target.width=this._target.height/this.fixScale; } }else if (this._currDir==this._topLeft){ this._target.x+=tx; this._target.y+=ty; this._target.width-=tw; this._target.height-=th; }else if (this._currDir==this._topRight){ this._target.y+=ty; this._target.width+=tw; this._target.height-=th; }else if (this._currDir==this._bottomLeft){ this._target.x+=tx; this._target.width-=tw; this._target.height+=th; }else if (this._currDir==this._bottomRight){ this._target.width+=tw; this._target.height+=th; } if (this._target.width < 1){ this._target.width=1; } if (this._target.height < 1){ this._target.height=1; } this._target.width=Math.round(this._target.width); this._target.x=Math.round(this._target.x); this._target.y=Math.round(this._target.y); this._target.height=Math.round(this._target.height); this.refresh(); } } /**画矩形*/ __proto.drawBorder=function(width,height,color,alpha){ (alpha===void 0)&& (alpha=1); var box=new Sprite(); var g=box.graphics; g.clear(); g.drawRect(0,0,width,height,null,"#"+color); return box; } /**画矩形*/ __proto.drawBlock=function(){ var box=new Sprite(); var g=box.graphics; g.clear(); box.width=DragBox.BLOCK_WIDTH; box.height=DragBox.BLOCK_WIDTH; g.drawRect(-DragBox.BLOCK_WIDTH *0.5,-DragBox.BLOCK_WIDTH *0.5,DragBox.BLOCK_WIDTH,DragBox.BLOCK_WIDTH,"#ffffff","#ff0000",1); box.mouseEnabled=true; box.mouseThrough=true; return box; } /**设置对象*/ __proto.setTarget=function(target){ this._target=target; this.refresh(); } __proto.refresh=function(){ this.changePoint(); this.changeSize(); } __proto.changePoint=function(){ var p=this._target.localToGlobal(new Point()); var np=(this.parent).globalToLocal(p); this.x=np.x; this.y=np.y; } /**设置大小*/ __proto.changeSize=function(){ var width=this._target.width *this._target.scaleX; var height=this._target.height *this._target.scaleY; console.log("change size"); this.rotation=this._target.rotation; if (this._box.width !=width || this._box.height !=height){ this._box.graphics.clear(); this._box.graphics.drawRect(0,0,Math.abs(width),Math.abs(height),null,"#ff0000"); this._box.size(width,height); this.size(width,height); this._box.scaleX=Math.abs(this._box.scaleX)*(this._target.scaleX > 0 ? 1 :-1); this._box.scaleY=Math.abs(this._box.scaleY)*(this._target.scaleY > 0 ? 1 :-1); this._left.x=0; this._left.y=height *0.5; this._right.x=width; this._right.y=height *0.5; this._top.x=width *0.5; this._top.y=0; this._bottom.x=width *0.5; this._bottom.y=height; this._topLeft.x=this._topLeft.y=0; this._topRight.x=width; this._topRight.y=0; this._bottomLeft.x=0; this._bottomLeft.y=height; this._bottomRight.x=width; this._bottomRight.y=height; } } DragBox.BLOCK_WIDTH=6; return DragBox; })(Sprite) /** *... *@author ww */ //class laya.debug.view.nodeInfo.DebugInfoLayer extends laya.display.Sprite var DebugInfoLayer=(function(_super){ function DebugInfoLayer(){ this.nodeRecInfoLayer=null; this.lineLayer=null; this.txtLayer=null; this.popLayer=null; this.graphicLayer=null; this.cacheViewLayer=null; DebugInfoLayer.__super.call(this); this.nodeRecInfoLayer=new Sprite(); this.lineLayer=new Sprite(); this.txtLayer=new Sprite(); this.popLayer=new Sprite(); this.graphicLayer=new Sprite(); this.cacheViewLayer=new Sprite(); this.nodeRecInfoLayer.name="nodeRecInfoLayer"; this.lineLayer.name="lineLayer"; this.txtLayer.name="txtLayer"; this.popLayer.name="popLayer"; this.graphicLayer.name="graphicLayer"; this.cacheViewLayer.name="cacheViewLayer"; this.addChild(this.lineLayer); this.addChild(this.cacheViewLayer); this.addChild(this.nodeRecInfoLayer); this.addChild(this.txtLayer); this.addChild(this.popLayer); this.addChild(this.graphicLayer); DebugInfoLayer.I=this; this.zOrder=999; Laya.stage.on(/*laya.events.Event.DOUBLE_CLICK*/"doubleclick",this,this.setTop); } __class(DebugInfoLayer,'laya.debug.view.nodeInfo.DebugInfoLayer',_super); var __proto=DebugInfoLayer.prototype; __proto.setTop=function(){ DisControlTool.setTop(this); } __proto.isDebugItem=function(sprite){ return DisControlTool.isInTree(this,sprite); } DebugInfoLayer.init=function(){ if (!DebugInfoLayer.I){ new DebugInfoLayer(); Laya.stage.addChild(DebugInfoLayer.I); } } DebugInfoLayer.I=null; return DebugInfoLayer; })(Sprite) /** *... *@author ww */ //class laya.debug.view.nodeInfo.NodeInfoPanel extends laya.display.Sprite var NodeInfoPanel=(function(_super){ function NodeInfoPanel(){ this._stateDic={}; this.isWorkState=false; NodeInfoPanel.__super.call(this); } __class(NodeInfoPanel,'laya.debug.view.nodeInfo.NodeInfoPanel',_super); var __proto=NodeInfoPanel.prototype; __proto.showDisInfo=function(node){ this.recoverNodes(); NodeInfosItem.showDisInfos(node); this.showOnly(node); this.isWorkState=true; } __proto.showOnly=function(node){ if (!node) return; this.hideBrothers(node); this.showOnly(node.parent); } __proto.recoverNodes=function(){ NodeInfosItem.hideAllInfos(); var key; var data; var tTar; for (key in this._stateDic){ data=this._stateDic[key]; tTar=data["target"]; if (tTar){ try{ tTar.visible=data.visible; }catch (e){ } } } this.isWorkState=false; } __proto.hideOtherChain=function(node){ if (!node) return; while (node){ this.hideBrothers(node); node=node.parent; } } __proto.hideChilds=function(node){ if (!node) return; var i=0,len=0; var cList; cList=node._childs; len=cList.length; var tChild; for (i=0;i < len;i++){ tChild=cList[i]; if (tChild==NodeInfosItem.NodeInfoContainer)continue ; this.saveNodeInfo(tChild); tChild.visible=false; } } __proto.hideBrothers=function(node){ if (!node) return; var p; p=node.parent; if (!p) return; var i=0,len=0; var cList; cList=p._childs; len=cList.length; var tChild; for (i=0;i < len;i++){ tChild=cList[i]; if (tChild==NodeInfosItem.NodeInfoContainer)continue ; if (tChild !=node){ this.saveNodeInfo(tChild); tChild.visible=false; } } } __proto.saveNodeInfo=function(node){ IDTools.idObj(node); if(this._stateDic.hasOwnProperty(IDTools.getObjID(node)))return; var data; data={}; data.target=node; data.visible=node.visible; this._stateDic[IDTools.getObjID(node)]=data; } __proto.recoverNodeInfo=function(node){ IDTools.idObj(node); if (this._stateDic.hasOwnProperty(IDTools.getObjID(node))){ var data; data=this._stateDic[IDTools.getObjID(node)]; node["visible"]=data.visible; } } NodeInfoPanel.init=function(){ if (!NodeInfoPanel.I){ NodeInfoPanel.I=new NodeInfoPanel(); NodeInfosItem.init(); ToolPanel.init(); } } NodeInfoPanel.I=null; return NodeInfoPanel; })(Sprite) /** *... *@author ww */ //class laya.debug.view.nodeInfo.NodeInfosItem extends laya.display.Sprite var NodeInfosItem=(function(_super){ function NodeInfosItem(){ //addChild(_infoTxt); this._infoTxt=null; this._tar=null; NodeInfosItem.__super.call(this); this._infoTxt=new Text(); this._infoTxt.color="#ff0000"; this._infoTxt.bgColor="#00ff00"; this._infoTxt.fontSize=12; } __class(NodeInfosItem,'laya.debug.view.nodeInfo.NodeInfosItem',_super); var __proto=NodeInfosItem.prototype; __proto.removeSelf=function(){ this._infoTxt.removeSelf(); return laya.display.Node.prototype.removeSelf.call(this); } __proto.showToUI=function(){ NodeInfosItem.NodeInfoContainer.nodeRecInfoLayer.addChild(this); this._infoTxt.removeSelf(); NodeInfosItem.NodeInfoContainer.txtLayer.addChild(this._infoTxt); this.findOkPos(); } __proto.randomAPos=function(r){ this._infoTxt.x=this.x+Laya.stage.width*Math.random(); this._infoTxt.y=this.y+r *Math.random(); } __proto.findOkPos=function(){ var len=0; len=20; this.randomAPos(len); return; var count=0; count=1; while (!this.isPosOk()){ count++; if (count >=500){ len+=10; count=0; } this.randomAPos(len); } } __proto.isPosOk=function(){ var tParent; tParent=NodeInfosItem.NodeInfoContainer.nodeRecInfoLayer; var i=0,len=0; var cList; cList=tParent._childs; len=cList.length; var tChild; var mRec; mRec=this._infoTxt.getBounds(); if (mRec.x < 0)return false; if (mRec.y < 0)return false; if (mRec.right > Laya.stage.width)return false; for (i=0;i < len;i++){ tChild=cList[i]; if (tChild==this._infoTxt)continue ; if (mRec.intersects(tChild.getBounds()))return false; } return true; } __proto.showInfo=function(node){ this._tar=node; if (!node)return; NodeInfosItem._txts.length=0; var i=0,len=0; var tKey; len=NodeInfosItem.showValues.length; if (node.name){ NodeInfosItem._txts.push(ClassTool.getClassName(node)+"("+node.name+")"); }else{ NodeInfosItem._txts.push(ClassTool.getClassName(node)); } for (i=0;i < len;i++){ tKey=NodeInfosItem.showValues[i]; NodeInfosItem._txts.push(tKey+":"+NodeInfosItem.getNodeValue(node,tKey)); } this._infoTxt.text=NodeInfosItem._txts.join("\n"); this.graphics.clear(); var pointList; pointList=node._getBoundPointsM(true); if(!pointList||pointList.length<1)return; pointList=GrahamScan.pListToPointList(pointList,true); WalkTools.walkArr(pointList,node.localToGlobal,node); pointList=GrahamScan.pointListToPlist(pointList); NodeInfosItem._disBoundRec=Rectangle._getWrapRec(pointList,NodeInfosItem._disBoundRec); this.graphics.drawRect(0,0,NodeInfosItem._disBoundRec.width,NodeInfosItem._disBoundRec.height,null,"#00ffff"); this.pos(NodeInfosItem._disBoundRec.x,NodeInfosItem._disBoundRec.y); } __proto.fresh=function(){ this.showInfo(this._tar); } __proto.clearMe=function(){ this._tar=null; } __proto.recover=function(){ Pool.recover("NodeInfosItem",this); } NodeInfosItem.init=function(){ if (!NodeInfosItem.NodeInfoContainer){ DebugInfoLayer.init(); NodeInfosItem.NodeInfoContainer=DebugInfoLayer.I; Laya.stage.addChild(NodeInfosItem.NodeInfoContainer); } } NodeInfosItem.getNodeInfoByNode=function(node){ IDTools.idObj(node); var key=0; key=IDTools.getObjID(node); if (!NodeInfosItem._nodeInfoDic[key]){ NodeInfosItem._nodeInfoDic[key]=new NodeInfosItem(); } return NodeInfosItem._nodeInfoDic[key]; } NodeInfosItem.hideAllInfos=function(){ var key; var tInfo; for (key in NodeInfosItem._nodeInfoDic){ tInfo=NodeInfosItem._nodeInfoDic[key]; tInfo.removeSelf(); } NodeInfosItem.clearRelations(); } NodeInfosItem.showNodeInfo=function(node){ var nodeInfo; nodeInfo=NodeInfosItem.getNodeInfoByNode(node); nodeInfo.showInfo(node); nodeInfo.showToUI(); } NodeInfosItem.showDisInfos=function(node){ var _node; _node=node; if (!node) return; while (node){ NodeInfosItem.showNodeInfo(node); node=node.parent; } DisControlTool.setTop(NodeInfosItem.NodeInfoContainer); NodeInfosItem.apdtTxtInfoPoss(_node); NodeInfosItem.updateRelations(); } NodeInfosItem.apdtTxtInfoPoss=function(node){ var disList; disList=[]; while (node){ disList.push(node); node=node.parent; }; var i=0,len=0; var tInfo; var tTxt; len=disList.length; var xPos=NaN; xPos=Laya.stage.width-150; var heightLen=0; heightLen=100; node=disList[0]; if (node){ tInfo=NodeInfosItem.getNodeInfoByNode(node); if (tInfo){ tTxt=tInfo._infoTxt; xPos=Laya.stage.width-tTxt.width-10; heightLen=tTxt.height+10; } } disList=disList.reverse(); for (i=0;i < len;i++){ node=disList[i]; tInfo=NodeInfosItem.getNodeInfoByNode(node); if (tInfo){ tTxt=tInfo._infoTxt; tTxt.pos(xPos,heightLen *i); } } } NodeInfosItem.clearRelations=function(){ var g; g=NodeInfosItem.NodeInfoContainer.lineLayer.graphics; g.clear(); } NodeInfosItem.updateRelations=function(){ var g; g=NodeInfosItem.NodeInfoContainer.lineLayer.graphics; g.clear(); var key; var tInfo; for (key in NodeInfosItem._nodeInfoDic){ tInfo=NodeInfosItem._nodeInfoDic[key]; if (tInfo.parent){ g.drawLine(tInfo.x,tInfo.y,tInfo._infoTxt.x,tInfo._infoTxt.y,"#0000ff"); } } } NodeInfosItem.getNodeValue=function(node,key){ var rst; NodeInfosItem._nodePoint.setTo(0,0); switch(key){ case "x": rst=node["x"]+" (g:"+node.localToGlobal(NodeInfosItem._nodePoint).x+")" break ; case "y": rst=node["y"]+" (g:"+node.localToGlobal(NodeInfosItem._nodePoint).y+")" break ; default : rst=node[key]; } return rst; } NodeInfosItem.NodeInfoContainer=null; NodeInfosItem._nodeInfoDic={}; NodeInfosItem._txts=[]; __static(NodeInfosItem, ['showValues',function(){return this.showValues=["x","y","scaleX","scaleY","width","height","visible","mouseEnabled"];},'_disBoundRec',function(){return this._disBoundRec=new Rectangle();},'_nodePoint',function(){return this._nodePoint=new Point();} ]); return NodeInfosItem; })(Sprite) /** *... *@author ww */ //class laya.debug.view.nodeInfo.recinfos.NodeRecInfo extends laya.display.Sprite var NodeRecInfo=(function(_super){ function NodeRecInfo(){ this.txt=null; this._tar=null; this.recColor="#00ff00"; NodeRecInfo.__super.call(this); this.txt=new Text(); this.txt.color="#ff0000"; this.txt.bgColor="#00ff00"; this.txt.fontSize=12; this.addChild(this.txt); } __class(NodeRecInfo,'laya.debug.view.nodeInfo.recinfos.NodeRecInfo',_super); var __proto=NodeRecInfo.prototype; __proto.setInfo=function(str){ this.txt.text=str; } __proto.setTarget=function(tar){ this._tar=tar; } __proto.showInfo=function(node){ this._tar=node; if (!node)return; if(!node._$P)return; this.graphics.clear(); var pointList; pointList=node._getBoundPointsM(true); if(!pointList||pointList.length<1)return; pointList=GrahamScan.pListToPointList(pointList,true); WalkTools.walkArr(pointList,node.localToGlobal,node); pointList=GrahamScan.pointListToPlist(pointList); NodeRecInfo._disBoundRec=Rectangle._getWrapRec(pointList,NodeRecInfo._disBoundRec); this.graphics.drawRect(0,0,NodeRecInfo._disBoundRec.width,NodeRecInfo._disBoundRec.height,null,DebugConsts.RECACHE_REC_COLOR,2); this.pos(NodeRecInfo._disBoundRec.x,NodeRecInfo._disBoundRec.y); } __proto.fresh=function(){ this.showInfo(this._tar); } __proto.clearMe=function(){ this._tar=null; } __static(NodeRecInfo, ['_disBoundRec',function(){return this._disBoundRec=new Rectangle();} ]); return NodeRecInfo; })(Sprite) /** *... *@author ww */ //class laya.debug.view.nodeInfo.ToolPanel extends laya.display.Sprite var ToolPanel=(function(_super){ function ToolPanel(){ ToolPanel.__super.call(this); Base64AtlasManager.base64.preLoad(Handler.create(this,this.showToolBar)); ContextMenu.init(); DisResizer.init(); var tipManager; tipManager=new TipManagerForDebug(); } __class(ToolPanel,'laya.debug.view.nodeInfo.ToolPanel',_super); var __proto=ToolPanel.prototype; //Laya.timer.once(1000,this,showToolBar); __proto.showToolBar=function(){ DebugPanelView.I.show(); } __proto.createViews=function(){ ToolPanel.typeClassDic["Find"]=FindView; ToolPanel.typeClassDic["Filter"]=FilterView; ToolPanel.typeClassDic["TxtInfo"]=TxtInfoView; ToolPanel.typeClassDic["Tree"]=NodeTreeView; } __proto.switchShow=function(type){ var view; view=this.getView(type); if (view){ view.switchShow(); } } __proto.getView=function(type){ var view; view=ToolPanel.viewDic[type]; if (!view && ToolPanel.typeClassDic[type]){ view=ToolPanel.viewDic[type]=new ToolPanel.typeClassDic[type](); } return view; } __proto.showTxtInfo=function(txt){ OutPutView.I.showTxt(txt); } __proto.showNodeTree=function(node){ NodeTree.I.setDis(node); DebugPanelView.I.switchToTree(); } __proto.showSelectInStage=function(node){ NodeTree.I.showSelectInStage(node); DebugPanelView.I.switchToTree(); } __proto.showSelectItems=function(selectList){ DebugPanelView.I.swichToSelect(); SelectInfosView.I.setSelectList(selectList); } ToolPanel.init=function(){ if (!ToolPanel.I)ToolPanel.I=new ToolPanel(); } ToolPanel.I=null; ToolPanel.viewDic={}; ToolPanel.Find="Find"; ToolPanel.Filter="Filter"; ToolPanel.TxtInfo="TxtInfo"; ToolPanel.Tree="Tree"; __static(ToolPanel, ['typeClassDic',function(){return this.typeClassDic={ };} ]); return ToolPanel; })(Sprite) /** * *@author ww *@version 1.0 * *@created 2015-9-29 上午11:17:35 */ //class laya.debug.tools.debugUI.DButton extends laya.display.Text var DButton=(function(_super){ function DButton(){ DButton.__super.call(this); this.bgColor="#ffff00"; this.wordWrap=false; this.mouseEnabled=true; } __class(DButton,'laya.debug.tools.debugUI.DButton',_super); return DButton; })(Text) /** *自动根据大小填充自己全部区域的显示对象 *@author ww */ //class laya.debug.tools.resizer.AutoFillRec extends laya.ui.Component var AutoFillRec=(function(_super){ function AutoFillRec(type){ this.type=0; this.preX=NaN; this.preY=NaN; AutoFillRec.__super.call(this); } __class(AutoFillRec,'laya.debug.tools.resizer.AutoFillRec',_super); var __proto=AutoFillRec.prototype; //super(type); __proto.changeSize=function(){ _super.prototype.changeSize.call(this); var g=this.graphics; g.clear(); g.drawRect(0,0,this.width,this.height,"#33c5f5"); } __proto.record=function(){ this.preX=this.x; this.preY=this.y; } __proto.getDx=function(){ return this.x-this.preX; } __proto.getDy=function(){ return this.y-this.preY; } return AutoFillRec; })(Component) /**鼠标提示管理类*/ //class laya.debug.tools.TipManagerForDebug extends laya.ui.Component var TipManagerForDebug=(function(_super){ function TipManagerForDebug(){ this._tipBox=null; this._tipText=null; this._defaultTipHandler=null; TipManagerForDebug.__super.call(this); this._tipBox=new Component(); this._tipBox.addChild(this._tipText=new Text()); this._tipText.x=this._tipText.y=5; this._tipText.color=TipManagerForDebug.tipTextColor; this._defaultTipHandler=this.showDefaultTip; Laya.stage.on(/*laya.ui.UIEvent.SHOW_TIP*/"showtip",this,this.onStageShowTip); Laya.stage.on(/*laya.ui.UIEvent.HIDE_TIP*/"hidetip",this,this.onStageHideTip); } __class(TipManagerForDebug,'laya.debug.tools.TipManagerForDebug',_super); var __proto=TipManagerForDebug.prototype; __proto.onStageHideTip=function(e){ Laya.timer.clear(this,this.showTip); this.closeAll(); this.removeSelf(); } __proto.onStageShowTip=function(data){ Laya.timer.once(TipManagerForDebug.tipDelay,this,this.showTip,[data],true); } __proto.showTip=function(tip){ if ((typeof tip=='string')){ var text=String(tip); if (Boolean(text)){ this._defaultTipHandler(text); } }else if ((tip instanceof laya.utils.Handler )){ (tip).run(); }else if ((typeof tip=='function')){ (tip).apply(); } if (true){ Laya.stage.on(/*laya.events.Event.MOUSE_MOVE*/"mousemove",this,this.onStageMouseMove); Laya.stage.on(/*laya.events.Event.MOUSE_DOWN*/"mousedown",this,this.onStageMouseDown); } this.onStageMouseMove(null); } __proto.onStageMouseDown=function(e){ this.closeAll(); } __proto.onStageMouseMove=function(e){ this.showToStage(this,TipManagerForDebug.offsetX,TipManagerForDebug.offsetY); } __proto.showToStage=function(dis,offX,offY){ (offX===void 0)&& (offX=0); (offY===void 0)&& (offY=0); var rec=dis.getBounds(); dis.x=Laya.stage.mouseX+offX; dis.y=Laya.stage.mouseY+offY; if (dis.x+rec.width > Laya.stage.width){ dis.x-=rec.width+offX; } if (dis.y+rec.height > Laya.stage.height){ dis.y-=rec.height+offY; } } /**关闭所有鼠标提示*/ __proto.closeAll=function(){ Laya.timer.clear(this,this.showTip); Laya.stage.off(/*laya.events.Event.MOUSE_MOVE*/"mousemove",this,this.onStageMouseMove); Laya.stage.off(/*laya.events.Event.MOUSE_DOWN*/"mousedown",this,this.onStageMouseDown); this.removeChildren(); } __proto.showDisTip=function(tip){ this.addChild(tip); this.showToStage(this); Laya.stage.addChild(this); } __proto.showDefaultTip=function(text){ this._tipText.text=text; var g=this._tipBox.graphics; g.clear(); g.drawRect(0,0,this._tipText.width+10,this._tipText.height+10,TipManagerForDebug.tipBackColor); this.addChild(this._tipBox); this.showToStage(this); Laya.stage.addChild(this); } /**默认鼠标提示函数*/ __getset(0,__proto,'defaultTipHandler',function(){ return this._defaultTipHandler; },function(value){ this._defaultTipHandler=value; }); TipManagerForDebug.offsetX=10; TipManagerForDebug.offsetY=15; TipManagerForDebug.tipTextColor="#ffffff"; TipManagerForDebug.tipBackColor="#111111"; TipManagerForDebug.tipDelay=200; return TipManagerForDebug; })(Component) /** *... *@author ww */ //class laya.debug.view.nodeInfo.views.UIViewBase extends laya.ui.Component var UIViewBase=(function(_super){ function UIViewBase(){ this.minHandler=null; this.maxHandler=null; this.isFirstShow=true; this.dis=null; UIViewBase.__super.call(this); this.dis=this; this.minHandler=new Handler(this,this.close); this.maxHandler=new Handler(this,this.show); this.createPanel(); if (this.dis){ this.dis.on(/*laya.events.Event.MOUSE_DOWN*/"mousedown",this,this.bringToTop); this.dis.cacheAsBitmap=true; } } __class(UIViewBase,'laya.debug.view.nodeInfo.views.UIViewBase',_super); var __proto=UIViewBase.prototype; __proto.show=function(){ DebugInfoLayer.I.setTop(); DebugInfoLayer.I.popLayer.addChild(this.dis); if (this.isFirstShow){ this.firstShowFun(); this.isFirstShow=false; } } __proto.firstShowFun=function(){ this.dis.x=(Laya.stage.width-this.dis.width)*0.5; this.dis.y=(Laya.stage.height-this.dis.height)*0.5; DisControlTool.intFyDisPos(this.dis); } __proto.bringToTop=function(){ DisControlTool.setTop(this.dis); } __proto.switchShow=function(){ if (this.dis.parent){ this.close(); }else{ this.show(); } } __proto.close=function(){ this.dis.removeSelf(); } __proto.createPanel=function(){} __proto.getInput=function(){ var input; input=new DInput(); input.size(200,30); input.fontSize=30; return input; } __proto.getButton=function(){ var btn; btn=new DButton(); btn.size(40,30); btn.fontSize=30; return btn; } return UIViewBase; })(Component) /** *... *@author ww */ //class laya.debug.view.nodeInfo.recinfos.ReCacheRecInfo extends laya.debug.view.nodeInfo.recinfos.NodeRecInfo var ReCacheRecInfo=(function(_super){ function ReCacheRecInfo(){ this.isWorking=false; this.count=0; this.mTime=0; ReCacheRecInfo.__super.call(this); this.txt.fontSize=12; } __class(ReCacheRecInfo,'laya.debug.view.nodeInfo.recinfos.ReCacheRecInfo',_super); var __proto=ReCacheRecInfo.prototype; __proto.addCount=function(time){ (time===void 0)&& (time=0); this.count++; this.mTime+=time; if (!this.isWorking){ this.working=true; } } __proto.updates=function(){ if (!this._tar["displayedInStage"]){ this.working=false; this.removeSelf(); } this.txt.text=ClassTool.getNodeClassAndName(this._tar)+"\n"+"reCache:"+this.count+"\ntime:"+this.mTime; if (this.count > 0){ this.fresh(); Laya.timer.clear(this,this.removeSelfLater); }else{ this.working=false; Laya.timer.once(3000,this,this.removeSelfLater); } this.count=0; this.mTime=0; } __proto.removeSelfLater=function(){ this.working=false; this.removeSelf(); } __getset(0,__proto,'working',null,function(v){ this.isWorking=v; if (v){ Laya.timer.loop(1000,this,this.updates); }else{ Laya.timer.clear(this,this.updates); } }); ReCacheRecInfo.showTime=3000; return ReCacheRecInfo; })(NodeRecInfo) /** *... *@author ww */ //class laya.debug.tools.debugUI.DInput extends laya.display.Input var DInput=(function(_super){ function DInput(){ DInput.__super.call(this); this.bgColor="#11ff00"; } __class(DInput,'laya.debug.tools.debugUI.DInput',_super); return DInput; })(Input) /** * *@author ww *@version 1.0 * *@created 2015-10-24 下午2:58:37 */ //class laya.debug.uicomps.ContextMenu extends laya.ui.Box var ContextMenu=(function(_super){ function ContextMenu(){ this._tY=0; ContextMenu.__super.call(this); StyleConsts.setViewScale(this); } __class(ContextMenu,'laya.debug.uicomps.ContextMenu',_super); var __proto=ContextMenu.prototype; __proto.addItem=function(item){ this.addChild(item); item.y=this._tY; this._tY+=item.height; item.on(/*laya.events.Event.MOUSE_DOWN*/"mousedown",this,this.onClick); } __proto.onClick=function(e){ this.event(/*laya.events.Event.SELECT*/"select",e); this.removeSelf(); } __proto.show=function(posX,posY){ (posX===void 0)&& (posX=-999); (posY===void 0)&& (posY=-999); Laya.timer.once(100,this,ContextMenu.showMenu,[this,posX,posY]); } ContextMenu.init=function(){ Laya.stage.on(/*laya.events.Event.CLICK*/"click",null,ContextMenu.cleanMenu); } ContextMenu.cleanMenu=function(e){ var i=0; var len=0; len=ContextMenu._menuList.length; for(i=0;i 0){ tData.label=key+":"+dataO[key]+" +"+tData.add; } else{ tData.label=key+":"+dataO[key]; } count=RunProfile.getRunInfo(key); if (count){ count.record(); } tData.rank=tData.add *1000+tData.count; this.preInfo[key]=dataO[key]; dataList.push(tData); } dataList.sort(MathTools.sortByKey("rank",true,true)); this.view.itemList.array=dataList; } __getset(1,ObjectCreateView,'I',function(){ if (!ObjectCreateView._I) ObjectCreateView._I=new ObjectCreateView(); return ObjectCreateView._I; },laya.debug.view.nodeInfo.views.UIViewBase._$SET_I); ObjectCreateView._I=null; return ObjectCreateView; })(UIViewBase) /** *... *@author ww */ //class laya.debug.view.nodeInfo.views.ObjectInfoView extends laya.debug.view.nodeInfo.views.UIViewBase var ObjectInfoView=(function(_super){ function ObjectInfoView(){ this.view=null; this.showKeys=["x","y","width","height","renderCost"]; this._closeSettingHandler=null; this._tar=null; ObjectInfoView.__super.call(this); } __class(ObjectInfoView,'laya.debug.view.nodeInfo.views.ObjectInfoView',_super); var __proto=ObjectInfoView.prototype; __proto.createPanel=function(){ _super.prototype.createPanel.call(this); this.view=new ObjectInfo(); StyleConsts.setViewScale(this.view); this.addChild(this.view); this.inits(); } __proto.inits=function(){ this.view.closeBtn.on(/*laya.events.Event.CLICK*/"click",this,this.close); this.view.settingBtn.on(/*laya.events.Event.CLICK*/"click",this,this.onSettingBtn); this.view.autoUpdate.on(/*laya.events.Event.CHANGE*/"change",this,this.onAutoUpdateChange); DisControlTool.setDragingItem(this.view.bg,this.view); DisControlTool.setResizeAbleEx(this.view); this._closeSettingHandler=new Handler(this,this.closeSetting); this.dis=this.view; } __proto.onAutoUpdateChange=function(){ this.autoUpdate=this.view.autoUpdate.selected; } __proto.onSettingBtn=function(){ NodeTreeSettingView.I.showSetting(this.showKeys,this._closeSettingHandler,this._tar); } __proto.reset=function(){ this.showKeys=["x","y","width","height","renderCost"]; } __proto.closeSetting=function(newKeys){ this.showKeys=newKeys; this.fresh(); } __proto.showObjectInfo=function(obj){ this._tar=obj; this.fresh(); this.show(); this.onAutoUpdateChange(); } __proto.fresh=function(){ if (!this._tar){ this.view.showTxt.text=""; this.view.title.text="未选中对象"; } else{ this.view.title.text=ClassTool.getNodeClassAndName(this._tar); this.view.showTxt.text=ObjectInfoView.getObjValueStr(this._tar,this.showKeys,false); } } __proto.freshKeyInfos=function(){ this.fresh(); } __proto.close=function(){ _super.prototype.close.call(this); this.autoUpdate=false; Pool.recover("ObjectInfoView",this); } __proto.show=function(){ _super.prototype.show.call(this); } __getset(0,__proto,'autoUpdate',null,function(v){ Laya.timer.clear(this,this.freshKeyInfos); if (v){ Laya.timer.loop(2000,this,this.freshKeyInfos); } }); ObjectInfoView.getObjValueStr=function(obj,keys,withTitle){ (withTitle===void 0)&& (withTitle=true); var i=0,len=0; var tKey; ObjectInfoView._txts.length=0; len=keys.length; if (withTitle){ if (obj.name){ ObjectInfoView._txts.push(ClassTool.getClassName(obj)+"("+obj.name+")"); } else{ ObjectInfoView._txts.push(ClassTool.getClassName(obj)); } } for (i=0;i < len;i++){ tKey=keys[i]; ObjectInfoView._txts.push(tKey+":"+ObjectInfoView.getNodeValue(obj,tKey)); } return ObjectInfoView._txts.join("\n"); } ObjectInfoView.getNodeValue=function(node,key){ var rst; if ((node instanceof laya.display.Sprite )){ var tNode; tNode=node; switch (key){ case "gRec": rst=NodeUtils.getGRec(tNode).toString(); break ; case "gAlpha": rst=NodeUtils.getGAlpha(tNode)+""; break ; case "cmdCount": rst=NodeUtils.getNodeCmdCount(tNode)+""; break ; case "cmdAll": rst=NodeUtils.getNodeCmdTotalCount(tNode)+""; break ; case "nodeAll": rst=""+NodeUtils.getNodeCount(tNode); break ; case "nodeVisible": rst=""+NodeUtils.getNodeCount(tNode,true); break ; case "nodeRender": rst=""+NodeUtils.getRenderNodeCount(tNode); break ; case "nodeReCache": rst=""+NodeUtils.getReFreshRenderNodeCount(tNode); break ; case "renderCost": rst=""+RenderAnalyser.I.getTime(tNode); break ; case "renderCount": rst=""+RenderAnalyser.I.getCount(tNode); break ; default : rst=node[key]+""; } } else{ rst=node[key]+""; } return rst; } ObjectInfoView.showObject=function(obj){ var infoView; infoView=Pool.getItemByClass("ObjectInfoView",ObjectInfoView); infoView.reset(); infoView.showObjectInfo(obj); } ObjectInfoView._txts=[]; return ObjectInfoView; })(UIViewBase) /** *... *@author ww */ //class laya.debug.view.nodeInfo.views.OutPutView extends laya.debug.view.nodeInfo.views.UIViewBase var OutPutView=(function(_super){ function OutPutView(){ this.view=null; OutPutView.__super.call(this); DebugTool._logFun=OutPutView.log; } __class(OutPutView,'laya.debug.view.nodeInfo.views.OutPutView',_super); var __proto=OutPutView.prototype; __proto.createPanel=function(){ this.view=new OutPut(); DisControlTool.setDragingItem(this.view.txt,this.view); DisControlTool.setDragingItem(this.view.bg,this.view); StyleConsts.setViewScale(this.view); this.view.txt.textField.overflow=Text.SCROLL; this.view.txt.textField.wordWrap=true; this.view.on(/*laya.events.Event.MOUSE_WHEEL*/"mousewheel",this,this.mouseWheel); this.view.txt.text=""; DisControlTool.setResizeAbleEx(this.view); this.view.closeBtn.on(/*laya.events.Event.CLICK*/"click",this,this.close); this.view.clearBtn.on(/*laya.events.Event.CLICK*/"click",this,this.onClearBtn); this.dis=this.view; } __proto.onClearBtn=function(){ this.clearText(); } __proto.mouseWheel=function(e){ this.view.txt.textField.scrollY-=e.delta*10; } __proto.showTxt=function(str){ this.view.txt.text=str; this.show(); this.view.txt.textField.scrollY=this.view.txt.textField.maxScrollY; } __proto.clearText=function(){ this.view.txt.text=""; } __proto.dTrace=function(__arg){ var arg=arguments; if (this.view.txt.textField.scrollY > 1000){ this.view.txt.text=""; }; var str; var i=0,len=0; len=arg.length; str=arg[0]; for (i=1;i < len;i++){ str+=" "+arg[i]; } this.addStr(str); } __proto.addStr=function(str){ this.view.txt.text+="\n"+str; this.show(); this.view.txt.textField.scrollY=this.view.txt.textField.maxScrollY; } __getset(1,OutPutView,'I',function(){ if (!OutPutView._I)OutPutView._I=new OutPutView(); return OutPutView._I; },laya.debug.view.nodeInfo.views.UIViewBase._$SET_I); OutPutView.log=function(str){ OutPutView.I.addStr(str); } OutPutView._I=null; return OutPutView; })(UIViewBase) /** *... *@author ww */ //class laya.debug.view.nodeInfo.views.RenderCostRankView extends laya.debug.view.nodeInfo.views.UIViewBase var RenderCostRankView=(function(_super){ function RenderCostRankView(){ this.view=null; RenderCostRankView.__super.call(this); } __class(RenderCostRankView,'laya.debug.view.nodeInfo.views.RenderCostRankView',_super); var __proto=RenderCostRankView.prototype; __proto.createPanel=function(){ this.view=new Rank(); this.view.top=this.view.bottom=this.view.left=this.view.right=0; this.addChild(this.view); NodeMenu.I.setNodeListAction(this.view.itemList); this.view.closeBtn.on(/*laya.events.Event.CLICK*/"click",this,this.close); this.view.freshBtn.on(/*laya.events.Event.CLICK*/"click",this,this.fresh); this.view.itemList.scrollBar.hide=true; this.view.autoUpdate.on(/*laya.events.Event.CHANGE*/"change",this,this.onAutoUpdateChange); this.dis=this; this.view.itemList.array=[]; this.onAutoUpdateChange(); this.fresh(); Laya.timer.once(5000,this,this.fresh); } __proto.onRightClick=function(){ var list; list=this.view.itemList; if (list.selectedItem){ var tarNode; tarNode=list.selectedItem.path; NodeMenu.I.objRightClick(tarNode); } } __proto.onAutoUpdateChange=function(){ this.autoUpdate=this.view.autoUpdate.selected; } __proto.fresh=function(){ this.view.title.text="渲染用时排行("+NodeConsts.RenderCostMaxTime+"ms)"; var nodeDic; nodeDic=RenderAnalyser.I.nodeDic; var key; var tNode; var tData; var dataList; dataList=[]; for (key in nodeDic){ tNode=nodeDic[key]; if (RenderCostRankView.filterDebugNodes && DisControlTool.isInTree(DebugInfoLayer.I,tNode))continue ; if (RenderAnalyser.I.getTime(tNode)<=0)continue ; tData={}; tData.time=RenderAnalyser.I.getTime(tNode); if (RenderCostRankView.filterDebugNodes && tNode==Laya.stage){ tData.time-=RenderAnalyser.I.getTime(DebugInfoLayer.I); } tData.path=tNode; tData.label=ClassTool.getNodeClassAndName(tNode)+":"+tData.time; dataList.push(tData); } dataList.sort(MathTools.sortByKey("time",true,true)); this.view.itemList.array=dataList; } __getset(0,__proto,'autoUpdate',null,function(v){ Laya.timer.clear(this,this.fresh); if (v){ this.fresh(); Laya.timer.loop(NodeConsts.RenderCostMaxTime,this,this.fresh); } }); __getset(1,RenderCostRankView,'I',function(){ if (!RenderCostRankView._I) RenderCostRankView._I=new RenderCostRankView(); return RenderCostRankView._I; },laya.debug.view.nodeInfo.views.UIViewBase._$SET_I); RenderCostRankView._I=null; RenderCostRankView.filterDebugNodes=true; return RenderCostRankView; })(UIViewBase) /** *... *@author ww */ //class laya.debug.view.nodeInfo.views.ResRankView extends laya.debug.view.nodeInfo.views.UIViewBase var ResRankView=(function(_super){ function ResRankView(){ this.view=null; ResRankView.__super.call(this); } __class(ResRankView,'laya.debug.view.nodeInfo.views.ResRankView',_super); var __proto=ResRankView.prototype; __proto.createPanel=function(){ this.view=new Rank(); this.view.top=this.view.bottom=this.view.left=this.view.right=0; this.addChild(this.view); this.view.closeBtn.on(/*laya.events.Event.CLICK*/"click",this,this.close); this.view.freshBtn.on(/*laya.events.Event.CLICK*/"click",this,this.fresh); this.view.itemList.scrollBar.hide=true; this.view.autoUpdate.on(/*laya.events.Event.CHANGE*/"change",this,this.onAutoUpdateChange); this.dis=this; this.view.itemList.array=[]; this.view.itemList.on(/*laya.events.Event.RIGHT_CLICK*/"rightclick",this,this.onRightClick); this.onAutoUpdateChange(); this.fresh(); } __proto.onRightClick=function(){ var list; list=this.view.itemList; if (list.selectedItem){ console.log(list.selectedItem["url"]); } } __proto.onAutoUpdateChange=function(){ this.autoUpdate=this.view.autoUpdate.selected; } __proto.fresh=function(){ this.view.title.text="图片缓存列表"; var resList; resList=ResTools.getCachedResList(); var key; var tNode; var tData; var dataList; dataList=[]; var i=0,len=0; len=resList.length; for (i=0;i < len;i++){ tData={}; var tUrl; tUrl=resList[i]; tUrl=tUrl.replace(URL.rootPath,"") tData.label=tUrl; tData.url=tUrl; dataList.push(tData); } this.view.itemList.array=dataList; } __getset(0,__proto,'autoUpdate',null,function(v){ Laya.timer.clear(this,this.fresh); if (v){ this.fresh(); Laya.timer.loop(NodeConsts.RenderCostMaxTime,this,this.fresh); } }); __getset(1,ResRankView,'I',function(){ if (!ResRankView._I) ResRankView._I=new ResRankView(); return ResRankView._I; },laya.debug.view.nodeInfo.views.UIViewBase._$SET_I); ResRankView._I=null; ResRankView.filterDebugNodes=true; return ResRankView; })(UIViewBase) /** *... *@author ww */ //class laya.debug.view.nodeInfo.views.SelectInfosView extends laya.debug.view.nodeInfo.views.UIViewBase var SelectInfosView=(function(_super){ function SelectInfosView(){ this.showKeys=[]; this.view=null; this.fliterTxt=null; this.itemList=null; SelectInfosView.__super.call(this); SelectInfosView._I=this; this.setSelectList(null); } __class(SelectInfosView,'laya.debug.view.nodeInfo.views.SelectInfosView',_super); var __proto=SelectInfosView.prototype; __proto.createPanel=function(){ this.view=new SelectInfos(); this.addChild(this.view); this.view.top=this.view.bottom=this.view.left=this.view.right=0; NodeMenu.I.setNodeListAction(this.view.selectList); this.view.closeBtn.on(/*laya.events.Event.CLICK*/"click",this,this.close); this.view.selectList.scrollBar.hide=true; this.dis=null; this.view.findBtn.on(/*laya.events.Event.CLICK*/"click",this,this.onFindBtn); this.fliterTxt=this.view.fliterTxt; this.view.fliterTxt.on(/*laya.events.Event.ENTER*/"enter",this,this.onFliterTxtChange); this.view.fliterTxt.on(/*laya.events.Event.BLUR*/"blur",this,this.onFliterTxtChange); } __proto.onFliterTxtChange=function(e){ var key; key=this.fliterTxt.text; if (key==""){ if (this.showKeys.length !=0){ this.showKeys.length=0; this.fresh(); } }else if (key !=this.showKeys.join(",")){ this.showKeys=key.split(","); this.fresh(); } } __proto.onFindBtn=function(){ FindSmallView.I.show(); } __proto.onRightClick=function(){ var list; list=this.view.selectList; if (list.selectedItem){ var tarNode; tarNode=list.selectedItem.path; NodeMenu.I.objRightClick(tarNode); } } //} __proto.setSelectTarget=function(node){ if (!node)return; this.setSelectList([node]); } __proto.setSelectList=function(list){ this.itemList=list; this.fresh(); } //show(); __proto.fresh=function(){ var list; list=this.itemList; if (!list || list.length < 1){ this.view.selectList.array=[]; return; }; var i=0,len=0; var tDis; var tData; len=list.length; var disList; disList=[]; for (i=0;i < len;i++){ tDis=list[i]; tData={}; tData.label=this.getLabelTxt(tDis); tData.path=tDis; disList.push(tData); } this.view.selectList.array=disList; } __proto.getLabelTxt=function(item){ var rst; rst=ClassTool.getNodeClassAndName(item); var i=0,len=0; len=this.showKeys.length; for (i=0;i < len;i++){ rst+=","+ObjectInfoView.getNodeValue(item,this.showKeys[i]); } return rst; } __getset(1,SelectInfosView,'I',function(){ if (!SelectInfosView._I)SelectInfosView._I=new SelectInfosView(); return SelectInfosView._I; },laya.debug.view.nodeInfo.views.UIViewBase._$SET_I); SelectInfosView._I=null; return SelectInfosView; })(UIViewBase) /** *... *@author ww */ //class laya.debug.view.nodeInfo.views.ToolBarView extends laya.debug.view.nodeInfo.views.UIViewBase var ToolBarView=(function(_super){ function ToolBarView(){ this.view=null; ToolBarView.__super.call(this); } __class(ToolBarView,'laya.debug.view.nodeInfo.views.ToolBarView',_super); var __proto=ToolBarView.prototype; __proto.createPanel=function(){ this.view=new ToolBar(); this.addChild(this.view); DisControlTool.setDragingItem(this.view.bg,this.view); this.view.on(/*laya.events.Event.CLICK*/"click",this,this.onBtnClick); this.view.minBtn.minHandler=this.minHandler; this.view.minBtn.maxHandler=this.maxHandler; this.view.minBtn.tar=this.view; this.clickSelectChange(); this.view.selectWhenClick.on(/*laya.events.Event.CHANGE*/"change",this,this.clickSelectChange); Notice.listen(/*laya.debug.tools.DisplayHook.ITEM_CLICKED*/"ItemClicked",this,this.itemClicked); this.dis=this.view; } __proto.itemClicked=function(tar){ if (!ToolBarView.isClickSelectState)return; if (DisControlTool.isInTree(this.view.selectWhenClick,tar))return; if (ToolBarView.ignoreDebugTool){ if (DebugInfoLayer.I.isDebugItem(tar))return; } } __proto.clickSelectChange=function(){ ToolBarView.isClickSelectState=this.view.selectWhenClick.selected; } __proto.firstShowFun=function(){ this.dis.x=Laya.stage.width-this.dis.width-20; this.dis.y=5; } __proto.onBtnClick=function(e){ switch(e.target){ case this.view.treeBtn: ToolPanel.I.switchShow(/*laya.debug.view.nodeInfo.ToolPanel.Tree*/"Tree"); break ; case this.view.findBtn: ToolPanel.I.switchShow(/*laya.debug.view.nodeInfo.ToolPanel.Find*/"Find"); break ; case this.view.clearBtn: DebugTool.clearDebugLayer(); break ; case this.view.rankBtn: RenderCostRankView.I.show(); break ; case this.view.nodeRankBtn: ObjectCreateView.I.show(); break ; case this.view.cacheBtn: NodeUtils.showCachedSpriteRecs(); break ; } } __getset(1,ToolBarView,'I',function(){ if (!ToolBarView._I)ToolBarView._I=new ToolBarView(); return ToolBarView._I; },laya.debug.view.nodeInfo.views.UIViewBase._$SET_I); ToolBarView._I=null; ToolBarView.ignoreDebugTool=true; ToolBarView.isClickSelectState=false; return ToolBarView; })(UIViewBase) /** *... *@author ww */ //class laya.debug.view.nodeInfo.views.TxtInfoView extends laya.debug.view.nodeInfo.views.UIViewBase var TxtInfoView=(function(_super){ function TxtInfoView(){ this.input=null; this.btn=null; TxtInfoView.__super.call(this); } __class(TxtInfoView,'laya.debug.view.nodeInfo.views.TxtInfoView',_super); var __proto=TxtInfoView.prototype; __proto.createPanel=function(){ this.input=new Input(); this.input.size(200,400); this.input.multiline=true; this.input.bgColor="#ff00ff"; this.input.fontSize=12; this.input.wordWrap=true; this.addChild(this.input); this.btn=this.getButton(); this.btn.text="关闭"; this.btn.size(50,20); this.btn.align="center"; this.btn.on(/*laya.events.Event.MOUSE_DOWN*/"mousedown",this,this.onCloseBtn); this.btn.pos(5,this.input.height+5); this.addChild(this.btn); } __proto.showInfo=function(txt){ this.input.text=txt; this.show(); } __proto.show=function(){ DebugInfoLayer.I.setTop(); DebugInfoLayer.I.popLayer.addChild(this); this.x=(Laya.stage.width-this.width); this.y=0; } __proto.onCloseBtn=function(){ this.close(); } return TxtInfoView; })(UIViewBase) //class laya.debug.ui.debugui.CodeUsedResUI extends laya.ui.View var CodeUsedResUI=(function(_super){ function CodeUsedResUI(){ this.tab=null; CodeUsedResUI.__super.call(this); } __class(CodeUsedResUI,'laya.debug.ui.debugui.CodeUsedResUI',_super); var __proto=CodeUsedResUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(CodeUsedResUI.uiView); } __proto.viewMapRegists=function(){} __static(CodeUsedResUI, ['uiView',function(){return this.uiView={"type":"View","child":[{"props":{"x":359,"y":91,"skin":"comp/button1.png"},"type":"Image"},{"props":{"x":309,"y":283,"skin":"comp/line2.png"},"type":"Image"},{"type":"Tab","child":[{"props":{"skin":"view/create.png","label":" 对象创建","width":70,"height":17,"name":"item0"},"type":"CheckBox"},{"props":{"x":70,"skin":"view/rendertime.png","label":"渲染用时","width":70,"height":19,"name":"item1"},"type":"CheckBox"},{"props":{"x":140,"skin":"view/cache.png","label":"Cache","width":70,"height":16,"name":"item2"},"type":"CheckBox"}],"props":{"x":76,"y":210,"selectedIndex":0,"var":"tab"}}],"props":{"width":600,"height":400,"base64pic":true}};} ]); return CodeUsedResUI; })(View) //class laya.debug.ui.debugui.comps.ListItemUI extends laya.ui.View var ListItemUI=(function(_super){ function ListItemUI(){ ListItemUI.__super.call(this); } __class(ListItemUI,'laya.debug.ui.debugui.comps.ListItemUI',_super); var __proto=ListItemUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(ListItemUI.uiView); } __proto.viewMapRegists=function(){} __static(ListItemUI, ['uiView',function(){return this.uiView={"type":"View","props":{"base64pic":true,"width":244,"height":19},"child":[{"type":"Clip","props":{"y":-1,"skin":"comp/clip_selectBox.png","clipY":2,"height":19,"name":"selectBox","left":2,"right":2,"x":0}},{"type":"Label","props":{"x":25,"text":"render","color":"#dcea36","width":77,"height":17,"name":"label","y":2,"fontSize":12}},{"type":"Clip","props":{"skin":"comp/clip_tree_arrow.png","clipY":2,"name":"arrow","x":8,"y":4,"mouseEnabled":false}}]};} ]); return ListItemUI; })(View) //class laya.debug.ui.debugui.comps.RankListItemUI extends laya.ui.View var RankListItemUI=(function(_super){ function RankListItemUI(){ RankListItemUI.__super.call(this); } __class(RankListItemUI,'laya.debug.ui.debugui.comps.RankListItemUI',_super); var __proto=RankListItemUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(RankListItemUI.uiView); } __proto.viewMapRegists=function(){} __static(RankListItemUI, ['uiView',function(){return this.uiView={"type":"View","child":[{"props":{"y":-1,"skin":"comp/clip_selectBox.png","clipY":2,"height":19,"name":"selectBox","left":0,"right":0,"x":0},"type":"Clip"},{"props":{"text":"render","color":"#a0a0a0","height":15,"name":"label","y":2,"left":11,"right":5,"fontSize":12,"x":11,"width":163},"type":"Label"}],"props":{"width":179,"height":19}};} ]); return RankListItemUI; })(View) //class laya.debug.ui.debugui.DebugPanelUI extends laya.ui.View var DebugPanelUI=(function(_super){ function DebugPanelUI(){ this.bg=null; this.minBtn=null; this.treePanel=null; this.selectWhenClick=null; this.profilePanel=null; this.resizeBtn=null; this.mouseAnalyseBtn=null; this.dragIcon=null; this.clearBtn=null; this.selectPanel=null; this.tab=null; DebugPanelUI.__super.call(this); } __class(DebugPanelUI,'laya.debug.ui.debugui.DebugPanelUI',_super); var __proto=DebugPanelUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(DebugPanelUI.uiView); } __proto.viewMapRegists=function(){ View.regComponent("laya.debug.view.nodeInfo.nodetree.MinBtnComp",MinBtnComp); View.regComponent("laya.debug.view.nodeInfo.views.NodeTreeView",NodeTreeView); View.regComponent("laya.debug.view.nodeInfo.nodetree.Profile",Profile); View.regComponent("laya.debug.view.nodeInfo.views.SelectInfosView",SelectInfosView); } __static(DebugPanelUI, ['uiView',function(){return this.uiView={"type":"View","props":{"base64pic":true,"width":260,"height":400},"child":[{"type":"Image","props":{"x":205,"y":254,"skin":"view/bg_panel.png","left":0,"right":0,"top":0,"bottom":0,"var":"bg","sizeGrid":"5,5,5,5"}},{"type":"Image","props":{"y":0,"skin":"view/bg_top.png","left":0,"right":0}},{"type":"MinBtnComp","props":{"y":-3,"var":"minBtn","runtime":"laya.debug.view.nodeInfo.nodetree.MinBtnComp","right":-3,"x":207}},{"type":"NodeTree","props":{"left":0,"right":0,"top":32,"bottom":0,"name":"节点树","var":"treePanel","runtime":"laya.debug.view.nodeInfo.views.NodeTreeView"}},{"type":"CheckBox","props":{"x":8,"y":9,"skin":"view/clickselect.png","toolTip":"点击选取","var":"selectWhenClick","mouseEnabled":true,"width":14,"height":14}},{"type":"Profile","props":{"name":"性能","top":32,"right":0,"left":0,"bottom":0,"var":"profilePanel","runtime":"laya.debug.view.nodeInfo.nodetree.Profile"}},{"type":"Button","props":{"x":169,"y":247,"skin":"view/resize.png","right":2,"bottom":2,"name":"resizeBtn","var":"resizeBtn","stateNum":3}},{"type":"Clip","props":{"y":9,"skin":"view/clickanalyse.png","var":"mouseAnalyseBtn","toolTip":"拖动选取","left":33,"x":33,"clipY":3}},{"type":"Clip","props":{"y":0,"skin":"view/clickanalyse.png","var":"dragIcon","x":33,"clipY":3}},{"type":"Button","props":{"y":7,"skin":"view/res.png","stateNum":2,"toolTip":"清除边框","var":"clearBtn","right":34,"x":184}},{"type":"SelectInfos","props":{"top":32,"left":0,"right":0,"bottom":0,"name":"选中","var":"selectPanel","runtime":"laya.debug.view.nodeInfo.views.SelectInfosView"}},{"type":"Tab","props":{"x":59,"y":0,"name":"tab","var":"tab","selectedIndex":0},"child":[{"type":"Button","props":{"skin":"view/tab_panel.png","label":"节点","width":42,"height":32,"name":"item0","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"}},{"type":"Button","props":{"x":42,"skin":"view/tab_panel.png","label":"查询","width":42,"height":32,"name":"item1","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"}},{"type":"Button","props":{"x":84,"skin":"view/tab_panel.png","label":"性能","width":42,"height":32,"name":"item2","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"}}]}]};} ]); return DebugPanelUI; })(View) //class laya.debug.ui.debugui.FindNodeSmallUI extends laya.ui.View var FindNodeSmallUI=(function(_super){ function FindNodeSmallUI(){ this.bg=null; this.closeBtn=null; this.title=null; this.typeSelect=null; this.findTxt=null; this.findBtn=null; FindNodeSmallUI.__super.call(this); } __class(FindNodeSmallUI,'laya.debug.ui.debugui.FindNodeSmallUI',_super); var __proto=FindNodeSmallUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(FindNodeSmallUI.uiView); } __proto.viewMapRegists=function(){} __static(FindNodeSmallUI, ['uiView',function(){return this.uiView={"type":"View","child":[{"props":{"x":185,"y":234,"skin":"view/bg_tool.png","left":0,"right":0,"top":0,"bottom":0,"var":"bg"},"type":"Image"},{"props":{"x":185,"y":15,"skin":"view/btn_close.png","var":"closeBtn","top":2,"right":2},"type":"Button"},{"props":{"x":6,"y":4,"text":"查找对象","width":67,"height":20,"color":"#288edf","var":"title"},"type":"Label"},{"props":{"x":60,"y":81,"skin":"comp/combobox.png","labels":"name,class","width":63,"height":21,"var":"typeSelect","sizeGrid":"5,35,5,5","labelColors":"#a0a0a0,#fffff,#ffffff#fffff"},"type":"ComboBox"},{"props":{"x":27,"y":83,"text":"类型","width":27,"height":20,"color":"#288edf","align":"right"},"type":"Label"},{"props":{"x":7,"y":40,"text":"包含内容","width":47,"height":20,"color":"#288edf","align":"right"},"type":"Label"},{"props":{"x":60,"y":37,"skin":"comp/textinput.png","text":"Sprite","width":164,"height":22,"var":"findTxt","sizeGrid":"5,5,5,5","color":"#a0a0a0"},"type":"TextInput"},{"props":{"x":158,"y":79,"skin":"comp/button.png","label":"查找","width":65,"height":23,"var":"findBtn","mouseEnabled":"true","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"},"type":"Button"}],"props":{"base64pic":true,"width":233,"height":120}};} ]); return FindNodeSmallUI; })(View) //class laya.debug.ui.debugui.FindNodeUI extends laya.ui.View var FindNodeUI=(function(_super){ function FindNodeUI(){ this.bg=null; this.closeBtn=null; this.title=null; this.typeSelect=null; this.findTxt=null; this.result=null; this.findBtn=null; FindNodeUI.__super.call(this); } __class(FindNodeUI,'laya.debug.ui.debugui.FindNodeUI',_super); var __proto=FindNodeUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(FindNodeUI.uiView); } __proto.viewMapRegists=function(){ View.regComponent("laya.debug.uicomps.RankListItem",RankListItem); } __static(FindNodeUI, ['uiView',function(){return this.uiView={"type":"View","child":[{"props":{"x":185,"y":234,"skin":"view/bg_panel.png","left":0,"right":0,"top":0,"bottom":0,"var":"bg","sizeGrid":"5,5,5,5"},"type":"Image"},{"props":{"x":185,"y":15,"skin":"view/btn_close.png","var":"closeBtn","top":2,"right":2},"type":"Button"},{"props":{"x":6,"y":4,"text":"查找对象","width":67,"height":20,"color":"#88ef19","var":"title"},"type":"Label"},{"props":{"x":52,"y":75,"skin":"comp/combobox.png","labels":"name,class","width":63,"height":21,"var":"typeSelect","sizeGrid":"5,35,5,5","labelColors":"#a0a0a0,#fffff,#ffffff#fffff"},"type":"ComboBox"},{"props":{"x":10,"y":77,"text":"类型","width":27,"height":20,"color":"#88ef19","align":"right"},"type":"Label"},{"props":{"x":7,"y":34,"text":"包含内容","width":47,"height":20,"color":"#88ef19","align":"right"},"type":"Label"},{"props":{"x":59,"y":31,"skin":"comp/textinput.png","text":"Sprite","width":131,"height":22,"var":"findTxt","sizeGrid":"5,5,5,5","color":"#a0a0a0"},"type":"TextInput"},{"type":"List","child":[{"type":"RankListItem","props":{"y":30,"left":5,"right":5,"name":"render","x":30,"runtime":"laya.debug.uicomps.RankListItem"}}],"props":{"x":6,"y":106,"width":188,"height":180,"vScrollBarSkin":"comp/vscroll.png","var":"result"}},{"props":{"x":125,"y":73,"skin":"comp/button.png","label":"查找","width":65,"height":23,"var":"findBtn","mouseEnabled":"true","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"},"type":"Button"}],"props":{"width":200,"height":300,"base64pic":true}};} ]); return FindNodeUI; })(View) //class laya.debug.ui.debugui.MinBtnCompUI extends laya.ui.View var MinBtnCompUI=(function(_super){ function MinBtnCompUI(){ this.minBtn=null; this.maxUI=null; this.bg=null; this.maxBtn=null; MinBtnCompUI.__super.call(this); } __class(MinBtnCompUI,'laya.debug.ui.debugui.MinBtnCompUI',_super); var __proto=MinBtnCompUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(MinBtnCompUI.uiView); } __proto.viewMapRegists=function(){} __static(MinBtnCompUI, ['uiView',function(){return this.uiView={"type":"View","child":[{"props":{"x":7,"y":8,"skin":"comp/minBtn.png","stateNum":"3","var":"minBtn","width":22,"height":20,"toolTip":"最小化"},"type":"Button"},{"type":"Box","child":[{"props":{"x":0,"y":0,"skin":"view/bg_panel.png","var":"bg","width":36,"height":36,"sizeGrid":"5,5,5,5"},"type":"Image"},{"props":{"x":6,"y":8,"skin":"view/zoom_out.png","stateNum":"2","var":"maxBtn"},"type":"Button"}],"props":{"var":"maxUI"}}],"props":{"width":36,"height":36,"base64pic":true}};} ]); return MinBtnCompUI; })(View) //class laya.debug.ui.debugui.NodeListPanelUI extends laya.ui.View var NodeListPanelUI=(function(_super){ function NodeListPanelUI(){ this.bg=null; this.closeBtn=null; this.title=null; this.itemList=null; NodeListPanelUI.__super.call(this); } __class(NodeListPanelUI,'laya.debug.ui.debugui.NodeListPanelUI',_super); var __proto=NodeListPanelUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(NodeListPanelUI.uiView); } __proto.viewMapRegists=function(){ View.regComponent("laya.debug.uicomps.RankListItem",RankListItem); } __static(NodeListPanelUI, ['uiView',function(){return this.uiView={"type":"View","child":[{"props":{"x":235,"y":284,"skin":"view/bg_panel.png","left":0,"right":0,"top":0,"bottom":0,"var":"bg","sizeGrid":"5,5,5,5"},"type":"Image"},{"props":{"x":204,"y":32,"skin":"view/btn_close.png","var":"closeBtn","top":2,"right":2,"visible":true},"type":"Button"},{"props":{"x":10,"y":6,"text":"节点信息","width":147,"height":16,"color":"#288edf","var":"title"},"type":"Label"},{"type":"List","child":[{"type":"RankListItem","props":{"left":5,"right":5,"name":"render","runtime":"laya.debug.uicomps.RankListItem"}}],"props":{"vScrollBarSkin":"comp/vscroll.png","var":"itemList","left":2,"right":2,"top":26,"bottom":0,"repeatX":1,"x":20}}],"props":{"width":200,"height":300}};} ]); return NodeListPanelUI; })(View) //class laya.debug.ui.debugui.NodeToolUI extends laya.ui.View var NodeToolUI=(function(_super){ function NodeToolUI(){ this.bg=null; this.closeBtn=null; this.tarTxt=null; this.freshBtn=null; this.mouseAnalyseBtn=null; this.dragIcon=null; NodeToolUI.__super.call(this); } __class(NodeToolUI,'laya.debug.ui.debugui.NodeToolUI',_super); var __proto=NodeToolUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(NodeToolUI.uiView); } __proto.viewMapRegists=function(){} __static(NodeToolUI, ['uiView',function(){return this.uiView={"type":"View","props":{"base64pic":true,"width":200,"height":341},"child":[{"type":"Image","props":{"x":195,"y":244,"skin":"view/bg_panel.png","left":0,"right":0,"top":0,"bottom":0,"var":"bg","sizeGrid":"5,5,5,5"}},{"type":"Label","props":{"x":9,"y":5,"text":"当前选中对象","width":67,"height":16,"color":"#a0a0a0"}},{"type":"Button","props":{"x":195,"y":25,"skin":"view/btn_close.png","var":"closeBtn","top":2,"right":2}},{"type":"Label","props":{"x":10,"y":25,"text":"当前对象","width":67,"height":16,"color":"#a0a0a0","var":"tarTxt"}},{"type":"Button","props":{"x":15,"y":65,"skin":"comp/button.png","label":"父链","width":39,"height":23,"mouseEnabled":"true","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"}},{"type":"Button","props":{"x":66,"y":65,"skin":"comp/button.png","label":"子","width":35,"height":23,"mouseEnabled":"true","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"}},{"type":"Button","props":{"x":112,"y":65,"skin":"comp/button.png","label":"兄弟","width":49,"height":23,"mouseEnabled":"true","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"}},{"type":"Button","props":{"x":13,"y":117,"skin":"comp/button.png","label":"Enable链","mouseEnabled":"true","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"}},{"type":"Button","props":{"x":100,"y":117,"skin":"comp/button.png","label":"Size链","mouseEnabled":"true","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"}},{"type":"Label","props":{"x":14,"y":97,"text":"节点链信息","width":67,"height":16,"color":"#a0a0a0"}},{"type":"Label","props":{"x":15,"y":45,"text":"对象选取","width":67,"height":16,"color":"#a0a0a0"}},{"type":"Label","props":{"x":16,"y":145,"text":"节点显示","width":67,"height":16,"color":"#a0a0a0"}},{"type":"Button","props":{"x":13,"y":164,"skin":"comp/button.png","label":"隐藏旁支","mouseEnabled":"true","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"}},{"type":"Button","props":{"x":100,"y":164,"skin":"comp/button.png","label":"隐藏兄弟","mouseEnabled":"true","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"}},{"type":"Button","props":{"x":13,"y":197,"skin":"comp/button.png","label":"隐藏子","mouseEnabled":"true","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"}},{"type":"Button","props":{"x":99,"y":197,"skin":"comp/button.png","label":"恢复","mouseEnabled":"true","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"}},{"type":"Label","props":{"x":15,"y":228,"text":"其他","width":67,"height":16,"color":"#a0a0a0"}},{"type":"Button","props":{"x":12,"y":247,"skin":"comp/button.png","label":"节点树定位","mouseEnabled":"true","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"}},{"type":"Button","props":{"x":99,"y":247,"skin":"comp/button.png","label":"显示边框","mouseEnabled":"true","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"}},{"type":"Label","props":{"x":12,"y":315,"text":"Alt+A分析鼠标能否够点中对象","width":173,"height":16,"color":"#a0a0a0"}},{"type":"Button","props":{"x":156,"y":1,"skin":"view/refresh2.png","var":"freshBtn","left":156,"toolTip":"recache节点"}},{"type":"Button","props":{"x":12,"y":279,"skin":"comp/button.png","label":"输出到控制台","mouseEnabled":"true","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"}},{"type":"Button","props":{"x":99,"y":279,"skin":"comp/button.png","label":"显示切换","mouseEnabled":"true","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"}},{"type":"Clip","props":{"y":44,"skin":"view/clickanalyse.png","var":"mouseAnalyseBtn","toolTip":"拖动到对象上方判断是否能够点中","left":84,"x":84,"clipY":3}},{"type":"Clip","props":{"y":35,"skin":"view/clickanalyse.png","var":"dragIcon","x":94,"clipY":3}}]};} ]); return NodeToolUI; })(View) //class laya.debug.ui.debugui.NodeTreeSettingUI extends laya.ui.View var NodeTreeSettingUI=(function(_super){ function NodeTreeSettingUI(){ this.bg=null; this.showTxt=null; this.okBtn=null; this.closeBtn=null; NodeTreeSettingUI.__super.call(this); } __class(NodeTreeSettingUI,'laya.debug.ui.debugui.NodeTreeSettingUI',_super); var __proto=NodeTreeSettingUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(NodeTreeSettingUI.uiView); } __proto.viewMapRegists=function(){} __static(NodeTreeSettingUI, ['uiView',function(){return this.uiView={"type":"View","child":[{"props":{"x":0,"y":0,"skin":"view/bg_panel.png","left":0,"top":0,"bottom":0,"right":0,"var":"bg","width":200,"height":300,"sizeGrid":"5,5,5,5"},"type":"Image"},{"props":{"x":9,"y":7,"text":"要显示的属性","width":76,"height":16,"color":"#ffffff","align":"left"},"type":"Label"},{"props":{"x":6,"y":29,"skin":"comp/textinput.png","text":"x\\ny\\nwidth\\nheight","width":188,"height":230,"multiline":true,"var":"showTxt","color":"#a0a0a0","sizeGrid":"5,5,5,5"},"type":"TextInput"},{"props":{"x":57,"y":269,"skin":"comp/button.png","label":"确定","var":"okBtn","mouseEnabled":"true","labelColors":"#ffffff,#ffffff,#ffffff,#ffffff"},"type":"Button"},{"props":{"x":175,"y":5,"skin":"view/btn_close.png","var":"closeBtn"},"type":"Button"}],"props":{"base64pic":true,"width":200,"height":300}};} ]); return NodeTreeSettingUI; })(View) //class laya.debug.ui.debugui.NodeTreeUI extends laya.ui.View var NodeTreeUI=(function(_super){ function NodeTreeUI(){ this.nodeTree=null; this.controlBar=null; this.settingBtn=null; this.freshBtn=null; this.fliterTxt=null; this.closeBtn=null; this.ifShowProps=null; NodeTreeUI.__super.call(this); } __class(NodeTreeUI,'laya.debug.ui.debugui.NodeTreeUI',_super); var __proto=NodeTreeUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(NodeTreeUI.uiView); } __proto.viewMapRegists=function(){ View.regComponent("laya.debug.uicomps.TreeListItem",TreeListItem); } __static(NodeTreeUI, ['uiView',function(){return this.uiView={"type":"View","props":{"width":200,"height":260,"base64pic":true},"child":[{"type":"Image","props":{"x":-22,"y":-47,"skin":"view/bg_panel.png","width":211,"height":206,"left":0,"right":0,"top":0,"bottom":0,"sizeGrid":"5,5,5,5"}},{"props":{"y":0,"skin":"view/bg_tool.png","left":0,"right":0},"type":"Image"},{"type":"Tree","props":{"x":0,"scrollBarSkin":"comp/vscroll.png","width":195,"height":229,"var":"nodeTree","left":0,"right":0,"top":38,"bottom":20},"child":[{"type":"ListItem","props":{"y":0,"name":"render","left":0,"right":0,"runtime":"laya.debug.uicomps.TreeListItem"}}]},{"type":"Box","props":{"x":3,"y":5,"var":"controlBar","left":3,"right":3,"top":5,"height":23},"child":[{"type":"Button","props":{"x":6,"skin":"view/setting.png","stateNum":3,"var":"settingBtn","toolTip":"设置显示的属性","y":6}},{"type":"Button","props":{"y":6,"skin":"view/refresh.png","var":"freshBtn","left":30,"toolTip":"刷新数据"}},{"type":"TextInput","props":{"y":0,"skin":"view/bg_top.png","height":22,"var":"fliterTxt","left":53,"right":0,"color":"#a0a0a0"}},{"type":"Button","props":{"x":172,"y":2,"skin":"view/btn_close.png","var":"closeBtn","right":1,"visible":false}}]},{"props":{"y":243,"skin":"comp/checkbox.png","label":"显示属性","var":"ifShowProps","bottom":3,"selected":true,"visible":true,"x":2,"width":70,"height":14,"labelColors":"#a0a0a0,#fffff,#ffffff,#fffff"},"type":"CheckBox"}]};} ]); return NodeTreeUI; })(View) //class laya.debug.ui.debugui.ObjectCreateUI extends laya.ui.View var ObjectCreateUI=(function(_super){ function ObjectCreateUI(){ this.bg=null; this.closeBtn=null; this.itemList=null; this.freshBtn=null; ObjectCreateUI.__super.call(this); } __class(ObjectCreateUI,'laya.debug.ui.debugui.ObjectCreateUI',_super); var __proto=ObjectCreateUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(ObjectCreateUI.uiView); } __proto.viewMapRegists=function(){ View.regComponent("laya.debug.uicomps.RankListItem",RankListItem); } __static(ObjectCreateUI, ['uiView',function(){return this.uiView={"type":"View","child":[{"props":{"x":215,"y":264,"skin":"view/bg_panel.png","left":0,"right":0,"top":0,"bottom":0,"var":"bg","sizeGrid":"5,5,5,5"},"type":"Image"},{"props":{"x":184,"y":12,"skin":"view/btn_close.png","var":"closeBtn","top":2,"right":2,"visible":false},"type":"Button"},{"props":{"x":11,"y":5,"text":"对象创建统计","width":83,"height":16,"color":"#288edf"},"type":"Label"},{"type":"List","child":[{"type":"RankListItem","props":{"y":0,"left":5,"right":5,"name":"render","runtime":"laya.debug.uicomps.RankListItem"}}],"props":{"vScrollBarSkin":"comp/vscroll.png","var":"itemList","top":26,"bottom":5,"left":5,"right":5,"repeatX":1}},{"props":{"y":1,"skin":"view/refresh2.png","var":"freshBtn","toolTip":"刷新数据","right":1,"x":178},"type":"Button"}],"props":{"width":200,"height":300,"base64pic":true}};} ]); return ObjectCreateUI; })(View) //class laya.debug.ui.debugui.ObjectInfoUI extends laya.ui.View var ObjectInfoUI=(function(_super){ function ObjectInfoUI(){ this.bg=null; this.title=null; this.showTxt=null; this.closeBtn=null; this.autoUpdate=null; this.settingBtn=null; ObjectInfoUI.__super.call(this); } __class(ObjectInfoUI,'laya.debug.ui.debugui.ObjectInfoUI',_super); var __proto=ObjectInfoUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(ObjectInfoUI.uiView); } __proto.viewMapRegists=function(){} __static(ObjectInfoUI, ['uiView',function(){return this.uiView={"type":"View","child":[{"props":{"x":-1,"y":0,"skin":"view/bg_panel.png","left":-1,"right":1,"top":0,"bottom":0,"var":"bg","sizeGrid":"5,5,5,5"},"type":"Image"},{"props":{"x":7,"y":5,"text":"对象类型","width":67,"height":20,"color":"#ffffff","var":"title","left":7,"right":6},"type":"Label"},{"props":{"x":2,"skin":"comp/textinput.png","text":"属性内容","width":196,"height":228,"left":2,"right":2,"var":"showTxt","top":25,"bottom":20,"editable":false,"multiline":true,"sizeGrid":"5,5,5,5","color":"#a0a0a0"},"type":"TextArea"},{"props":{"x":178,"y":4,"skin":"view/btn_close.png","var":"closeBtn","top":4,"right":2},"type":"Button"},{"props":{"skin":"comp/checkbox.png","label":"自动刷新属性","var":"autoUpdate","bottom":2,"x":3,"labelColors":"#a0a0a0,#fffff,#ffffff,#fffff"},"type":"CheckBox"},{"props":{"x":164,"skin":"view/setting.png","stateNum":"3","var":"settingBtn","y":6,"top":6,"right":24,"toolTip":"设置显示属性"},"type":"Button"},{"props":{"x":179,"y":257,"skin":"view/resize.png","right":2,"bottom":2,"name":"resizeBtn","stateNum":3},"type":"Button"}],"props":{"base64pic":true,"width":200,"height":200}};} ]); return ObjectInfoUI; })(View) //class laya.debug.ui.debugui.OutPutUI extends laya.ui.View var OutPutUI=(function(_super){ function OutPutUI(){ this.bg=null; this.txt=null; this.closeBtn=null; this.clearBtn=null; OutPutUI.__super.call(this); } __class(OutPutUI,'laya.debug.ui.debugui.OutPutUI',_super); var __proto=OutPutUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(OutPutUI.uiView); } __proto.viewMapRegists=function(){} __static(OutPutUI, ['uiView',function(){return this.uiView={"type":"View","props":{"width":300,"height":200,"base64pic":true},"child":[{"type":"Image","props":{"x":205,"y":254,"skin":"view/bg_panel.png","left":0,"right":0,"top":0,"bottom":0,"var":"bg","sizeGrid":"5,5,5,5"}},{"type":"Label","props":{"skin":"comp/textarea.png","text":"TextArea","color":"#a0a0a0","var":"txt","left":5,"right":5,"top":22,"bottom":5,"mouseEnabled":true,"sizeGrid":"3,3,3,3"}},{"type":"Button","props":{"x":185,"y":15,"skin":"view/btn_close.png","var":"closeBtn","top":2,"right":2}},{"props":{"x":253,"y":1,"skin":"view/re.png","stateNum":"2","var":"clearBtn","right":25},"type":"Button"},{"props":{"x":169,"y":247,"skin":"view/resize.png","right":2,"bottom":2,"name":"resizeBtn","stateNum":3},"type":"Button"}]};} ]); return OutPutUI; })(View) //class laya.debug.ui.debugui.ProfileUI extends laya.ui.View var ProfileUI=(function(_super){ function ProfileUI(){ this.renderPanel=null; this.createPanel=null; this.cachePanel=null; this.tab=null; this.resPanel=null; ProfileUI.__super.call(this); } __class(ProfileUI,'laya.debug.ui.debugui.ProfileUI',_super); var __proto=ProfileUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(ProfileUI.uiView); } __proto.viewMapRegists=function(){ View.regComponent("laya.debug.view.nodeInfo.views.RenderCostRankView",RenderCostRankView); View.regComponent("laya.debug.view.nodeInfo.views.ObjectCreateView",ObjectCreateView); View.regComponent("laya.debug.view.nodeInfo.views.CacheRankView",CacheRankView); View.regComponent("laya.debug.view.nodeInfo.views.ResRankView",ResRankView); } __static(ProfileUI, ['uiView',function(){return this.uiView={"type":"View","props":{"width":260,"height":329,"base64pic":true},"child":[{"type":"Image","props":{"y":0,"skin":"view/bg_tool.png","right":0,"left":0}},{"type":"Rank","props":{"var":"renderPanel","top":29,"runtime":"laya.debug.view.nodeInfo.views.RenderCostRankView","right":0,"name":"渲染用时","left":0,"bottom":0}},{"type":"ObjectCreate","props":{"var":"createPanel","top":29,"runtime":"laya.debug.view.nodeInfo.views.ObjectCreateView","right":0,"name":"对象创建统计","left":0,"bottom":0}},{"type":"Rank","props":{"x":10,"var":"cachePanel","top":29,"runtime":"laya.debug.view.nodeInfo.views.CacheRankView","right":0,"name":"cache用时","left":0,"bottom":0}},{"type":"Tab","props":{"y":9,"x":7,"width":191,"var":"tab","selectedIndex":0,"height":19},"child":[{"type":"CheckBox","props":{"y":0,"x":0,"width":50,"skin":"view/create.png","name":"item0","labelColors":"#a0a0a0,#ffffff,#ffffff,#ffffff","label":" 对象","height":17}},{"type":"CheckBox","props":{"y":0,"x":55,"width":50,"skin":"view/rendertime.png","name":"item1","labelColors":"#a0a0a0,#ffffff,#ffffff,#ffffff","label":" 渲染","height":19}},{"type":"CheckBox","props":{"y":0,"x":110,"width":50,"skin":"view/cache.png","name":"item2","labelColors":"#a0a0a0,#ffffff,#ffffff,#ffffff","label":" 重绘","height":16}},{"type":"CheckBox","props":{"y":0,"x":165,"width":50,"skin":"view/cache.png","name":"item3","labelColors":"#a0a0a0,#ffffff,#ffffff,#ffffff","label":" 资源","height":16}}]},{"type":"Rank","props":{"y":40,"x":50,"var":"resPanel","top":29,"runtime":"laya.debug.view.nodeInfo.views.ResRankView","right":0,"name":"资源缓存","left":0,"bottom":0}}]};} ]); return ProfileUI; })(View) //class laya.debug.ui.debugui.RankUI extends laya.ui.View var RankUI=(function(_super){ function RankUI(){ this.bg=null; this.closeBtn=null; this.title=null; this.itemList=null; this.autoUpdate=null; this.freshBtn=null; RankUI.__super.call(this); } __class(RankUI,'laya.debug.ui.debugui.RankUI',_super); var __proto=RankUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(RankUI.uiView); } __proto.viewMapRegists=function(){ View.regComponent("laya.debug.uicomps.RankListItem",RankListItem); } __static(RankUI, ['uiView',function(){return this.uiView={"type":"View","child":[{"props":{"x":225,"y":274,"skin":"view/bg_panel.png","left":0,"right":0,"top":0,"bottom":0,"var":"bg","sizeGrid":"5,5,5,5"},"type":"Image"},{"props":{"x":194,"y":22,"skin":"view/btn_close.png","var":"closeBtn","top":2,"right":2,"visible":false},"type":"Button"},{"props":{"x":8,"y":5,"text":"渲染用时表(3000ms)","width":109,"height":16,"color":"#288edf","var":"title"},"type":"Label"},{"type":"List","child":[{"type":"RankListItem","props":{"left":5,"right":5,"name":"render","runtime":"laya.debug.uicomps.RankListItem"}}],"props":{"vScrollBarSkin":"comp/vscroll.png","var":"itemList","left":2,"right":2,"top":26,"bottom":25,"repeatX":1,"x":10,"y":10}},{"props":{"skin":"comp/checkbox.png","label":"自动刷新属性","var":"autoUpdate","bottom":3,"selected":false,"visible":true,"left":2,"labelColors":"#a0a0a0,#fffff,#ffffff,#fffff"},"type":"CheckBox"},{"props":{"y":1,"skin":"view/refresh2.png","var":"freshBtn","toolTip":"刷新数据","right":1},"type":"Button"}],"props":{"width":200,"height":300}};} ]); return RankUI; })(View) //class laya.debug.ui.debugui.SelectInfosUI extends laya.ui.View var SelectInfosUI=(function(_super){ function SelectInfosUI(){ this.bg=null; this.closeBtn=null; this.selectList=null; this.findBtn=null; this.fliterTxt=null; SelectInfosUI.__super.call(this); } __class(SelectInfosUI,'laya.debug.ui.debugui.SelectInfosUI',_super); var __proto=SelectInfosUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(SelectInfosUI.uiView); } __proto.viewMapRegists=function(){ View.regComponent("laya.debug.uicomps.RankListItem",RankListItem); } __static(SelectInfosUI, ['uiView',function(){return this.uiView={"type":"View","child":[{"props":{"x":205,"y":254,"skin":"view/bg_panel.png","left":0,"right":0,"top":0,"bottom":0,"var":"bg","sizeGrid":"5,5,5,5"},"type":"Image"},{"props":{"skin":"view/btn_close.png","var":"closeBtn","top":32,"visible":false,"right":2},"type":"Button"},{"props":{"x":7,"y":36,"text":"当前选中列表","width":83,"height":16,"color":"#288edf"},"type":"Label"},{"type":"List","child":[{"type":"RankListItem","props":{"left":5,"right":5,"name":"render","runtime":"laya.debug.uicomps.RankListItem"}}],"props":{"vScrollBarSkin":"comp/vscroll.png","var":"selectList","left":5,"right":5,"top":56,"bottom":25,"repeatX":1,"x":20}},{"props":{"x":6,"text":"Alt+V选取鼠标下的对象","width":189,"height":16,"color":"#a0a0a0","bottom":3},"type":"Label"},{"type":"Image","props":{"y":0,"skin":"view/bg_tool.png","left":0,"right":0}},{"type":"Clip","props":{"y":6,"skin":"view/search.png","clipY":2,"var":"findBtn","right":5,"toolTip":"查找","x":174}},{"type":"TextInput","props":{"y":6,"skin":"view/bg_top.png","height":22,"var":"fliterTxt","left":8,"right":45,"color":"#a0a0a0","x":8,"width":147}}],"props":{"width":200,"height":300,"base64pic":true}};} ]); return SelectInfosUI; })(View) //class laya.debug.ui.debugui.ToolBarUI extends laya.ui.View var ToolBarUI=(function(_super){ function ToolBarUI(){ this.bg=null; this.treeBtn=null; this.findBtn=null; this.minBtn=null; this.selectWhenClick=null; this.clearBtn=null; this.rankBtn=null; this.nodeRankBtn=null; this.cacheBtn=null; ToolBarUI.__super.call(this); } __class(ToolBarUI,'laya.debug.ui.debugui.ToolBarUI',_super); var __proto=ToolBarUI.prototype; __proto.createChildren=function(){ this.viewMapRegists(); laya.ui.Component.prototype.createChildren.call(this); this.createView(ToolBarUI.uiView); } __proto.viewMapRegists=function(){ View.regComponent("laya.debug.view.nodeInfo.nodetree.MinBtnComp",MinBtnComp); } __static(ToolBarUI, ['uiView',function(){return this.uiView={"type":"View","props":{"base64pic":true,"width":250,"height":30},"child":[{"type":"Image","props":{"x":195,"y":244,"skin":"view/bg_panel.png","left":0,"right":0,"top":0,"bottom":0,"var":"bg","sizeGrid":"5,5,5,5"}},{"type":"Button","props":{"x":2,"y":6,"skin":"view/save.png","stateNum":2,"var":"treeBtn","toolTip":"节点树"}},{"type":"Button","props":{"x":25,"y":6,"skin":"view/save.png","stateNum":2,"var":"findBtn","toolTip":"查找面板"}},{"type":"MinBtnComp","props":{"x":218,"y":-3,"var":"minBtn","runtime":"laya.debug.view.nodeInfo.nodetree.MinBtnComp"}},{"type":"CheckBox","props":{"x":124,"y":8,"skin":"comp/checkbox.png","label":"点击选取","var":"selectWhenClick","labelColors":"#a0a0a0,#fffff,#ffffff,#fffff"}},{"type":"Button","props":{"x":193,"y":5,"skin":"view/res.png","stateNum":2,"toolTip":"清除边框","var":"clearBtn"}},{"type":"Button","props":{"x":49,"y":6,"skin":"view/save.png","stateNum":2,"var":"rankBtn","toolTip":"渲染用时排行"}},{"type":"Button","props":{"x":72,"y":6,"skin":"view/save.png","stateNum":2,"var":"nodeRankBtn","toolTip":"创建对象排行"}},{"type":"Button","props":{"x":94,"y":6,"skin":"view/save.png","stateNum":2,"var":"cacheBtn","toolTip":"cache对象"}}]};} ]); return ToolBarUI; })(View) /** * *@author ww *@version 1.0 * *@created 2016-7-6 上午9:42:46 */ //class laya.debug.uicomps.ListBase extends laya.ui.List var ListBase=(function(_super){ function ListBase(){ ListBase.__super.call(this); } __class(ListBase,'laya.debug.uicomps.ListBase',_super); var __proto=ListBase.prototype; __getset(0,__proto,'selectedIndex',_super.prototype._$get_selectedIndex,function(value){ if (this._selectedIndex !=value){ this._selectedIndex=value; this.changeSelectStatus(); this.event(/*laya.events.Event.CHANGE*/"change"); this.selectHandler && this.selectHandler.runWith(value); } if (this.selectEnable && this._scrollBar){ var numX=this._isVertical ? this.repeatX :this.repeatY; if (value < this._startIndex || (value+numX > this._startIndex+this.repeatX *this.repeatY)){ this.scrollTo(value); } } }); return ListBase; })(List) /** * *@author ww *@version 1.0 * *@created 2016-7-6 上午9:49:47 */ //class laya.debug.uicomps.TreeBase extends laya.ui.Tree var TreeBase=(function(_super){ function TreeBase(){ TreeBase.__super.call(this); } __class(TreeBase,'laya.debug.uicomps.TreeBase',_super); var __proto=TreeBase.prototype; /**@inheritDoc */ __proto.createChildren=function(){ this.addChild(this._list=new ListBase()); this._list.renderHandler=Handler.create(this,this.renderItem,null,false); this._list.repeatX=1; this._list.on(/*laya.events.Event.CHANGE*/"change",this,this.onListChange); } return TreeBase; })(Tree) /** *... *@author ww */ //class laya.debug.uicomps.RankListItem extends laya.debug.ui.debugui.comps.RankListItemUI var RankListItem=(function(_super){ function RankListItem(){ RankListItem.__super.call(this); Base64AtlasManager.replaceRes(RankListItemUI.uiView); this.createView(RankListItemUI.uiView); } __class(RankListItem,'laya.debug.uicomps.RankListItem',_super); var __proto=RankListItem.prototype; __proto.createChildren=function(){} return RankListItem; })(RankListItemUI) /** *... *@author ww */ //class laya.debug.uicomps.TreeListItem extends laya.debug.ui.debugui.comps.ListItemUI var TreeListItem=(function(_super){ function TreeListItem(){ TreeListItem.__super.call(this); Base64AtlasManager.replaceRes(ListItemUI.uiView); this.createView(ListItemUI.uiView); } __class(TreeListItem,'laya.debug.uicomps.TreeListItem',_super); var __proto=TreeListItem.prototype; __proto.createChildren=function(){} return TreeListItem; })(ListItemUI) /** *... *@author ww */ //class laya.debug.view.nodeInfo.nodetree.DebugPage extends laya.debug.ui.debugui.DebugPanelUI var DebugPage=(function(_super){ function DebugPage(){ this.views=null; DebugPage.__super.call(this); this.msRec=new Rectangle(); Base64AtlasManager.replaceRes(DebugPanelUI.uiView); this.createView(DebugPanelUI.uiView); DisControlTool.setResizeAbleEx(this); this.views=[this.treePanel,this.selectPanel,this.profilePanel]; this.tab.selectedIndex=0; this.tabChange(); this.tab.on(/*laya.events.Event.CHANGE*/"change",this,this.tabChange); this.changeSize(); } __class(DebugPage,'laya.debug.view.nodeInfo.nodetree.DebugPage',_super); var __proto=DebugPage.prototype; __proto.createChildren=function(){ this.viewMapRegists(); } __proto.tabChange=function(){ DisControlTool.addOnlyByIndex(this.views,this.tab.selectedIndex,this); DisControlTool.setTop(this.resizeBtn); } __proto.changeSize=function(){ if (this.width < 245){ this.width=245; } if (this.height < 100){ this.height=200; } laya.ui.Component.prototype.changeSize.call(this); this.msRec.setTo(0,0,this.width,this.height); this.scrollRect=this.msRec; } return DebugPage; })(DebugPanelUI) /** *... *@author ww */ //class laya.debug.view.nodeInfo.nodetree.FindNode extends laya.debug.ui.debugui.FindNodeUI var FindNode=(function(_super){ function FindNode(){ FindNode.__super.call(this); Base64AtlasManager.replaceRes(FindNodeUI.uiView); this.createView(FindNodeUI.uiView); } __class(FindNode,'laya.debug.view.nodeInfo.nodetree.FindNode',_super); var __proto=FindNode.prototype; __proto.createChildren=function(){ this.viewMapRegists(); } return FindNode; })(FindNodeUI) /** *... *@author ww */ //class laya.debug.view.nodeInfo.nodetree.FindNodeSmall extends laya.debug.ui.debugui.FindNodeSmallUI var FindNodeSmall=(function(_super){ function FindNodeSmall(){ FindNodeSmall.__super.call(this); Base64AtlasManager.replaceRes(FindNodeSmallUI.uiView); this.createView(FindNodeSmallUI.uiView); } __class(FindNodeSmall,'laya.debug.view.nodeInfo.nodetree.FindNodeSmall',_super); var __proto=FindNodeSmall.prototype; __proto.createChildren=function(){} return FindNodeSmall; })(FindNodeSmallUI) /** *... *@author ww */ //class laya.debug.view.nodeInfo.nodetree.MinBtnComp extends laya.debug.ui.debugui.MinBtnCompUI var MinBtnComp=(function(_super){ function MinBtnComp(){ this.tar=null; this.minHandler=null; this.maxHandler=null; this.prePos=new Point(); MinBtnComp.__super.call(this); Base64AtlasManager.replaceRes(MinBtnCompUI.uiView); this.createView(MinBtnCompUI.uiView); this.init(); } __class(MinBtnComp,'laya.debug.view.nodeInfo.nodetree.MinBtnComp',_super); var __proto=MinBtnComp.prototype; __proto.createChildren=function(){} __proto.init=function(){ this.minBtn.on(/*laya.events.Event.CLICK*/"click",this,this.onMinBtn); this.maxBtn.on(/*laya.events.Event.CLICK*/"click",this,this.onMaxBtn); this.minState=false; this.maxUI.removeSelf(); DisControlTool.setDragingItem(this.bg,this.maxUI); } __proto.onMaxBtn=function(){ this.maxUI.removeSelf(); if (this.maxHandler){ this.maxHandler.run(); } if (this.tar){ this.tar.x+=this.maxUI.x-this.prePos.x; this.tar.y+=this.maxUI.y-this.prePos.y; } } __proto.onMinBtn=function(){ if (!this.displayedInStage)return; var tPos; tPos=Point.TEMP; tPos.setTo(0,0); tPos=this.localToGlobal(tPos); tPos=DebugInfoLayer.I.popLayer.globalToLocal(tPos); this.maxUI.pos(tPos.x,tPos.y); DebugInfoLayer.I.popLayer.addChild(this.maxUI); if (this.tar){ this.prePos.setTo(tPos.x,tPos.y); } if (this.minHandler){ this.minHandler.run(); } } __getset(0,__proto,'minState',null,function(v){ }); return MinBtnComp; })(MinBtnCompUI) /** *... *@author ww */ //class laya.debug.view.nodeInfo.nodetree.NodeListPanel extends laya.debug.ui.debugui.NodeListPanelUI var NodeListPanel=(function(_super){ function NodeListPanel(){ NodeListPanel.__super.call(this); Base64AtlasManager.replaceRes(NodeListPanelUI.uiView); this.createView(NodeListPanelUI.uiView); } __class(NodeListPanel,'laya.debug.view.nodeInfo.nodetree.NodeListPanel',_super); var __proto=NodeListPanel.prototype; __proto.createChildren=function(){ this.viewMapRegists(); } return NodeListPanel; })(NodeListPanelUI) /** *... *@author ww */ //class laya.debug.view.nodeInfo.nodetree.NodeTool extends laya.debug.ui.debugui.NodeToolUI var NodeTool=(function(_super){ function NodeTool(){ NodeTool.__super.call(this); Base64AtlasManager.replaceRes(NodeToolUI.uiView); this.createView(NodeToolUI.uiView); } __class(NodeTool,'laya.debug.view.nodeInfo.nodetree.NodeTool',_super); var __proto=NodeTool.prototype; __proto.createChildren=function(){} return NodeTool; })(NodeToolUI) /** *... *@author ww */ //class laya.debug.view.nodeInfo.nodetree.NodeTree extends laya.debug.ui.debugui.NodeTreeUI var NodeTree=(function(_super){ function NodeTree(){ this.showProps=false; this._closeSettingHandler=null; this._tar=null; NodeTree.__super.call(this); Base64AtlasManager.replaceRes(NodeTreeUI.uiView); View.regComponent("Tree",TreeBase); this.createView(NodeTreeUI.uiView); View.regComponent("Tree",Tree); this.inits(); NodeTree.I=this; } __class(NodeTree,'laya.debug.view.nodeInfo.nodetree.NodeTree',_super); var __proto=NodeTree.prototype; __proto.createChildren=function(){ this.viewMapRegists(); } __proto.inits=function(){ this.nodeTree.list.scrollBar.hide=true; this.nodeTree.list.selectEnable=true; this.settingBtn.on(/*laya.events.Event.CLICK*/"click",this,this.onSettingBtn); this.freshBtn.on(/*laya.events.Event.CLICK*/"click",this,this.fresh); this.closeBtn.on(/*laya.events.Event.CLICK*/"click",this,this.onCloseBtn); this.fliterTxt.on(/*laya.events.Event.ENTER*/"enter",this,this.onFliterTxtChange); this.fliterTxt.on(/*laya.events.Event.BLUR*/"blur",this,this.onFliterTxtChange); NodeMenu.I.setNodeListAction(this.nodeTree.list); this.nodeTree.list.on(/*laya.events.Event.CLICK*/"click",this,this.onListClick,[this.nodeTree.list]); this.nodeTree.renderHandler=new Handler(this,this.treeRender); this._closeSettingHandler=new Handler(this,this.closeSetting); this.onIfShowPropsChange(); this.ifShowProps.on(/*laya.events.Event.CHANGE*/"change",this,this.onIfShowPropsChange); } __proto.onIfShowPropsChange=function(){ this.showProps=this.ifShowProps.selected; this.fresh(); } __proto.onListClick=function(list){ if (list.selectedItem){ if (list.selectedItem.isDirectory){ list.selectedItem.isOpen=!list.selectedItem.isOpen; this.nodeTree.fresh(); } } } //} __proto.onFindBtn=function(){ FindSmallView.I.show(); } __proto.onCloseBtn=function(){ this.removeSelf(); } __proto.onTreeDoubleClick=function(e){ if (this.nodeTree.selectedItem){ var tarNode; tarNode=this.nodeTree.selectedItem.path; NodeMenu.I.objRightClick(tarNode); } } //} __proto.onTreeRightMouseDown=function(e){ if (this.nodeTree.selectedItem){ var tarNode; tarNode=this.nodeTree.selectedItem.path; NodeMenu.I.objRightClick(tarNode); } } //} __proto.onSettingBtn=function(){ NodeTreeSettingView.I.showSetting(NodeTree.showKeys,this._closeSettingHandler,this._tar); } __proto.closeSetting=function(newKeys){ NodeTree.showKeys=newKeys; this.fresh(); } __proto.onFliterTxtChange=function(e){ var key; key=this.fliterTxt.text; if (key=="")return; if (key !=NodeTree.showKeys.join(",")){ NodeTree.showKeys=key.split(","); this.fresh(); } return; this.selecteByFile(key); } __proto.selecteByFile=function(key){ var arr; arr=this.nodeTree.source; var rsts; rsts=DebugTool.findNameHas(key,false); if (rsts && rsts.length > 0){ var tar; tar=rsts[0]; this.parseOpen(arr,tar); } } __proto.showSelectInStage=function(node){ this.setDis(Laya.stage); this.selectByNode(node); } __proto.selectByNode=function(node){ if (!node)return; var arr; arr=this.nodeTree.source; this.parseOpen(arr,node); } __proto.showNodeList=function(nodeList){ if (!nodeList)return; var i=0,len=0; len=nodeList.length; var showList; showList=[]; var tData; var tSprite; for (i=0;i < len;i++){ tSprite=nodeList[i]; tData={}; tData.label=ClassTool.getNodeClassAndName(tSprite); tData.path=tSprite; showList.push(tData); } this.nodeTree.array=showList; } __proto.parseOpen=function(tree,node){ if (tree.length < 1)return; if (!node)return; var i=0,len=0; len=tree.length; var tItem; for(i=0;i-1){ item.x=0; result.push(item); } if (item.child && item.child.length > 0){ this.getFilterSource(item.child,result,key); } } } __proto.onControlDown=function(){ this.startDrag(); } __proto.setDis=function(sprite){ this._tar=sprite; this.fresh(); } __proto.fresh=function(){ var preTar; if (this.nodeTree.selectedItem){ var tItem; tItem=this.nodeTree.selectedItem; while (tItem && (! (tItem.path instanceof laya.display.Sprite ))){ tItem=tItem.nodeParent; } if (tItem && tItem.path){ preTar=tItem.path; } } if (!this._tar){ this.nodeTree.array=[]; }else{ this.nodeTree.array=NodeUtils.getNodeTreeData(this._tar,this.showProps?NodeTree.showKeys:NodeTree.emptyShowKey); } if (preTar){ this.selectByNode(preTar); } } __proto.treeRender=function(cell,index){ var item=cell.dataSource; if (item){ var isDirectory=item.child || item.isDirectory; var label=cell.getChildByName("label"); if ((item.path instanceof laya.display.Node )){ label.color="#09a4f6"; }else{ if (item.isChilds){ label.color="#00ff11"; }else{ label.color="#838bc5"; } } } } NodeTree.I=null; NodeTree.emptyShowKey=[]; __static(NodeTree, ['showKeys',function(){return this.showKeys=["x","y","width","height","renderCost"];} ]); return NodeTree; })(NodeTreeUI) /** *... *@author ww */ //class laya.debug.view.nodeInfo.nodetree.NodeTreeSetting extends laya.debug.ui.debugui.NodeTreeSettingUI var NodeTreeSetting=(function(_super){ function NodeTreeSetting(){ NodeTreeSetting.__super.call(this); Base64AtlasManager.replaceRes(NodeTreeSettingUI.uiView); this.createView(NodeTreeSettingUI.uiView); } __class(NodeTreeSetting,'laya.debug.view.nodeInfo.nodetree.NodeTreeSetting',_super); var __proto=NodeTreeSetting.prototype; //inits(); __proto.createChildren=function(){} return NodeTreeSetting; })(NodeTreeSettingUI) /** *... *@author ww */ //class laya.debug.view.nodeInfo.nodetree.ObjectCreate extends laya.debug.ui.debugui.ObjectCreateUI var ObjectCreate=(function(_super){ function ObjectCreate(){ ObjectCreate.__super.call(this); Base64AtlasManager.replaceRes(ObjectCreateUI.uiView); this.createView(ObjectCreateUI.uiView); } __class(ObjectCreate,'laya.debug.view.nodeInfo.nodetree.ObjectCreate',_super); var __proto=ObjectCreate.prototype; __proto.createChildren=function(){ this.viewMapRegists(); } return ObjectCreate; })(ObjectCreateUI) /** *... *@author ww */ //class laya.debug.view.nodeInfo.nodetree.ObjectInfo extends laya.debug.ui.debugui.ObjectInfoUI var ObjectInfo=(function(_super){ function ObjectInfo(){ ObjectInfo.__super.call(this); Base64AtlasManager.replaceRes(ObjectInfoUI.uiView); this.createView(ObjectInfoUI.uiView); } __class(ObjectInfo,'laya.debug.view.nodeInfo.nodetree.ObjectInfo',_super); var __proto=ObjectInfo.prototype; __proto.createChildren=function(){} return ObjectInfo; })(ObjectInfoUI) /** *... *@author ww */ //class laya.debug.view.nodeInfo.nodetree.OutPut extends laya.debug.ui.debugui.OutPutUI var OutPut=(function(_super){ function OutPut(){ OutPut.__super.call(this); Base64AtlasManager.replaceRes(OutPutUI.uiView); this.createView(OutPutUI.uiView); } __class(OutPut,'laya.debug.view.nodeInfo.nodetree.OutPut',_super); var __proto=OutPut.prototype; __proto.createChildren=function(){} return OutPut; })(OutPutUI) /** *... *@author ww */ //class laya.debug.view.nodeInfo.nodetree.Profile extends laya.debug.ui.debugui.ProfileUI var Profile=(function(_super){ function Profile(){ this.views=null; Profile.__super.call(this); Base64AtlasManager.replaceRes(ProfileUI.uiView); this.createView(ProfileUI.uiView); this.views=[this.createPanel,this.renderPanel,this.cachePanel,this.resPanel]; this.tab.selectedIndex=0; this.tabChange(); this.tab.on(/*laya.events.Event.CHANGE*/"change",this,this.tabChange); } __class(Profile,'laya.debug.view.nodeInfo.nodetree.Profile',_super); var __proto=Profile.prototype; __proto.createChildren=function(){ this.viewMapRegists(); } __proto.tabChange=function(){ DisControlTool.addOnlyByIndex(this.views,this.tab.selectedIndex,this); } return Profile; })(ProfileUI) /** *... *@author ww */ //class laya.debug.view.nodeInfo.nodetree.Rank extends laya.debug.ui.debugui.RankUI var Rank=(function(_super){ function Rank(){ Rank.__super.call(this); Base64AtlasManager.replaceRes(RankUI.uiView); this.createView(RankUI.uiView); } __class(Rank,'laya.debug.view.nodeInfo.nodetree.Rank',_super); var __proto=Rank.prototype; __proto.createChildren=function(){ this.viewMapRegists(); } return Rank; })(RankUI) /** *... *@author ww */ //class laya.debug.view.nodeInfo.nodetree.SelectInfos extends laya.debug.ui.debugui.SelectInfosUI var SelectInfos=(function(_super){ function SelectInfos(){ SelectInfos.__super.call(this); Base64AtlasManager.replaceRes(SelectInfosUI.uiView); this.createView(SelectInfosUI.uiView); } __class(SelectInfos,'laya.debug.view.nodeInfo.nodetree.SelectInfos',_super); var __proto=SelectInfos.prototype; __proto.createChildren=function(){ this.viewMapRegists(); } return SelectInfos; })(SelectInfosUI) /** *... *@author ww */ //class laya.debug.view.nodeInfo.nodetree.ToolBar extends laya.debug.ui.debugui.ToolBarUI var ToolBar=(function(_super){ function ToolBar(){ ToolBar.__super.call(this); Base64AtlasManager.replaceRes(ToolBarUI.uiView); this.createView(ToolBarUI.uiView); } __class(ToolBar,'laya.debug.view.nodeInfo.nodetree.ToolBar',_super); var __proto=ToolBar.prototype; __proto.createChildren=function(){} return ToolBar; })(ToolBarUI) })(window,document,Laya); if (typeof define === 'function' && define.amd){ define('laya.core', ['require', "exports"], function(require, exports) { 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); for (var i in Laya) { var o = Laya[i]; o && o.__isclass && (exports[i] = o); } }); }