aboutsummaryrefslogtreecommitdiff
path: root/webAO
diff options
context:
space:
mode:
authorstonedDiscord <stoned@derpymail.org>2019-02-20 00:13:03 +0100
committerstonedDiscord <stoned@derpymail.org>2019-02-20 00:13:03 +0100
commit354d30138eb9dc9bd9edfd9abc1d5ae2446b9d00 (patch)
treed0529a5339c75ca055c797f7d49e9e0390e5484f /webAO
parente95c86132b6c8f83f3f65181d0f82ce1d00d8565 (diff)
added fingerprinting
Diffstat (limited to 'webAO')
-rw-r--r--webAO/client.b.js2
-rw-r--r--webAO/client.b.js.map2
-rw-r--r--webAO/client.html1
-rw-r--r--webAO/client.js23
-rw-r--r--webAO/fingerprint.b.js2
-rw-r--r--webAO/fingerprint.b.js.map1
-rw-r--r--webAO/fingerprint.js1192
-rw-r--r--webAO/ui.b.js2
-rw-r--r--webAO/ui.b.js.map2
9 files changed, 1218 insertions, 9 deletions
diff --git a/webAO/client.b.js b/webAO/client.b.js
index 8eae4ff..85311a6 100644
--- a/webAO/client.b.js
+++ b/webAO/client.b.js
@@ -1,2 +1,2 @@
-!function(e){var n={};function t(o){if(n[o])return n[o].exports;var a=n[o]={i:o,l:!1,exports:{}};return e[o].call(a.exports,a,a.exports,t),a.l=!0,a.exports}t.m=e,t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=2)}([function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=["1.gif","1.png","2.png","3.png","4.png","5.gif","5.png","6.gif","6.png","AACastApril.png","AACastBellboy.png","AACastButz.png","AACastButz2.png","AACastButz3.png","AACastCindy.png","AACastCody.png","AACastDarke.png","AACastEma.png","AACastGant.png","AACastGoodman.png","AACastGregory.png","AACastGrossberg.png","AACastGumshoe.png","AACastHammer.png","AACastJake.png","AACastJudge.png","AACastLana.png","AACastLotta.png","AACastManfred.png","AACastMaya.png","AACastMeekins.png","AACastMia.png","AACastMiles.png","AACastMisty.png","AACastNeil.png","AACastOldbag.png","AACastOldbag2.png","AACastPayne.png","AACastPayne2.png","AACastPenny.png","AACastPhoenix.png","AACastPhoenix2.png","AACastPowers.png","AACastPowers2.png","AACastSahwit.png","AACastSal.png","AACastStarr.png","AACastVasquez.png","AACastWhite.png","AAI2CastBlaise.png","AAI2CastBonnie.png","AAI2CastCameron.png","AAI2CastCourtney.png","AAI2CastDelicia.png","AAI2CastDogen.png","AAI2CastElbird.png","AAI2CastGustavia.png","AAI2CastGustavia2.png","AAI2CastJill.png","AAI2CastKarin.png","AAI2CastKatherine.png","AAI2CastKatherine2.png","AAI2CastKnightley.png","AAI2CastMarsh.png","AAI2CastMaster.png","AAI2CastMaster2.png","AAI2CastNicole.png","AAI2CastPierre.png","AAI2CastRaymond.png","AAI2CastRaymond2.png","AAI2CastRoland.png","AAI2CastRooke.png","AAI2CastSahwit.png","AAI2CastSebastian.png","AAI2CastShelly.png","AAI2CastSimon.png","AAI2bag.png","AAI2balloon.png","AAI2bell.png","AAI2blanket.png","AAI2body.png","AAI2button.png","AAI2chess.png","AAI2clip.png","AAI2cuffs.png","AAI2dog.png","AAI2door.png","AAI2floor.png","AAI2gate.png","AAI2glove.png","AAI2gun.png","AAI2key.png","AAI2map.png","AAI2map2.png","AAI2map3.png","AAI2note.png","AAI2rope.png","AAI2shovel.png","AAI2tunnel.png","AAI2uniform.png","AAI2video.png","AAI2well.png","AAICastAkbey.png","AAICastAlba.png","AAICastAlba2.png","AAICastAmano.png","AAICastBadd.png","AAICastBuddy.png","AAICastButz.png","AAICastByrne.png","AAICastCammy.png","AAICastDeacon.png","AAICastDeid.png","AAICastFranziska.png","AAICastFranziska2.png","AAICastGumshoe.png","AAICastGumshoe2.png","AAICastHuang.png","AAICastJudge.png","AAICastKay.png","AAICastKay2.png","AAICastLance.png","AAICastLang.png","AAICastMack.png","AAICastMaggey.png","AAICastManfred.png","AAICastManny.png","AAICastNou.png","AAICastPalaeno.png","AAICastPaups.png","AAICastPortsman.png","AAICastRhoda.png","AAICastShihna.png","AAICastSkye.png","AAICastYew.png","AAICastZinc.png","AAIFIRE.png","AAIad.png","AAIad2.png","AAIad3.png","AAIarrow.png","AAIbadge.png","AAIbadger.png","AAIbadger2.png","AAIbadger3.png","AAIbadger4.png","AAIbag.png","AAIballoon.png","AAIbody.png","AAIbody2.png","AAIbody3.png","AAIbody4.png","AAIbody5.png","AAIbook.png","AAIbook2.png","AAIbook3.png","AAIbook4.png","AAIboxes.png","AAIbusinesscard.png","AAIbusinesscard2.png","AAIcar.png","AAIcargo.png","AAIcart.png","AAIchange.png","AAIclip.png","AAIcravat.png","AAIdecoration.png","AAIdoor.png","AAIfile.png","AAIfile2.png","AAIfile3.png","AAIflowers.png","AAIfountain.png","AAIfountain2.png","AAIgift.png","AAIguitarpick.png","AAIgun.png","AAIgun2.png","AAIgun3.png","AAIhandprint.png","AAIhat.png","AAIhoop.png","AAIink.png","AAIkey.png","AAIkey2.png","AAIkey3.png","AAIkey4.png","AAIkey5.png","AAIknife.png","AAIknife2.png","AAIknife3.png","AAIknife4.png","AAIknife5.png","AAIlantern.png","AAIlittlethief.png","AAIluggage.png","AAImoney.png","AAInote.png","AAInote2.png","AAInote3.png","AAInote4.png","AAInote5.png","AAInote6.png","AAInote7.png","AAInote8.png","AAInote9.png","AAInote10.png","AAInote11.png","AAInote12.png","AAInote13.png","AAInote14.png","AAInote15.png","AAInote16.png","AAInote17.png","AAIpen.png","AAIpendant.png","AAIpendant2.png","AAIperfume.png","AAIperfume2.png","AAIphone.png","AAIphone2.png","AAIphone3.png","AAIphoto.png","AAIphoto2.png","AAIphoto3.png","AAIphoto4.png","AAIplates.png","AAIquercuswound.png","AAIreceipt.png","AAIsafe.png","AAIsafe2.png","AAIsciencekit.png","AAIshards.png","AAIshards2.png","AAIshards3.png","AAIshears.png","AAIshirt.png","AAIsnack.png","AAIspear.png","AAIspill.png","AAIstatue.png","AAIstatue2.png","AAIstatue3.png","AAIstatue4.png","AAIsuspect.png","AAIsword.png","AAIsword2.png","AAItape.png","AAItonosamanju.png","AAItonosamanju2.png","AAItonosamanju3.png","AAIvideo.png","AAIwakasaman.png","AAIwallet.png","AAIwire.png","AATHATCARD.png","AAaffidavit.png","AAairtube.png","AAautopsy.png","AAbluebadger.png","AAbook.png","AAbook2.png","AAbook3.png","AAbullet.png","AAbullet2.png","AAcamera.png","AAcamera2.png","AAcards.png","AAclip.png","AAclip2.png","AAclip3.png","AAclip4.png","AAclip5.png","AAdata.png","AAdata2.png","AAdata3.png","AAdata4.png","AAenvelope.png","AAevidencelaw.png","AAfingerprintpowder.png","AAfirecracker.png","AAfishingpole.png","AAflyer.png","AAglassshards.png","AAglove.png","AAgun.png","AAhandprint.png","AAidcard.png","AAkey.png","AAkeycard.png","AAknife1.png","AAkoptrophy.png","AAleather.png","AAlocker.png","AAlocker2.png","AAlocker3.png","AAluminol.png","AAluminol2.png","AAlunch.png","AAlunch2.png","AAlunch3.png","AAmagatama.png","AAmagatama2.png","AAmayanote.png","AAmayoinote.png","AAmetaldetector.png","AAmissile.png","AAmissile2.png","AAmissle2.png","AAmrmonkey.png","AAnote.png","AAnote2.png","AAnote3.png","AAnote4.png","AAparkingticket.png","AApassport.png","AApassport2.png","AAphone.png","AAphone2.png","AAphone3.png","AAphone4.png","AAphoto.png","AAphoto2.png","AAphoto3.png","AAphoto4.png","AAphoto5.png","AAphoto6.png","AAphoto7.png","AAphoto8.png","AAphoto9.png","AAphoto10.png","AAphoto11.png","AApills.png","AApills2.png","AAplate.png","AAplate2.png","AApolly.png","AAprint.png","AAprint2.png","AAprint3.png","AAprint4.png","AAprint5.png","AAprint6.png","AAprint7.png","AAprint8.png","AApsychelock.png","AAsafe.png","AAscarf.png","AAscrewdriver.png","AAscript.png","AAscript2.png","AAshoe.png","AAshoe2.png","AAspear.png","AAstudiovan.png","AAswitchblade.png","AAswitchblade2.png","AAswitchblade3.png","AAthinker.png","AAvase.png","AAvase2.png","AAvase3.png","AAvase4.png","AAvase5.png","AAvideo.png","AAvideo2.png","AAwallet.png","AAwiretap.png","AJCastAlita.png","AJCastApollo.png","AJCastDaryan.jpg","AJCastDaryan.png","AJCastDrew.png","AJCastEldoon.png","AJCastEma.png","AJCastKlavier.png","AJCastKlavier2.png","AJCastKristoph.png","AJCastLamiroir.png","AJCastLeTouse.png","AJCastMachi.png","AJCastMagnifi.png","AJCastMeraktis.png","AJCastOlga.png","AJCastOlga2.png","AJCastPayne.png","AJCastPhoenix.png","AJCastPlum.png","AJCastShadi.png","AJCastSpark.png","AJCastStickler.png","AJCastThalassa.png","AJCastTrucy.gif","AJCastTrucy.png","AJCastValant.png","AJCastValant2.png","AJCastVera.png","AJCastWinfred.png","AJCastWocky.png","AJCastZak.png","AJad.png","AJad2.png","AJad3.png","AJad4.png","AJad5.png","AJautopsy.png","AJbadge.png","AJbook.png","AJbottle.png","AJbowl.png","AJbox.png","AJbracelet.png","AJbrooch.png","AJbullet.png","AJburntstuff.png","AJbusinesscard.png","AJbusinesscard2.png","AJbusinesscard3.png","AJbusinesscard4.png","AJbusinesscard5.png","AJbusinesscard6.png","AJbutton.png","AJcard.png","AJcard2.png","AJcard3.png","AJcard4.png","AJcard5.png","AJcart.png","AJclip.png","AJclip2.png","AJclip3.png","AJcocoon.png","AJdata1.png","AJdata2.png","AJdata3.png","AJdevice.png","AJdevice2.png","AJdevice3.png","AJearpiece.png","AJfingerprintpowder.png","AJframe.png","AJgoldsnackoo.png","AJguitar.png","AJgun.png","AJgun2.png","AJgun3.png","AJiv.png","AJiv2.png","AJkey.png","AJknife.png","AJlamp.png","AJlocket.png","AJluminol.png","AJmagatama.png","AJmap.png","AJmap2.png","AJmap3.png","AJmap4.png","AJmirror.png","AJmixer.png","AJmrhat.png","AJmug.png","AJnailpolish.png","AJnote.png","AJnote2.png","AJnote3.png","AJnote4.png","AJnote5.png","AJnote6.png","AJnote7.png","AJnote8.png","AJnote9.png","AJnote10.png","AJnote11.png","AJnote12.png","AJnote13.png","AJnote14.png","AJnote15.png","AJnote16.png","AJnote17.png","AJnote18.png","AJnote19.png","AJnote","AJpainting.png","AJpainting2.png","AJpainting3.png","AJpainting4.png","AJpanties.png","AJpanties2.png","AJpanties3.png","AJphone.png","AJphone2.png","AJphoto.png","AJphoto2.png","AJphoto3.png","AJphoto4.png","AJphoto5.png","AJphoto6.png","AJphoto7.png","AJphoto8.png","AJpoisonspray.png","AJsciencekit.png","AJshoe.png","AJshoe2.png","AJshoe3.png","AJsnack.png","AJsnack2.png","AJsnack3.png","AJsnackoos.png","AJstamp.png","AJsyringe.png","AJticket.png","AJticket2.png","AJticket3.png","AJvideo.png","AJxraymachine.png","Compin.png","Credit.png","CustomEvidence1.png","CustomEvidence2.png","CustomEvidence3.png","CustomEvidence4.png","CustomEvidence5.png","CustomEvidence6.png","CustomEvidence7.png","CustomEvidence8.png","CustomEvidence9.png","CustomEvidence10.png","CustomEvidence11.png","CustomEvidence12.png","CustomEvidence13.png","CustomEvidence14.png","CustomEvidence15.png","CustomEvidence16.png","CustomEvidence17.png","CustomEvidence18.png","CustomEvidence19.png","CustomEvidence","DDAutopsy.png","DDBadge.png","DDCaseCandice.png","DDCastApollo.png","DDCastApollo2.png","DDCastApollo3.png","DDCastAthena.png","DDCastAura.png","DDCastBlackquill.png","DDCastCandice.png","DDCastClay.png","DDCastClonco.png","DDCastClonco2.png","DDCastCourte.png","DDCastCrab.png","DDCastDamien.png","DDCastFilch.png","DDCastFulbright.png","DDCastJinxie.png","DDCastJuniper.png","DDCastJuniper2.png","DDCastKlavier.png","DDCastLBelle.png","DDCastLBelle2.png","DDCastMeans.png","DDCastMetis.png","DDCastMiles.png","DDCastNineTails.png","DDCastNorma.png","DDCastOConnor.png","DDCastOrla.png","DDCastPayne.png","DDCastPearl.png","DDCastPhoenix.png","DDCastRex.png","DDCastRimes.png","DDCastRobin.png","DDCastRobin2.png","DDCastSasha.png","DDCastSasha2.png","DDCastSasha3.png","DDCastScuttlebutt.png","DDCastShipley.png","DDCastSniper.png","DDCastSniper2.png","DDCastStarbuck.png","DDCastSummers.png","DDCastTonate.png","DDCastTrucy.png","DDCastYuri.png","DDSTEPladder.png","DDScrewdriver.png","DDStatueStands.png","DDarrow.png","DDbadge2.png","DDbag.png","DDball.png","DDbed.png","DDbomb.png","DDbomb2.png","DDbomb3.png","DDbomb4.png","DDbook.png","DDbook2.png","DDbook3.png","DDbook4.png","DDbook5.png","DDbowl.png","DDbox.png","DDbox2.png","DDbox3.png","DDbox4.png","DDbracelet.png","DDbullet.png","DDbullet2.png","DDbullethole.png","DDcalendar.png","DDcamera.png","DDcamera2.png","DDcamera3.png","DDcart.png","DDcd.png","DDcharm.png","DDclip.png","DDclip2.png","DDclip3.png","DDcloth.png","DDcoin.png","DDcoin2.png","DDcomputer.png","DDcostume.png","DDcostume2.png","DDcostumes.png","DDdata.png","DDdata2.png","DDdata3.png","DDdetonator.png","DDdoor.png","DDdoor2.png","DDdoor3.png","DDdye.png","DDearring.png","DDemblem.png","DDenvelope.png","DDfingerprint.png","DDfingerprintpowder.png","DDfish.png","DDflower.png","DDfood.png","DDfood2.png","DDgun.png","DDhair.png","DDhairspray.png","DDhandprint.png","DDhat.png","DDheadphones.png","DDkey.png","DDkey2.png","DDkey3.png","DDkeycard.png","DDkeycard2.png","DDkeycard3.png","DDkeycard4.png","DDkeycard5.png","DDkeycard6.png","DDkeycard7.png","DDknife.png","DDladder.png","DDladder2.png","DDlighter.png","DDluminol.png","DDmagatama.png","DDmagatama2.png","DDmap.png","DDmap2.png","DDmap3.png","DDmap4.png","DDmap5.png","DDmap6.png","DDmap7.png","DDmap8.png","DDmap9.png","DDmap10.png","DDmap11.png","DDmap12.png","DDmask.png","DDmedicine.png","DDmedicine2.png","DDmedicine3.png","DDnote.png","DDnote2.png","DDnote4.png","DDnote5.png","DDnote6.png","DDnote7.png","DDnote8.png","DDnote9.png","DDnote10.png","DDnote16.png","DDpenguin.png","DDphone.png","DDphone2.png","DDphoto.png","DDphoto2.png","DDphoto3.png","DDphoto4.png","DDphoto5.png","DDphoto6.png","DDphoto7.png","DDphoto10.png","DDphoto11.png","DDphoto12.png","DDphoto13.png","DDphoto14.png","DDphoto15.png","DDplate.png","DDposter.png","DDposter2.png","DDposter3.png","DDpuppet.png","DDrecorder.png","DDscienceglasses.png","DDscroll.png","DDshard.png","DDshard2.png","DDshard3.png","DDshard4.png","DDshard5.png","DDshard6.png","DDshard7.png","DDshoe.png","DDskull.png","DDstaff.png","DDstatue.png","DDstatue2.png","DDstatue3.png","DDstatue4.png","DDstatue5.png","DDstatue6.png","DDstatue7.png","DDstatue8.png","DDstatue9.png","DDsurgery.png","DDsuspect.png","DDsword.png","DDsword2.png","DDtail.png","DDtank.png","DDtank2.png","DDvideo.png","DDwhistle.png","DDwidget.png","DGSCastAuchi.png","DGSCastBarok.png","DGSCastBeppo.png","DGSCastCrogrey.png","DGSCastDemiglaski.png","DGSCastFairplay.png","DGSCastGina.png","DGSCastGreen.png","DGSCastGregson.png","DGSCastHolmes.png","DGSCastHosonaga.png","DGSCastHosonaga2.png","DGSCastHutch.png","DGSCastJWatson.png","DGSCastJezail.png","DGSCastJoan.png","DGSCastJohn.png","DGSCastKazuma.png","DGSCastLadyfirst.png","DGSCastMegundal.png","DGSCastMilverton.png","DGSCastNatsume.png","DGSCastNemmy.png","DGSCastNikomina.png","DGSCastPat.png","DGSCastRola.png","DGSCastRoylott.png","DGSCastRyuunosuke.png","DGSCastSanmon.png","DGSCastStroganov.png","DGSCastSusato.png","DGSCastSuspect.png","DGSCastTaizou.png","DGSCastTully.png","DGSCastVortex.png","DGSCastWagahai.png","DGSCastWatson.png","DGSCastYuujin.png","DGSbadge.png","DGSbag.png","DGSbag2.png","DGSbell.png","DGSbell2.png","DGSbell3.png","DGSbook.png","DGSbook2.png","DGSbook3.png","DGSbook4.png","DGSbook5.png","DGSbook6.png","DGSbook7.png","DGSbook8.png","DGSbook9.png","DGSbook10.png","DGSbullet.png","DGScamera.png","DGScane.png","DGScart.png","DGSclip.png","DGSclip2.png","DGSclip3.png","DGSclip4.png","DGScoin.png","DGSdevice.png","DGSflower.png","DGSfood.png","DGSfood2.png","DGSfood3.png","DGSfood4.png","DGSgloves.png","DGSgloves2.png","DGSgun.png","DGSgun2.png","DGSgun3.png","DGSherbaltea.png","DGSknife.png","DGSknife2.png","DGSknife3.png","DGSknife4.png","DGSmap.png","DGSmap2.png","DGSmap3.png","DGSmusicbox.png","DGSmusicbox2.png","DGSmusicbox3.png","DGSmusicdisk.png","DGSmusicdisk2.png","DGSmusicdisk3.png","DGSmusicdisk4.png","DGSmusicdisk15.png","DGSnote.png","DGSnote2.png","DGSnote3.png","DGSnote4.png","DGSnote5.png","DGSnote6.png","DGSnote7.png","DGSnote8.png","DGSnote9.png","DGSnote10.png","DGSnote11.png","DGSnote12.png","DGSnote13.png","DGSnote14.png","DGSnote15.png","DGSnote16.png","DGSnote17.png","DGSnote18.png","DGSnote19.png","DGSnote","DGSnote21.png","DGSphoto.png","DGSphoto2.png","DGSphoto3.png","DGSphoto4.png","DGSphoto5.png","DGSphoto6.png","DGSphoto7.png","DGSphoto8.png","DGSphoto9.png","DGSphoto10.png","DGSphoto11.png","DGSphoto12.png","DGSphoto13.png","DGSphoto14.png","DGSphoto15.png","DGSphoto16.png","DGSphoto17.png","DGSphoto18.png","DGSphoto19.png","DGSpin.png","DGSpin2.png","DGSpipe.png","DGSpressing.png","DGSsciencekit.png","DGSshard.png","DGSstereoscope.png","DGSstereoscope2.png","DGStiara.png","DGSviola.png","DGSviola2.png","DGSwhip.png","Datapad.png","Interface.png","JFACastAcro.png","JFACastAdrian.png","JFACastAmi.png","JFACastBat.png","JFACastBen.png","JFACastCeleste.png","JFACastDeKiller.png","JFACastDustin.png","JFACastFranziska.png","JFACastGalactica.png","JFACastGrey.png","JFACastHotti.png","JFACastIni.png","JFACastJuan.png","JFACastMaggey.png","JFACastMatt.png","JFACastMimi.png","JFACastMoe.png","JFACastMorgan.png","JFACastPearl.png","JFACastRegina.png","JFACastRussel.png","JFACastShelly.png","JFACastWellington.png","JFATHATCARD.png","JFATHATCARD2.png","JFAautograph.png","JFAautograph2.png","JFAball.png","JFAball2.png","JFAbear.png","JFAbear2.png","JFAbear3.png","JFAbottle.png","JFAbox.png","JFAbox2.png","JFAbusinesscard.png","JFAbusinesscard2.png","JFAbutton.png","JFAbutton2.png","JFAbutton3.png","JFAcamera.png","JFAcard.png","JFAcard2.png","JFAclip.png","JFAclip2.png","JFAclip3.png","JFAclip4.png","JFAcoat.png","JFAfrequencydetector.png","JFAglasses.png","JFAglove.png","JFAgrapes.png","JFAguitar.png","JFAgun.png","JFAgun2.png","JFAhammond.png","JFAhat.png","JFAjuice.png","JFAkey.png","JFAknife.png","JFAknife2.png","JFAleon.png","JFAmilk.png","JFAmilk2.png","JFAmoney.png","JFAnote.png","JFAnote2.png","JFApepper.png","JFAphoto.png","JFAposter.png","JFAreceipt.png","JFAregent.png","JFAring.png","JFArobe.png","JFArobescrap.png","JFAscarf.png","JFAscreen.png","JFAshoe.png","JFAspycamera.png","JFAticket.png","JFAticket2.png","JFAtracker.png","JFAtransceiver.png","JFAtransmitter.png","JFAtrilo.png","JFAuniform.png","JFAurn1.png","JFAurn2.png","JFAvest.png","JFAwhip.png","MiscAKMS.png","MiscAsthmaPump.png","MiscBaggie.png","MiscBeach.png","MiscBlueRuby.png","MiscCandy Cane.png","MiscCandy Cane Dark.png","MiscCorkscrew.png","MiscCrowbar.png","MiscDragonPepper.png","MiscFlintlock.png","MiscGenerator.png","MiscGrapeJuice.png","MiscGreen Hut.png","MiscGrill.png","MiscHalf-Eaten Burger.png","MiscHangGlider.png","MiscLockpicks.png","MiscMapBiolab.png","MiscMapCourthouse.png","MiscMapLobby1.png","MiscMichigan J Frog.png","MiscMystery1.png","MiscMystery2.png","MiscMystery3.png","MiscOldTrain.png","MiscRaffleTickets.png","MiscSpatula.png","MiscSpecimenAlpha.png","MiscTimeCrystal.png","MiscTins.png","MiscUnknown People.png","MiscVDF.png","MiscVodka.png","MiscZombie.png","Scanner.png","SoJad.png","SoJad2.png","SoJad3.png","SoJad4.png","SoJad5.png","SoJad6.png","SoJad7.png","SoJarrow.png","SoJautopsy.png","SoJbadge.png","SoJbadge2.png","SoJblimp.png","SoJblimp2.png","SoJblood.png","SoJboiler.png","SoJbook.png","SoJbook2.png","SoJbook3.png","SoJbook4.png","SoJbook5.png","SoJbook6.png","SoJbook7.png","SoJbook8.png","SoJbook9.png","SoJbook10.png","SoJbook11.png","SoJbook12.png","SoJbook13.png","SoJbook14.png","SoJbox.png","SoJbox2.png","SoJbracelet.png","SoJbucket.png","SoJcamera.png","SoJcandelabra.png","SoJcandelabra2.png","SoJcandelabra3.png","SoJcastAhlbi.png","SoJcastAmara.png","SoJcastAndistan'dhin.png","SoJcastApollo.png","SoJcastArchie.png","SoJcastArmie.png","SoJcastAthena.png","SoJcastAtishon.png","SoJcastBeh'leeb.png","SoJcastBetty.png","SoJcastBlackquill.png","SoJcastBonny.png","SoJcastBucky.png","SoJcastButz.png","SoJcastDatz.png","SoJcastDatz2.png","SoJcastDhurke.png","SoJcastDumas.png","SoJcastEllen.png","SoJcastEma.png","SoJcastGa'ran.png","SoJcastGeiru.png","SoJcastInga.png","SoJcastMaya.png","SoJcastMiles.png","SoJcastNahyuta.png","SoJcastNayna.png","SoJcastPayne.png","SoJcastPearl.png","SoJcastPhoenix.png","SoJcastPierce.png","SoJcastPuhray.png","SoJcastRayfa.png","SoJcastRetinz.png","SoJcastReus.png","SoJcastRohl.png","SoJcastSelena.png","SoJcastSergeant.png","SoJcastSorin.png","SoJcastTahrust.png","SoJcastTaifu.png","SoJcastTrucy.png","SoJcastUendo.png","SoJcd.png","SoJcd2.png","SoJcharm.png","SoJclip.png","SoJclip2.png","SoJcog.png","SoJcontract.png","SoJdog.png","SoJflag.png","SoJflower.png","SoJfood1.png","SoJfood2.png","SoJfood3.png","SoJgem.png","SoJglasses.png","SoJgoop.png","SoJhat.png","SoJhelicopter.png","SoJhorse.png","SoJhorse2.png","SoJkey.png","SoJkey2.png","SoJkey3.png","SoJkey4.png","SoJkeycard.png","SoJkeycharm.png","SoJlantern.png","SoJlantern2.png","SoJluminol.png","SoJmagatama.png","SoJmagatama2.png","SoJmagatama3.png","SoJmap.png","SoJmap2.png","SoJmap3.png","SoJmap4.png","SoJmap5.png","SoJmap6.png","SoJmap7.png","SoJmrhat.png","SoJnote.png","SoJnote2.png","SoJnote3.png","SoJnote4.png","SoJnote5.png","SoJnote6.png","SoJnote7.png","SoJnote8.png","SoJnote9.png","SoJnote10.png","SoJnote11.png","SoJnote12.png","SoJnote13.png","SoJnote14.png","SoJnote15.png","SoJnote16.png","SoJnote17.png","SoJorb.png","SoJpassport.png","SoJpendant.png","SoJphone.png","SoJphoto.png","SoJphoto2.png","SoJphoto3.png","SoJphoto4.png","SoJphoto5.png","SoJphoto6.png","SoJphoto7.png","SoJphoto8.png","SoJphoto9.png","SoJphoto10.png","SoJphoto11.png","SoJphoto12.png","SoJphoto13.png","SoJphoto14.png","SoJphoto15.png","SoJphoto16.png","SoJphoto17.png","SoJphoto18.png","SoJphoto19.png","SoJphoto","SoJphoto21.png","SoJphoto22.png","SoJphoto23.png","SoJphoto24.png","SoJphoto25.png","SoJphoto26.png","SoJphoto27.png","SoJphoto28.png","SoJprintpowder.png","SoJraincoat.png","SoJscissorlift.png","SoJscroll.png","SoJscroll2.png","SoJsnackoo.png","SoJstand.png","SoJstatue.png","SoJsuspect.png","SoJsword.png","SoJsword2.png","SoJsyringe.png","SoJtape1.png","SoJtext.png","SoJunknown.png","SoJurn.png","SoJusb.png","SoJwallet.png","SoJwidget.png","TTCastAdrian.png","TTCastArmstrong.png","TTCastAtmey.png","TTCastBikini.png","TTCastBruto.png","TTCastBullard.png","TTCastDahlia.png","TTCastDeMasque.png","TTCastDesiree.png","TTCastDiego.png","TTCastElg.png","TTCastElise.png","TTCastFawles.png","TTCastGodot.png","TTCastGrossberg.png","TTCastGumshoe.png","TTCastIris.png","TTCastIris2.png","TTCastKudo.png","TTCastLisa.png","TTCastMaggey.png","TTCastMiles.png","TTCastRon.png","TTCastSwallow.png","TTCastTigre.png","TTCastValerie.png","TTCastViola.png","TTad.png","TTad2.png","TTapron.png","TTbadge.png","TTbag.png","TTblood1.png","TTblood2.png","TTbottle1.png","TTbottle2.png","TTbox.png","TTbox2.png","TTbutton.png","TTcalendar.png","TTcamera.png","TTcard.png","TTcd.png","TTcd2.png","TTclip.png","TTclip2.png","TTclip3.png","TTclip4.png","TTclip5.png","TTcoldkiller.png","TTcoldkiller2.png","TTcup.png","TTdata.png","TTdata2.png","TTdata3.png","TTdata4.png","TTdrawing.png","TTemblem.png","TTemployee.png","TTfood1.png","TTfood2.png","TThood.png","TTjewel.png","TTjewel2.png","TTkeycard.png","TTknife.png","TTlantern.png","TTlantern2.png","TTmagazine.png","TTmagazine2.png","TTmatchbook.png","TTmatchbook2.png","TTmedicine.png","TTmedicine2.png","TTmoped.png","TTnecklace.png","TTnote.png","TTnote2.png","TTnote3.png","TTnote4.png","TTnote5.png","TTnote6.png","TTnote7.png","TTperfume.png","TTphotoold.png","TTsapphire.png","TTscarf.png","TTschichishito.png","TTschichishito2.png","TTschichishito3.png","TTscroll.png","TTscroll2.png","TTseal.png","TTseal2.png","TTstaff.png","TTstaff2.png","TTstaff3.png","TTstain.png","TTstatue.png","TTticket.png","TTticket2.png","TTumbrella.png","TTvase.png","TTvase2.png","TTvase3.png","TTvase4.png","TTwallet.png","TTwatch.png","Vivaster.png","empty.png","lawyerbadge.png"]},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=["1st server","999.1","999","999Apartment","999CaptainsQuarters","999Cargo","999Casino","999Cdeck","999CentralStairs","999Chapel","999Chart","999Confinement","999DoorsA","999DoorsB","999Hospital","999Kitchen","999Library","999Operating","999Shower","999Steam","999Steeldoor","999Study","999Torture","9991stClassCabinA","9991stClassCabinB","9992ndClassCabin","AA - Edgewort's Office","AA - Gantsroom","AA - Gatewater room","AA - Gourd Lake","AA - Gourd Lake Entrance","AA - Hotel Lobby","AA - Hotticlinic","AA - Kurain","AA - Parkinglot","AA - Police Deparment","AA - Police Station","AA - Records Room","AA - Sc13","AA - Wright's Office","AABluecorp","AACourt","AACourtAnime","AACourtChristmasDecorations","AACourtChristmasLights","AACourtHD","AADefendantLobby","AADefendantLobbyHD","AADetentionCenter","AAEdgeworthOffice","AAGantOffice","AAGatewaterHotel","AAGlobalStudiosEast","AAGlobalStudiosWest","AAGourdLake","AAGrossbergOffice","AAI2Circus","AAI2City","AAI2GourdLake","AAI2LogicChess","AAI2MuseumPast","AAI2MuseumPresent","AAI2PIC","AAI2Prison","AAICohdopianEmbassy","AAICourt","AAICourtFlipped","AAIEdgeworthOffice","AAIGatewaterLandStage","AAIGatewaterLandWildWest","AAIiFlyAirlines","AALobby","AAParkingLot","AAPoliceStation","AATrainStation","AAWrightOffice","AJBorschtBowlClub","AJCourt","AJCourtBirthday","AJCourtHalloween","AJCourtNight","AJCourtTV","AJDefendantLobby","AJDetentionCenter","AJDrewStudio","AJHottiClinic","AJKlavierOffice","AJKristophCell","AJLobby","AJMeraktisClinic","AJPeoplePark","AJSunshineColiseum","AJWrightOffice","Ace","AcroRoomJFA","AirportJFA","AlbaOfficeAAI","Anime","Arcade","AtmeyOfficeTT","Atrium (SG)","AutumnForest","BB - Flowerfield","BB - Market","BB - Street","BandoLandAAI","Basement","Battlegrounds","BerryBigCircusJFA","Blackout","BlueScreensTT","BluecorpAA","BridgeNest","Brig","Building","CC1","CC2","CC3","CC4","CC5","CC6","CC7","CC8","CC9","CC10","CC11","CC12","CO - Big door","CO - Finalroom","CO - Meetingroom","CO - Whitedoor","CO - Whitelobby","CO - Whitelowerfloor","CO - White room","CP","CPRP2 Chap1","CPRP2 Chap2and3","CPRP2 Chap4","CPRP2 Chap5","CPRP Chap1","CPRP Chap2","CPRP Chap3","CPRP Chap4","CPRP Chap5","CVStMystere","Cafe","CafeCourt","CaffeeCase","Cal","CargoHoldAAI","Casino","CasinoCourt","Cathedral (SG)","Christmas","Christmas Courtroom","CinemaFamousi","Classroom","Co - Lobby 1","Co - Lobby 2","CochenOfficeAAI","ColosseumFerox","Control Room","Control Room Interior","CountyCourt","CourtroomAA","CourtroomAAHD","CourtroomAAI","CourtroomAJ","CourtroomAJNight","CourtroomAnime","CourtroomCounty","CourtroomDD","CourtroomEnglish","CourtroomNew","CourtroomRuined","CourtroomThemis","CourtroomTouhou","CourtroomWitch","CruiseCourt","CustomEight","CustomEleven","CustomFifteen","CustomFive","CustomFour","CustomFourteen","CustomNine","CustomOne","CustomSeven","CustomSix","CustomTen","CustomThirteen","CustomThree","CustomTwelve","CustomTwo","DC","DDCourt","DDCourtGray","DDCourtRuined","DDCourtRuinedInvestigation","DDCourtThemis","DDDefendantLobby","DDGyaxa","DDLobby","DDNinetailsVale","DDShipshapeAquarium","DDThemisAcademy","DFreightTrain","DGS-ENG","DGS-JAP","DGS","DGSCourtJapanese","DGSCourtOldBailey","DGSCourtOldBaileyJury","DGSDefendantLobbyJapanese","DGSDefendantLobbyOldBailey","DGSEnglishCourt","DGSJapanCourt","DGSLondon","DGSenglishcourt","DRAE-Area1","DRAE-Area2","DRClassTrial","DRRP","Dark Cave","Darkness","Datrone Heart","Datrone HeartHQ","DeLiteHouseTT","Despair vs. Hope","DetentionCenterAAI2","DimensionalGate","DogenCellAAI2","DualDestinies","Dungeon Courtroom","EdgeworthOfficeAA","EdgeworthOfficeAAI","EmbassyAAI","Endless Courtroom","EngardeManorJFA","EnglishCourt","Errors","Errors2","FECastle","FECave","FEFort","FEPlain","FETavern","Factory","FieldFortune","FilmSetAAI2","Flowerfield","ForensicCourt","Forest","GS4Night","GantOfficeAA","GetwaterHotelJFA","GetwaterStageJFA","GlobalStudiosIndoorsAA","GlobalStudiosOutdoorsAA","GourdLakeAA","GrandChokmah","GrandStadium","Graveyard","GreatWitchtrialCourt","GrossbergOfficeAA","HD","HQFarm","HQHalloweenTown","HQHolodeck","HQShrine","HQTown","HQVolcanoCherry","HallOfFame","HarborTown","HarvestFestival","HazakuraTemple1TT","HazakuraTemple2TT","Headquarters","Headquarters 2","Hell Correspondence","Hospital","HotelRoomAA","HottiClinicJFA","Innsmouth","InsidePlaneAAI2","Interiors (Day)","Interiors (Night)","JFAAirport","JFABerryBigCircusEast","JFABerryBigCircusWest","JFAGatewaterHotel","JFAHottiClinic","JFAKurainVillage","JFAMattHouse","JapaneseCourt","Kamurocho (Day)","Kamurocho (Night)","Keterburg","Khura'in","Khurain","KokonoeLab","KurainCourt","KurainVillageJFA","LBCastle","LBMisc","LBScotlandYard","Lab 8","Lentomain","Library","LogicChessAAI2","MI - Ashleys Shack","MLP - Apple barn","MLP - CMC Clubhouse","MLP - CMC Clubhouse inside","MLP - Canterlot Castle galaroom","MLP - Canterlot Hallway","MLP - Canterlot Library2","MLP - Canterlot Town","MLP - Canterlot alley","MLP - Canterlot library","MLP - Carousel Boutique","MLP - Clearing","MLP - Curio Shop","MLP - Everfree Forest","MLP - Everfree Forest entrance","MLP - Fluttershy's cottage","MLP - Hospital Room","MLP - Hotelroom","MLP - Library 2F","MLP - Library mainfloor","MLP - Old Castle","MLP - Orchard","MLP - PV Hospital","MLP - PV Street","MLP - Ponyville","MLP - Shining's apartment","MLP - Sugarcube Corner","MLP - Twilight's Lab","MM - Castle","MM - Madokas house","MM - School yard","MM - Street","MM - Street2","MM - classroom","MM - dark hallway","MM - rooftop","MM - room whit Kyubey","MM - school hallway","MM - staircase","MMA-Bedrooms1","MMA-Floor 1","MS - Cathedral","MS - Zakum's Tree","Mansion","MansionAAI2","MansionHQ","Maplecrest - Nightmare","Maplecrest","Market","Mayonaka","MechHangar","Medici Tower","Military Base Exterior","MoeRoomJFA","MuseumAAI2","MuseumTT","Music","NewCourt","New Meridian","Ninetailsvale","Nordon Plains","Nordon Plains Night","OCArcade","OCBebop","OCCourtCafe","OCCourtCounty","OCCourtCruise","OCCourtEndless","OCCourtFinalDestination","OCCourtInverted","OCCourtPirateShip","OCCourtSky","OCCourtSpace","OCCourtSpaceShip","OCCourtTouhou","OCCourtZetta","OCDungeon","OCHospital","OCRoad","OCTownPirate","OCTownShanty","OCWhiteRoom","OfficeHouseHQ","OfficeNightAA","Osaka (Night)","Osaka","OutsidePlaneAAI2","P4UBasement","P4ULab","P4Ubaseball","P4Ubeach","P4Ubuilding","P4Uconcert","P4Ugarden","P4Ugraveyard","P4Uhell","P4Ujail","P4Umisc","P4Unight","P4Uoffices","P4Urailway","P4Urestaurants","P4Urooms","P4Uruins","P4Uschool","P4Ustage1","P4Ustage2","P4Ustation","P4Ustore","P4Utent","P4Utransport","P4Utv","P4Uvelvetroom","PICAAI2","PLvsAAAlchemistHouse","PLvsAABellTower","PLvsAACastle","PLvsAACourtEnglish","PLvsAACourtLabyrinthia","PLvsAACourthouse","PLvsAADefendantLobbyEnglish","PLvsAADefendantLobbyLabyrinthia","PLvsAAEclaireBakery","PLvsAAForest","PLvsAAGreatArchive","PLvsAALabyrinthiaInner","PLvsAALabyrinthiaOuter","PLvsAALondon","PLvsAARougeTavern","PLvsAARuins","PLvsAAStorytellerTower","PLvsAAWagon","PLvsAAWorkshop","PMMMRP","PMMMWitch","ParkingLotAA","PeonyCastle","Persona Afternoon","Persona DH","Persona Morning","Persona Night","PersonaRP","PhoenixOfficeAA","PirateShip","PlaneAAI","PlaneLoungeAAI","PlaneLoungeLandAAI","PlatPark","PlatRemnant","PlatunaArea1","PlatunaArea1HQ","PlatunaArea2","PlatunaArea2HQ","PlatunaMain","PlatunamainHQ","PrecinctAA","PrisonAAI2","PrisonCourtyardAAI2","RG - 104","RG - A-East","RG - AMX","RG - Bus Terminal","RG - Cadoi City","RG - Concert","RG - Dogenzaka","RG - God Pad","RG - Miyashita Underpass","RG - Station Underpass","RG - Trail","RG - Udagawa","RaysDeLite","Retreat","RetreatHQ","RiverVista","Road","Role Play","Ronpa Mansion Area 5","Ronpa Mansion Day","Ronpa Mansion Day2","Ronpa Mansion Day3","Ronpa Mansion Day4","Ronpa Mansion Night","Ronpa Mansion Night2","Ronpa Mansion Night3","Ronpa Mansion Night4","Ronpa mansion Haunted","Ronpers Express","RooftopAAI2","RuinedCastle","RuinedCourt","Ruins Entrance","SDR2 ISLAND","SDR2 ISLAND2","SDR2 ISLAND2 NIGHT","SDR2 ISLAND3","SDR2 ISLAND NIGHT","SI - Bedroom","SI - Class(sunset)","SI - Class","SI - Council1","SI - Council2","SI - Council3","SI - Gym","SI - Gym2","SI - Hall","SI - Hall2","SI - Lockers","SI - Nurse","SI - Office","SI - Pink","SI - Roof","SI - Roof2","SI - School","Seance","SecretRoomsJFA","SecurityCompanyTT","ShipAAI2","SkialForest","Sky","SkyDeck","SoJCourt","SoJDefendantLobby","Somina Castle","Somina Castle Night","SpaceCourt","SpaceCourtBlue","SpaceCourtGreen","SpaceCourtNormal","SpaceCourtOrange","SpaceCourtRainbow","SpaceCourtRed","SpaceCourtYellow","SpacePort","Spaceship","StageAAI","StageDisassembledAAI","SteamBar","SteamGarden","SteamGovt","SteamSquare","SteamStreet","Street","SummerFestival","SummerFestivalEvening","TARDIS","TEOS Lab","TTAtmeyOffice","TTBlueScreensInc","TTDemasqueHideout","TTHazakuraTemple","TTHazakuraTempleInner","TTKBSecurity","TTLordlyTailor","TTTenderLender","TTTresBien","TenderLenderTT","Themis","Titania","TitaniaValley","Togami Mansion","TouhouCourt","Tower","Town","Town Night","Tr0LLc0urt","TrainstationAA","TresBienTT","TrollCourt","Twotorial Village","Twotorial Village Night","VC 1","VLR","VLR2.2","VLR2.3","VLR2","VLR3","VitaminSquareTT","WEN","WaitingRoomAAI","WestAAI","WinterPalaceAAI2","WitchTrialCourt","WitchtrialCourtHQ","Witchwood","WorldEmulator","Wreckage (SG)","Wrightagency","Xmas","Zetta","animation","apollojustice","background","basement","birthday","blackout","chess","chessw1","chessw2","chessw3","chessw4","christmas","circus","classtrial","cofe","courthouseofgods","cruise","cruise court","custom","custom1","custom2","custom3","custom4","custom5","custom6","custom7","custom8","custom9","custom10","daimoncourt","default - Kopie","default","default_christmas","defendantlobby","defendantlobbyapollo","detentioncenter","doppler","dr1stfloor","dr1stfloordorms","dr1stfloorhalls","dr2ndfloor","dr3rdfloor","druq1stfloordorms","druq2ndfloordorms","dualdestinies","dualdestiniesOG","dungeon","endless","englishcourt","forest","gs4","gs4night","gs5","hd","inn","investigationbando","investigationsembassylobby","investigationsgourdlake","investigationsmilesoffice","investigationsplaneair","investigationsroyalcourt","investigationstvroom","investigationswestern","investigationswitchtown","island 1(uranus zone)","lcourt","legacy","lobbyDGS-ENG","lobbyDGS-JAP","lobbyPLvsAA-ENG","lobbyPLvsAA-LAB","lobbySOJ","magatama","magatama1","magatama2","magatama3","magatama4","magatama5","marblefade","matrix","matrixall","matrixangry","matrixangrysad","matrixangrysurprised","matrixhappy","matrixhappyangry","matrixhappysad","matrixhappysurprised","matrixsad","matrixsadsurprised","matrixsurprise","mlp","newcourt","night (no lights)","plvsaa","policestation","prisonvestigation","sdr2classtrial","sky","sshope2ndfloorday(incident)","sshope2ndfloorday","sshope2ndfloornight(incident)","sshope2ndfloornight","sshopeday(incident)","sshopeday","sshopenight(incident)","sshopenight","thief","thiefbash","thiefpoint","thiefpoisoning","thiefprints","thiefstab","thiefsteal","turnaboutstorm - Kopie","turnaboutstorm","vocalcourt","witchtrialcourt"]},function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var o=function(){function e(e,n){for(var t=0;t<n.length;t++){var o=n[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(n,t,o){return t&&e(n.prototype,t),o&&e(n,o),n}}();n.onOOCEnter=S,n.onEnter=I,n.musiclist_click=v,n.area_click=J,n.changeMusicVolume=b,n.changeSFXVolume=T,n.changeBlipVolume=k,n.changeCharacter=E,n.imgError=w,n.demoError=B,n.ReconnectButton=P,n.RetryButton=L,n.pickChar=x,n.pickEmotion=R,n.pickEvidence=O,n.addEvidence=H,n.editEvidence=N,n.deleteEvidence=U,n.cancelEvidence=V,n.getIndexFromSelect=W,n.updateEvidenceIcon=j,n.updateActionCommands=K,n.changeBackgroundOOC=z,n.changeRoleOOC=Z,n.randomCharacterOOC=q,n.callMod=Q,n.initWT=X,n.initCE=Y,n.addHPD=ee,n.redHPD=ne,n.addHPP=te,n.redHPP=oe,n.updateBackgroundPreview=ae,n.toggleEffect=se,n.toggleFlip=ie,n.togglePresent=pe,n.toggleMenu=ge,n.toggleShout=re;var a=i(t(1)),s=i(t(0));function i(e){return e&&e.__esModule?e:{default:e}}function p(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}var g={};location.search.substr(1).split("&").forEach(function(e){g[e.split("=")[0]]=e.split("=")[1]});var r=g.ip,c=g.mode,l=g.asset||"http://s3.wasabisys.com/webao/base/",d=l+"sounds/music/",u=!1;/Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Opera Mini/i.test(navigator.userAgent)&&(u=!0);var A=0,m=1,h=0,C=new Date(0),D=function(){function e(n){var t=this;p(this,e),this.serv=new WebSocket("ws://"+n),this.serv.onopen=function(e){return t.onOpen(e)},this.serv.onclose=function(e){return t.onClose(e)},this.serv.onmessage=function(e){return t.onMessage(e)},this.serv.onerror=function(e){return t.onError(e)},this.flip=!1,this.presentable=!1,this.hp=[0,0],this.playerID=1,this.charID=-1,this.testimonyID=0,this.chars=[],this.emotes=[],this.evidences=[],this.resources={holdit:{src:"misc/holdit.gif",duration:720},objection:{src:"misc/objection.gif",duration:720},takethat:{src:"misc/takethat.gif",duration:840},witnesstestimony:{src:"misc/witnesstestimony.gif",duration:1560,sfx:"sounds/general/sfx-testimony.wav"},crossexamination:{src:"misc/crossexamination.gif",duration:1600,sfx:"sounds/general/sfx-testimony2.wav"}},this.selectedEmote=-1,this.selectedEvidence=0,this.checkUpdater=null,this.musicList=Object(),this.handlers={MS:function(e){return t.handleMS(e)},CT:function(e){return t.handleCT(e)},MC:function(e){return t.handleMC(e)},RMC:function(e){return t.handleRMC(e)},CI:function(e){return t.handleCI(e)},SC:function(e){return t.handleSC(e)},EI:function(e){return t.handleEI(e)},LE:function(e){return t.handleLE(e)},EM:function(e){return t.handleEM(e)},SM:function(e){return t.handleSM(e)},music:function(e){return t.handlemusic(e)},DONE:function(e){return t.handleDONE(e)},BN:function(e){return t.handleBN(e)},NBG:function(e){return t.handleNBG(e)},HP:function(e){return t.handleHP(e)},RT:function(e){return t.handleRT(e)},ZZ:function(e){return t.handleZZ(e)},ID:function(e){return t.handleID(e)},PN:function(e){return t.handlePN(e)},SI:function(e){return t.handleSI(e)},CharsCheck:function(e){return t.handleCharsCheck(e)},PV:function(e){return t.handlePV(e)},CHECK:function(e){}},this._lastTimeICReceived=new Date(0)}return o(e,[{key:"me",value:function(){return this.chars[this.charID]}},{key:"myEmote",value:function(){return this.emotes[this.selectedEmote]}},{key:"myEvidence",value:function(){return this.presentable?this.selectedEvidence:0}},{key:"sendOOC",value:function(e){this.serv.send("CT#"+ce(de(document.getElementById("OOC_name").value))+"#"+ce(de(e))+"#%")}},{key:"sendIC",value:function(e,n,t,o,a,s,i,p,g,r,c,l,d){this.serv.send("MS#chat#"+e+"#"+n+"#"+t+"#"+ce(de(o))+"#"+a+"#"+s+"#"+i+"#"+this.charID+"#"+p+"#"+h+"#"+r+"#"+c+"#"+l+"#"+d+"#%")}},{key:"sendPE",value:function(e,n,t){this.serv.send("PE#"+ce(de(e))+"#"+ce(de(n))+"#"+t+"#%")}},{key:"sendEE",value:function(e,n,t,o){this.serv.send("EE#"+e+"#"+ce(de(n))+"#"+ce(de(t))+"#"+o+"#%")}},{key:"sendDE",value:function(e){this.serv.send("DE#"+e+"#%")}},{key:"sendHP",value:function(e,n){this.serv.send("HP#"+e+"#"+n+"#%")}},{key:"sendZZ",value:function(e){this.serv.send("ZZ#"+e+"#%")}},{key:"sendRT",value:function(e){"jud"==this.chars[this.charID].side&&this.serv.send("RT#"+e+"#%")}},{key:"sendMusicChange",value:function(e){this.serv.send("MC#"+e+"#"+this.charID+"#%")}},{key:"sendLeaveRoom",value:function(){this.serv.send("FC#%")}},{key:"joinServer",value:function(){var e=this;this.serv.send("HI#"+navigator.userAgent.hashCode()+"#%"),this.serv.send("ID#webAO#2.3#%"),this.checkUpdater=setInterval(function(){return e.sendCheck()},5e3)}},{key:"loadResources",value:function(){document.getElementById("OOC_name").value="web"+this.playerID;var e=document.getElementById("evi_select");e.add(new Option("Custom",0)),s.default.forEach(function(n){e.add(new Option(n))});var n=document.getElementById("bg_select");n.add(new Option("Custom",0)),a.default.forEach(function(e){n.add(new Option(e))});for(var t=["holdit","objection","takethat"],o=0;o<t.length;o++){G(l+this.resources[t[o]].src.toLowerCase(),this.callbackLoadImageResources,t[o])}for(var i=["witnesstestimony","crossexamination"],p=0;p<i.length;p++){G(l+"themes/default/"+i[p]+".gif",this.callbackLoadImageResources,i[p]),G(l+this.resources[i[p]].sfx.toLowerCase(),this.callbackLoadSFXResources,i[p])}}},{key:"callbackLoadImageResources",value:function(e,n,t){e&&(Ae.resources[n].src=t,me.getAnimLength(t,Ae.callbackGetResourceLength,n))}},{key:"callbackGetResourceLength",value:function(e,n){Ae.resources[n].duration=e}},{key:"callbackLoadSFXResources",value:function(e,n,t){e&&(Ae.resources[n].sfx=t)}},{key:"initialObservBBCode",value:function(){var e=document.getElementById("client_inner_chat");new MutationObserver(function(e){e.forEach(function(e){var n=e.addedNodes;null!==n&&n.forEach(function(e){"C"==e.tagName?e.style.color=e.getAttribute("a"):"M"==e.tagName&&(e.hasAttribute("a")?e.style.backgroundColor=e.getAttribute("a"):(e.style.backgroundColor="yellow",e.style.color="black"))})})}).observe(e,{attributes:!0,childList:!0})}},{key:"sendCharacter",value:function(e){this.serv.send("CC#"+this.playerID+"#"+e+"#web#%")}},{key:"sendMusic",value:function(e){this.serv.send("MC#"+e)}},{key:"sendCheck",value:function(){this.serv.send("CH#"+this.charID+"#%")}},{key:"onOpen",value:function(e){"watch"===c?(document.getElementById("client_loading").style.display="none",document.getElementById("client_charselect").style.display="none"):Ae.joinServer()}},{key:"onClose",value:function(e){console.error("The connection was closed: "+e.reason+" ("+e.code+")"),1001!==e.code&&(document.getElementById("client_error").style.display="block",document.getElementById("error_id").textContent=e.code,this.cleanup())}},{key:"onMessage",value:function(e){var n=e.data;console.debug(n);var t=n.split("%")[0].split("#"),o=t[0],a=this.handlers[o];void 0!==a?a(t):console.warn("Invalid packet header "+o)}},{key:"onError",value:function(e){console.error("A network error occurred: "+e.reason+" ("+e.code+")"),document.getElementById("client_error").style.display="block",document.getElementById("error_id").textContent=e.code,this.cleanup()}},{key:"cleanup",value:function(){try{this.serv.close(1001)}catch(e){}clearInterval(this.checkUpdater)}},{key:"prepChat",value:function(e){return le(ue(e)).replace(/\\n/g,"<br>").replace(/\[(\/?)b\]/g,"<$1b>").replace(/\[(\/?)i\]/g,"<$1i>").replace(/\[(\/?)s\]/g,"<$1del>").replace(/\[(\/?)u\]/g,"<$1u>").replace(/\[(\/?)sub\]/g,"<$1sub>").replace(/\[(\/?)sup\]/g,"<$1sup>").replace(/\[m=([#a-zA-Z0-9]+)\]/g,'<m a="$1">').replace(/\[(\/?)m\]/g,"<$1m>").replace(/\[c=?([#a-zA-Z0-9]+)\]/g,'<c a="$1">').replace(/\[\/c\]/g,"</c>")}},{key:"handleMS",value:function(e){if(e[4]!=me.chatmsg.content){document.getElementById("client_inner_chat").innerHTML="";for(var n={character:-1,preanim:escape(e[2]),nameplate:e[3],name:e[3],speaking:"(b)"+escape(e[4]),silent:"(a)"+escape(e[4]),content:this.prepChat(e[5]),side:e[6],sound:escape(e[7]),type:e[8],snddelay:e[10],objection:e[11],evidence:e[12],flip:e[13],flash:e[14],color:e[15],isnew:!0},t=0;t<this.chars.length;t++)if(this.chars[t].name==e[3]){n.character=t;break}n.character==this.charID&&function(){document.getElementById("client_inputbox").value="",A&&(document.getElementById("button_effect_"+A).className="client_button",A=0);h&&(document.getElementById("button_"+h).className="client_button",h=0)}(),me.say(n)}}},{key:"handleCT",value:function(e){var n=document.getElementById("client_ooclog");n.innerHTML+=ue(le(e[1]))+": "+ue(le(e[2]))+"\r\n",n.scrollTop>n.scrollHeight-600&&(n.scrollTop=n.scrollHeight)}},{key:"handleMC",value:function(e){var n=me.music;(n.pause(),n.src=d+e[1].toLowerCase(),n.play(),e[2]>=0)?F(this.chars[e[2]].name+" changed music to "+e[1]):F("The music was changed to "+e[1])}},{key:"handleRMC",value:function(e){me.music.pause(),me.music=new Audio(this.musicList[e[1]]);var n=me.music;n.totime=e[1],n.offset=(new Date).getTime()/1e3,n.addEventListener("loadedmetadata",function(){n.currentTime+=parseFloat(n.totime+((new Date).getTime()/1e3-n.offset)).toFixed(3),n.play()},!1)}},{key:"handleCI",value:function(e){document.getElementById("client_loadingtext").innerHTML="Loading Character "+e[1],this.serv.send("AN#"+(e[1]/10+1)+"#%");for(var n=2;n<e.length-1;n++)if(n%2==0){var t=e[n].split("&");this.chars[e[n-1]]={name:t[0],desc:t[1],evidence:t[3],icon:l+"characters/"+escape(t[0].toLowerCase())+"/char_icon.png"}}}},{key:"handleSC",value:function(e){document.getElementById("client_loadingtext").innerHTML="Loading Characters";for(var n=1;n<e.length-1;n++){var t=e[n].split("&");this.chars[n-1]={name:t[0],desc:t[1],evidence:t[3],icon:l+"characters/"+escape(t[0].toLowerCase())+"/char_icon.png"}}this.serv.send("RM#%")}},{key:"handleEI",value:function(e){document.getElementById("client_loadingtext").innerHTML="Loading Evidence "+e[1],this.serv.send("RM#%")}},{key:"handleLE",value:function(e){this.evidences=[];for(var n=1;n<e.length-1;n++){var t=e[n].split("&");this.evidences[n-1]={name:ue(le(t[0])),desc:ue(le(t[1])),filename:escape(t[2]),icon:l+"evidence/"+escape(t[2].toLowerCase())}}var o=document.getElementById("evidences");o.innerHTML="";for(var a=1;a<=this.evidences.length;a++)o.innerHTML+='<img src="'+this.evidences[a-1].icon+'" \n\t\t\t\tid="evi_'+a+'" \n\t\t\t\talt="'+this.evidences[a-1].name+'"\n\t\t\t\tclass="client_button"\n\t\t\t\tonclick="pickEvidence('+a+')">'}},{key:"handleEM",value:function(e){document.getElementById("client_loadingtext").innerHTML="Loading Music "+e[1],this.serv.send("AM#"+(e[1]/10+1)+"#%");for(var n=document.getElementById("client_musiclist"),t=2;t<e.length-1;t++)if(t%2==0){var o=document.createElement("OPTION");o.text=e[t],n.options.add(o)}}},{key:"handleSM",value:function(e){document.getElementById("client_loadingtext").innerHTML="Loading Music ";for(var n=document.getElementById("client_musiclist"),t=!1,o=1;o<e.length-1;o++)if(/\.(?:wav|mp3|mp4|ogg|opus)$/i.test(e[o])&&!t&&(t=!0),t){var a=document.createElement("OPTION");a.text=e[o],n.options.add(a)}else{var s=document.createElement("SPAN");s.className="location-box",s.textContent=e[o],s.onclick=function(){J(this)},document.getElementById("areas").appendChild(s)}var i=document.getElementById("areas");if(i.lastChild.textContent.startsWith("=")){var p=document.createElement("OPTION");p.text=i.lastChild.textContent,n.insertBefore(p,n.firstChild),i.removeChild(i.lastChild)}this.serv.send("RD#%")}},{key:"handlemusic",value:function(e){for(var n=0;n<e.length/2;n++)this.musicList[e[2*n]]=e[2*n+1]}},{key:"handleDONE",value:function(e){document.getElementById("client_loading").style.display="none",document.getElementById("client_charselect").style.display="block"}},{key:"handleBN",value:function(e){me.bgname=escape(e[1]);var n=W("bg_select",escape(e[1]));document.getElementById("bg_select").selectedIndex=n,ae(),0==n&&(document.getElementById("bg_filename").value=e[1]),document.getElementById("bg_preview").src=l+"background/"+escape(e[1].toLowerCase())+"/defenseempty.png",-1==this.charID?M("jud"):M(this.chars[this.charID].side)}},{key:"handleNBG",value:function(e){}},{key:"handleHP",value:function(e){var n=10*e[2];1==e[1]?(this.hp[0]=e[2],$("#client_defense_hp > .health-bar").animate({width:n+"%"},500)):(this.hp[1]=e[2],$("#client_prosecutor_hp > .health-bar").animate({width:n+"%"},500))}},{key:"handleRT",value:function(e){"testimony1"==e[1]?this.testimonyID=1:this.testimonyID=2,me.initTestimonyUpdater()}},{key:"handleZZ",value:function(e){var n=document.getElementById("client_ooclog");n.innerHTML+="$Alert: "+ue(le(e[1]))+"\r\n",n.scrollTop>n.scrollHeight-60&&(n.scrollTop=n.scrollHeight)}},{key:"handleID",value:function(e){this.playerID=e[1]}},{key:"handlePN",value:function(e){this.serv.send("askchaa#%")}},{key:"handleSI",value:function(e){u?this.serv.send("askchar2#%"):this.serv.send("RC#%")}},{key:"handleCharsCheck",value:function(e){document.getElementById("client_chartable").innerHTML="";for(var n=void 0,t=0;t<this.chars.length;t++){t%8==0&&(n=document.createElement("TR"));var o=document.createElement("TD"),a="",s=this.chars[t].icon;"-1"==e[t+1]&&(a=" dark"),o.innerHTML="<img class='demothing"+a+"' id='demo_"+t+"' src='"+s+"' alt='"+this.chars[t].name+"' onclick='pickChar("+t+")' onerror='demoError(this);'>",n.appendChild(o),t%8==0&&document.getElementById("client_chartable").appendChild(n)}}},{key:"handlePV",value:function(e){this.charID=e[3],document.getElementById("client_charselect").style.display="none",document.getElementById("client_inputbox").style.display="";var n=this.me(),t=this.emotes,o=document.getElementById("client_emo");o.innerHTML="",o.style.display="";var a=new XMLHttpRequest;a.withCredentials=!1,a.open("GET",l+"characters/"+escape(this.me().name.toLowerCase())+"/char.ini",!0),a.responseType="text",a.onload=function(e){if(200==this.status){var a=this.responseText,s=f.parse(a);n.side=s.Options.side,K(n.side);for(var i=1;i<=s.Emotions.number;i++){var p=s.Emotions[i].split("#"),g="0",r="0";void 0!==s.SoundN&&(g=s.SoundN[i]),void 0!==s.SoundT&&(r=s.SoundT[i]),t[i]={desc:p[0].toLowerCase(),speaking:p[1].toLowerCase(),silent:p[2].toLowerCase(),zoom:p[3],sfx:g.toLowerCase(),sfxdelay:r,button_off:l+"characters/"+escape(n.name).toLowerCase()+"/emotions/button"+i+"_off.png",button_on:l+"characters/"+escape(n.name).toLowerCase()+"/emotions/button"+i+"_on.png"},o.innerHTML+="<img src="+t[i].button_off+'\n\t\t\t\t\t\t id="emo_'+i+'"\n\t\t\t\t\t\t alt="'+t[i].desc+'"\n\t\t\t\t\t\t class="client_button"\n\t\t\t\t\t\t onclick="pickEmotion('+i+')">'}R(1)}},a.send()}}]),e}(),y=function(){function e(){p(this,e),this.textnow="",this.chatmsg={isnew:!1,content:"",objection:"0",sound:"",startpreanim:!1,startspeaking:!1,side:null,color:"0",snddelay:0,preanimdelay:0},this.blip=new Audio(l+"sounds/general/sfx-blipmale.wav"),this.blip.volume=.5,this.blipChannels=new Array(6);for(var n=0;n<this.blipChannels.length;n++)this.blipChannels[n]=new Audio(l+"sounds/general/sfx-blipmale.wav"),this.blipChannels[n].volume=.5;this.currentBlipChannel=0,this.sfxaudio=new Audio(l+"sounds/general/sfx-blipmale.wav"),this.sfxplayed=0,this.music=new Audio,this.music.play(),this.updater=null,this.testimonyUpdater=null,this.bgname="gs4",this.testimonyTimer=0,this.shoutTimer=0,this.textTimer=0,this._animating=!1}return o(e,[{key:"isAnimating",value:function(){return this._animating}},{key:"setBlipVolume",value:function(e){for(var n=0;n<this.blipChannels.length;n++)this.blipChannels[n].volume=e}},{key:"bgFolder",value:function(){return l+"background/"+this.bgname.toLowerCase()+"/"}},{key:"say",value:function(e){this.chatmsg=e,F(e.content,e.nameplate),M(e.side),this.textnow="",this.sfxplayed=0,this.textTimer=0,this._animating=!0,clearTimeout(this.updater),"-"!=e.preanim?e.preanimdelay=this.getAnimLength(l+"characters/"+escape(e.name.toLowerCase())+"/"+e.preanim.toLowerCase()+".gif",this.initUpdater):this.initUpdater(0)}},{key:"initUpdater",value:function(e){me.chatmsg.preanimdelay=parseInt(e),me.updater=setTimeout(function(){return me.updateText()},60)}},{key:"initTestimonyUpdater",value:function(){var e=this;if(Ae.testimonyID>0){var n="";1==Ae.testimonyID?n="witnesstestimony":2==Ae.testimonyID&&(n="crossexamination"),new Audio(Ae.resources[n].sfx).play(),this.testimonyTimer=0;var t=document.getElementById("client_testimony");t.src=Ae.resources[n].src,t.style.display="",this.testimonyUpdater=setTimeout(function(){return e.updateTestimony()},60)}}},{key:"getAnimLength",value:function(e,n,t){var o=new XMLHttpRequest;o.open("GET",e,!0),o.responseType="arraybuffer",o.addEventListener("load",function(){var e=gify.getInfo(o.response);console.log(e.duration),n(e.duration,t)}),o.send()}},{key:"updateTestimony",value:function(){var e=this;this.testimonyTimer=this.testimonyTimer+60,1==Ae.testimonyID?this.testimonyTimer>=Ae.resources.witnesstestimony.duration?this.disposeTestimony():this.testimonyUpdater=setTimeout(function(){return e.updateTestimony()},60):2==Ae.testimonyID?this.testimonyTimer>=Ae.resources.crossexamination.duration?this.disposeTestimony():this.testimonyUpdater=setTimeout(function(){return e.updateTestimony()},60):this.disposeTestimony()}},{key:"disposeTestimony",value:function(){Ae.testimonyID=0,this.testimonyTimer=0,document.getElementById("client_testimony").style.display="none",clearTimeout(this.testimonyUpdater)}},{key:"updateText",value:function(){var e=this,n=document.getElementById("client_name"),t=document.getElementById("client_chat"),o=document.getElementById("client_char"),a=document.getElementById("client_evi"),s=document.getElementById("client_background"),i=document.getElementById("client_shout"),p=document.getElementById("client_inner_chat");if(1==this.chatmsg.flip?o.style.transform="scaleX(-1)":o.style.transform="scaleX(1)",this._animating&&(this.updater=setTimeout(function(){return e.updateText()},60)),this.chatmsg.isnew){s.style.backgroundColor="transparent",n.style.display="none",t.style.display="none",a.style.opacity="0",a.style.height="0%";var g={1:"holdit",2:"objection",3:"takethat"}[this.chatmsg.objection];void 0!==g?(i.src=Ae.resources[g].src,new Audio(l+"characters/"+this.chatmsg.name.toLowerCase()+"/"+g+".wav").play(),this.shoutTimer=850):this.shoutTimer=0,this.chatmsg.isnew=!1,this.chatmsg.startpreanim=!0}if(this.textTimer>=this.shoutTimer&&this.chatmsg.startpreanim)2==this.chatmsg.flash?(this.sfxaudio.pause(),this.sfxplayed=1,this.sfxaudio.src=l+"sounds/general/sfx-stab.wav",this.sfxaudio.play(),$("#client_gamewindow").effect("shake",{direction:"up"})):1==this.chatmsg.flash&&(s.style.backgroundColor="white",this.sfxaudio.pause(),this.sfxplayed=1,this.sfxaudio.src=l+"sounds/general/sfx-realization.wav",this.sfxaudio.play(),$("#client_gamewindow").effect("pulsate")),this.chatmsg.preanimdelay>0&&(i.src="misc/placeholder.gif",M(this.chatmsg.side),o.src=l+"characters/"+escape(this.chatmsg.name.toLowerCase())+"/"+this.chatmsg.preanim.toLowerCase()+".gif"),this.chatmsg.startpreanim=!1,this.chatmsg.startspeaking=!0;else if(this.textTimer>=this.shoutTimer+this.chatmsg.preanimdelay&&!this.chatmsg.startpreanim)if(this.chatmsg.startspeaking){for(this.chatmsg.evidence>0&&(a.style.backgroundImage="url('"+Ae.evidences[this.chatmsg.evidence-1].icon+"')","def"==this.chatmsg.side?(a.style.right="1.5em",a.style.left="initial",$("#client_evi").animate({height:"30%",opacity:1},250)):(a.style.right="initial",a.style.left="1.5em",$("#client_evi").animate({height:"30%",opacity:1},250))),n.style.display="block",n.style.fontSize=.7*n.offsetHeight+"px";n.hasChildNodes();)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(this.chatmsg.nameplate)),t.style.display="block",t.style.fontSize=.25*t.offsetHeight+"px";p.style.color={0:"#ffffff",1:"#00ff00",2:"#ff0000",3:"#ffaa00",4:"#0000ff",5:"#ffff00",6:"#aa00aa"}[this.chatmsg.color]||"#ffffff",this.chatmsg.startspeaking=!1,0==this.chatmsg.preanimdelay&&(i.src="misc/placeholder.gif",M(this.chatmsg.side)),o.src=l+"characters/"+escape(this.chatmsg.name.toLowerCase())+"/"+this.chatmsg.speaking.toLowerCase()+".gif",this.textnow==this.chatmsg.content&&(o.src=l+"characters/"+escape(this.chatmsg.name.toLowerCase())+"/"+this.chatmsg.silent.toLowerCase()+".gif",this._animating=!1,clearTimeout(this.updater))}else if(this.textnow!=this.chatmsg.content){for(" "!=this.chatmsg.content.charAt(this.textnow.length)&&(this.blipChannels[this.currentBlipChannel].play(),this.currentBlipChannel++,this.currentBlipChannel%=this.blipChannels.length),this.textnow=this.chatmsg.content.substring(0,this.textnow.length+1);p.hasChildNodes();)p.removeChild(p.firstChild);p.appendChild(document.createTextNode(this.textnow)),this.textnow==this.chatmsg.content&&(this.textTimer=0,this._animating=!1,o.src=l+"characters/"+escape(this.chatmsg.name.toLowerCase())+"/"+this.chatmsg.silent.toLowerCase()+".gif",clearTimeout(this.updater))}!this.sfxplayed&&this.chatmsg.snddelay+this.shoutTimer>=this.textTimer&&(this.sfxaudio.pause(),this.sfxplayed=1,"0"!=this.chatmsg.sound&&"1"!=this.chatmsg.sound&&(this.sfxaudio.src=l+"sounds/general/"+escape(this.chatmsg.sound.toLowerCase())+".wav",this.sfxaudio.play())),this.textTimer=this.textTimer+60}}]),e}(),f=function(){function e(){p(this,e)}return o(e,null,[{key:"parse",value:function(e){var n={section:/^\s*\[\s*([^\]]*)\s*\]\s*$/,param:/^\s*([\w.\-_]+)\s*=\s*(.*?)\s*$/,comment:/^\s*;.*$/},t={},o=null;return e.split(/\r\n|\r|\n/).forEach(function(e){if(!n.comment.test(e)&&0!=e.length)if(n.param.test(e)){var a=e.match(n.param);o?t[o][a[1]]=a[2]:t[a[1]]=a[2]}else if(n.section.test(e)){var s=e.match(n.section);t[s[1]]={},o=s[1]}}),t}}]),e}();function S(e){13==e.keyCode&&(Ae.sendOOC(document.getElementById("client_oocinputbox").value),document.getElementById("client_oocinputbox").value="")}function I(e){if(13==e.keyCode){var n=Ae.me(),t=Ae.myEmote(),o=Ae.myEvidence(),a=Ae.flip?1:0,s=document.getElementById("textcolor").value,i="0",p="0";document.getElementById("sendsfx").checked&&(i=t.sfx,p=t.sfxdelay),Ae.sendIC(t.speaking,n.name,t.silent,document.getElementById("client_inputbox").value,n.side,i,t.zoom,p,h,o,a,A,s)}}function v(e){var n=document.getElementById("client_musiclist").value;Ae.sendMusicChange(n)}function J(e){var n=e.textContent;Ae.sendMusicChange(n);var t=document.createElement("div");t.className="hrtext",t.textContent="switched to "+e.textContent,document.getElementById("client_log").appendChild(t)}function b(){me.music.volume=document.getElementById("client_mvolume").value/100}function T(){me.sfxaudio.volume=document.getElementById("client_svolume").value/100}function k(){me.setBlipVolume(document.getElementById("client_bvolume").value/100)}function E(e){Ae.sendLeaveRoom(),document.getElementById("client_charselect").style.display="block",document.getElementById("client_emo").innerHTML=""}function w(e){return e.onerror="",e.src="misc/placeholder.gif",!0}function B(e){return e.onerror="",e.src="/misc/placeholder.png",!0}function G(e,n,t){var o=new XMLHttpRequest;o.onreadystatechange=function(){4==this.readyState&&200==this.status?n(!0,t,e):n(!1,t,e)},o.open("GET",e,!0),o.send()}function M(e){var n=void 0,t=me.bgFolder();switch(document.getElementById("client_fg").style.display="none",document.getElementById("client_bench").style.display="none",e){case"def":document.getElementById("client_court").src=t+"defenseempty.png",document.getElementById("client_bench").style.display="block",G(t+"defensedesk.png",_,e),n="defense";break;case"pro":document.getElementById("client_court").src=t+"prosecutorempty.png",document.getElementById("client_bench").style.display="block",G(t+"defensedesk.png",_,e),n="prosecution";break;case"hld":document.getElementById("client_court").src=t+"helperstand.png",n="defense";break;case"hlp":document.getElementById("client_court").src=t+"prohelperstand.png",n="prosecution";break;case"wit":document.getElementById("client_court").src=t+"witnessempty.png",document.getElementById("client_bench").style.display="block",document.getElementById("client_bench").src=t+"estrado.png",n="prosecution";break;case"jud":document.getElementById("client_court").src=t+"judgestand.png",n="prosecution"}5==me.chatmsg.type&&(document.getElementById("client_bench").style.display="none",document.getElementById("client_court").src=l+"themes/default/"+n+"_speedlines.gif")}function _(e,n){var t=me.bgFolder();document.getElementById("client_bench").src="def"==n?e?t+"defensedesk.png":t+"bancodefensa.png":e?t+"prosecutiondesk.png":t+"bancoacusacion.png"}function P(){Ae.cleanup(),(Ae=new D(r))&&(c="join",document.getElementById("client_error").style.display="none")}function L(){Ae.joinServer()}function F(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new Date,o=document.createElement("p"),a=document.createElement("span");if(a.id="iclog_name",a.appendChild(document.createTextNode(n)),o.appendChild(a),o.appendChild(document.createTextNode(e)),C.getMinutes()!==t.getMinutes()){var s=document.createElement("span");s.id="iclog_time",s.innerText=t.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit"}),o.appendChild(s)}var i=document.getElementById("client_log");i.appendChild(o),i.scrollTop>i.scrollHeight-800&&(i.scrollTop=i.scrollHeight),C=new Date}function x(e){e<1e3?Ae.sendCharacter(e):(document.getElementById("client_charselect").style.display="none",document.getElementById("client_inputbox").style.display="none",document.getElementById("client_emo").style.display="none")}function R(e){-1!=Ae.selectedEmote&&(document.getElementById("emo_"+Ae.selectedEmote).src=Ae.myEmote().button_off),Ae.selectedEmote=e,document.getElementById("emo_"+e).src=Ae.myEmote().button_on}function O(e){if(Ae.selectedEvidence!==e){Ae.selectedEvidence>0&&(document.getElementById("evi_"+Ae.selectedEvidence).className="client_button"),document.getElementById("evi_"+e).className="client_button dark",Ae.selectedEvidence=e,document.getElementById("evi_name").value=Ae.evidences[e-1].name,document.getElementById("evi_desc").value=Ae.evidences[e-1].desc;var n=W("evi_select",Ae.evidences[e-1].filename);document.getElementById("evi_select").selectedIndex=n,0==n&&(document.getElementById("evi_filename").value=Ae.evidences[e-1].filename),j(),document.getElementById("evi_add").className="client_button hover_button inactive",document.getElementById("evi_edit").className="client_button hover_button",document.getElementById("evi_cancel").className="client_button hover_button",document.getElementById("evi_del").className="client_button hover_button"}else V()}function H(){var e=document.getElementById("evi_select");Ae.sendPE(document.getElementById("evi_name").value,document.getElementById("evi_desc").value,0==e.selectedIndex?document.getElementById("evi_filename").value:e.options[e.selectedIndex].text),V()}function N(){var e=document.getElementById("evi_select"),n=parseInt(Ae.selectedEvidence)-1;Ae.sendEE(n,document.getElementById("evi_name").value,document.getElementById("evi_desc").value,0==e.selectedIndex?document.getElementById("evi_filename").value:e.options[e.selectedIndex].text),V()}function U(){var e=parseInt(Ae.selectedEvidence)-1;Ae.sendDE(e),V()}function V(){Ae.selectedEvidence>0&&(document.getElementById("evi_"+Ae.selectedEvidence).className="client_button"),Ae.selectedEvidence=0,document.getElementById("evi_select").selectedIndex=0,j(),document.getElementById("evi_filename").value="",document.getElementById("evi_name").value="",document.getElementById("evi_desc").value="",document.getElementById("evi_icon").style.backgroundImage="url('misc/empty.png')",document.getElementById("evi_add").className="client_button hover_button",document.getElementById("evi_edit").className="client_button hover_button inactive",document.getElementById("evi_cancel").className="client_button hover_button inactive",document.getElementById("evi_del").className="client_button hover_button inactive"}function W(e,n){for(var t=document.getElementById(e),o=1;o<t.length;++o)if(t.options[o].value==n)return o;return 0}function j(){var e=document.getElementById("evi_select"),n=document.getElementById("evi_filename"),t=document.getElementById("evi_icon");0===e.selectedIndex?(n.style.display="initial",t.style.backgroundImage="url("+l+"evidence/"+n.value.toLowerCase()+")"):(n.style.display="none",t.style.backgroundImage="url("+l+"evidence/"+e.value.toLowerCase()+")")}function K(e){"jud"==e?(document.getElementById("judge_action").style.display="inline-table",document.getElementById("no_action").style.display="none"):(document.getElementById("no_action").style.display="inline-table",document.getElementById("judge_action").style.display="none");for(var n=0,t=document.getElementById("role_select").options;n<t.length;n++)if(e==t[n].value)return void(t.selectedIndex=n)}function z(){var e="",n=document.getElementById("bg_select"),t=document.getElementById("bg_command").value;e=0==n.selectedIndex?document.getElementById("bg_filename").value:n.value,Ae.sendOOC("/"+t.replace("$1",e))}function Z(){var e=document.getElementById("role_select"),n=document.getElementById("role_command").value;Ae.sendOOC("/"+n.replace("$1",e.value)),K(e.value)}function q(){Ae.sendOOC("/"+document.getElementById("randomchar_command").value)}function Q(){$("#callmod_dialog").dialog("open")}function X(){Ae.sendRT("testimony1")}function Y(){Ae.sendRT("testimony2")}function ee(){Ae.sendHP(1,String(parseInt(Ae.hp[0])+1))}function ne(){Ae.sendHP(1,String(parseInt(Ae.hp[0])-1))}function te(){Ae.sendHP(2,String(parseInt(Ae.hp[1])+1))}function oe(){Ae.sendHP(2,String(parseInt(Ae.hp[1])-1))}function ae(){var e=document.getElementById("bg_select"),n=document.getElementById("bg_filename"),t=document.getElementById("bg_preview");0==e.selectedIndex?(n.style.display="initial",t.src=l+"background/"+n.value.toLowerCase()+"/defenseempty.png"):(n.style.display="none",t.src=l+"background/"+e.value.toLowerCase()+"/defenseempty.png")}function se(e){e==A?(document.getElementById("button_effect_"+e).className="client_button",A=0):(document.getElementById("button_effect_"+e).className="client_button dark",A&&(document.getElementById("button_effect_"+A).className="client_button"),A=e)}function ie(){Ae.flip?document.getElementById("button_flip").className="client_button":document.getElementById("button_flip").className="client_button dark",Ae.flip=!Ae.flip}function pe(){Ae.presentable?document.getElementById("button_present").className="client_button":document.getElementById("button_present").className="client_button dark",Ae.presentable=!Ae.presentable}function ge(e){e!=m&&(document.getElementById("menu_"+e).className="menu_icon active",document.getElementById("content_"+e).className="menu_content active",document.getElementById("menu_"+m).className="menu_icon",document.getElementById("content_"+m).className="menu_content",m=e)}function re(e){e==h?(document.getElementById("button_"+e).className="client_button",h=0):(document.getElementById("button_"+e).className="client_button dark",h&&(document.getElementById("button_"+h).className="client_button"),h=e)}function ce(e){return e.replace(/#/g,"<pound>").replace(/&/g,"<and>").replace(/%/g,"<percent>").replace(/\$/g,"<dollar>")}function le(e){return e.replace(/<pound>/g,"#").replace(/<and>/g,"&").replace(/<percent>/g,"%").replace(/<dollar>/g,"$")}function de(e){var n=document.getElementById("client_encoding").value;if("unicode"==n)return e.replace(/[^\0-~]/g,function(e){return"\\u"+("000"+e.charCodeAt().toString(16)).slice(-4)});if("utf16"==n){for(var t=new ArrayBuffer(2*e.length),o=new Uint16Array(t),a=0,s=e.length;a<s;a++)o[a]=e.charCodeAt(a);return String(o)}return e}function ue(e){var n=document.getElementById("client_decoding").value;return"unicode"==n?e.replace(/\\u([\d\w]{1,})/gi,function(e,n){return String.fromCharCode(parseInt(n,16))}):"utf16"==n?String.fromCharCode.apply(null,new Uint16Array(e.split(","))):e}window.onOOCEnter=S,window.onEnter=I,window.musiclist_click=v,window.area_click=J,window.changeMusicVolume=b,window.changeSFXVolume=T,window.changeBlipVolume=k,window.changeCharacter=E,window.imgError=w,window.demoError=B,window.ReconnectButton=P,window.RetryButton=L,window.pickChar=x,window.pickEmotion=R,window.pickEvidence=O,window.addEvidence=H,window.editEvidence=N,window.deleteEvidence=U,window.cancelEvidence=V,window.getIndexFromSelect=W,window.updateEvidenceIcon=j,window.updateActionCommands=K,window.changeBackgroundOOC=z,window.changeRoleOOC=Z,window.randomCharacterOOC=q,window.callMod=Q,window.initWT=X,window.initCE=Y,window.addHPD=ee,window.redHPD=ne,window.addHPP=te,window.redHPP=oe,window.updateBackgroundPreview=ae,window.toggleEffect=se,window.toggleFlip=ie,window.togglePresent=pe,window.toggleMenu=ge,window.toggleShout=re,void 0===String.prototype.trim&&(String.prototype.trim=function(){return String(this).replace(/^\s+|\s+$/g,"")}),String.prototype.hashCode=function(){var e=0;if(0===this.length)return e;for(var n=0;n<this.length;n++){e=(e<<5)-e+this.charCodeAt(n),e|=0}return e};var Ae=new D(r),me=new y;$(document).ready(function(){Ae.initialObservBBCode(),Ae.loadResources()}),$(function(){$("#callmod_dialog").dialog({autoOpen:!1,resizable:!1,show:{effect:"drop",direction:"down",duration:500},hide:{effect:"drop",direction:"down",duration:500},height:"auto",width:400,modal:!0,buttons:{Sure:function(){Ae.sendZZ(""),$(this).dialog("close")},Cancel:function(){$(this).dialog("close")}}})})}]);
+!function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=4)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};var o=function e(t){var n,o;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),n=Array.prototype.forEach,o=Array.prototype.map,this.each=function(e,t,i){if(null!==e)if(n&&e.forEach===n)e.forEach(t,i);else if(e.length===+e.length){for(var o=0,s=e.length;o<s;o++)if(t.call(i,e[o],o,e)==={})return}else for(var a in e)if(e.hasOwnProperty(a)&&t.call(i,e[a],a,e)==={})return},this.map=function(e,t,n){var i=[];return null==e?i:o&&e.map===o?e.map(t,n):(this.each(e,function(e,o,s){i[i.length]=t.call(n,e,o,s)}),i)},"object"==(void 0===t?"undefined":i(t))?(this.hasher=t.hasher,this.screen_resolution=t.screen_resolution,this.screen_orientation=t.screen_orientation,this.canvas=t.canvas,this.ie_activex=t.ie_activex):"function"==typeof t&&(this.hasher=t)};t.default=o,o.prototype={get:function(){var e=[];(e.push(navigator.userAgent),e.push(navigator.language),e.push(screen.colorDepth),this.screen_resolution)&&(void 0!==this.getScreenResolution()&&e.push(this.getScreenResolution().join("x")));return e.push((new Date).getTimezoneOffset()),e.push(this.hasSessionStorage()),e.push(this.hasLocalStorage()),e.push(!!window.indexedDB),document.body?e.push(i(document.body.addBehavior)):e.push("undefined"),e.push(i(window.openDatabase)),e.push(navigator.cpuClass),e.push(navigator.platform),e.push(navigator.doNotTrack),e.push(this.getPluginsString()),this.canvas&&this.isCanvasSupported()&&e.push(this.getCanvasFingerprint()),this.hasher?this.hasher(e.join("###"),31):this.murmurhash3_32_gc(e.join("###"),31)},murmurhash3_32_gc:function(e,t){var n,i,o,s,a,c,r,l;for(n=3&e.length,i=e.length-n,o=t,a=3432918353,c=461845907,l=0;l<i;)r=255&e.charCodeAt(l)|(255&e.charCodeAt(++l))<<8|(255&e.charCodeAt(++l))<<16|(255&e.charCodeAt(++l))<<24,++l,o=27492+(65535&(s=5*(65535&(o=(o^=r=(65535&(r=(r=(65535&r)*a+(((r>>>16)*a&65535)<<16)&4294967295)<<15|r>>>17))*c+(((r>>>16)*c&65535)<<16)&4294967295)<<13|o>>>19))+((5*(o>>>16)&65535)<<16)&4294967295))+((58964+(s>>>16)&65535)<<16);switch(r=0,n){case 3:r^=(255&e.charCodeAt(l+2))<<16;case 2:r^=(255&e.charCodeAt(l+1))<<8;case 1:o^=r=(65535&(r=(r=(65535&(r^=255&e.charCodeAt(l)))*a+(((r>>>16)*a&65535)<<16)&4294967295)<<15|r>>>17))*c+(((r>>>16)*c&65535)<<16)&4294967295}return o^=e.length,o=2246822507*(65535&(o^=o>>>16))+((2246822507*(o>>>16)&65535)<<16)&4294967295,o=3266489909*(65535&(o^=o>>>13))+((3266489909*(o>>>16)&65535)<<16)&4294967295,(o^=o>>>16)>>>0},hasLocalStorage:function(){try{return!!window.localStorage}catch(e){return!0}},hasSessionStorage:function(){try{return!!window.sessionStorage}catch(e){return!0}},isCanvasSupported:function(){var e=document.createElement("canvas");return!(!e.getContext||!e.getContext("2d"))},isIE:function(){return"Microsoft Internet Explorer"===navigator.appName||!("Netscape"!==navigator.appName||!/Trident/.test(navigator.userAgent))},getPluginsString:function(){return this.isIE()&&this.ie_activex?this.getIEPluginsString():this.getRegularPluginsString()},getRegularPluginsString:function(){return this.map(navigator.plugins,function(e){var t=this.map(e,function(e){return[e.type,e.suffixes].join("~")}).join(",");return[e.name,e.description,t].join("::")},this).join(";")},getIEPluginsString:function(){if(window.ActiveXObject){return this.map(["ShockwaveFlash.ShockwaveFlash","AcroPDF.PDF","PDF.PdfCtrl","QuickTime.QuickTime","rmocx.RealPlayer G2 Control","rmocx.RealPlayer G2 Control.1","RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)","RealVideo.RealVideo(tm) ActiveX Control (32-bit)","RealPlayer","SWCtl.SWCtl","WMPlayer.OCX","AgControl.AgControl","Skype.Detection"],function(e){try{return new ActiveXObject(e),e}catch(e){return null}}).join(";")}return""},getScreenResolution:function(){return this.screen_orientation?screen.height>screen.width?[screen.height,screen.width]:[screen.width,screen.height]:[screen.height,screen.width]},getCanvasFingerprint:function(){var e=document.createElement("canvas"),t=e.getContext("2d"),n='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+-={}|[]:"<>?;,.';return t.textBaseline="top",t.font="14px 'Arial'",t.textBaseline="alphabetic",t.fillStyle="#f60",t.fillRect(125,1,62,20),t.fillStyle="#069",t.fillText(n,2,15),t.fillStyle="rgba(102, 204, 0, 0.7)",t.fillText(n,4,17),e.toDataURL()}}},,,,function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();t.onOOCEnter=I,t.onEnter=C,t.musiclist_click=B,t.area_click=k,t.changeMusicVolume=x,t.changeSFXVolume=T,t.changeBlipVolume=S,t.changeCharacter=L,t.imgError=O,t.demoError=M,t.ReconnectButton=A,t.RetryButton=R,t.pickChar=j,t.pickEmotion=F,t.pickEvidence=U,t.addEvidence=Z,t.editEvidence=X,t.deleteEvidence=G,t.cancelEvidence=V,t.getIndexFromSelect=z,t.updateEvidenceIcon=W,t.updateActionCommands=q,t.changeBackgroundOOC=K,t.changeRoleOOC=Q,t.randomCharacterOOC=J,t.callMod=Y,t.initWT=ee,t.initCE=te,t.addHPD=ne,t.redHPD=ie,t.addHPP=oe,t.redHPP=se,t.updateBackgroundPreview=ae,t.toggleEffect=ce,t.toggleFlip=re,t.togglePresent=le,t.toggleMenu=de,t.toggleShout=ue;var o=c(n(5)),s=c(n(6)),a=c(n(0));function c(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var l={};location.search.substr(1).split("&").forEach(function(e){l[e.split("=")[0]]=e.split("=")[1]});var d=l.ip,u=l.mode,m=l.asset||"http://s3.wasabisys.com/webao/base/",h=m+"sounds/music/",g=!1;/Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Opera Mini/i.test(navigator.userAgent)&&(g=!0);var f=0,p=1,y=0,v=new a.default({canvas:!0,ie_activex:!0,screen_resolution:!0}).get();console.log(v);var E=new Date(0),_=function(){function e(t){var n=this;r(this,e),this.serv=new WebSocket("ws://"+t),this.serv.onopen=function(e){return n.onOpen(e)},this.serv.onclose=function(e){return n.onClose(e)},this.serv.onmessage=function(e){return n.onMessage(e)},this.serv.onerror=function(e){return n.onError(e)},this.flip=!1,this.presentable=!1,this.hp=[0,0],this.playerID=1,this.charID=-1,this.testimonyID=0,this.chars=[],this.emotes=[],this.evidences=[],this.resources={holdit:{src:"misc/holdit.gif",duration:720},objection:{src:"misc/objection.gif",duration:720},takethat:{src:"misc/takethat.gif",duration:840},witnesstestimony:{src:"misc/witnesstestimony.gif",duration:1560,sfx:"sounds/general/sfx-testimony.wav"},crossexamination:{src:"misc/crossexamination.gif",duration:1600,sfx:"sounds/general/sfx-testimony2.wav"}},this.selectedEmote=-1,this.selectedEvidence=0,this.checkUpdater=null,this.musicList=Object(),this.handlers={MS:function(e){return n.handleMS(e)},CT:function(e){return n.handleCT(e)},MC:function(e){return n.handleMC(e)},RMC:function(e){return n.handleRMC(e)},CI:function(e){return n.handleCI(e)},SC:function(e){return n.handleSC(e)},EI:function(e){return n.handleEI(e)},LE:function(e){return n.handleLE(e)},EM:function(e){return n.handleEM(e)},SM:function(e){return n.handleSM(e)},music:function(e){return n.handlemusic(e)},DONE:function(e){return n.handleDONE(e)},BN:function(e){return n.handleBN(e)},NBG:function(e){return n.handleNBG(e)},HP:function(e){return n.handleHP(e)},RT:function(e){return n.handleRT(e)},ZZ:function(e){return n.handleZZ(e)},ID:function(e){return n.handleID(e)},PN:function(e){return n.handlePN(e)},SI:function(e){return n.handleSI(e)},CharsCheck:function(e){return n.handleCharsCheck(e)},PV:function(e){return n.handlePV(e)},CHECK:function(e){}},this._lastTimeICReceived=new Date(0)}return i(e,[{key:"me",value:function(){return this.chars[this.charID]}},{key:"myEmote",value:function(){return this.emotes[this.selectedEmote]}},{key:"myEvidence",value:function(){return this.presentable?this.selectedEvidence:0}},{key:"sendOOC",value:function(e){this.serv.send("CT#"+me(ge(document.getElementById("OOC_name").value))+"#"+me(ge(e))+"#%")}},{key:"sendIC",value:function(e,t,n,i,o,s,a,c,r,l,d,u,m){this.serv.send("MS#chat#"+e+"#"+t+"#"+n+"#"+me(ge(i))+"#"+o+"#"+s+"#"+a+"#"+this.charID+"#"+c+"#"+y+"#"+l+"#"+d+"#"+u+"#"+m+"#%")}},{key:"sendPE",value:function(e,t,n){this.serv.send("PE#"+me(ge(e))+"#"+me(ge(t))+"#"+n+"#%")}},{key:"sendEE",value:function(e,t,n,i){this.serv.send("EE#"+e+"#"+me(ge(t))+"#"+me(ge(n))+"#"+i+"#%")}},{key:"sendDE",value:function(e){this.serv.send("DE#"+e+"#%")}},{key:"sendHP",value:function(e,t){this.serv.send("HP#"+e+"#"+t+"#%")}},{key:"sendZZ",value:function(e){this.serv.send("ZZ#"+e+"#%")}},{key:"sendRT",value:function(e){"jud"==this.chars[this.charID].side&&this.serv.send("RT#"+e+"#%")}},{key:"sendMusicChange",value:function(e){this.serv.send("MC#"+e+"#"+this.charID+"#%")}},{key:"sendLeaveRoom",value:function(){this.serv.send("FC#%")}},{key:"joinServer",value:function(){var e=this;this.serv.send("HI#"+v+"#%"),this.serv.send("ID#webAO#2.3#%"),this.checkUpdater=setInterval(function(){return e.sendCheck()},5e3)}},{key:"loadResources",value:function(){document.getElementById("OOC_name").value="web"+this.playerID;var e=document.getElementById("evi_select");e.add(new Option("Custom",0)),s.default.forEach(function(t){e.add(new Option(t))});var t=document.getElementById("bg_select");t.add(new Option("Custom",0)),o.default.forEach(function(e){t.add(new Option(e))});for(var n=["holdit","objection","takethat"],i=0;i<n.length;i++){P(m+this.resources[n[i]].src.toLowerCase(),this.callbackLoadImageResources,n[i])}for(var a=["witnesstestimony","crossexamination"],c=0;c<a.length;c++){P(m+"themes/default/"+a[c]+".gif",this.callbackLoadImageResources,a[c]),P(m+this.resources[a[c]].sfx.toLowerCase(),this.callbackLoadSFXResources,a[c])}}},{key:"callbackLoadImageResources",value:function(e,t,n){e&&(pe.resources[t].src=n,ye.getAnimLength(n,pe.callbackGetResourceLength,t))}},{key:"callbackGetResourceLength",value:function(e,t){pe.resources[t].duration=e}},{key:"callbackLoadSFXResources",value:function(e,t,n){e&&(pe.resources[t].sfx=n)}},{key:"initialObservBBCode",value:function(){var e=document.getElementById("client_inner_chat");new MutationObserver(function(e){e.forEach(function(e){var t=e.addedNodes;null!==t&&t.forEach(function(e){"C"==e.tagName?e.style.color=e.getAttribute("a"):"M"==e.tagName&&(e.hasAttribute("a")?e.style.backgroundColor=e.getAttribute("a"):(e.style.backgroundColor="yellow",e.style.color="black"))})})}).observe(e,{attributes:!0,childList:!0})}},{key:"sendCharacter",value:function(e){this.serv.send("CC#"+this.playerID+"#"+e+"#web#%")}},{key:"sendMusic",value:function(e){this.serv.send("MC#"+e)}},{key:"sendCheck",value:function(){this.serv.send("CH#"+this.charID+"#%")}},{key:"onOpen",value:function(e){"watch"===u?(document.getElementById("client_loading").style.display="none",document.getElementById("client_charselect").style.display="none"):pe.joinServer()}},{key:"onClose",value:function(e){console.error("The connection was closed: "+e.reason+" ("+e.code+")"),1001!==e.code&&(document.getElementById("client_error").style.display="block",document.getElementById("error_id").textContent=e.code,this.cleanup())}},{key:"onMessage",value:function(e){var t=e.data;console.debug(t);var n=t.split("%")[0].split("#"),i=n[0],o=this.handlers[i];void 0!==o?o(n):console.warn("Invalid packet header "+i)}},{key:"onError",value:function(e){console.error("A network error occurred: "+e.reason+" ("+e.code+")"),document.getElementById("client_error").style.display="block",document.getElementById("error_id").textContent=e.code,this.cleanup()}},{key:"cleanup",value:function(){try{this.serv.close(1001)}catch(e){}clearInterval(this.checkUpdater)}},{key:"prepChat",value:function(e){return he(fe(e)).replace(/\\n/g,"<br>").replace(/\[(\/?)b\]/g,"<$1b>").replace(/\[(\/?)i\]/g,"<$1i>").replace(/\[(\/?)s\]/g,"<$1del>").replace(/\[(\/?)u\]/g,"<$1u>").replace(/\[(\/?)sub\]/g,"<$1sub>").replace(/\[(\/?)sup\]/g,"<$1sup>").replace(/\[m=([#a-zA-Z0-9]+)\]/g,'<m a="$1">').replace(/\[(\/?)m\]/g,"<$1m>").replace(/\[c=?([#a-zA-Z0-9]+)\]/g,'<c a="$1">').replace(/\[\/c\]/g,"</c>")}},{key:"handleMS",value:function(e){if(e[4]!=ye.chatmsg.content){document.getElementById("client_inner_chat").innerHTML="";for(var t={character:-1,preanim:escape(e[2]),nameplate:e[3],name:e[3],speaking:"(b)"+escape(e[4]),silent:"(a)"+escape(e[4]),content:this.prepChat(e[5]),side:e[6],sound:escape(e[7]),type:e[8],snddelay:e[10],objection:e[11],evidence:e[12],flip:e[13],flash:e[14],color:e[15],isnew:!0},n=0;n<this.chars.length;n++)if(this.chars[n].name==e[3]){t.character=n;break}t.character==this.charID&&function(){document.getElementById("client_inputbox").value="",f&&(document.getElementById("button_effect_"+f).className="client_button",f=0);y&&(document.getElementById("button_"+y).className="client_button",y=0)}(),ye.say(t)}}},{key:"handleCT",value:function(e){var t=document.getElementById("client_ooclog");t.innerHTML+=fe(he(e[1]))+": "+fe(he(e[2]))+"\r\n",t.scrollTop>t.scrollHeight-600&&(t.scrollTop=t.scrollHeight)}},{key:"handleMC",value:function(e){var t=ye.music;(t.pause(),t.src=h+e[1].toLowerCase(),t.play(),e[2]>=0)?H(this.chars[e[2]].name+" changed music to "+e[1]):H("The music was changed to "+e[1])}},{key:"handleRMC",value:function(e){ye.music.pause(),ye.music=new Audio(this.musicList[e[1]]);var t=ye.music;t.totime=e[1],t.offset=(new Date).getTime()/1e3,t.addEventListener("loadedmetadata",function(){t.currentTime+=parseFloat(t.totime+((new Date).getTime()/1e3-t.offset)).toFixed(3),t.play()},!1)}},{key:"handleCI",value:function(e){document.getElementById("client_loadingtext").innerHTML="Loading Character "+e[1],this.serv.send("AN#"+(e[1]/10+1)+"#%");for(var t=2;t<e.length-1;t++)if(t%2==0){var n=e[t].split("&");this.chars[e[t-1]]={name:n[0],desc:n[1],evidence:n[3],icon:m+"characters/"+escape(n[0].toLowerCase())+"/char_icon.png"}}}},{key:"handleSC",value:function(e){document.getElementById("client_loadingtext").innerHTML="Loading Characters";for(var t=1;t<e.length-1;t++){var n=e[t].split("&");this.chars[t-1]={name:n[0],desc:n[1],evidence:n[3],icon:m+"characters/"+escape(n[0].toLowerCase())+"/char_icon.png"}}this.serv.send("RM#%")}},{key:"handleEI",value:function(e){document.getElementById("client_loadingtext").innerHTML="Loading Evidence "+e[1],this.serv.send("RM#%")}},{key:"handleLE",value:function(e){this.evidences=[];for(var t=1;t<e.length-1;t++){var n=e[t].split("&");this.evidences[t-1]={name:fe(he(n[0])),desc:fe(he(n[1])),filename:escape(n[2]),icon:m+"evidence/"+escape(n[2].toLowerCase())}}var i=document.getElementById("evidences");i.innerHTML="";for(var o=1;o<=this.evidences.length;o++)i.innerHTML+='<img src="'+this.evidences[o-1].icon+'" \n\t\t\t\tid="evi_'+o+'" \n\t\t\t\talt="'+this.evidences[o-1].name+'"\n\t\t\t\tclass="client_button"\n\t\t\t\tonclick="pickEvidence('+o+')">'}},{key:"handleEM",value:function(e){document.getElementById("client_loadingtext").innerHTML="Loading Music "+e[1],this.serv.send("AM#"+(e[1]/10+1)+"#%");for(var t=document.getElementById("client_musiclist"),n=2;n<e.length-1;n++)if(n%2==0){var i=document.createElement("OPTION");i.text=e[n],t.options.add(i)}}},{key:"handleSM",value:function(e){document.getElementById("client_loadingtext").innerHTML="Loading Music ";for(var t=document.getElementById("client_musiclist"),n=!1,i=1;i<e.length-1;i++)if(/\.(?:wav|mp3|mp4|ogg|opus)$/i.test(e[i])&&!n&&(n=!0),n){var o=document.createElement("OPTION");o.text=e[i],t.options.add(o)}else{var s=document.createElement("SPAN");s.className="location-box",s.textContent=e[i],s.onclick=function(){k(this)},document.getElementById("areas").appendChild(s)}var a=document.getElementById("areas");if(a.lastChild.textContent.startsWith("=")){var c=document.createElement("OPTION");c.text=a.lastChild.textContent,t.insertBefore(c,t.firstChild),a.removeChild(a.lastChild)}this.serv.send("RD#%")}},{key:"handlemusic",value:function(e){for(var t=0;t<e.length/2;t++)this.musicList[e[2*t]]=e[2*t+1]}},{key:"handleDONE",value:function(e){document.getElementById("client_loading").style.display="none",document.getElementById("client_charselect").style.display="block"}},{key:"handleBN",value:function(e){ye.bgname=escape(e[1]);var t=z("bg_select",escape(e[1]));document.getElementById("bg_select").selectedIndex=t,ae(),0==t&&(document.getElementById("bg_filename").value=e[1]),document.getElementById("bg_preview").src=m+"background/"+escape(e[1].toLowerCase())+"/defenseempty.png",-1==this.charID?N("jud"):N(this.chars[this.charID].side)}},{key:"handleNBG",value:function(e){}},{key:"handleHP",value:function(e){var t=10*e[2];1==e[1]?(this.hp[0]=e[2],$("#client_defense_hp > .health-bar").animate({width:t+"%"},500)):(this.hp[1]=e[2],$("#client_prosecutor_hp > .health-bar").animate({width:t+"%"},500))}},{key:"handleRT",value:function(e){"testimony1"==e[1]?this.testimonyID=1:this.testimonyID=2,ye.initTestimonyUpdater()}},{key:"handleZZ",value:function(e){var t=document.getElementById("client_ooclog");t.innerHTML+="$Alert: "+fe(he(e[1]))+"\r\n",t.scrollTop>t.scrollHeight-60&&(t.scrollTop=t.scrollHeight)}},{key:"handleID",value:function(e){this.playerID=e[1]}},{key:"handlePN",value:function(e){this.serv.send("askchaa#%")}},{key:"handleSI",value:function(e){g?this.serv.send("askchar2#%"):this.serv.send("RC#%")}},{key:"handleCharsCheck",value:function(e){document.getElementById("client_chartable").innerHTML="";for(var t=void 0,n=0;n<this.chars.length;n++){n%8==0&&(t=document.createElement("TR"));var i=document.createElement("TD"),o="",s=this.chars[n].icon;"-1"==e[n+1]&&(o=" dark"),i.innerHTML="<img class='demothing"+o+"' id='demo_"+n+"' src='"+s+"' alt='"+this.chars[n].name+"' onclick='pickChar("+n+")' onerror='demoError(this);'>",t.appendChild(i),n%8==0&&document.getElementById("client_chartable").appendChild(t)}}},{key:"handlePV",value:function(e){this.charID=e[3],document.getElementById("client_charselect").style.display="none",document.getElementById("client_inputbox").style.display="";var t=this.me(),n=this.emotes,i=document.getElementById("client_emo");i.innerHTML="",i.style.display="";var o=new XMLHttpRequest;o.withCredentials=!1,o.open("GET",m+"characters/"+escape(this.me().name.toLowerCase())+"/char.ini",!0),o.responseType="text",o.onload=function(e){if(200==this.status){var o=this.responseText,s=b.parse(o);t.side=s.Options.side,q(t.side);for(var a=1;a<=s.Emotions.number;a++){var c=s.Emotions[a].split("#"),r="0",l="0";void 0!==s.SoundN&&(r=s.SoundN[a]),void 0!==s.SoundT&&(l=s.SoundT[a]),n[a]={desc:c[0].toLowerCase(),speaking:c[1].toLowerCase(),silent:c[2].toLowerCase(),zoom:c[3],sfx:r.toLowerCase(),sfxdelay:l,button_off:m+"characters/"+escape(t.name).toLowerCase()+"/emotions/button"+a+"_off.png",button_on:m+"characters/"+escape(t.name).toLowerCase()+"/emotions/button"+a+"_on.png"},i.innerHTML+="<img src="+n[a].button_off+'\n\t\t\t\t\t\t id="emo_'+a+'"\n\t\t\t\t\t\t alt="'+n[a].desc+'"\n\t\t\t\t\t\t class="client_button"\n\t\t\t\t\t\t onclick="pickEmotion('+a+')">'}F(1)}},o.send()}}]),e}(),w=function(){function e(){r(this,e),this.textnow="",this.chatmsg={isnew:!1,content:"",objection:"0",sound:"",startpreanim:!1,startspeaking:!1,side:null,color:"0",snddelay:0,preanimdelay:0},this.blip=new Audio(m+"sounds/general/sfx-blipmale.wav"),this.blip.volume=.5,this.blipChannels=new Array(6);for(var t=0;t<this.blipChannels.length;t++)this.blipChannels[t]=new Audio(m+"sounds/general/sfx-blipmale.wav"),this.blipChannels[t].volume=.5;this.currentBlipChannel=0,this.sfxaudio=new Audio(m+"sounds/general/sfx-blipmale.wav"),this.sfxplayed=0,this.music=new Audio,this.music.play(),this.updater=null,this.testimonyUpdater=null,this.bgname="gs4",this.testimonyTimer=0,this.shoutTimer=0,this.textTimer=0,this._animating=!1}return i(e,[{key:"isAnimating",value:function(){return this._animating}},{key:"setBlipVolume",value:function(e){for(var t=0;t<this.blipChannels.length;t++)this.blipChannels[t].volume=e}},{key:"bgFolder",value:function(){return m+"background/"+this.bgname.toLowerCase()+"/"}},{key:"say",value:function(e){this.chatmsg=e,H(e.content,e.nameplate),N(e.side),this.textnow="",this.sfxplayed=0,this.textTimer=0,this._animating=!0,clearTimeout(this.updater),"-"!=e.preanim?e.preanimdelay=this.getAnimLength(m+"characters/"+escape(e.name.toLowerCase())+"/"+e.preanim.toLowerCase()+".gif",this.initUpdater):this.initUpdater(0)}},{key:"initUpdater",value:function(e){ye.chatmsg.preanimdelay=parseInt(e),ye.updater=setTimeout(function(){return ye.updateText()},60)}},{key:"initTestimonyUpdater",value:function(){var e=this;if(pe.testimonyID>0){var t="";1==pe.testimonyID?t="witnesstestimony":2==pe.testimonyID&&(t="crossexamination"),new Audio(pe.resources[t].sfx).play(),this.testimonyTimer=0;var n=document.getElementById("client_testimony");n.src=pe.resources[t].src,n.style.display="",this.testimonyUpdater=setTimeout(function(){return e.updateTestimony()},60)}}},{key:"getAnimLength",value:function(e,t,n){var i=new XMLHttpRequest;i.open("GET",e,!0),i.responseType="arraybuffer",i.addEventListener("load",function(){var e=gify.getInfo(i.response);console.log(e.duration),t(e.duration,n)}),i.send()}},{key:"updateTestimony",value:function(){var e=this;this.testimonyTimer=this.testimonyTimer+60,1==pe.testimonyID?this.testimonyTimer>=pe.resources.witnesstestimony.duration?this.disposeTestimony():this.testimonyUpdater=setTimeout(function(){return e.updateTestimony()},60):2==pe.testimonyID?this.testimonyTimer>=pe.resources.crossexamination.duration?this.disposeTestimony():this.testimonyUpdater=setTimeout(function(){return e.updateTestimony()},60):this.disposeTestimony()}},{key:"disposeTestimony",value:function(){pe.testimonyID=0,this.testimonyTimer=0,document.getElementById("client_testimony").style.display="none",clearTimeout(this.testimonyUpdater)}},{key:"updateText",value:function(){var e=this,t=document.getElementById("client_name"),n=document.getElementById("client_chat"),i=document.getElementById("client_char"),o=document.getElementById("client_evi"),s=document.getElementById("client_background"),a=document.getElementById("client_shout"),c=document.getElementById("client_inner_chat");if(1==this.chatmsg.flip?i.style.transform="scaleX(-1)":i.style.transform="scaleX(1)",this._animating&&(this.updater=setTimeout(function(){return e.updateText()},60)),this.chatmsg.isnew){s.style.backgroundColor="transparent",t.style.display="none",n.style.display="none",o.style.opacity="0",o.style.height="0%";var r={1:"holdit",2:"objection",3:"takethat"}[this.chatmsg.objection];void 0!==r?(a.src=pe.resources[r].src,new Audio(m+"characters/"+this.chatmsg.name.toLowerCase()+"/"+r+".wav").play(),this.shoutTimer=850):this.shoutTimer=0,this.chatmsg.isnew=!1,this.chatmsg.startpreanim=!0}if(this.textTimer>=this.shoutTimer&&this.chatmsg.startpreanim)2==this.chatmsg.flash?(this.sfxaudio.pause(),this.sfxplayed=1,this.sfxaudio.src=m+"sounds/general/sfx-stab.wav",this.sfxaudio.play(),$("#client_gamewindow").effect("shake",{direction:"up"})):1==this.chatmsg.flash&&(s.style.backgroundColor="white",this.sfxaudio.pause(),this.sfxplayed=1,this.sfxaudio.src=m+"sounds/general/sfx-realization.wav",this.sfxaudio.play(),$("#client_gamewindow").effect("pulsate")),this.chatmsg.preanimdelay>0&&(a.src="misc/placeholder.gif",N(this.chatmsg.side),i.src=m+"characters/"+escape(this.chatmsg.name.toLowerCase())+"/"+this.chatmsg.preanim.toLowerCase()+".gif"),this.chatmsg.startpreanim=!1,this.chatmsg.startspeaking=!0;else if(this.textTimer>=this.shoutTimer+this.chatmsg.preanimdelay&&!this.chatmsg.startpreanim)if(this.chatmsg.startspeaking){for(this.chatmsg.evidence>0&&(o.style.backgroundImage="url('"+pe.evidences[this.chatmsg.evidence-1].icon+"')","def"==this.chatmsg.side?(o.style.right="1.5em",o.style.left="initial",$("#client_evi").animate({height:"30%",opacity:1},250)):(o.style.right="initial",o.style.left="1.5em",$("#client_evi").animate({height:"30%",opacity:1},250))),t.style.display="block",t.style.fontSize=.7*t.offsetHeight+"px";t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(this.chatmsg.nameplate)),n.style.display="block",n.style.fontSize=.25*n.offsetHeight+"px";c.style.color={0:"#ffffff",1:"#00ff00",2:"#ff0000",3:"#ffaa00",4:"#0000ff",5:"#ffff00",6:"#aa00aa"}[this.chatmsg.color]||"#ffffff",this.chatmsg.startspeaking=!1,0==this.chatmsg.preanimdelay&&(a.src="misc/placeholder.gif",N(this.chatmsg.side)),i.src=m+"characters/"+escape(this.chatmsg.name.toLowerCase())+"/"+this.chatmsg.speaking.toLowerCase()+".gif",this.textnow==this.chatmsg.content&&(i.src=m+"characters/"+escape(this.chatmsg.name.toLowerCase())+"/"+this.chatmsg.silent.toLowerCase()+".gif",this._animating=!1,clearTimeout(this.updater))}else if(this.textnow!=this.chatmsg.content){for(" "!=this.chatmsg.content.charAt(this.textnow.length)&&(this.blipChannels[this.currentBlipChannel].play(),this.currentBlipChannel++,this.currentBlipChannel%=this.blipChannels.length),this.textnow=this.chatmsg.content.substring(0,this.textnow.length+1);c.hasChildNodes();)c.removeChild(c.firstChild);c.appendChild(document.createTextNode(this.textnow)),this.textnow==this.chatmsg.content&&(this.textTimer=0,this._animating=!1,i.src=m+"characters/"+escape(this.chatmsg.name.toLowerCase())+"/"+this.chatmsg.silent.toLowerCase()+".gif",clearTimeout(this.updater))}!this.sfxplayed&&this.chatmsg.snddelay+this.shoutTimer>=this.textTimer&&(this.sfxaudio.pause(),this.sfxplayed=1,"0"!=this.chatmsg.sound&&"1"!=this.chatmsg.sound&&(this.sfxaudio.src=m+"sounds/general/"+escape(this.chatmsg.sound.toLowerCase())+".wav",this.sfxaudio.play())),this.textTimer=this.textTimer+60}}]),e}(),b=function(){function e(){r(this,e)}return i(e,null,[{key:"parse",value:function(e){var t={section:/^\s*\[\s*([^\]]*)\s*\]\s*$/,param:/^\s*([\w.\-_]+)\s*=\s*(.*?)\s*$/,comment:/^\s*;.*$/},n={},i=e.split(/\r\n|\r|\n/),o=null;return i.forEach(function(e){if(!t.comment.test(e)&&0!=e.length)if(t.param.test(e)){var i=e.match(t.param);o?n[o][i[1]]=i[2]:n[i[1]]=i[2]}else if(t.section.test(e)){var s=e.match(t.section);n[s[1]]={},o=s[1]}}),n}}]),e}();function I(e){13==e.keyCode&&(pe.sendOOC(document.getElementById("client_oocinputbox").value),document.getElementById("client_oocinputbox").value="")}function C(e){if(13==e.keyCode){var t=pe.me(),n=pe.myEmote(),i=pe.myEvidence(),o=pe.flip?1:0,s=document.getElementById("textcolor").value,a="0",c="0";document.getElementById("sendsfx").checked&&(a=n.sfx,c=n.sfxdelay),pe.sendIC(n.speaking,t.name,n.silent,document.getElementById("client_inputbox").value,t.side,a,n.zoom,c,y,i,o,f,s)}}function B(e){var t=document.getElementById("client_musiclist").value;pe.sendMusicChange(t)}function k(e){var t=e.textContent;pe.sendMusicChange(t);var n=document.createElement("div");n.className="hrtext",n.textContent="switched to "+e.textContent,document.getElementById("client_log").appendChild(n)}function x(){ye.music.volume=document.getElementById("client_mvolume").value/100}function T(){ye.sfxaudio.volume=document.getElementById("client_svolume").value/100}function S(){ye.setBlipVolume(document.getElementById("client_bvolume").value/100)}function L(e){pe.sendLeaveRoom(),document.getElementById("client_charselect").style.display="block",document.getElementById("client_emo").innerHTML=""}function O(e){return e.onerror="",e.src="misc/placeholder.gif",!0}function M(e){return e.onerror="",e.src="/misc/placeholder.png",!0}function P(e,t,n){var i=new XMLHttpRequest;i.onreadystatechange=function(){4==this.readyState&&200==this.status?t(!0,n,e):t(!1,n,e)},i.open("GET",e,!0),i.send()}function N(e){var t=void 0,n=ye.bgFolder();switch(document.getElementById("client_fg").style.display="none",document.getElementById("client_bench").style.display="none",e){case"def":document.getElementById("client_court").src=n+"defenseempty.png",document.getElementById("client_bench").style.display="block",P(n+"defensedesk.png",D,e),t="defense";break;case"pro":document.getElementById("client_court").src=n+"prosecutorempty.png",document.getElementById("client_bench").style.display="block",P(n+"defensedesk.png",D,e),t="prosecution";break;case"hld":document.getElementById("client_court").src=n+"helperstand.png",t="defense";break;case"hlp":document.getElementById("client_court").src=n+"prohelperstand.png",t="prosecution";break;case"wit":document.getElementById("client_court").src=n+"witnessempty.png",document.getElementById("client_bench").style.display="block",document.getElementById("client_bench").src=n+"estrado.png",t="prosecution";break;case"jud":document.getElementById("client_court").src=n+"judgestand.png",t="prosecution"}5==ye.chatmsg.type&&(document.getElementById("client_bench").style.display="none",document.getElementById("client_court").src=m+"themes/default/"+t+"_speedlines.gif")}function D(e,t){var n=ye.bgFolder();document.getElementById("client_bench").src="def"==t?e?n+"defensedesk.png":n+"bancodefensa.png":e?n+"prosecutiondesk.png":n+"bancoacusacion.png"}function A(){pe.cleanup(),(pe=new _(d))&&(u="join",document.getElementById("client_error").style.display="none")}function R(){pe.joinServer()}function H(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new Date,i=document.createElement("p"),o=document.createElement("span");if(o.id="iclog_name",o.appendChild(document.createTextNode(t)),i.appendChild(o),i.appendChild(document.createTextNode(e)),E.getMinutes()!==n.getMinutes()){var s=document.createElement("span");s.id="iclog_time",s.innerText=n.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit"}),i.appendChild(s)}var a=document.getElementById("client_log");a.appendChild(i),a.scrollTop>a.scrollHeight-800&&(a.scrollTop=a.scrollHeight),E=new Date}function j(e){e<1e3?pe.sendCharacter(e):(document.getElementById("client_charselect").style.display="none",document.getElementById("client_inputbox").style.display="none",document.getElementById("client_emo").style.display="none")}function F(e){-1!=pe.selectedEmote&&(document.getElementById("emo_"+pe.selectedEmote).src=pe.myEmote().button_off),pe.selectedEmote=e,document.getElementById("emo_"+e).src=pe.myEmote().button_on}function U(e){if(pe.selectedEvidence!==e){pe.selectedEvidence>0&&(document.getElementById("evi_"+pe.selectedEvidence).className="client_button"),document.getElementById("evi_"+e).className="client_button dark",pe.selectedEvidence=e,document.getElementById("evi_name").value=pe.evidences[e-1].name,document.getElementById("evi_desc").value=pe.evidences[e-1].desc;var t=z("evi_select",pe.evidences[e-1].filename);document.getElementById("evi_select").selectedIndex=t,0==t&&(document.getElementById("evi_filename").value=pe.evidences[e-1].filename),W(),document.getElementById("evi_add").className="client_button hover_button inactive",document.getElementById("evi_edit").className="client_button hover_button",document.getElementById("evi_cancel").className="client_button hover_button",document.getElementById("evi_del").className="client_button hover_button"}else V()}function Z(){var e=document.getElementById("evi_select");pe.sendPE(document.getElementById("evi_name").value,document.getElementById("evi_desc").value,0==e.selectedIndex?document.getElementById("evi_filename").value:e.options[e.selectedIndex].text),V()}function X(){var e=document.getElementById("evi_select"),t=parseInt(pe.selectedEvidence)-1;pe.sendEE(t,document.getElementById("evi_name").value,document.getElementById("evi_desc").value,0==e.selectedIndex?document.getElementById("evi_filename").value:e.options[e.selectedIndex].text),V()}function G(){var e=parseInt(pe.selectedEvidence)-1;pe.sendDE(e),V()}function V(){pe.selectedEvidence>0&&(document.getElementById("evi_"+pe.selectedEvidence).className="client_button"),pe.selectedEvidence=0,document.getElementById("evi_select").selectedIndex=0,W(),document.getElementById("evi_filename").value="",document.getElementById("evi_name").value="",document.getElementById("evi_desc").value="",document.getElementById("evi_icon").style.backgroundImage="url('misc/empty.png')",document.getElementById("evi_add").className="client_button hover_button",document.getElementById("evi_edit").className="client_button hover_button inactive",document.getElementById("evi_cancel").className="client_button hover_button inactive",document.getElementById("evi_del").className="client_button hover_button inactive"}function z(e,t){for(var n=document.getElementById(e),i=1;i<n.length;++i)if(n.options[i].value==t)return i;return 0}function W(){var e=document.getElementById("evi_select"),t=document.getElementById("evi_filename"),n=document.getElementById("evi_icon");0===e.selectedIndex?(t.style.display="initial",n.style.backgroundImage="url("+m+"evidence/"+t.value.toLowerCase()+")"):(t.style.display="none",n.style.backgroundImage="url("+m+"evidence/"+e.value.toLowerCase()+")")}function q(e){"jud"==e?(document.getElementById("judge_action").style.display="inline-table",document.getElementById("no_action").style.display="none"):(document.getElementById("no_action").style.display="inline-table",document.getElementById("judge_action").style.display="none");for(var t=0,n=document.getElementById("role_select").options;t<n.length;t++)if(e==n[t].value)return void(n.selectedIndex=t)}function K(){var e="",t=document.getElementById("bg_select"),n=document.getElementById("bg_command").value;e=0==t.selectedIndex?document.getElementById("bg_filename").value:t.value,pe.sendOOC("/"+n.replace("$1",e))}function Q(){var e=document.getElementById("role_select"),t=document.getElementById("role_command").value;pe.sendOOC("/"+t.replace("$1",e.value)),q(e.value)}function J(){pe.sendOOC("/"+document.getElementById("randomchar_command").value)}function Y(){$("#callmod_dialog").dialog("open")}function ee(){pe.sendRT("testimony1")}function te(){pe.sendRT("testimony2")}function ne(){pe.sendHP(1,String(parseInt(pe.hp[0])+1))}function ie(){pe.sendHP(1,String(parseInt(pe.hp[0])-1))}function oe(){pe.sendHP(2,String(parseInt(pe.hp[1])+1))}function se(){pe.sendHP(2,String(parseInt(pe.hp[1])-1))}function ae(){var e=document.getElementById("bg_select"),t=document.getElementById("bg_filename"),n=document.getElementById("bg_preview");0==e.selectedIndex?(t.style.display="initial",n.src=m+"background/"+t.value.toLowerCase()+"/defenseempty.png"):(t.style.display="none",n.src=m+"background/"+e.value.toLowerCase()+"/defenseempty.png")}function ce(e){e==f?(document.getElementById("button_effect_"+e).className="client_button",f=0):(document.getElementById("button_effect_"+e).className="client_button dark",f&&(document.getElementById("button_effect_"+f).className="client_button"),f=e)}function re(){pe.flip?document.getElementById("button_flip").className="client_button":document.getElementById("button_flip").className="client_button dark",pe.flip=!pe.flip}function le(){pe.presentable?document.getElementById("button_present").className="client_button":document.getElementById("button_present").className="client_button dark",pe.presentable=!pe.presentable}function de(e){e!=p&&(document.getElementById("menu_"+e).className="menu_icon active",document.getElementById("content_"+e).className="menu_content active",document.getElementById("menu_"+p).className="menu_icon",document.getElementById("content_"+p).className="menu_content",p=e)}function ue(e){e==y?(document.getElementById("button_"+e).className="client_button",y=0):(document.getElementById("button_"+e).className="client_button dark",y&&(document.getElementById("button_"+y).className="client_button"),y=e)}function me(e){return e.replace(/#/g,"<pound>").replace(/&/g,"<and>").replace(/%/g,"<percent>").replace(/\$/g,"<dollar>")}function he(e){return e.replace(/<pound>/g,"#").replace(/<and>/g,"&").replace(/<percent>/g,"%").replace(/<dollar>/g,"$")}function ge(e){var t=document.getElementById("client_encoding").value;if("unicode"==t)return e.replace(/[^\0-~]/g,function(e){return"\\u"+("000"+e.charCodeAt().toString(16)).slice(-4)});if("utf16"==t){for(var n=new ArrayBuffer(2*e.length),i=new Uint16Array(n),o=0,s=e.length;o<s;o++)i[o]=e.charCodeAt(o);return String(i)}return e}function fe(e){var t=document.getElementById("client_decoding").value;return"unicode"==t?e.replace(/\\u([\d\w]{1,})/gi,function(e,t){return String.fromCharCode(parseInt(t,16))}):"utf16"==t?String.fromCharCode.apply(null,new Uint16Array(e.split(","))):e}window.onOOCEnter=I,window.onEnter=C,window.musiclist_click=B,window.area_click=k,window.changeMusicVolume=x,window.changeSFXVolume=T,window.changeBlipVolume=S,window.changeCharacter=L,window.imgError=O,window.demoError=M,window.ReconnectButton=A,window.RetryButton=R,window.pickChar=j,window.pickEmotion=F,window.pickEvidence=U,window.addEvidence=Z,window.editEvidence=X,window.deleteEvidence=G,window.cancelEvidence=V,window.getIndexFromSelect=z,window.updateEvidenceIcon=W,window.updateActionCommands=q,window.changeBackgroundOOC=K,window.changeRoleOOC=Q,window.randomCharacterOOC=J,window.callMod=Y,window.initWT=ee,window.initCE=te,window.addHPD=ne,window.redHPD=ie,window.addHPP=oe,window.redHPP=se,window.updateBackgroundPreview=ae,window.toggleEffect=ce,window.toggleFlip=re,window.togglePresent=le,window.toggleMenu=de,window.toggleShout=ue,void 0===String.prototype.trim&&(String.prototype.trim=function(){return String(this).replace(/^\s+|\s+$/g,"")});var pe=new _(d),ye=new w;$(document).ready(function(){pe.initialObservBBCode(),pe.loadResources()}),$(function(){$("#callmod_dialog").dialog({autoOpen:!1,resizable:!1,show:{effect:"drop",direction:"down",duration:500},hide:{effect:"drop",direction:"down",duration:500},height:"auto",width:400,modal:!0,buttons:{Sure:function(){pe.sendZZ(""),$(this).dialog("close")},Cancel:function(){$(this).dialog("close")}}})})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=["Anime","birthday","Christmas","CountyCourt","CruiseCourt","default","DGDEnglishCourt","DGSJapanCourt","DualDestinies","EnglishCourt","gs4","GS4Night","HD","Khura'in","mlp","NewCourt","RuinedCourt","Sky","SpaceCourt","Themis","TouhouCourt","WitchTrialCourt","Zetta"]},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=["1.png","2.png","3.png","4.png","5.png","6.png","empty.png","lawyerbadge.png"]}]);
//# sourceMappingURL=client.b.js.map \ No newline at end of file
diff --git a/webAO/client.b.js.map b/webAO/client.b.js.map
index 7a38fc7..ee45b6e 100644
--- a/webAO/client.b.js.map
+++ b/webAO/client.b.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./webAO/evidence.js","webpack:///./webAO/backgrounds.js","webpack:///./webAO/client.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","onOOCEnter","onEnter","musiclist_click","area_click","changeMusicVolume","changeSFXVolume","changeBlipVolume","changeCharacter","imgError","demoError","ReconnectButton","RetryButton","pickChar","pickEmotion","pickEvidence","addEvidence","editEvidence","deleteEvidence","cancelEvidence","getIndexFromSelect","updateEvidenceIcon","updateActionCommands","changeBackgroundOOC","changeRoleOOC","randomCharacterOOC","callMod","initWT","initCE","addHPD","redHPD","addHPP","redHPP","updateBackgroundPreview","toggleEffect","toggleFlip","togglePresent","toggleMenu","toggleShout","queryDict","location","search","substr","split","forEach","item","serverIP","ip","mode","AO_HOST","asset","MUSIC_HOST","oldLoading","test","navigator","userAgent","selectedEffect","selectedMenu","selectedShout","lastICMessageTime","Date","Client","address","_this","this","_classCallCheck","serv","WebSocket","onopen","evt","onOpen","onclose","onClose","onmessage","onMessage","onerror","onError","flip","presentable","hp","playerID","charID","testimonyID","chars","emotes","evidences","resources","holdit","src","duration","objection","takethat","witnesstestimony","sfx","crossexamination","selectedEmote","selectedEvidence","checkUpdater","musicList","handlers","MS","args","handleMS","CT","handleCT","MC","handleMC","RMC","handleRMC","CI","handleCI","SC","handleSC","EI","handleEI","LE","handleLE","EM","handleEM","SM","handleSM","music","handlemusic","DONE","handleDONE","BN","handleBN","NBG","handleNBG","HP","handleHP","RT","handleRT","ZZ","handleZZ","ID","handleID","PN","handlePN","SI","handleSI","CharsCheck","handleCharsCheck","PV","handlePV","CHECK","_lastTimeICReceived","message","send","escapeChat","encodeChat","document","getElementById","speaking","silent","side","ssfxname","zoom","ssfxdelay","evidence","flash","color","desc","img","id","msg","testimony","track","_this2","hashCode","setInterval","sendCheck","evidence_select","add","Option","evidence_arr","background_select","background_arr","background","shouts","length","fileExists","toLowerCase","callbackLoadImageResources","callbackLoadSFXResources","result","resource","client","viewport","getAnimLength","callbackGetResourceLength","target","MutationObserver","mutations","mutation","children","addedNodes","node","tagName","style","getAttribute","hasAttribute","backgroundColor","observe","attributes","childList","character","song","e","display","joinServer","console","error","reason","code","textContent","cleanup","data","debug","header","handler","warn","close","clearInterval","unescapeChat","decodeChat","replace","chatmsg","content","innerHTML","preanim","escape","nameplate","prepChat","sound","type","snddelay","isnew","className","resetICParams","say","oocLog","scrollTop","scrollHeight","pause","play","appendICLog","Audio","totime","offset","getTime","addEventListener","currentTime","parseFloat","toFixed","chargs","icon","arg","filename","evidence_box","hmusiclist","newentry","createElement","text","options","flagAudio","newarea","onclick","appendChild","area_box","lastChild","startsWith","audio_title","insertBefore","firstChild","removeChild","bgname","bg_index","selectedIndex","changeBackground","percent_hp","$","animate","width","initTestimonyUpdater","tr","td","icon_chosen","thispick","me","emotesList","xhr","XMLHttpRequest","withCredentials","open","responseType","onload","status","linifile","responseText","pinifile","INI","parse","Options","Emotions","number","emoteinfo","esfx","esfxd","SoundN","SoundT","sfxdelay","button_off","button_on","Viewport","textnow","startpreanim","startspeaking","preanimdelay","blip","volume","blipChannels","Array","currentBlipChannel","sfxaudio","sfxplayed","updater","testimonyUpdater","testimonyTimer","shoutTimer","textTimer","_animating","clearTimeout","initUpdater","animdelay","parseInt","setTimeout","updateText","_this3","testimonyOverlay","updateTestimony","callback","param","request","gifInfo","gify","getInfo","response","log","_this4","disposeTestimony","_this5","nameBox","chatBox","charSprite","eviBox","shoutSprite","chatBoxInner","transform","opacity","height","shout","1","2","3","effect","direction","backgroundImage","right","left","fontSize","offsetHeight","hasChildNodes","createTextNode","0","4","5","6","charAt","substring","regex","section","comment","line","match","event","keyCode","sendOOC","mychar","myemo","myEmote","myevi","myEvidence","myflip","mycolor","checked","sendIC","playtrack","sendMusicChange","el","area","areaHr","setBlipVolume","sendLeaveRoom","image","url","xhttp","onreadystatechange","readyState","position","standname","bgfolder","bgFolder","callbackChangeBackground","toadd","arguments","undefined","time","entry","nameField","getMinutes","timeStamp","innerText","toLocaleTimeString","hour","minute","clientLog","ccharacter","sendCharacter","emo","icon_id","sendPE","sendEE","sendDE","select_box","select_element","evidence_filename","evidence_iconbox","role_select","bg_command","role_command","dialog","sendRT","sendHP","String","background_filename","background_preview","menu","estring","selectedEncoding","ch","charCodeAt","toString","slice","buffer","ArrayBuffer","Uint16Array","strLen","selectedDecoding","group","fromCharCode","apply","window","trim","hash","ready","initialObservBBCode","loadResources","autoOpen","resizable","show","hide","modal","buttons","Sure","sendZZ","Cancel"],"mappings":"aACA,IAAAA,KAGA,SAAAC,EAAAC,GAGA,GAAAF,EAAAE,GACA,OAAAF,EAAAE,GAAAC,QAGA,IAAAC,EAAAJ,EAAAE,IACAG,EAAAH,EACAI,GAAA,EACAH,YAUA,OANAI,EAAAL,GAAAM,KAAAJ,EAAAD,QAAAC,IAAAD,QAAAF,GAGAG,EAAAE,GAAA,EAGAF,EAAAD,QAKAF,EAAAQ,EAAAF,EAGAN,EAAAS,EAAAV,EAGAC,EAAAU,EAAA,SAAAR,EAAAS,EAAAC,GACAZ,EAAAa,EAAAX,EAAAS,IACAG,OAAAC,eAAAb,EAAAS,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAZ,EAAAmB,EAAA,SAAAjB,GACAY,OAAAC,eAAAb,EAAA,cAAiDkB,OAAA,KAIjDpB,EAAAqB,EAAA,SAAAlB,GACA,IAAAS,EAAAT,KAAAmB,WACA,WAA2B,OAAAnB,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAH,EAAAU,EAAAE,EAAA,IAAAA,GACAA,GAIAZ,EAAAa,EAAA,SAAAU,EAAAC,GAAsD,OAAAV,OAAAW,UAAAC,eAAAnB,KAAAgB,EAAAC,IAGtDxB,EAAA2B,EAAA,GAIA3B,IAAA4B,EAAA,8FClEC,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,kBACA,oBACA,iBACA,kBACA,kBACA,kBACA,iBACA,kBACA,gBACA,iBACA,oBACA,oBACA,sBACA,oBACA,mBACA,iBACA,kBACA,iBACA,kBACA,oBACA,iBACA,oBACA,gBACA,kBACA,kBACA,iBACA,mBACA,oBACA,kBACA,mBACA,kBACA,oBACA,qBACA,mBACA,oBACA,mBACA,gBACA,kBACA,oBACA,kBACA,qBACA,qBACA,sBACA,uBACA,sBACA,oBACA,qBACA,uBACA,wBACA,mBACA,oBACA,wBACA,yBACA,wBACA,oBACA,qBACA,sBACA,qBACA,qBACA,sBACA,uBACA,qBACA,oBACA,qBACA,wBACA,qBACA,oBACA,cACA,kBACA,eACA,kBACA,eACA,iBACA,gBACA,eACA,gBACA,cACA,eACA,gBACA,eACA,gBACA,cACA,cACA,cACA,eACA,eACA,eACA,eACA,iBACA,iBACA,kBACA,gBACA,eACA,mBACA,kBACA,mBACA,mBACA,kBACA,mBACA,kBACA,mBACA,mBACA,oBACA,kBACA,uBACA,wBACA,qBACA,sBACA,mBACA,mBACA,iBACA,kBACA,mBACA,kBACA,kBACA,oBACA,qBACA,mBACA,iBACA,qBACA,mBACA,sBACA,mBACA,oBACA,kBACA,iBACA,kBACA,cACA,YACA,aACA,aACA,eACA,eACA,gBACA,iBACA,iBACA,iBACA,aACA,iBACA,cACA,eACA,eACA,eACA,eACA,cACA,eACA,eACA,eACA,eACA,sBACA,uBACA,aACA,eACA,cACA,gBACA,cACA,gBACA,oBACA,cACA,cACA,eACA,eACA,iBACA,kBACA,mBACA,cACA,oBACA,aACA,cACA,cACA,mBACA,aACA,cACA,aACA,aACA,cACA,cACA,cACA,cACA,eACA,gBACA,gBACA,gBACA,gBACA,iBACA,qBACA,iBACA,eACA,cACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,aACA,iBACA,kBACA,iBACA,kBACA,eACA,gBACA,gBACA,eACA,gBACA,gBACA,gBACA,gBACA,sBACA,iBACA,cACA,eACA,oBACA,gBACA,iBACA,iBACA,gBACA,eACA,eACA,eACA,eACA,gBACA,iBACA,iBACA,iBACA,iBACA,eACA,gBACA,cACA,qBACA,sBACA,sBACA,eACA,mBACA,gBACA,cACA,iBACA,kBACA,gBACA,gBACA,mBACA,aACA,cACA,cACA,eACA,gBACA,eACA,gBACA,cACA,aACA,cACA,cACA,cACA,cACA,aACA,cACA,cACA,cACA,iBACA,oBACA,0BACA,oBACA,oBACA,cACA,oBACA,cACA,YACA,kBACA,eACA,YACA,gBACA,eACA,kBACA,gBACA,eACA,gBACA,gBACA,gBACA,iBACA,cACA,eACA,eACA,iBACA,kBACA,iBACA,kBACA,sBACA,gBACA,iBACA,gBACA,iBACA,aACA,cACA,cACA,cACA,sBACA,iBACA,kBACA,cACA,eACA,eACA,eACA,cACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,gBACA,gBACA,cACA,eACA,cACA,eACA,cACA,cACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,mBACA,aACA,cACA,oBACA,eACA,gBACA,aACA,cACA,cACA,kBACA,oBACA,qBACA,qBACA,gBACA,aACA,cACA,cACA,cACA,cACA,cACA,eACA,eACA,gBACA,kBACA,mBACA,mBACA,mBACA,iBACA,mBACA,gBACA,oBACA,qBACA,qBACA,qBACA,oBACA,kBACA,oBACA,qBACA,iBACA,kBACA,kBACA,oBACA,iBACA,kBACA,kBACA,qBACA,qBACA,kBACA,kBACA,mBACA,oBACA,iBACA,oBACA,kBACA,gBACA,WACA,YACA,YACA,YACA,YACA,gBACA,cACA,aACA,eACA,aACA,YACA,iBACA,eACA,eACA,mBACA,qBACA,sBACA,sBACA,sBACA,sBACA,sBACA,eACA,aACA,cACA,cACA,cACA,cACA,aACA,aACA,cACA,cACA,eACA,cACA,cACA,cACA,eACA,gBACA,gBACA,iBACA,0BACA,cACA,oBACA,eACA,YACA,aACA,aACA,WACA,YACA,YACA,cACA,aACA,eACA,gBACA,iBACA,YACA,aACA,aACA,aACA,eACA,cACA,cACA,YACA,mBACA,aACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,SACA,iBACA,kBACA,kBACA,kBACA,gBACA,iBACA,iBACA,cACA,eACA,cACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,oBACA,mBACA,aACA,cACA,cACA,cACA,eACA,eACA,iBACA,cACA,gBACA,eACA,gBACA,gBACA,cACA,oBACA,aACA,aACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,sBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,iBACA,gBACA,cACA,oBACA,mBACA,oBACA,oBACA,mBACA,iBACA,uBACA,oBACA,iBACA,mBACA,oBACA,mBACA,iBACA,mBACA,kBACA,sBACA,mBACA,oBACA,qBACA,oBACA,mBACA,oBACA,kBACA,kBACA,kBACA,sBACA,kBACA,oBACA,iBACA,kBACA,kBACA,oBACA,gBACA,kBACA,kBACA,mBACA,kBACA,mBACA,mBACA,wBACA,oBACA,mBACA,oBACA,qBACA,oBACA,mBACA,kBACA,iBACA,mBACA,oBACA,qBACA,cACA,eACA,YACA,aACA,YACA,aACA,cACA,cACA,cACA,aACA,cACA,cACA,cACA,cACA,aACA,YACA,aACA,aACA,aACA,iBACA,eACA,gBACA,mBACA,iBACA,eACA,gBACA,gBACA,aACA,WACA,cACA,aACA,cACA,cACA,cACA,aACA,cACA,iBACA,gBACA,iBACA,iBACA,aACA,cACA,cACA,kBACA,aACA,cACA,cACA,YACA,gBACA,eACA,iBACA,oBACA,0BACA,aACA,eACA,aACA,cACA,YACA,aACA,kBACA,kBACA,YACA,mBACA,YACA,aACA,aACA,gBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,cACA,eACA,gBACA,gBACA,gBACA,iBACA,kBACA,YACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cACA,cACA,cACA,aACA,iBACA,kBACA,kBACA,aACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,eACA,eACA,gBACA,cACA,eACA,cACA,eACA,eACA,eACA,eACA,eACA,eACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,cACA,eACA,gBACA,gBACA,eACA,iBACA,uBACA,eACA,cACA,eACA,eACA,eACA,eACA,eACA,eACA,aACA,cACA,cACA,eACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,cACA,eACA,aACA,aACA,cACA,cACA,gBACA,eACA,mBACA,mBACA,mBACA,qBACA,wBACA,sBACA,kBACA,mBACA,qBACA,oBACA,sBACA,uBACA,mBACA,qBACA,oBACA,kBACA,kBACA,oBACA,uBACA,sBACA,uBACA,qBACA,mBACA,sBACA,iBACA,kBACA,qBACA,wBACA,oBACA,uBACA,oBACA,qBACA,oBACA,mBACA,oBACA,qBACA,oBACA,oBACA,eACA,aACA,cACA,cACA,eACA,eACA,cACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,gBACA,gBACA,gBACA,cACA,cACA,cACA,eACA,eACA,eACA,cACA,gBACA,gBACA,cACA,eACA,eACA,eACA,gBACA,iBACA,aACA,cACA,cACA,mBACA,eACA,gBACA,gBACA,gBACA,aACA,cACA,cACA,kBACA,mBACA,mBACA,mBACA,oBACA,oBACA,oBACA,qBACA,cACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,UACA,gBACA,eACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,aACA,cACA,cACA,kBACA,oBACA,eACA,qBACA,sBACA,eACA,eACA,gBACA,cACA,cACA,gBACA,kBACA,oBACA,iBACA,iBACA,iBACA,qBACA,sBACA,oBACA,uBACA,uBACA,kBACA,mBACA,iBACA,kBACA,oBACA,kBACA,kBACA,iBACA,oBACA,mBACA,oBACA,oBACA,oBACA,wBACA,kBACA,mBACA,mBACA,oBACA,cACA,eACA,cACA,eACA,eACA,gBACA,aACA,cACA,sBACA,uBACA,gBACA,iBACA,iBACA,gBACA,cACA,eACA,cACA,eACA,eACA,eACA,cACA,2BACA,iBACA,eACA,gBACA,gBACA,aACA,cACA,iBACA,aACA,eACA,aACA,eACA,gBACA,cACA,cACA,eACA,eACA,cACA,eACA,gBACA,eACA,gBACA,iBACA,gBACA,cACA,cACA,mBACA,eACA,gBACA,cACA,mBACA,gBACA,iBACA,iBACA,qBACA,qBACA,eACA,iBACA,cACA,cACA,cACA,cACA,eACA,qBACA,iBACA,gBACA,mBACA,qBACA,0BACA,oBACA,kBACA,uBACA,oBACA,oBACA,qBACA,oBACA,gBACA,4BACA,qBACA,oBACA,oBACA,wBACA,oBACA,0BACA,mBACA,mBACA,mBACA,mBACA,wBACA,kBACA,wBACA,sBACA,eACA,yBACA,cACA,gBACA,iBACA,cACA,YACA,aACA,aACA,aACA,aACA,aACA,aACA,eACA,iBACA,eACA,gBACA,eACA,gBACA,eACA,gBACA,cACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,gBACA,gBACA,gBACA,gBACA,gBACA,aACA,cACA,kBACA,gBACA,gBACA,oBACA,qBACA,qBACA,mBACA,mBACA,2BACA,oBACA,oBACA,mBACA,oBACA,qBACA,sBACA,mBACA,wBACA,mBACA,mBACA,kBACA,kBACA,mBACA,oBACA,mBACA,mBACA,iBACA,oBACA,mBACA,kBACA,kBACA,mBACA,qBACA,mBACA,mBACA,mBACA,qBACA,oBACA,oBACA,mBACA,oBACA,kBACA,kBACA,oBACA,sBACA,mBACA,qBACA,mBACA,mBACA,mBACA,YACA,aACA,eACA,cACA,eACA,aACA,kBACA,aACA,cACA,gBACA,eACA,eACA,eACA,aACA,iBACA,cACA,aACA,oBACA,eACA,gBACA,aACA,cACA,cACA,cACA,iBACA,kBACA,iBACA,kBACA,iBACA,kBACA,mBACA,mBACA,aACA,cACA,cACA,cACA,cACA,cACA,cACA,eACA,cACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,aACA,kBACA,iBACA,eACA,eACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,WACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,iBACA,qBACA,kBACA,qBACA,gBACA,iBACA,iBACA,eACA,gBACA,iBACA,eACA,gBACA,iBACA,eACA,cACA,iBACA,aACA,aACA,gBACA,gBACA,mBACA,sBACA,kBACA,mBACA,kBACA,oBACA,mBACA,qBACA,oBACA,kBACA,gBACA,kBACA,mBACA,kBACA,sBACA,oBACA,iBACA,kBACA,iBACA,iBACA,mBACA,kBACA,gBACA,oBACA,kBACA,oBACA,kBACA,WACA,YACA,cACA,cACA,YACA,eACA,eACA,gBACA,gBACA,YACA,aACA,eACA,iBACA,eACA,aACA,WACA,YACA,aACA,cACA,cACA,cACA,cACA,mBACA,oBACA,YACA,aACA,cACA,cACA,cACA,gBACA,eACA,iBACA,cACA,cACA,aACA,cACA,eACA,gBACA,cACA,gBACA,iBACA,iBACA,kBACA,kBACA,mBACA,iBACA,kBACA,cACA,iBACA,aACA,cACA,cACA,cACA,cACA,cACA,cACA,gBACA,iBACA,iBACA,cACA,qBACA,sBACA,sBACA,eACA,gBACA,aACA,cACA,cACA,eACA,eACA,cACA,eACA,eACA,gBACA,iBACA,aACA,cACA,cACA,cACA,eACA,cACA,eACA,YACA,6GCvyCA,aACA,QACA,MACA,eACA,sBACA,WACA,YACA,WACA,mBACA,YACA,WACA,iBACA,YACA,YACA,cACA,aACA,aACA,eACA,YACA,WACA,eACA,WACA,aACA,oBACA,oBACA,mBACA,yBACA,iBACA,sBACA,kBACA,2BACA,mBACA,mBACA,cACA,kBACA,wBACA,sBACA,oBACA,YACA,uBACA,aACA,UACA,eACA,8BACA,yBACA,YACA,mBACA,qBACA,oBACA,oBACA,eACA,mBACA,sBACA,sBACA,cACA,oBACA,aACA,WACA,gBACA,iBACA,iBACA,oBACA,UACA,aACA,sBACA,WACA,kBACA,qBACA,wBACA,2BACA,kBACA,UACA,eACA,kBACA,iBACA,iBACA,oBACA,UACA,kBACA,mBACA,eACA,YACA,mBACA,oBACA,eACA,gBACA,kBACA,iBACA,UACA,mBACA,eACA,qBACA,iBACA,MACA,cACA,aACA,gBACA,QACA,SACA,gBACA,cACA,eACA,mBACA,cACA,cACA,eACA,WACA,gBACA,oBACA,WACA,gBACA,aACA,aACA,OACA,WACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,gBACA,iBACA,mBACA,iBACA,kBACA,uBACA,kBACA,KACA,cACA,kBACA,cACA,cACA,aACA,aACA,aACA,aACA,aACA,cACA,OACA,YACA,aACA,MACA,eACA,SACA,cACA,iBACA,YACA,sBACA,gBACA,YACA,eACA,eACA,kBACA,iBACA,eACA,wBACA,cACA,cACA,gBACA,eACA,cACA,mBACA,iBACA,kBACA,cACA,mBACA,eACA,kBACA,kBACA,kBACA,iBACA,cACA,cACA,eACA,gBACA,aACA,aACA,iBACA,aACA,YACA,cACA,YACA,YACA,iBACA,cACA,eACA,YACA,KACA,UACA,cACA,gBACA,6BACA,gBACA,mBACA,UACA,UACA,kBACA,sBACA,kBACA,gBACA,UACA,UACA,MACA,mBACA,oBACA,wBACA,4BACA,6BACA,kBACA,gBACA,YACA,kBACA,aACA,aACA,eACA,OACA,YACA,WACA,gBACA,kBACA,gBACA,mBACA,sBACA,kBACA,gBACA,gBACA,oBACA,oBACA,qBACA,aACA,oBACA,kBACA,eACA,SACA,UACA,WACA,SACA,SACA,UACA,WACA,UACA,eACA,cACA,cACA,gBACA,SACA,WACA,eACA,mBACA,mBACA,yBACA,0BACA,cACA,eACA,eACA,YACA,uBACA,oBACA,KACA,SACA,kBACA,aACA,WACA,SACA,kBACA,aACA,aACA,kBACA,oBACA,oBACA,eACA,iBACA,sBACA,WACA,cACA,iBACA,YACA,kBACA,kBACA,oBACA,aACA,wBACA,wBACA,oBACA,iBACA,mBACA,eACA,gBACA,kBACA,oBACA,YACA,WACA,UACA,aACA,cACA,mBACA,WACA,SACA,iBACA,QACA,YACA,UACA,iBACA,qBACA,mBACA,sBACA,6BACA,kCACA,0BACA,2BACA,uBACA,wBACA,0BACA,0BACA,iBACA,mBACA,wBACA,iCACA,6BACA,sBACA,kBACA,mBACA,0BACA,mBACA,gBACA,oBACA,kBACA,kBACA,4BACA,yBACA,uBACA,cACA,qBACA,mBACA,cACA,eACA,iBACA,oBACA,eACA,wBACA,sBACA,iBACA,gBACA,cACA,iBACA,oBACA,UACA,cACA,YACA,yBACA,aACA,SACA,WACA,aACA,eACA,yBACA,aACA,aACA,WACA,QACA,WACA,eACA,gBACA,gBACA,sBACA,WACA,UACA,cACA,gBACA,gBACA,iBACA,0BACA,kBACA,oBACA,aACA,eACA,mBACA,gBACA,eACA,YACA,aACA,SACA,eACA,eACA,cACA,gBACA,gBACA,gBACA,QACA,mBACA,cACA,SACA,cACA,WACA,cACA,aACA,YACA,eACA,UACA,UACA,UACA,WACA,aACA,aACA,iBACA,WACA,WACA,YACA,YACA,YACA,aACA,WACA,UACA,eACA,QACA,gBACA,UACA,uBACA,kBACA,eACA,qBACA,yBACA,mBACA,8BACA,kCACA,sBACA,eACA,qBACA,yBACA,yBACA,eACA,oBACA,cACA,yBACA,cACA,iBACA,SACA,YACA,eACA,cACA,oBACA,aACA,kBACA,gBACA,YACA,kBACA,aACA,WACA,iBACA,qBACA,WACA,cACA,eACA,iBACA,eACA,iBACA,cACA,gBACA,aACA,aACA,sBACA,WACA,cACA,WACA,oBACA,kBACA,eACA,iBACA,eACA,2BACA,yBACA,aACA,eACA,aACA,UACA,YACA,aACA,OACA,YACA,uBACA,oBACA,qBACA,qBACA,qBACA,sBACA,uBACA,uBACA,uBACA,wBACA,kBACA,cACA,eACA,cACA,iBACA,cACA,eACA,qBACA,eACA,oBACA,eACA,qBACA,aACA,gBACA,gBACA,gBACA,WACA,YACA,YACA,aACA,eACA,aACA,cACA,YACA,YACA,aACA,cACA,SACA,iBACA,oBACA,WACA,cACA,MACA,UACA,WACA,oBACA,gBACA,sBACA,aACA,iBACA,kBACA,mBACA,mBACA,oBACA,gBACA,mBACA,YACA,YACA,WACA,uBACA,WACA,cACA,YACA,cACA,cACA,SACA,iBACA,wBACA,SACA,WACA,gBACA,mBACA,oBACA,mBACA,wBACA,eACA,iBACA,iBACA,aACA,iBACA,SACA,UACA,gBACA,iBACA,cACA,QACA,OACA,aACA,aACA,iBACA,aACA,aACA,oBACA,0BACA,OACA,MACA,SACA,SACA,OACA,OACA,kBACA,MACA,iBACA,UACA,mBACA,kBACA,oBACA,YACA,gBACA,gBACA,eACA,OACA,QACA,YACA,gBACA,aACA,WACA,WACA,WACA,QACA,UACA,UACA,UACA,UACA,YACA,SACA,aACA,OACA,mBACA,SACA,eACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,cACA,kBACA,UACA,oBACA,iBACA,uBACA,kBACA,UACA,aACA,kBACA,kBACA,aACA,aACA,oBACA,oBACA,gBACA,kBACA,UACA,UACA,eACA,SACA,MACA,WACA,MACA,KACA,MACA,qBACA,6BACA,0BACA,4BACA,yBACA,2BACA,uBACA,wBACA,0BACA,wBACA,SACA,SACA,eACA,eACA,kBACA,kBACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,aACA,SACA,YACA,cACA,iBACA,uBACA,cACA,mBACA,iBACA,uBACA,YACA,qBACA,iBACA,MACA,WACA,oBACA,SACA,gBACA,oBACA,iBACA,MACA,8BACA,oBACA,gCACA,sBACA,sBACA,YACA,wBACA,cACA,QACA,YACA,aACA,iBACA,cACA,YACA,aACA,yBACA,iBACA,aACA,6VCokBeC,eAYAC,YAuCAC,oBAUAC,eAcAC,sBAQAC,oBAQAC,qBASAC,oBAWAC,aAWAC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","file":"client.b.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","export default [\r\n\t\"1.gif\",\r\n\t\"1.png\",\r\n\t\"2.png\",\r\n\t\"3.png\",\r\n\t\"4.png\",\r\n\t\"5.gif\",\r\n\t\"5.png\",\r\n\t\"6.gif\",\r\n\t\"6.png\",\r\n\t\"AACastApril.png\",\r\n\t\"AACastBellboy.png\",\r\n\t\"AACastButz.png\",\r\n\t\"AACastButz2.png\",\r\n\t\"AACastButz3.png\",\r\n\t\"AACastCindy.png\",\r\n\t\"AACastCody.png\",\r\n\t\"AACastDarke.png\",\r\n\t\"AACastEma.png\",\r\n\t\"AACastGant.png\",\r\n\t\"AACastGoodman.png\",\r\n\t\"AACastGregory.png\",\r\n\t\"AACastGrossberg.png\",\r\n\t\"AACastGumshoe.png\",\r\n\t\"AACastHammer.png\",\r\n\t\"AACastJake.png\",\r\n\t\"AACastJudge.png\",\r\n\t\"AACastLana.png\",\r\n\t\"AACastLotta.png\",\r\n\t\"AACastManfred.png\",\r\n\t\"AACastMaya.png\",\r\n\t\"AACastMeekins.png\",\r\n\t\"AACastMia.png\",\r\n\t\"AACastMiles.png\",\r\n\t\"AACastMisty.png\",\r\n\t\"AACastNeil.png\",\r\n\t\"AACastOldbag.png\",\r\n\t\"AACastOldbag2.png\",\r\n\t\"AACastPayne.png\",\r\n\t\"AACastPayne2.png\",\r\n\t\"AACastPenny.png\",\r\n\t\"AACastPhoenix.png\",\r\n\t\"AACastPhoenix2.png\",\r\n\t\"AACastPowers.png\",\r\n\t\"AACastPowers2.png\",\r\n\t\"AACastSahwit.png\",\r\n\t\"AACastSal.png\",\r\n\t\"AACastStarr.png\",\r\n\t\"AACastVasquez.png\",\r\n\t\"AACastWhite.png\",\r\n\t\"AAI2CastBlaise.png\",\r\n\t\"AAI2CastBonnie.png\",\r\n\t\"AAI2CastCameron.png\",\r\n\t\"AAI2CastCourtney.png\",\r\n\t\"AAI2CastDelicia.png\",\r\n\t\"AAI2CastDogen.png\",\r\n\t\"AAI2CastElbird.png\",\r\n\t\"AAI2CastGustavia.png\",\r\n\t\"AAI2CastGustavia2.png\",\r\n\t\"AAI2CastJill.png\",\r\n\t\"AAI2CastKarin.png\",\r\n\t\"AAI2CastKatherine.png\",\r\n\t\"AAI2CastKatherine2.png\",\r\n\t\"AAI2CastKnightley.png\",\r\n\t\"AAI2CastMarsh.png\",\r\n\t\"AAI2CastMaster.png\",\r\n\t\"AAI2CastMaster2.png\",\r\n\t\"AAI2CastNicole.png\",\r\n\t\"AAI2CastPierre.png\",\r\n\t\"AAI2CastRaymond.png\",\r\n\t\"AAI2CastRaymond2.png\",\r\n\t\"AAI2CastRoland.png\",\r\n\t\"AAI2CastRooke.png\",\r\n\t\"AAI2CastSahwit.png\",\r\n\t\"AAI2CastSebastian.png\",\r\n\t\"AAI2CastShelly.png\",\r\n\t\"AAI2CastSimon.png\",\r\n\t\"AAI2bag.png\",\r\n\t\"AAI2balloon.png\",\r\n\t\"AAI2bell.png\",\r\n\t\"AAI2blanket.png\",\r\n\t\"AAI2body.png\",\r\n\t\"AAI2button.png\",\r\n\t\"AAI2chess.png\",\r\n\t\"AAI2clip.png\",\r\n\t\"AAI2cuffs.png\",\r\n\t\"AAI2dog.png\",\r\n\t\"AAI2door.png\",\r\n\t\"AAI2floor.png\",\r\n\t\"AAI2gate.png\",\r\n\t\"AAI2glove.png\",\r\n\t\"AAI2gun.png\",\r\n\t\"AAI2key.png\",\r\n\t\"AAI2map.png\",\r\n\t\"AAI2map2.png\",\r\n\t\"AAI2map3.png\",\r\n\t\"AAI2note.png\",\r\n\t\"AAI2rope.png\",\r\n\t\"AAI2shovel.png\",\r\n\t\"AAI2tunnel.png\",\r\n\t\"AAI2uniform.png\",\r\n\t\"AAI2video.png\",\r\n\t\"AAI2well.png\",\r\n\t\"AAICastAkbey.png\",\r\n\t\"AAICastAlba.png\",\r\n\t\"AAICastAlba2.png\",\r\n\t\"AAICastAmano.png\",\r\n\t\"AAICastBadd.png\",\r\n\t\"AAICastBuddy.png\",\r\n\t\"AAICastButz.png\",\r\n\t\"AAICastByrne.png\",\r\n\t\"AAICastCammy.png\",\r\n\t\"AAICastDeacon.png\",\r\n\t\"AAICastDeid.png\",\r\n\t\"AAICastFranziska.png\",\r\n\t\"AAICastFranziska2.png\",\r\n\t\"AAICastGumshoe.png\",\r\n\t\"AAICastGumshoe2.png\",\r\n\t\"AAICastHuang.png\",\r\n\t\"AAICastJudge.png\",\r\n\t\"AAICastKay.png\",\r\n\t\"AAICastKay2.png\",\r\n\t\"AAICastLance.png\",\r\n\t\"AAICastLang.png\",\r\n\t\"AAICastMack.png\",\r\n\t\"AAICastMaggey.png\",\r\n\t\"AAICastManfred.png\",\r\n\t\"AAICastManny.png\",\r\n\t\"AAICastNou.png\",\r\n\t\"AAICastPalaeno.png\",\r\n\t\"AAICastPaups.png\",\r\n\t\"AAICastPortsman.png\",\r\n\t\"AAICastRhoda.png\",\r\n\t\"AAICastShihna.png\",\r\n\t\"AAICastSkye.png\",\r\n\t\"AAICastYew.png\",\r\n\t\"AAICastZinc.png\",\r\n\t\"AAIFIRE.png\",\r\n\t\"AAIad.png\",\r\n\t\"AAIad2.png\",\r\n\t\"AAIad3.png\",\r\n\t\"AAIarrow.png\",\r\n\t\"AAIbadge.png\",\r\n\t\"AAIbadger.png\",\r\n\t\"AAIbadger2.png\",\r\n\t\"AAIbadger3.png\",\r\n\t\"AAIbadger4.png\",\r\n\t\"AAIbag.png\",\r\n\t\"AAIballoon.png\",\r\n\t\"AAIbody.png\",\r\n\t\"AAIbody2.png\",\r\n\t\"AAIbody3.png\",\r\n\t\"AAIbody4.png\",\r\n\t\"AAIbody5.png\",\r\n\t\"AAIbook.png\",\r\n\t\"AAIbook2.png\",\r\n\t\"AAIbook3.png\",\r\n\t\"AAIbook4.png\",\r\n\t\"AAIboxes.png\",\r\n\t\"AAIbusinesscard.png\",\r\n\t\"AAIbusinesscard2.png\",\r\n\t\"AAIcar.png\",\r\n\t\"AAIcargo.png\",\r\n\t\"AAIcart.png\",\r\n\t\"AAIchange.png\",\r\n\t\"AAIclip.png\",\r\n\t\"AAIcravat.png\",\r\n\t\"AAIdecoration.png\",\r\n\t\"AAIdoor.png\",\r\n\t\"AAIfile.png\",\r\n\t\"AAIfile2.png\",\r\n\t\"AAIfile3.png\",\r\n\t\"AAIflowers.png\",\r\n\t\"AAIfountain.png\",\r\n\t\"AAIfountain2.png\",\r\n\t\"AAIgift.png\",\r\n\t\"AAIguitarpick.png\",\r\n\t\"AAIgun.png\",\r\n\t\"AAIgun2.png\",\r\n\t\"AAIgun3.png\",\r\n\t\"AAIhandprint.png\",\r\n\t\"AAIhat.png\",\r\n\t\"AAIhoop.png\",\r\n\t\"AAIink.png\",\r\n\t\"AAIkey.png\",\r\n\t\"AAIkey2.png\",\r\n\t\"AAIkey3.png\",\r\n\t\"AAIkey4.png\",\r\n\t\"AAIkey5.png\",\r\n\t\"AAIknife.png\",\r\n\t\"AAIknife2.png\",\r\n\t\"AAIknife3.png\",\r\n\t\"AAIknife4.png\",\r\n\t\"AAIknife5.png\",\r\n\t\"AAIlantern.png\",\r\n\t\"AAIlittlethief.png\",\r\n\t\"AAIluggage.png\",\r\n\t\"AAImoney.png\",\r\n\t\"AAInote.png\",\r\n\t\"AAInote2.png\",\r\n\t\"AAInote3.png\",\r\n\t\"AAInote4.png\",\r\n\t\"AAInote5.png\",\r\n\t\"AAInote6.png\",\r\n\t\"AAInote7.png\",\r\n\t\"AAInote8.png\",\r\n\t\"AAInote9.png\",\r\n\t\"AAInote10.png\",\r\n\t\"AAInote11.png\",\r\n\t\"AAInote12.png\",\r\n\t\"AAInote13.png\",\r\n\t\"AAInote14.png\",\r\n\t\"AAInote15.png\",\r\n\t\"AAInote16.png\",\r\n\t\"AAInote17.png\",\r\n\t\"AAIpen.png\",\r\n\t\"AAIpendant.png\",\r\n\t\"AAIpendant2.png\",\r\n\t\"AAIperfume.png\",\r\n\t\"AAIperfume2.png\",\r\n\t\"AAIphone.png\",\r\n\t\"AAIphone2.png\",\r\n\t\"AAIphone3.png\",\r\n\t\"AAIphoto.png\",\r\n\t\"AAIphoto2.png\",\r\n\t\"AAIphoto3.png\",\r\n\t\"AAIphoto4.png\",\r\n\t\"AAIplates.png\",\r\n\t\"AAIquercuswound.png\",\r\n\t\"AAIreceipt.png\",\r\n\t\"AAIsafe.png\",\r\n\t\"AAIsafe2.png\",\r\n\t\"AAIsciencekit.png\",\r\n\t\"AAIshards.png\",\r\n\t\"AAIshards2.png\",\r\n\t\"AAIshards3.png\",\r\n\t\"AAIshears.png\",\r\n\t\"AAIshirt.png\",\r\n\t\"AAIsnack.png\",\r\n\t\"AAIspear.png\",\r\n\t\"AAIspill.png\",\r\n\t\"AAIstatue.png\",\r\n\t\"AAIstatue2.png\",\r\n\t\"AAIstatue3.png\",\r\n\t\"AAIstatue4.png\",\r\n\t\"AAIsuspect.png\",\r\n\t\"AAIsword.png\",\r\n\t\"AAIsword2.png\",\r\n\t\"AAItape.png\",\r\n\t\"AAItonosamanju.png\",\r\n\t\"AAItonosamanju2.png\",\r\n\t\"AAItonosamanju3.png\",\r\n\t\"AAIvideo.png\",\r\n\t\"AAIwakasaman.png\",\r\n\t\"AAIwallet.png\",\r\n\t\"AAIwire.png\",\r\n\t\"AATHATCARD.png\",\r\n\t\"AAaffidavit.png\",\r\n\t\"AAairtube.png\",\r\n\t\"AAautopsy.png\",\r\n\t\"AAbluebadger.png\",\r\n\t\"AAbook.png\",\r\n\t\"AAbook2.png\",\r\n\t\"AAbook3.png\",\r\n\t\"AAbullet.png\",\r\n\t\"AAbullet2.png\",\r\n\t\"AAcamera.png\",\r\n\t\"AAcamera2.png\",\r\n\t\"AAcards.png\",\r\n\t\"AAclip.png\",\r\n\t\"AAclip2.png\",\r\n\t\"AAclip3.png\",\r\n\t\"AAclip4.png\",\r\n\t\"AAclip5.png\",\r\n\t\"AAdata.png\",\r\n\t\"AAdata2.png\",\r\n\t\"AAdata3.png\",\r\n\t\"AAdata4.png\",\r\n\t\"AAenvelope.png\",\r\n\t\"AAevidencelaw.png\",\r\n\t\"AAfingerprintpowder.png\",\r\n\t\"AAfirecracker.png\",\r\n\t\"AAfishingpole.png\",\r\n\t\"AAflyer.png\",\r\n\t\"AAglassshards.png\",\r\n\t\"AAglove.png\",\r\n\t\"AAgun.png\",\r\n\t\"AAhandprint.png\",\r\n\t\"AAidcard.png\",\r\n\t\"AAkey.png\",\r\n\t\"AAkeycard.png\",\r\n\t\"AAknife1.png\",\r\n\t\"AAkoptrophy.png\",\r\n\t\"AAleather.png\",\r\n\t\"AAlocker.png\",\r\n\t\"AAlocker2.png\",\r\n\t\"AAlocker3.png\",\r\n\t\"AAluminol.png\",\r\n\t\"AAluminol2.png\",\r\n\t\"AAlunch.png\",\r\n\t\"AAlunch2.png\",\r\n\t\"AAlunch3.png\",\r\n\t\"AAmagatama.png\",\r\n\t\"AAmagatama2.png\",\r\n\t\"AAmayanote.png\",\r\n\t\"AAmayoinote.png\",\r\n\t\"AAmetaldetector.png\",\r\n\t\"AAmissile.png\",\r\n\t\"AAmissile2.png\",\r\n\t\"AAmissle2.png\",\r\n\t\"AAmrmonkey.png\",\r\n\t\"AAnote.png\",\r\n\t\"AAnote2.png\",\r\n\t\"AAnote3.png\",\r\n\t\"AAnote4.png\",\r\n\t\"AAparkingticket.png\",\r\n\t\"AApassport.png\",\r\n\t\"AApassport2.png\",\r\n\t\"AAphone.png\",\r\n\t\"AAphone2.png\",\r\n\t\"AAphone3.png\",\r\n\t\"AAphone4.png\",\r\n\t\"AAphoto.png\",\r\n\t\"AAphoto2.png\",\r\n\t\"AAphoto3.png\",\r\n\t\"AAphoto4.png\",\r\n\t\"AAphoto5.png\",\r\n\t\"AAphoto6.png\",\r\n\t\"AAphoto7.png\",\r\n\t\"AAphoto8.png\",\r\n\t\"AAphoto9.png\",\r\n\t\"AAphoto10.png\",\r\n\t\"AAphoto11.png\",\r\n\t\"AApills.png\",\r\n\t\"AApills2.png\",\r\n\t\"AAplate.png\",\r\n\t\"AAplate2.png\",\r\n\t\"AApolly.png\",\r\n\t\"AAprint.png\",\r\n\t\"AAprint2.png\",\r\n\t\"AAprint3.png\",\r\n\t\"AAprint4.png\",\r\n\t\"AAprint5.png\",\r\n\t\"AAprint6.png\",\r\n\t\"AAprint7.png\",\r\n\t\"AAprint8.png\",\r\n\t\"AApsychelock.png\",\r\n\t\"AAsafe.png\",\r\n\t\"AAscarf.png\",\r\n\t\"AAscrewdriver.png\",\r\n\t\"AAscript.png\",\r\n\t\"AAscript2.png\",\r\n\t\"AAshoe.png\",\r\n\t\"AAshoe2.png\",\r\n\t\"AAspear.png\",\r\n\t\"AAstudiovan.png\",\r\n\t\"AAswitchblade.png\",\r\n\t\"AAswitchblade2.png\",\r\n\t\"AAswitchblade3.png\",\r\n\t\"AAthinker.png\",\r\n\t\"AAvase.png\",\r\n\t\"AAvase2.png\",\r\n\t\"AAvase3.png\",\r\n\t\"AAvase4.png\",\r\n\t\"AAvase5.png\",\r\n\t\"AAvideo.png\",\r\n\t\"AAvideo2.png\",\r\n\t\"AAwallet.png\",\r\n\t\"AAwiretap.png\",\r\n\t\"AJCastAlita.png\",\r\n\t\"AJCastApollo.png\",\r\n\t\"AJCastDaryan.jpg\",\r\n\t\"AJCastDaryan.png\",\r\n\t\"AJCastDrew.png\",\r\n\t\"AJCastEldoon.png\",\r\n\t\"AJCastEma.png\",\r\n\t\"AJCastKlavier.png\",\r\n\t\"AJCastKlavier2.png\",\r\n\t\"AJCastKristoph.png\",\r\n\t\"AJCastLamiroir.png\",\r\n\t\"AJCastLeTouse.png\",\r\n\t\"AJCastMachi.png\",\r\n\t\"AJCastMagnifi.png\",\r\n\t\"AJCastMeraktis.png\",\r\n\t\"AJCastOlga.png\",\r\n\t\"AJCastOlga2.png\",\r\n\t\"AJCastPayne.png\",\r\n\t\"AJCastPhoenix.png\",\r\n\t\"AJCastPlum.png\",\r\n\t\"AJCastShadi.png\",\r\n\t\"AJCastSpark.png\",\r\n\t\"AJCastStickler.png\",\r\n\t\"AJCastThalassa.png\",\r\n\t\"AJCastTrucy.gif\",\r\n\t\"AJCastTrucy.png\",\r\n\t\"AJCastValant.png\",\r\n\t\"AJCastValant2.png\",\r\n\t\"AJCastVera.png\",\r\n\t\"AJCastWinfred.png\",\r\n\t\"AJCastWocky.png\",\r\n\t\"AJCastZak.png\",\r\n\t\"AJad.png\",\r\n\t\"AJad2.png\",\r\n\t\"AJad3.png\",\r\n\t\"AJad4.png\",\r\n\t\"AJad5.png\",\r\n\t\"AJautopsy.png\",\r\n\t\"AJbadge.png\",\r\n\t\"AJbook.png\",\r\n\t\"AJbottle.png\",\r\n\t\"AJbowl.png\",\r\n\t\"AJbox.png\",\r\n\t\"AJbracelet.png\",\r\n\t\"AJbrooch.png\",\r\n\t\"AJbullet.png\",\r\n\t\"AJburntstuff.png\",\r\n\t\"AJbusinesscard.png\",\r\n\t\"AJbusinesscard2.png\",\r\n\t\"AJbusinesscard3.png\",\r\n\t\"AJbusinesscard4.png\",\r\n\t\"AJbusinesscard5.png\",\r\n\t\"AJbusinesscard6.png\",\r\n\t\"AJbutton.png\",\r\n\t\"AJcard.png\",\r\n\t\"AJcard2.png\",\r\n\t\"AJcard3.png\",\r\n\t\"AJcard4.png\",\r\n\t\"AJcard5.png\",\r\n\t\"AJcart.png\",\r\n\t\"AJclip.png\",\r\n\t\"AJclip2.png\",\r\n\t\"AJclip3.png\",\r\n\t\"AJcocoon.png\",\r\n\t\"AJdata1.png\",\r\n\t\"AJdata2.png\",\r\n\t\"AJdata3.png\",\r\n\t\"AJdevice.png\",\r\n\t\"AJdevice2.png\",\r\n\t\"AJdevice3.png\",\r\n\t\"AJearpiece.png\",\r\n\t\"AJfingerprintpowder.png\",\r\n\t\"AJframe.png\",\r\n\t\"AJgoldsnackoo.png\",\r\n\t\"AJguitar.png\",\r\n\t\"AJgun.png\",\r\n\t\"AJgun2.png\",\r\n\t\"AJgun3.png\",\r\n\t\"AJiv.png\",\r\n\t\"AJiv2.png\",\r\n\t\"AJkey.png\",\r\n\t\"AJknife.png\",\r\n\t\"AJlamp.png\",\r\n\t\"AJlocket.png\",\r\n\t\"AJluminol.png\",\r\n\t\"AJmagatama.png\",\r\n\t\"AJmap.png\",\r\n\t\"AJmap2.png\",\r\n\t\"AJmap3.png\",\r\n\t\"AJmap4.png\",\r\n\t\"AJmirror.png\",\r\n\t\"AJmixer.png\",\r\n\t\"AJmrhat.png\",\r\n\t\"AJmug.png\",\r\n\t\"AJnailpolish.png\",\r\n\t\"AJnote.png\",\r\n\t\"AJnote2.png\",\r\n\t\"AJnote3.png\",\r\n\t\"AJnote4.png\",\r\n\t\"AJnote5.png\",\r\n\t\"AJnote6.png\",\r\n\t\"AJnote7.png\",\r\n\t\"AJnote8.png\",\r\n\t\"AJnote9.png\",\r\n\t\"AJnote10.png\",\r\n\t\"AJnote11.png\",\r\n\t\"AJnote12.png\",\r\n\t\"AJnote13.png\",\r\n\t\"AJnote14.png\",\r\n\t\"AJnote15.png\",\r\n\t\"AJnote16.png\",\r\n\t\"AJnote17.png\",\r\n\t\"AJnote18.png\",\r\n\t\"AJnote19.png\",\r\n\t\"AJnote\",\r\n\t\"AJpainting.png\",\r\n\t\"AJpainting2.png\",\r\n\t\"AJpainting3.png\",\r\n\t\"AJpainting4.png\",\r\n\t\"AJpanties.png\",\r\n\t\"AJpanties2.png\",\r\n\t\"AJpanties3.png\",\r\n\t\"AJphone.png\",\r\n\t\"AJphone2.png\",\r\n\t\"AJphoto.png\",\r\n\t\"AJphoto2.png\",\r\n\t\"AJphoto3.png\",\r\n\t\"AJphoto4.png\",\r\n\t\"AJphoto5.png\",\r\n\t\"AJphoto6.png\",\r\n\t\"AJphoto7.png\",\r\n\t\"AJphoto8.png\",\r\n\t\"AJpoisonspray.png\",\r\n\t\"AJsciencekit.png\",\r\n\t\"AJshoe.png\",\r\n\t\"AJshoe2.png\",\r\n\t\"AJshoe3.png\",\r\n\t\"AJsnack.png\",\r\n\t\"AJsnack2.png\",\r\n\t\"AJsnack3.png\",\r\n\t\"AJsnackoos.png\",\r\n\t\"AJstamp.png\",\r\n\t\"AJsyringe.png\",\r\n\t\"AJticket.png\",\r\n\t\"AJticket2.png\",\r\n\t\"AJticket3.png\",\r\n\t\"AJvideo.png\",\r\n\t\"AJxraymachine.png\",\r\n\t\"Compin.png\",\r\n\t\"Credit.png\",\r\n\t\"CustomEvidence1.png\",\r\n\t\"CustomEvidence2.png\",\r\n\t\"CustomEvidence3.png\",\r\n\t\"CustomEvidence4.png\",\r\n\t\"CustomEvidence5.png\",\r\n\t\"CustomEvidence6.png\",\r\n\t\"CustomEvidence7.png\",\r\n\t\"CustomEvidence8.png\",\r\n\t\"CustomEvidence9.png\",\r\n\t\"CustomEvidence10.png\",\r\n\t\"CustomEvidence11.png\",\r\n\t\"CustomEvidence12.png\",\r\n\t\"CustomEvidence13.png\",\r\n\t\"CustomEvidence14.png\",\r\n\t\"CustomEvidence15.png\",\r\n\t\"CustomEvidence16.png\",\r\n\t\"CustomEvidence17.png\",\r\n\t\"CustomEvidence18.png\",\r\n\t\"CustomEvidence19.png\",\r\n\t\"CustomEvidence\",\r\n\t\"DDAutopsy.png\",\r\n\t\"DDBadge.png\",\r\n\t\"DDCaseCandice.png\",\r\n\t\"DDCastApollo.png\",\r\n\t\"DDCastApollo2.png\",\r\n\t\"DDCastApollo3.png\",\r\n\t\"DDCastAthena.png\",\r\n\t\"DDCastAura.png\",\r\n\t\"DDCastBlackquill.png\",\r\n\t\"DDCastCandice.png\",\r\n\t\"DDCastClay.png\",\r\n\t\"DDCastClonco.png\",\r\n\t\"DDCastClonco2.png\",\r\n\t\"DDCastCourte.png\",\r\n\t\"DDCastCrab.png\",\r\n\t\"DDCastDamien.png\",\r\n\t\"DDCastFilch.png\",\r\n\t\"DDCastFulbright.png\",\r\n\t\"DDCastJinxie.png\",\r\n\t\"DDCastJuniper.png\",\r\n\t\"DDCastJuniper2.png\",\r\n\t\"DDCastKlavier.png\",\r\n\t\"DDCastLBelle.png\",\r\n\t\"DDCastLBelle2.png\",\r\n\t\"DDCastMeans.png\",\r\n\t\"DDCastMetis.png\",\r\n\t\"DDCastMiles.png\",\r\n\t\"DDCastNineTails.png\",\r\n\t\"DDCastNorma.png\",\r\n\t\"DDCastOConnor.png\",\r\n\t\"DDCastOrla.png\",\r\n\t\"DDCastPayne.png\",\r\n\t\"DDCastPearl.png\",\r\n\t\"DDCastPhoenix.png\",\r\n\t\"DDCastRex.png\",\r\n\t\"DDCastRimes.png\",\r\n\t\"DDCastRobin.png\",\r\n\t\"DDCastRobin2.png\",\r\n\t\"DDCastSasha.png\",\r\n\t\"DDCastSasha2.png\",\r\n\t\"DDCastSasha3.png\",\r\n\t\"DDCastScuttlebutt.png\",\r\n\t\"DDCastShipley.png\",\r\n\t\"DDCastSniper.png\",\r\n\t\"DDCastSniper2.png\",\r\n\t\"DDCastStarbuck.png\",\r\n\t\"DDCastSummers.png\",\r\n\t\"DDCastTonate.png\",\r\n\t\"DDCastTrucy.png\",\r\n\t\"DDCastYuri.png\",\r\n\t\"DDSTEPladder.png\",\r\n\t\"DDScrewdriver.png\",\r\n\t\"DDStatueStands.png\",\r\n\t\"DDarrow.png\",\r\n\t\"DDbadge2.png\",\r\n\t\"DDbag.png\",\r\n\t\"DDball.png\",\r\n\t\"DDbed.png\",\r\n\t\"DDbomb.png\",\r\n\t\"DDbomb2.png\",\r\n\t\"DDbomb3.png\",\r\n\t\"DDbomb4.png\",\r\n\t\"DDbook.png\",\r\n\t\"DDbook2.png\",\r\n\t\"DDbook3.png\",\r\n\t\"DDbook4.png\",\r\n\t\"DDbook5.png\",\r\n\t\"DDbowl.png\",\r\n\t\"DDbox.png\",\r\n\t\"DDbox2.png\",\r\n\t\"DDbox3.png\",\r\n\t\"DDbox4.png\",\r\n\t\"DDbracelet.png\",\r\n\t\"DDbullet.png\",\r\n\t\"DDbullet2.png\",\r\n\t\"DDbullethole.png\",\r\n\t\"DDcalendar.png\",\r\n\t\"DDcamera.png\",\r\n\t\"DDcamera2.png\",\r\n\t\"DDcamera3.png\",\r\n\t\"DDcart.png\",\r\n\t\"DDcd.png\",\r\n\t\"DDcharm.png\",\r\n\t\"DDclip.png\",\r\n\t\"DDclip2.png\",\r\n\t\"DDclip3.png\",\r\n\t\"DDcloth.png\",\r\n\t\"DDcoin.png\",\r\n\t\"DDcoin2.png\",\r\n\t\"DDcomputer.png\",\r\n\t\"DDcostume.png\",\r\n\t\"DDcostume2.png\",\r\n\t\"DDcostumes.png\",\r\n\t\"DDdata.png\",\r\n\t\"DDdata2.png\",\r\n\t\"DDdata3.png\",\r\n\t\"DDdetonator.png\",\r\n\t\"DDdoor.png\",\r\n\t\"DDdoor2.png\",\r\n\t\"DDdoor3.png\",\r\n\t\"DDdye.png\",\r\n\t\"DDearring.png\",\r\n\t\"DDemblem.png\",\r\n\t\"DDenvelope.png\",\r\n\t\"DDfingerprint.png\",\r\n\t\"DDfingerprintpowder.png\",\r\n\t\"DDfish.png\",\r\n\t\"DDflower.png\",\r\n\t\"DDfood.png\",\r\n\t\"DDfood2.png\",\r\n\t\"DDgun.png\",\r\n\t\"DDhair.png\",\r\n\t\"DDhairspray.png\",\r\n\t\"DDhandprint.png\",\r\n\t\"DDhat.png\",\r\n\t\"DDheadphones.png\",\r\n\t\"DDkey.png\",\r\n\t\"DDkey2.png\",\r\n\t\"DDkey3.png\",\r\n\t\"DDkeycard.png\",\r\n\t\"DDkeycard2.png\",\r\n\t\"DDkeycard3.png\",\r\n\t\"DDkeycard4.png\",\r\n\t\"DDkeycard5.png\",\r\n\t\"DDkeycard6.png\",\r\n\t\"DDkeycard7.png\",\r\n\t\"DDknife.png\",\r\n\t\"DDladder.png\",\r\n\t\"DDladder2.png\",\r\n\t\"DDlighter.png\",\r\n\t\"DDluminol.png\",\r\n\t\"DDmagatama.png\",\r\n\t\"DDmagatama2.png\",\r\n\t\"DDmap.png\",\r\n\t\"DDmap2.png\",\r\n\t\"DDmap3.png\",\r\n\t\"DDmap4.png\",\r\n\t\"DDmap5.png\",\r\n\t\"DDmap6.png\",\r\n\t\"DDmap7.png\",\r\n\t\"DDmap8.png\",\r\n\t\"DDmap9.png\",\r\n\t\"DDmap10.png\",\r\n\t\"DDmap11.png\",\r\n\t\"DDmap12.png\",\r\n\t\"DDmask.png\",\r\n\t\"DDmedicine.png\",\r\n\t\"DDmedicine2.png\",\r\n\t\"DDmedicine3.png\",\r\n\t\"DDnote.png\",\r\n\t\"DDnote2.png\",\r\n\t\"DDnote4.png\",\r\n\t\"DDnote5.png\",\r\n\t\"DDnote6.png\",\r\n\t\"DDnote7.png\",\r\n\t\"DDnote8.png\",\r\n\t\"DDnote9.png\",\r\n\t\"DDnote10.png\",\r\n\t\"DDnote16.png\",\r\n\t\"DDpenguin.png\",\r\n\t\"DDphone.png\",\r\n\t\"DDphone2.png\",\r\n\t\"DDphoto.png\",\r\n\t\"DDphoto2.png\",\r\n\t\"DDphoto3.png\",\r\n\t\"DDphoto4.png\",\r\n\t\"DDphoto5.png\",\r\n\t\"DDphoto6.png\",\r\n\t\"DDphoto7.png\",\r\n\t\"DDphoto10.png\",\r\n\t\"DDphoto11.png\",\r\n\t\"DDphoto12.png\",\r\n\t\"DDphoto13.png\",\r\n\t\"DDphoto14.png\",\r\n\t\"DDphoto15.png\",\r\n\t\"DDplate.png\",\r\n\t\"DDposter.png\",\r\n\t\"DDposter2.png\",\r\n\t\"DDposter3.png\",\r\n\t\"DDpuppet.png\",\r\n\t\"DDrecorder.png\",\r\n\t\"DDscienceglasses.png\",\r\n\t\"DDscroll.png\",\r\n\t\"DDshard.png\",\r\n\t\"DDshard2.png\",\r\n\t\"DDshard3.png\",\r\n\t\"DDshard4.png\",\r\n\t\"DDshard5.png\",\r\n\t\"DDshard6.png\",\r\n\t\"DDshard7.png\",\r\n\t\"DDshoe.png\",\r\n\t\"DDskull.png\",\r\n\t\"DDstaff.png\",\r\n\t\"DDstatue.png\",\r\n\t\"DDstatue2.png\",\r\n\t\"DDstatue3.png\",\r\n\t\"DDstatue4.png\",\r\n\t\"DDstatue5.png\",\r\n\t\"DDstatue6.png\",\r\n\t\"DDstatue7.png\",\r\n\t\"DDstatue8.png\",\r\n\t\"DDstatue9.png\",\r\n\t\"DDsurgery.png\",\r\n\t\"DDsuspect.png\",\r\n\t\"DDsword.png\",\r\n\t\"DDsword2.png\",\r\n\t\"DDtail.png\",\r\n\t\"DDtank.png\",\r\n\t\"DDtank2.png\",\r\n\t\"DDvideo.png\",\r\n\t\"DDwhistle.png\",\r\n\t\"DDwidget.png\",\r\n\t\"DGSCastAuchi.png\",\r\n\t\"DGSCastBarok.png\",\r\n\t\"DGSCastBeppo.png\",\r\n\t\"DGSCastCrogrey.png\",\r\n\t\"DGSCastDemiglaski.png\",\r\n\t\"DGSCastFairplay.png\",\r\n\t\"DGSCastGina.png\",\r\n\t\"DGSCastGreen.png\",\r\n\t\"DGSCastGregson.png\",\r\n\t\"DGSCastHolmes.png\",\r\n\t\"DGSCastHosonaga.png\",\r\n\t\"DGSCastHosonaga2.png\",\r\n\t\"DGSCastHutch.png\",\r\n\t\"DGSCastJWatson.png\",\r\n\t\"DGSCastJezail.png\",\r\n\t\"DGSCastJoan.png\",\r\n\t\"DGSCastJohn.png\",\r\n\t\"DGSCastKazuma.png\",\r\n\t\"DGSCastLadyfirst.png\",\r\n\t\"DGSCastMegundal.png\",\r\n\t\"DGSCastMilverton.png\",\r\n\t\"DGSCastNatsume.png\",\r\n\t\"DGSCastNemmy.png\",\r\n\t\"DGSCastNikomina.png\",\r\n\t\"DGSCastPat.png\",\r\n\t\"DGSCastRola.png\",\r\n\t\"DGSCastRoylott.png\",\r\n\t\"DGSCastRyuunosuke.png\",\r\n\t\"DGSCastSanmon.png\",\r\n\t\"DGSCastStroganov.png\",\r\n\t\"DGSCastSusato.png\",\r\n\t\"DGSCastSuspect.png\",\r\n\t\"DGSCastTaizou.png\",\r\n\t\"DGSCastTully.png\",\r\n\t\"DGSCastVortex.png\",\r\n\t\"DGSCastWagahai.png\",\r\n\t\"DGSCastWatson.png\",\r\n\t\"DGSCastYuujin.png\",\r\n\t\"DGSbadge.png\",\r\n\t\"DGSbag.png\",\r\n\t\"DGSbag2.png\",\r\n\t\"DGSbell.png\",\r\n\t\"DGSbell2.png\",\r\n\t\"DGSbell3.png\",\r\n\t\"DGSbook.png\",\r\n\t\"DGSbook2.png\",\r\n\t\"DGSbook3.png\",\r\n\t\"DGSbook4.png\",\r\n\t\"DGSbook5.png\",\r\n\t\"DGSbook6.png\",\r\n\t\"DGSbook7.png\",\r\n\t\"DGSbook8.png\",\r\n\t\"DGSbook9.png\",\r\n\t\"DGSbook10.png\",\r\n\t\"DGSbullet.png\",\r\n\t\"DGScamera.png\",\r\n\t\"DGScane.png\",\r\n\t\"DGScart.png\",\r\n\t\"DGSclip.png\",\r\n\t\"DGSclip2.png\",\r\n\t\"DGSclip3.png\",\r\n\t\"DGSclip4.png\",\r\n\t\"DGScoin.png\",\r\n\t\"DGSdevice.png\",\r\n\t\"DGSflower.png\",\r\n\t\"DGSfood.png\",\r\n\t\"DGSfood2.png\",\r\n\t\"DGSfood3.png\",\r\n\t\"DGSfood4.png\",\r\n\t\"DGSgloves.png\",\r\n\t\"DGSgloves2.png\",\r\n\t\"DGSgun.png\",\r\n\t\"DGSgun2.png\",\r\n\t\"DGSgun3.png\",\r\n\t\"DGSherbaltea.png\",\r\n\t\"DGSknife.png\",\r\n\t\"DGSknife2.png\",\r\n\t\"DGSknife3.png\",\r\n\t\"DGSknife4.png\",\r\n\t\"DGSmap.png\",\r\n\t\"DGSmap2.png\",\r\n\t\"DGSmap3.png\",\r\n\t\"DGSmusicbox.png\",\r\n\t\"DGSmusicbox2.png\",\r\n\t\"DGSmusicbox3.png\",\r\n\t\"DGSmusicdisk.png\",\r\n\t\"DGSmusicdisk2.png\",\r\n\t\"DGSmusicdisk3.png\",\r\n\t\"DGSmusicdisk4.png\",\r\n\t\"DGSmusicdisk15.png\",\r\n\t\"DGSnote.png\",\r\n\t\"DGSnote2.png\",\r\n\t\"DGSnote3.png\",\r\n\t\"DGSnote4.png\",\r\n\t\"DGSnote5.png\",\r\n\t\"DGSnote6.png\",\r\n\t\"DGSnote7.png\",\r\n\t\"DGSnote8.png\",\r\n\t\"DGSnote9.png\",\r\n\t\"DGSnote10.png\",\r\n\t\"DGSnote11.png\",\r\n\t\"DGSnote12.png\",\r\n\t\"DGSnote13.png\",\r\n\t\"DGSnote14.png\",\r\n\t\"DGSnote15.png\",\r\n\t\"DGSnote16.png\",\r\n\t\"DGSnote17.png\",\r\n\t\"DGSnote18.png\",\r\n\t\"DGSnote19.png\",\r\n\t\"DGSnote\",\r\n\t\"DGSnote21.png\",\r\n\t\"DGSphoto.png\",\r\n\t\"DGSphoto2.png\",\r\n\t\"DGSphoto3.png\",\r\n\t\"DGSphoto4.png\",\r\n\t\"DGSphoto5.png\",\r\n\t\"DGSphoto6.png\",\r\n\t\"DGSphoto7.png\",\r\n\t\"DGSphoto8.png\",\r\n\t\"DGSphoto9.png\",\r\n\t\"DGSphoto10.png\",\r\n\t\"DGSphoto11.png\",\r\n\t\"DGSphoto12.png\",\r\n\t\"DGSphoto13.png\",\r\n\t\"DGSphoto14.png\",\r\n\t\"DGSphoto15.png\",\r\n\t\"DGSphoto16.png\",\r\n\t\"DGSphoto17.png\",\r\n\t\"DGSphoto18.png\",\r\n\t\"DGSphoto19.png\",\r\n\t\"DGSpin.png\",\r\n\t\"DGSpin2.png\",\r\n\t\"DGSpipe.png\",\r\n\t\"DGSpressing.png\",\r\n\t\"DGSsciencekit.png\",\r\n\t\"DGSshard.png\",\r\n\t\"DGSstereoscope.png\",\r\n\t\"DGSstereoscope2.png\",\r\n\t\"DGStiara.png\",\r\n\t\"DGSviola.png\",\r\n\t\"DGSviola2.png\",\r\n\t\"DGSwhip.png\",\r\n\t\"Datapad.png\",\r\n\t\"Interface.png\",\r\n\t\"JFACastAcro.png\",\r\n\t\"JFACastAdrian.png\",\r\n\t\"JFACastAmi.png\",\r\n\t\"JFACastBat.png\",\r\n\t\"JFACastBen.png\",\r\n\t\"JFACastCeleste.png\",\r\n\t\"JFACastDeKiller.png\",\r\n\t\"JFACastDustin.png\",\r\n\t\"JFACastFranziska.png\",\r\n\t\"JFACastGalactica.png\",\r\n\t\"JFACastGrey.png\",\r\n\t\"JFACastHotti.png\",\r\n\t\"JFACastIni.png\",\r\n\t\"JFACastJuan.png\",\r\n\t\"JFACastMaggey.png\",\r\n\t\"JFACastMatt.png\",\r\n\t\"JFACastMimi.png\",\r\n\t\"JFACastMoe.png\",\r\n\t\"JFACastMorgan.png\",\r\n\t\"JFACastPearl.png\",\r\n\t\"JFACastRegina.png\",\r\n\t\"JFACastRussel.png\",\r\n\t\"JFACastShelly.png\",\r\n\t\"JFACastWellington.png\",\r\n\t\"JFATHATCARD.png\",\r\n\t\"JFATHATCARD2.png\",\r\n\t\"JFAautograph.png\",\r\n\t\"JFAautograph2.png\",\r\n\t\"JFAball.png\",\r\n\t\"JFAball2.png\",\r\n\t\"JFAbear.png\",\r\n\t\"JFAbear2.png\",\r\n\t\"JFAbear3.png\",\r\n\t\"JFAbottle.png\",\r\n\t\"JFAbox.png\",\r\n\t\"JFAbox2.png\",\r\n\t\"JFAbusinesscard.png\",\r\n\t\"JFAbusinesscard2.png\",\r\n\t\"JFAbutton.png\",\r\n\t\"JFAbutton2.png\",\r\n\t\"JFAbutton3.png\",\r\n\t\"JFAcamera.png\",\r\n\t\"JFAcard.png\",\r\n\t\"JFAcard2.png\",\r\n\t\"JFAclip.png\",\r\n\t\"JFAclip2.png\",\r\n\t\"JFAclip3.png\",\r\n\t\"JFAclip4.png\",\r\n\t\"JFAcoat.png\",\r\n\t\"JFAfrequencydetector.png\",\r\n\t\"JFAglasses.png\",\r\n\t\"JFAglove.png\",\r\n\t\"JFAgrapes.png\",\r\n\t\"JFAguitar.png\",\r\n\t\"JFAgun.png\",\r\n\t\"JFAgun2.png\",\r\n\t\"JFAhammond.png\",\r\n\t\"JFAhat.png\",\r\n\t\"JFAjuice.png\",\r\n\t\"JFAkey.png\",\r\n\t\"JFAknife.png\",\r\n\t\"JFAknife2.png\",\r\n\t\"JFAleon.png\",\r\n\t\"JFAmilk.png\",\r\n\t\"JFAmilk2.png\",\r\n\t\"JFAmoney.png\",\r\n\t\"JFAnote.png\",\r\n\t\"JFAnote2.png\",\r\n\t\"JFApepper.png\",\r\n\t\"JFAphoto.png\",\r\n\t\"JFAposter.png\",\r\n\t\"JFAreceipt.png\",\r\n\t\"JFAregent.png\",\r\n\t\"JFAring.png\",\r\n\t\"JFArobe.png\",\r\n\t\"JFArobescrap.png\",\r\n\t\"JFAscarf.png\",\r\n\t\"JFAscreen.png\",\r\n\t\"JFAshoe.png\",\r\n\t\"JFAspycamera.png\",\r\n\t\"JFAticket.png\",\r\n\t\"JFAticket2.png\",\r\n\t\"JFAtracker.png\",\r\n\t\"JFAtransceiver.png\",\r\n\t\"JFAtransmitter.png\",\r\n\t\"JFAtrilo.png\",\r\n\t\"JFAuniform.png\",\r\n\t\"JFAurn1.png\",\r\n\t\"JFAurn2.png\",\r\n\t\"JFAvest.png\",\r\n\t\"JFAwhip.png\",\r\n\t\"MiscAKMS.png\",\r\n\t\"MiscAsthmaPump.png\",\r\n\t\"MiscBaggie.png\",\r\n\t\"MiscBeach.png\",\r\n\t\"MiscBlueRuby.png\",\r\n\t\"MiscCandy Cane.png\",\r\n\t\"MiscCandy Cane Dark.png\",\r\n\t\"MiscCorkscrew.png\",\r\n\t\"MiscCrowbar.png\",\r\n\t\"MiscDragonPepper.png\",\r\n\t\"MiscFlintlock.png\",\r\n\t\"MiscGenerator.png\",\r\n\t\"MiscGrapeJuice.png\",\r\n\t\"MiscGreen Hut.png\",\r\n\t\"MiscGrill.png\",\r\n\t\"MiscHalf-Eaten Burger.png\",\r\n\t\"MiscHangGlider.png\",\r\n\t\"MiscLockpicks.png\",\r\n\t\"MiscMapBiolab.png\",\r\n\t\"MiscMapCourthouse.png\",\r\n\t\"MiscMapLobby1.png\",\r\n\t\"MiscMichigan J Frog.png\",\r\n\t\"MiscMystery1.png\",\r\n\t\"MiscMystery2.png\",\r\n\t\"MiscMystery3.png\",\r\n\t\"MiscOldTrain.png\",\r\n\t\"MiscRaffleTickets.png\",\r\n\t\"MiscSpatula.png\",\r\n\t\"MiscSpecimenAlpha.png\",\r\n\t\"MiscTimeCrystal.png\",\r\n\t\"MiscTins.png\",\r\n\t\"MiscUnknown People.png\",\r\n\t\"MiscVDF.png\",\r\n\t\"MiscVodka.png\",\r\n\t\"MiscZombie.png\",\r\n\t\"Scanner.png\",\r\n\t\"SoJad.png\",\r\n\t\"SoJad2.png\",\r\n\t\"SoJad3.png\",\r\n\t\"SoJad4.png\",\r\n\t\"SoJad5.png\",\r\n\t\"SoJad6.png\",\r\n\t\"SoJad7.png\",\r\n\t\"SoJarrow.png\",\r\n\t\"SoJautopsy.png\",\r\n\t\"SoJbadge.png\",\r\n\t\"SoJbadge2.png\",\r\n\t\"SoJblimp.png\",\r\n\t\"SoJblimp2.png\",\r\n\t\"SoJblood.png\",\r\n\t\"SoJboiler.png\",\r\n\t\"SoJbook.png\",\r\n\t\"SoJbook2.png\",\r\n\t\"SoJbook3.png\",\r\n\t\"SoJbook4.png\",\r\n\t\"SoJbook5.png\",\r\n\t\"SoJbook6.png\",\r\n\t\"SoJbook7.png\",\r\n\t\"SoJbook8.png\",\r\n\t\"SoJbook9.png\",\r\n\t\"SoJbook10.png\",\r\n\t\"SoJbook11.png\",\r\n\t\"SoJbook12.png\",\r\n\t\"SoJbook13.png\",\r\n\t\"SoJbook14.png\",\r\n\t\"SoJbox.png\",\r\n\t\"SoJbox2.png\",\r\n\t\"SoJbracelet.png\",\r\n\t\"SoJbucket.png\",\r\n\t\"SoJcamera.png\",\r\n\t\"SoJcandelabra.png\",\r\n\t\"SoJcandelabra2.png\",\r\n\t\"SoJcandelabra3.png\",\r\n\t\"SoJcastAhlbi.png\",\r\n\t\"SoJcastAmara.png\",\r\n\t\"SoJcastAndistan'dhin.png\",\r\n\t\"SoJcastApollo.png\",\r\n\t\"SoJcastArchie.png\",\r\n\t\"SoJcastArmie.png\",\r\n\t\"SoJcastAthena.png\",\r\n\t\"SoJcastAtishon.png\",\r\n\t\"SoJcastBeh'leeb.png\",\r\n\t\"SoJcastBetty.png\",\r\n\t\"SoJcastBlackquill.png\",\r\n\t\"SoJcastBonny.png\",\r\n\t\"SoJcastBucky.png\",\r\n\t\"SoJcastButz.png\",\r\n\t\"SoJcastDatz.png\",\r\n\t\"SoJcastDatz2.png\",\r\n\t\"SoJcastDhurke.png\",\r\n\t\"SoJcastDumas.png\",\r\n\t\"SoJcastEllen.png\",\r\n\t\"SoJcastEma.png\",\r\n\t\"SoJcastGa'ran.png\",\r\n\t\"SoJcastGeiru.png\",\r\n\t\"SoJcastInga.png\",\r\n\t\"SoJcastMaya.png\",\r\n\t\"SoJcastMiles.png\",\r\n\t\"SoJcastNahyuta.png\",\r\n\t\"SoJcastNayna.png\",\r\n\t\"SoJcastPayne.png\",\r\n\t\"SoJcastPearl.png\",\r\n\t\"SoJcastPhoenix.png\",\r\n\t\"SoJcastPierce.png\",\r\n\t\"SoJcastPuhray.png\",\r\n\t\"SoJcastRayfa.png\",\r\n\t\"SoJcastRetinz.png\",\r\n\t\"SoJcastReus.png\",\r\n\t\"SoJcastRohl.png\",\r\n\t\"SoJcastSelena.png\",\r\n\t\"SoJcastSergeant.png\",\r\n\t\"SoJcastSorin.png\",\r\n\t\"SoJcastTahrust.png\",\r\n\t\"SoJcastTaifu.png\",\r\n\t\"SoJcastTrucy.png\",\r\n\t\"SoJcastUendo.png\",\r\n\t\"SoJcd.png\",\r\n\t\"SoJcd2.png\",\r\n\t\"SoJcharm.png\",\r\n\t\"SoJclip.png\",\r\n\t\"SoJclip2.png\",\r\n\t\"SoJcog.png\",\r\n\t\"SoJcontract.png\",\r\n\t\"SoJdog.png\",\r\n\t\"SoJflag.png\",\r\n\t\"SoJflower.png\",\r\n\t\"SoJfood1.png\",\r\n\t\"SoJfood2.png\",\r\n\t\"SoJfood3.png\",\r\n\t\"SoJgem.png\",\r\n\t\"SoJglasses.png\",\r\n\t\"SoJgoop.png\",\r\n\t\"SoJhat.png\",\r\n\t\"SoJhelicopter.png\",\r\n\t\"SoJhorse.png\",\r\n\t\"SoJhorse2.png\",\r\n\t\"SoJkey.png\",\r\n\t\"SoJkey2.png\",\r\n\t\"SoJkey3.png\",\r\n\t\"SoJkey4.png\",\r\n\t\"SoJkeycard.png\",\r\n\t\"SoJkeycharm.png\",\r\n\t\"SoJlantern.png\",\r\n\t\"SoJlantern2.png\",\r\n\t\"SoJluminol.png\",\r\n\t\"SoJmagatama.png\",\r\n\t\"SoJmagatama2.png\",\r\n\t\"SoJmagatama3.png\",\r\n\t\"SoJmap.png\",\r\n\t\"SoJmap2.png\",\r\n\t\"SoJmap3.png\",\r\n\t\"SoJmap4.png\",\r\n\t\"SoJmap5.png\",\r\n\t\"SoJmap6.png\",\r\n\t\"SoJmap7.png\",\r\n\t\"SoJmrhat.png\",\r\n\t\"SoJnote.png\",\r\n\t\"SoJnote2.png\",\r\n\t\"SoJnote3.png\",\r\n\t\"SoJnote4.png\",\r\n\t\"SoJnote5.png\",\r\n\t\"SoJnote6.png\",\r\n\t\"SoJnote7.png\",\r\n\t\"SoJnote8.png\",\r\n\t\"SoJnote9.png\",\r\n\t\"SoJnote10.png\",\r\n\t\"SoJnote11.png\",\r\n\t\"SoJnote12.png\",\r\n\t\"SoJnote13.png\",\r\n\t\"SoJnote14.png\",\r\n\t\"SoJnote15.png\",\r\n\t\"SoJnote16.png\",\r\n\t\"SoJnote17.png\",\r\n\t\"SoJorb.png\",\r\n\t\"SoJpassport.png\",\r\n\t\"SoJpendant.png\",\r\n\t\"SoJphone.png\",\r\n\t\"SoJphoto.png\",\r\n\t\"SoJphoto2.png\",\r\n\t\"SoJphoto3.png\",\r\n\t\"SoJphoto4.png\",\r\n\t\"SoJphoto5.png\",\r\n\t\"SoJphoto6.png\",\r\n\t\"SoJphoto7.png\",\r\n\t\"SoJphoto8.png\",\r\n\t\"SoJphoto9.png\",\r\n\t\"SoJphoto10.png\",\r\n\t\"SoJphoto11.png\",\r\n\t\"SoJphoto12.png\",\r\n\t\"SoJphoto13.png\",\r\n\t\"SoJphoto14.png\",\r\n\t\"SoJphoto15.png\",\r\n\t\"SoJphoto16.png\",\r\n\t\"SoJphoto17.png\",\r\n\t\"SoJphoto18.png\",\r\n\t\"SoJphoto19.png\",\r\n\t\"SoJphoto\",\r\n\t\"SoJphoto21.png\",\r\n\t\"SoJphoto22.png\",\r\n\t\"SoJphoto23.png\",\r\n\t\"SoJphoto24.png\",\r\n\t\"SoJphoto25.png\",\r\n\t\"SoJphoto26.png\",\r\n\t\"SoJphoto27.png\",\r\n\t\"SoJphoto28.png\",\r\n\t\"SoJprintpowder.png\",\r\n\t\"SoJraincoat.png\",\r\n\t\"SoJscissorlift.png\",\r\n\t\"SoJscroll.png\",\r\n\t\"SoJscroll2.png\",\r\n\t\"SoJsnackoo.png\",\r\n\t\"SoJstand.png\",\r\n\t\"SoJstatue.png\",\r\n\t\"SoJsuspect.png\",\r\n\t\"SoJsword.png\",\r\n\t\"SoJsword2.png\",\r\n\t\"SoJsyringe.png\",\r\n\t\"SoJtape1.png\",\r\n\t\"SoJtext.png\",\r\n\t\"SoJunknown.png\",\r\n\t\"SoJurn.png\",\r\n\t\"SoJusb.png\",\r\n\t\"SoJwallet.png\",\r\n\t\"SoJwidget.png\",\r\n\t\"TTCastAdrian.png\",\r\n\t\"TTCastArmstrong.png\",\r\n\t\"TTCastAtmey.png\",\r\n\t\"TTCastBikini.png\",\r\n\t\"TTCastBruto.png\",\r\n\t\"TTCastBullard.png\",\r\n\t\"TTCastDahlia.png\",\r\n\t\"TTCastDeMasque.png\",\r\n\t\"TTCastDesiree.png\",\r\n\t\"TTCastDiego.png\",\r\n\t\"TTCastElg.png\",\r\n\t\"TTCastElise.png\",\r\n\t\"TTCastFawles.png\",\r\n\t\"TTCastGodot.png\",\r\n\t\"TTCastGrossberg.png\",\r\n\t\"TTCastGumshoe.png\",\r\n\t\"TTCastIris.png\",\r\n\t\"TTCastIris2.png\",\r\n\t\"TTCastKudo.png\",\r\n\t\"TTCastLisa.png\",\r\n\t\"TTCastMaggey.png\",\r\n\t\"TTCastMiles.png\",\r\n\t\"TTCastRon.png\",\r\n\t\"TTCastSwallow.png\",\r\n\t\"TTCastTigre.png\",\r\n\t\"TTCastValerie.png\",\r\n\t\"TTCastViola.png\",\r\n\t\"TTad.png\",\r\n\t\"TTad2.png\",\r\n\t\"TTapron.png\",\r\n\t\"TTbadge.png\",\r\n\t\"TTbag.png\",\r\n\t\"TTblood1.png\",\r\n\t\"TTblood2.png\",\r\n\t\"TTbottle1.png\",\r\n\t\"TTbottle2.png\",\r\n\t\"TTbox.png\",\r\n\t\"TTbox2.png\",\r\n\t\"TTbutton.png\",\r\n\t\"TTcalendar.png\",\r\n\t\"TTcamera.png\",\r\n\t\"TTcard.png\",\r\n\t\"TTcd.png\",\r\n\t\"TTcd2.png\",\r\n\t\"TTclip.png\",\r\n\t\"TTclip2.png\",\r\n\t\"TTclip3.png\",\r\n\t\"TTclip4.png\",\r\n\t\"TTclip5.png\",\r\n\t\"TTcoldkiller.png\",\r\n\t\"TTcoldkiller2.png\",\r\n\t\"TTcup.png\",\r\n\t\"TTdata.png\",\r\n\t\"TTdata2.png\",\r\n\t\"TTdata3.png\",\r\n\t\"TTdata4.png\",\r\n\t\"TTdrawing.png\",\r\n\t\"TTemblem.png\",\r\n\t\"TTemployee.png\",\r\n\t\"TTfood1.png\",\r\n\t\"TTfood2.png\",\r\n\t\"TThood.png\",\r\n\t\"TTjewel.png\",\r\n\t\"TTjewel2.png\",\r\n\t\"TTkeycard.png\",\r\n\t\"TTknife.png\",\r\n\t\"TTlantern.png\",\r\n\t\"TTlantern2.png\",\r\n\t\"TTmagazine.png\",\r\n\t\"TTmagazine2.png\",\r\n\t\"TTmatchbook.png\",\r\n\t\"TTmatchbook2.png\",\r\n\t\"TTmedicine.png\",\r\n\t\"TTmedicine2.png\",\r\n\t\"TTmoped.png\",\r\n\t\"TTnecklace.png\",\r\n\t\"TTnote.png\",\r\n\t\"TTnote2.png\",\r\n\t\"TTnote3.png\",\r\n\t\"TTnote4.png\",\r\n\t\"TTnote5.png\",\r\n\t\"TTnote6.png\",\r\n\t\"TTnote7.png\",\r\n\t\"TTperfume.png\",\r\n\t\"TTphotoold.png\",\r\n\t\"TTsapphire.png\",\r\n\t\"TTscarf.png\",\r\n\t\"TTschichishito.png\",\r\n\t\"TTschichishito2.png\",\r\n\t\"TTschichishito3.png\",\r\n\t\"TTscroll.png\",\r\n\t\"TTscroll2.png\",\r\n\t\"TTseal.png\",\r\n\t\"TTseal2.png\",\r\n\t\"TTstaff.png\",\r\n\t\"TTstaff2.png\",\r\n\t\"TTstaff3.png\",\r\n\t\"TTstain.png\",\r\n\t\"TTstatue.png\",\r\n\t\"TTticket.png\",\r\n\t\"TTticket2.png\",\r\n\t\"TTumbrella.png\",\r\n\t\"TTvase.png\",\r\n\t\"TTvase2.png\",\r\n\t\"TTvase3.png\",\r\n\t\"TTvase4.png\",\r\n\t\"TTwallet.png\",\r\n\t\"TTwatch.png\",\r\n\t\"Vivaster.png\",\r\n\t\"empty.png\",\r\n\t\"lawyerbadge.png\"\r\n];","export default [\r\n\t\"1st server\",\r\n\t\"999.1\",\r\n\t\"999\",\r\n\t\"999Apartment\",\r\n\t\"999CaptainsQuarters\",\r\n\t\"999Cargo\",\r\n\t\"999Casino\",\r\n\t\"999Cdeck\",\r\n\t\"999CentralStairs\",\r\n\t\"999Chapel\",\r\n\t\"999Chart\",\r\n\t\"999Confinement\",\r\n\t\"999DoorsA\",\r\n\t\"999DoorsB\",\r\n\t\"999Hospital\",\r\n\t\"999Kitchen\",\r\n\t\"999Library\",\r\n\t\"999Operating\",\r\n\t\"999Shower\",\r\n\t\"999Steam\",\r\n\t\"999Steeldoor\",\r\n\t\"999Study\",\r\n\t\"999Torture\",\r\n\t\"9991stClassCabinA\",\r\n\t\"9991stClassCabinB\",\r\n\t\"9992ndClassCabin\",\r\n\t\"AA - Edgewort's Office\",\r\n\t\"AA - Gantsroom\",\r\n\t\"AA - Gatewater room\",\r\n\t\"AA - Gourd Lake\",\r\n\t\"AA - Gourd Lake Entrance\",\r\n\t\"AA - Hotel Lobby\",\r\n\t\"AA - Hotticlinic\",\r\n\t\"AA - Kurain\",\r\n\t\"AA - Parkinglot\",\r\n\t\"AA - Police Deparment\",\r\n\t\"AA - Police Station\",\r\n\t\"AA - Records Room\",\r\n\t\"AA - Sc13\",\r\n\t\"AA - Wright's Office\",\r\n\t\"AABluecorp\",\r\n\t\"AACourt\",\r\n\t\"AACourtAnime\",\r\n\t\"AACourtChristmasDecorations\",\r\n\t\"AACourtChristmasLights\",\r\n\t\"AACourtHD\",\r\n\t\"AADefendantLobby\",\r\n\t\"AADefendantLobbyHD\",\r\n\t\"AADetentionCenter\",\r\n\t\"AAEdgeworthOffice\",\r\n\t\"AAGantOffice\",\r\n\t\"AAGatewaterHotel\",\r\n\t\"AAGlobalStudiosEast\",\r\n\t\"AAGlobalStudiosWest\",\r\n\t\"AAGourdLake\",\r\n\t\"AAGrossbergOffice\",\r\n\t\"AAI2Circus\",\r\n\t\"AAI2City\",\r\n\t\"AAI2GourdLake\",\r\n\t\"AAI2LogicChess\",\r\n\t\"AAI2MuseumPast\",\r\n\t\"AAI2MuseumPresent\",\r\n\t\"AAI2PIC\",\r\n\t\"AAI2Prison\",\r\n\t\"AAICohdopianEmbassy\",\r\n\t\"AAICourt\",\r\n\t\"AAICourtFlipped\",\r\n\t\"AAIEdgeworthOffice\",\r\n\t\"AAIGatewaterLandStage\",\r\n\t\"AAIGatewaterLandWildWest\",\r\n\t\"AAIiFlyAirlines\",\r\n\t\"AALobby\",\r\n\t\"AAParkingLot\",\r\n\t\"AAPoliceStation\",\r\n\t\"AATrainStation\",\r\n\t\"AAWrightOffice\",\r\n\t\"AJBorschtBowlClub\",\r\n\t\"AJCourt\",\r\n\t\"AJCourtBirthday\",\r\n\t\"AJCourtHalloween\",\r\n\t\"AJCourtNight\",\r\n\t\"AJCourtTV\",\r\n\t\"AJDefendantLobby\",\r\n\t\"AJDetentionCenter\",\r\n\t\"AJDrewStudio\",\r\n\t\"AJHottiClinic\",\r\n\t\"AJKlavierOffice\",\r\n\t\"AJKristophCell\",\r\n\t\"AJLobby\",\r\n\t\"AJMeraktisClinic\",\r\n\t\"AJPeoplePark\",\r\n\t\"AJSunshineColiseum\",\r\n\t\"AJWrightOffice\",\r\n\t\"Ace\",\r\n\t\"AcroRoomJFA\",\r\n\t\"AirportJFA\",\r\n\t\"AlbaOfficeAAI\",\r\n\t\"Anime\",\r\n\t\"Arcade\",\r\n\t\"AtmeyOfficeTT\",\r\n\t\"Atrium (SG)\",\r\n\t\"AutumnForest\",\r\n\t\"BB - Flowerfield\",\r\n\t\"BB - Market\",\r\n\t\"BB - Street\",\r\n\t\"BandoLandAAI\",\r\n\t\"Basement\",\r\n\t\"Battlegrounds\",\r\n\t\"BerryBigCircusJFA\",\r\n\t\"Blackout\",\r\n\t\"BlueScreensTT\",\r\n\t\"BluecorpAA\",\r\n\t\"BridgeNest\",\r\n\t\"Brig\",\r\n\t\"Building\",\r\n\t\"CC1\",\r\n\t\"CC2\",\r\n\t\"CC3\",\r\n\t\"CC4\",\r\n\t\"CC5\",\r\n\t\"CC6\",\r\n\t\"CC7\",\r\n\t\"CC8\",\r\n\t\"CC9\",\r\n\t\"CC10\",\r\n\t\"CC11\",\r\n\t\"CC12\",\r\n\t\"CO - Big door\",\r\n\t\"CO - Finalroom\",\r\n\t\"CO - Meetingroom\",\r\n\t\"CO - Whitedoor\",\r\n\t\"CO - Whitelobby\",\r\n\t\"CO - Whitelowerfloor\",\r\n\t\"CO - White room\",\r\n\t\"CP\",\r\n\t\"CPRP2 Chap1\",\r\n\t\"CPRP2 Chap2and3\",\r\n\t\"CPRP2 Chap4\",\r\n\t\"CPRP2 Chap5\",\r\n\t\"CPRP Chap1\",\r\n\t\"CPRP Chap2\",\r\n\t\"CPRP Chap3\",\r\n\t\"CPRP Chap4\",\r\n\t\"CPRP Chap5\",\r\n\t\"CVStMystere\",\r\n\t\"Cafe\",\r\n\t\"CafeCourt\",\r\n\t\"CaffeeCase\",\r\n\t\"Cal\",\r\n\t\"CargoHoldAAI\",\r\n\t\"Casino\",\r\n\t\"CasinoCourt\",\r\n\t\"Cathedral (SG)\",\r\n\t\"Christmas\",\r\n\t\"Christmas Courtroom\",\r\n\t\"CinemaFamousi\",\r\n\t\"Classroom\",\r\n\t\"Co - Lobby 1\",\r\n\t\"Co - Lobby 2\",\r\n\t\"CochenOfficeAAI\",\r\n\t\"ColosseumFerox\",\r\n\t\"Control Room\",\r\n\t\"Control Room Interior\",\r\n\t\"CountyCourt\",\r\n\t\"CourtroomAA\",\r\n\t\"CourtroomAAHD\",\r\n\t\"CourtroomAAI\",\r\n\t\"CourtroomAJ\",\r\n\t\"CourtroomAJNight\",\r\n\t\"CourtroomAnime\",\r\n\t\"CourtroomCounty\",\r\n\t\"CourtroomDD\",\r\n\t\"CourtroomEnglish\",\r\n\t\"CourtroomNew\",\r\n\t\"CourtroomRuined\",\r\n\t\"CourtroomThemis\",\r\n\t\"CourtroomTouhou\",\r\n\t\"CourtroomWitch\",\r\n\t\"CruiseCourt\",\r\n\t\"CustomEight\",\r\n\t\"CustomEleven\",\r\n\t\"CustomFifteen\",\r\n\t\"CustomFive\",\r\n\t\"CustomFour\",\r\n\t\"CustomFourteen\",\r\n\t\"CustomNine\",\r\n\t\"CustomOne\",\r\n\t\"CustomSeven\",\r\n\t\"CustomSix\",\r\n\t\"CustomTen\",\r\n\t\"CustomThirteen\",\r\n\t\"CustomThree\",\r\n\t\"CustomTwelve\",\r\n\t\"CustomTwo\",\r\n\t\"DC\",\r\n\t\"DDCourt\",\r\n\t\"DDCourtGray\",\r\n\t\"DDCourtRuined\",\r\n\t\"DDCourtRuinedInvestigation\",\r\n\t\"DDCourtThemis\",\r\n\t\"DDDefendantLobby\",\r\n\t\"DDGyaxa\",\r\n\t\"DDLobby\",\r\n\t\"DDNinetailsVale\",\r\n\t\"DDShipshapeAquarium\",\r\n\t\"DDThemisAcademy\",\r\n\t\"DFreightTrain\",\r\n\t\"DGS-ENG\",\r\n\t\"DGS-JAP\",\r\n\t\"DGS\",\r\n\t\"DGSCourtJapanese\",\r\n\t\"DGSCourtOldBailey\",\r\n\t\"DGSCourtOldBaileyJury\",\r\n\t\"DGSDefendantLobbyJapanese\",\r\n\t\"DGSDefendantLobbyOldBailey\",\r\n\t\"DGSEnglishCourt\",\r\n\t\"DGSJapanCourt\",\r\n\t\"DGSLondon\",\r\n\t\"DGSenglishcourt\",\r\n\t\"DRAE-Area1\",\r\n\t\"DRAE-Area2\",\r\n\t\"DRClassTrial\",\r\n\t\"DRRP\",\r\n\t\"Dark Cave\",\r\n\t\"Darkness\",\r\n\t\"Datrone Heart\",\r\n\t\"Datrone HeartHQ\",\r\n\t\"DeLiteHouseTT\",\r\n\t\"Despair vs. Hope\",\r\n\t\"DetentionCenterAAI2\",\r\n\t\"DimensionalGate\",\r\n\t\"DogenCellAAI2\",\r\n\t\"DualDestinies\",\r\n\t\"Dungeon Courtroom\",\r\n\t\"EdgeworthOfficeAA\",\r\n\t\"EdgeworthOfficeAAI\",\r\n\t\"EmbassyAAI\",\r\n\t\"Endless Courtroom\",\r\n\t\"EngardeManorJFA\",\r\n\t\"EnglishCourt\",\r\n\t\"Errors\",\r\n\t\"Errors2\",\r\n\t\"FECastle\",\r\n\t\"FECave\",\r\n\t\"FEFort\",\r\n\t\"FEPlain\",\r\n\t\"FETavern\",\r\n\t\"Factory\",\r\n\t\"FieldFortune\",\r\n\t\"FilmSetAAI2\",\r\n\t\"Flowerfield\",\r\n\t\"ForensicCourt\",\r\n\t\"Forest\",\r\n\t\"GS4Night\",\r\n\t\"GantOfficeAA\",\r\n\t\"GetwaterHotelJFA\",\r\n\t\"GetwaterStageJFA\",\r\n\t\"GlobalStudiosIndoorsAA\",\r\n\t\"GlobalStudiosOutdoorsAA\",\r\n\t\"GourdLakeAA\",\r\n\t\"GrandChokmah\",\r\n\t\"GrandStadium\",\r\n\t\"Graveyard\",\r\n\t\"GreatWitchtrialCourt\",\r\n\t\"GrossbergOfficeAA\",\r\n\t\"HD\",\r\n\t\"HQFarm\",\r\n\t\"HQHalloweenTown\",\r\n\t\"HQHolodeck\",\r\n\t\"HQShrine\",\r\n\t\"HQTown\",\r\n\t\"HQVolcanoCherry\",\r\n\t\"HallOfFame\",\r\n\t\"HarborTown\",\r\n\t\"HarvestFestival\",\r\n\t\"HazakuraTemple1TT\",\r\n\t\"HazakuraTemple2TT\",\r\n\t\"Headquarters\",\r\n\t\"Headquarters 2\",\r\n\t\"Hell Correspondence\",\r\n\t\"Hospital\",\r\n\t\"HotelRoomAA\",\r\n\t\"HottiClinicJFA\",\r\n\t\"Innsmouth\",\r\n\t\"InsidePlaneAAI2\",\r\n\t\"Interiors (Day)\",\r\n\t\"Interiors (Night)\",\r\n\t\"JFAAirport\",\r\n\t\"JFABerryBigCircusEast\",\r\n\t\"JFABerryBigCircusWest\",\r\n\t\"JFAGatewaterHotel\",\r\n\t\"JFAHottiClinic\",\r\n\t\"JFAKurainVillage\",\r\n\t\"JFAMattHouse\",\r\n\t\"JapaneseCourt\",\r\n\t\"Kamurocho (Day)\",\r\n\t\"Kamurocho (Night)\",\r\n\t\"Keterburg\",\r\n\t\"Khura'in\",\r\n\t\"Khurain\",\r\n\t\"KokonoeLab\",\r\n\t\"KurainCourt\",\r\n\t\"KurainVillageJFA\",\r\n\t\"LBCastle\",\r\n\t\"LBMisc\",\r\n\t\"LBScotlandYard\",\r\n\t\"Lab 8\",\r\n\t\"Lentomain\",\r\n\t\"Library\",\r\n\t\"LogicChessAAI2\",\r\n\t\"MI - Ashleys Shack\",\r\n\t\"MLP - Apple barn\",\r\n\t\"MLP - CMC Clubhouse\",\r\n\t\"MLP - CMC Clubhouse inside\",\r\n\t\"MLP - Canterlot Castle galaroom\",\r\n\t\"MLP - Canterlot Hallway\",\r\n\t\"MLP - Canterlot Library2\",\r\n\t\"MLP - Canterlot Town\",\r\n\t\"MLP - Canterlot alley\",\r\n\t\"MLP - Canterlot library\",\r\n\t\"MLP - Carousel Boutique\",\r\n\t\"MLP - Clearing\",\r\n\t\"MLP - Curio Shop\",\r\n\t\"MLP - Everfree Forest\",\r\n\t\"MLP - Everfree Forest entrance\",\r\n\t\"MLP - Fluttershy's cottage\",\r\n\t\"MLP - Hospital Room\",\r\n\t\"MLP - Hotelroom\",\r\n\t\"MLP - Library 2F\",\r\n\t\"MLP - Library mainfloor\",\r\n\t\"MLP - Old Castle\",\r\n\t\"MLP - Orchard\",\r\n\t\"MLP - PV Hospital\",\r\n\t\"MLP - PV Street\",\r\n\t\"MLP - Ponyville\",\r\n\t\"MLP - Shining's apartment\",\r\n\t\"MLP - Sugarcube Corner\",\r\n\t\"MLP - Twilight's Lab\",\r\n\t\"MM - Castle\",\r\n\t\"MM - Madokas house\",\r\n\t\"MM - School yard\",\r\n\t\"MM - Street\",\r\n\t\"MM - Street2\",\r\n\t\"MM - classroom\",\r\n\t\"MM - dark hallway\",\r\n\t\"MM - rooftop\",\r\n\t\"MM - room whit Kyubey\",\r\n\t\"MM - school hallway\",\r\n\t\"MM - staircase\",\r\n\t\"MMA-Bedrooms1\",\r\n\t\"MMA-Floor 1\",\r\n\t\"MS - Cathedral\",\r\n\t\"MS - Zakum's Tree\",\r\n\t\"Mansion\",\r\n\t\"MansionAAI2\",\r\n\t\"MansionHQ\",\r\n\t\"Maplecrest - Nightmare\",\r\n\t\"Maplecrest\",\r\n\t\"Market\",\r\n\t\"Mayonaka\",\r\n\t\"MechHangar\",\r\n\t\"Medici Tower\",\r\n\t\"Military Base Exterior\",\r\n\t\"MoeRoomJFA\",\r\n\t\"MuseumAAI2\",\r\n\t\"MuseumTT\",\r\n\t\"Music\",\r\n\t\"NewCourt\",\r\n\t\"New Meridian\",\r\n\t\"Ninetailsvale\",\r\n\t\"Nordon Plains\",\r\n\t\"Nordon Plains Night\",\r\n\t\"OCArcade\",\r\n\t\"OCBebop\",\r\n\t\"OCCourtCafe\",\r\n\t\"OCCourtCounty\",\r\n\t\"OCCourtCruise\",\r\n\t\"OCCourtEndless\",\r\n\t\"OCCourtFinalDestination\",\r\n\t\"OCCourtInverted\",\r\n\t\"OCCourtPirateShip\",\r\n\t\"OCCourtSky\",\r\n\t\"OCCourtSpace\",\r\n\t\"OCCourtSpaceShip\",\r\n\t\"OCCourtTouhou\",\r\n\t\"OCCourtZetta\",\r\n\t\"OCDungeon\",\r\n\t\"OCHospital\",\r\n\t\"OCRoad\",\r\n\t\"OCTownPirate\",\r\n\t\"OCTownShanty\",\r\n\t\"OCWhiteRoom\",\r\n\t\"OfficeHouseHQ\",\r\n\t\"OfficeNightAA\",\r\n\t\"Osaka (Night)\",\r\n\t\"Osaka\",\r\n\t\"OutsidePlaneAAI2\",\r\n\t\"P4UBasement\",\r\n\t\"P4ULab\",\r\n\t\"P4Ubaseball\",\r\n\t\"P4Ubeach\",\r\n\t\"P4Ubuilding\",\r\n\t\"P4Uconcert\",\r\n\t\"P4Ugarden\",\r\n\t\"P4Ugraveyard\",\r\n\t\"P4Uhell\",\r\n\t\"P4Ujail\",\r\n\t\"P4Umisc\",\r\n\t\"P4Unight\",\r\n\t\"P4Uoffices\",\r\n\t\"P4Urailway\",\r\n\t\"P4Urestaurants\",\r\n\t\"P4Urooms\",\r\n\t\"P4Uruins\",\r\n\t\"P4Uschool\",\r\n\t\"P4Ustage1\",\r\n\t\"P4Ustage2\",\r\n\t\"P4Ustation\",\r\n\t\"P4Ustore\",\r\n\t\"P4Utent\",\r\n\t\"P4Utransport\",\r\n\t\"P4Utv\",\r\n\t\"P4Uvelvetroom\",\r\n\t\"PICAAI2\",\r\n\t\"PLvsAAAlchemistHouse\",\r\n\t\"PLvsAABellTower\",\r\n\t\"PLvsAACastle\",\r\n\t\"PLvsAACourtEnglish\",\r\n\t\"PLvsAACourtLabyrinthia\",\r\n\t\"PLvsAACourthouse\",\r\n\t\"PLvsAADefendantLobbyEnglish\",\r\n\t\"PLvsAADefendantLobbyLabyrinthia\",\r\n\t\"PLvsAAEclaireBakery\",\r\n\t\"PLvsAAForest\",\r\n\t\"PLvsAAGreatArchive\",\r\n\t\"PLvsAALabyrinthiaInner\",\r\n\t\"PLvsAALabyrinthiaOuter\",\r\n\t\"PLvsAALondon\",\r\n\t\"PLvsAARougeTavern\",\r\n\t\"PLvsAARuins\",\r\n\t\"PLvsAAStorytellerTower\",\r\n\t\"PLvsAAWagon\",\r\n\t\"PLvsAAWorkshop\",\r\n\t\"PMMMRP\",\r\n\t\"PMMMWitch\",\r\n\t\"ParkingLotAA\",\r\n\t\"PeonyCastle\",\r\n\t\"Persona Afternoon\",\r\n\t\"Persona DH\",\r\n\t\"Persona Morning\",\r\n\t\"Persona Night\",\r\n\t\"PersonaRP\",\r\n\t\"PhoenixOfficeAA\",\r\n\t\"PirateShip\",\r\n\t\"PlaneAAI\",\r\n\t\"PlaneLoungeAAI\",\r\n\t\"PlaneLoungeLandAAI\",\r\n\t\"PlatPark\",\r\n\t\"PlatRemnant\",\r\n\t\"PlatunaArea1\",\r\n\t\"PlatunaArea1HQ\",\r\n\t\"PlatunaArea2\",\r\n\t\"PlatunaArea2HQ\",\r\n\t\"PlatunaMain\",\r\n\t\"PlatunamainHQ\",\r\n\t\"PrecinctAA\",\r\n\t\"PrisonAAI2\",\r\n\t\"PrisonCourtyardAAI2\",\r\n\t\"RG - 104\",\r\n\t\"RG - A-East\",\r\n\t\"RG - AMX\",\r\n\t\"RG - Bus Terminal\",\r\n\t\"RG - Cadoi City\",\r\n\t\"RG - Concert\",\r\n\t\"RG - Dogenzaka\",\r\n\t\"RG - God Pad\",\r\n\t\"RG - Miyashita Underpass\",\r\n\t\"RG - Station Underpass\",\r\n\t\"RG - Trail\",\r\n\t\"RG - Udagawa\",\r\n\t\"RaysDeLite\",\r\n\t\"Retreat\",\r\n\t\"RetreatHQ\",\r\n\t\"RiverVista\",\r\n\t\"Road\",\r\n\t\"Role Play\",\r\n\t\"Ronpa Mansion Area 5\",\r\n\t\"Ronpa Mansion Day\",\r\n\t\"Ronpa Mansion Day2\",\r\n\t\"Ronpa Mansion Day3\",\r\n\t\"Ronpa Mansion Day4\",\r\n\t\"Ronpa Mansion Night\",\r\n\t\"Ronpa Mansion Night2\",\r\n\t\"Ronpa Mansion Night3\",\r\n\t\"Ronpa Mansion Night4\",\r\n\t\"Ronpa mansion Haunted\",\r\n\t\"Ronpers Express\",\r\n\t\"RooftopAAI2\",\r\n\t\"RuinedCastle\",\r\n\t\"RuinedCourt\",\r\n\t\"Ruins Entrance\",\r\n\t\"SDR2 ISLAND\",\r\n\t\"SDR2 ISLAND2\",\r\n\t\"SDR2 ISLAND2 NIGHT\",\r\n\t\"SDR2 ISLAND3\",\r\n\t\"SDR2 ISLAND NIGHT\",\r\n\t\"SI - Bedroom\",\r\n\t\"SI - Class(sunset)\",\r\n\t\"SI - Class\",\r\n\t\"SI - Council1\",\r\n\t\"SI - Council2\",\r\n\t\"SI - Council3\",\r\n\t\"SI - Gym\",\r\n\t\"SI - Gym2\",\r\n\t\"SI - Hall\",\r\n\t\"SI - Hall2\",\r\n\t\"SI - Lockers\",\r\n\t\"SI - Nurse\",\r\n\t\"SI - Office\",\r\n\t\"SI - Pink\",\r\n\t\"SI - Roof\",\r\n\t\"SI - Roof2\",\r\n\t\"SI - School\",\r\n\t\"Seance\",\r\n\t\"SecretRoomsJFA\",\r\n\t\"SecurityCompanyTT\",\r\n\t\"ShipAAI2\",\r\n\t\"SkialForest\",\r\n\t\"Sky\",\r\n\t\"SkyDeck\",\r\n\t\"SoJCourt\",\r\n\t\"SoJDefendantLobby\",\r\n\t\"Somina Castle\",\r\n\t\"Somina Castle Night\",\r\n\t\"SpaceCourt\",\r\n\t\"SpaceCourtBlue\",\r\n\t\"SpaceCourtGreen\",\r\n\t\"SpaceCourtNormal\",\r\n\t\"SpaceCourtOrange\",\r\n\t\"SpaceCourtRainbow\",\r\n\t\"SpaceCourtRed\",\r\n\t\"SpaceCourtYellow\",\r\n\t\"SpacePort\",\r\n\t\"Spaceship\",\r\n\t\"StageAAI\",\r\n\t\"StageDisassembledAAI\",\r\n\t\"SteamBar\",\r\n\t\"SteamGarden\",\r\n\t\"SteamGovt\",\r\n\t\"SteamSquare\",\r\n\t\"SteamStreet\",\r\n\t\"Street\",\r\n\t\"SummerFestival\",\r\n\t\"SummerFestivalEvening\",\r\n\t\"TARDIS\",\r\n\t\"TEOS Lab\",\r\n\t\"TTAtmeyOffice\",\r\n\t\"TTBlueScreensInc\",\r\n\t\"TTDemasqueHideout\",\r\n\t\"TTHazakuraTemple\",\r\n\t\"TTHazakuraTempleInner\",\r\n\t\"TTKBSecurity\",\r\n\t\"TTLordlyTailor\",\r\n\t\"TTTenderLender\",\r\n\t\"TTTresBien\",\r\n\t\"TenderLenderTT\",\r\n\t\"Themis\",\r\n\t\"Titania\",\r\n\t\"TitaniaValley\",\r\n\t\"Togami Mansion\",\r\n\t\"TouhouCourt\",\r\n\t\"Tower\",\r\n\t\"Town\",\r\n\t\"Town Night\",\r\n\t\"Tr0LLc0urt\",\r\n\t\"TrainstationAA\",\r\n\t\"TresBienTT\",\r\n\t\"TrollCourt\",\r\n\t\"Twotorial Village\",\r\n\t\"Twotorial Village Night\",\r\n\t\"VC 1\",\r\n\t\"VLR\",\r\n\t\"VLR2.2\",\r\n\t\"VLR2.3\",\r\n\t\"VLR2\",\r\n\t\"VLR3\",\r\n\t\"VitaminSquareTT\",\r\n\t\"WEN\",\r\n\t\"WaitingRoomAAI\",\r\n\t\"WestAAI\",\r\n\t\"WinterPalaceAAI2\",\r\n\t\"WitchTrialCourt\",\r\n\t\"WitchtrialCourtHQ\",\r\n\t\"Witchwood\",\r\n\t\"WorldEmulator\",\r\n\t\"Wreckage (SG)\",\r\n\t\"Wrightagency\",\r\n\t\"Xmas\",\r\n\t\"Zetta\",\r\n\t\"animation\",\r\n\t\"apollojustice\",\r\n\t\"background\",\r\n\t\"basement\",\r\n\t\"birthday\",\r\n\t\"blackout\",\r\n\t\"chess\",\r\n\t\"chessw1\",\r\n\t\"chessw2\",\r\n\t\"chessw3\",\r\n\t\"chessw4\",\r\n\t\"christmas\",\r\n\t\"circus\",\r\n\t\"classtrial\",\r\n\t\"cofe\",\r\n\t\"courthouseofgods\",\r\n\t\"cruise\",\r\n\t\"cruise court\",\r\n\t\"custom\",\r\n\t\"custom1\",\r\n\t\"custom2\",\r\n\t\"custom3\",\r\n\t\"custom4\",\r\n\t\"custom5\",\r\n\t\"custom6\",\r\n\t\"custom7\",\r\n\t\"custom8\",\r\n\t\"custom9\",\r\n\t\"custom10\",\r\n\t\"daimoncourt\",\r\n\t\"default - Kopie\",\r\n\t\"default\",\r\n\t\"default_christmas\",\r\n\t\"defendantlobby\",\r\n\t\"defendantlobbyapollo\",\r\n\t\"detentioncenter\",\r\n\t\"doppler\",\r\n\t\"dr1stfloor\",\r\n\t\"dr1stfloordorms\",\r\n\t\"dr1stfloorhalls\",\r\n\t\"dr2ndfloor\",\r\n\t\"dr3rdfloor\",\r\n\t\"druq1stfloordorms\",\r\n\t\"druq2ndfloordorms\",\r\n\t\"dualdestinies\",\r\n\t\"dualdestiniesOG\",\r\n\t\"dungeon\",\r\n\t\"endless\",\r\n\t\"englishcourt\",\r\n\t\"forest\",\r\n\t\"gs4\",\r\n\t\"gs4night\",\r\n\t\"gs5\",\r\n\t\"hd\",\r\n\t\"inn\",\r\n\t\"investigationbando\",\r\n\t\"investigationsembassylobby\",\r\n\t\"investigationsgourdlake\",\r\n\t\"investigationsmilesoffice\",\r\n\t\"investigationsplaneair\",\r\n\t\"investigationsroyalcourt\",\r\n\t\"investigationstvroom\",\r\n\t\"investigationswestern\",\r\n\t\"investigationswitchtown\",\r\n\t\"island 1(uranus zone)\",\r\n\t\"lcourt\",\r\n\t\"legacy\",\r\n\t\"lobbyDGS-ENG\",\r\n\t\"lobbyDGS-JAP\",\r\n\t\"lobbyPLvsAA-ENG\",\r\n\t\"lobbyPLvsAA-LAB\",\r\n\t\"lobbySOJ\",\r\n\t\"magatama\",\r\n\t\"magatama1\",\r\n\t\"magatama2\",\r\n\t\"magatama3\",\r\n\t\"magatama4\",\r\n\t\"magatama5\",\r\n\t\"marblefade\",\r\n\t\"matrix\",\r\n\t\"matrixall\",\r\n\t\"matrixangry\",\r\n\t\"matrixangrysad\",\r\n\t\"matrixangrysurprised\",\r\n\t\"matrixhappy\",\r\n\t\"matrixhappyangry\",\r\n\t\"matrixhappysad\",\r\n\t\"matrixhappysurprised\",\r\n\t\"matrixsad\",\r\n\t\"matrixsadsurprised\",\r\n\t\"matrixsurprise\",\r\n\t\"mlp\",\r\n\t\"newcourt\",\r\n\t\"night (no lights)\",\r\n\t\"plvsaa\",\r\n\t\"policestation\",\r\n\t\"prisonvestigation\",\r\n\t\"sdr2classtrial\",\r\n\t\"sky\",\r\n\t\"sshope2ndfloorday(incident)\",\r\n\t\"sshope2ndfloorday\",\r\n\t\"sshope2ndfloornight(incident)\",\r\n\t\"sshope2ndfloornight\",\r\n\t\"sshopeday(incident)\",\r\n\t\"sshopeday\",\r\n\t\"sshopenight(incident)\",\r\n\t\"sshopenight\",\r\n\t\"thief\",\r\n\t\"thiefbash\",\r\n\t\"thiefpoint\",\r\n\t\"thiefpoisoning\",\r\n\t\"thiefprints\",\r\n\t\"thiefstab\",\r\n\t\"thiefsteal\",\r\n\t\"turnaboutstorm - Kopie\",\r\n\t\"turnaboutstorm\",\r\n\t\"vocalcourt\",\r\n\t\"witchtrialcourt\"\r\n];","/*\r\n * Glorious webAO\r\n * made by sD, refactored by oldmud0 and Qubrick\r\n * credits to aleks for original idea and source\r\n*/\r\n\r\n// Uses the Gify library:\r\n// https://github.com/rfrench/gify\r\n// The following comment is needed for ESLint:\r\n/* global gify */\r\n\r\nimport background_arr from \"./backgrounds.js\";\r\nimport evidence_arr from \"./evidence.js\";\r\n\r\nlet queryDict = {};\r\nlocation.search.substr(1).split(\"&\").forEach(function (item) {\r\n\tqueryDict[item.split(\"=\")[0]] = item.split(\"=\")[1];\r\n});\r\n\r\n/* Server magic */\r\n\r\nconst serverIP = queryDict.ip;\r\nlet mode = queryDict.mode;\r\n\r\nconst AO_HOST = queryDict.asset || \"http://s3.wasabisys.com/webao/base/\";\r\nconst MUSIC_HOST = AO_HOST + \"sounds/music/\";\r\nconst CHAR_SELECT_WIDTH = 8;\r\nconst UPDATE_INTERVAL = 60;\r\n\r\nlet oldLoading = false;\r\nif (/Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Opera Mini/i.test(navigator.userAgent)) {\r\n\toldLoading = true;\r\n}\r\n\r\nlet selectedEffect = 0;\r\nlet selectedMenu = 1;\r\nlet selectedShout = 0;\r\nlet lastICMessageTime = new Date(0);\r\n\r\nclass Client {\r\n\tconstructor(address) {\r\n\t\tthis.serv = new WebSocket(\"ws://\" + address);\r\n\r\n\t\tthis.serv.onopen = (evt) => this.onOpen(evt);\r\n\t\tthis.serv.onclose = (evt) => this.onClose(evt);\r\n\t\tthis.serv.onmessage = (evt) => this.onMessage(evt);\r\n\t\tthis.serv.onerror = (evt) => this.onError(evt);\r\n\r\n\t\tthis.flip = false;\r\n\t\tthis.presentable = false;\r\n\r\n\t\tthis.hp = [0, 0];\r\n\r\n\t\tthis.playerID = 1;\r\n\t\tthis.charID = -1;\r\n\t\tthis.testimonyID = 0;\r\n\r\n\t\tthis.chars = [];\r\n\t\tthis.emotes = [];\r\n\t\tthis.evidences = [];\r\n\r\n\t\tthis.resources = {\r\n\t\t\t\"holdit\": {\r\n\t\t\t\t\"src\": \"misc/holdit.gif\",\r\n\t\t\t\t\"duration\": 720\r\n\t\t\t},\r\n\t\t\t\"objection\": {\r\n\t\t\t\t\"src\": \"misc/objection.gif\",\r\n\t\t\t\t\"duration\": 720\r\n\t\t\t},\r\n\t\t\t\"takethat\": {\r\n\t\t\t\t\"src\": \"misc/takethat.gif\",\r\n\t\t\t\t\"duration\": 840\r\n\t\t\t},\r\n\t\t\t\"witnesstestimony\": {\r\n\t\t\t\t\"src\": \"misc/witnesstestimony.gif\",\r\n\t\t\t\t\"duration\": 1560,\r\n\t\t\t\t\"sfx\": \"sounds/general/sfx-testimony.wav\"\r\n\t\t\t},\r\n\t\t\t\"crossexamination\": {\r\n\t\t\t\t\"src\": \"misc/crossexamination.gif\",\r\n\t\t\t\t\"duration\": 1600,\r\n\t\t\t\t\"sfx\": \"sounds/general/sfx-testimony2.wav\"\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.selectedEmote = -1;\r\n\t\tthis.selectedEvidence = 0;\r\n\r\n\t\tthis.checkUpdater = null;\r\n\r\n\t\t// Only used for RMC/`music` packets, not EM/SM/MC packets.\r\n\t\tthis.musicList = Object();\r\n\r\n\t\tthis.handlers = {\r\n\t\t\t\"MS\": (args) => this.handleMS(args),\r\n\t\t\t\"CT\": (args) => this.handleCT(args),\r\n\t\t\t\"MC\": (args) => this.handleMC(args),\r\n\t\t\t\"RMC\": (args) => this.handleRMC(args),\r\n\t\t\t\"CI\": (args) => this.handleCI(args),\r\n\t\t\t\"SC\": (args) => this.handleSC(args),\r\n\t\t\t\"EI\": (args) => this.handleEI(args),\r\n\t\t\t\"LE\": (args) => this.handleLE(args),\r\n\t\t\t\"EM\": (args) => this.handleEM(args),\r\n\t\t\t\"SM\": (args) => this.handleSM(args),\r\n\t\t\t\"music\": (args) => this.handlemusic(args),\r\n\t\t\t\"DONE\": (args) => this.handleDONE(args),\r\n\t\t\t\"BN\": (args) => this.handleBN(args),\r\n\t\t\t\"NBG\": (args) => this.handleNBG(args),\r\n\t\t\t\"HP\": (args) => this.handleHP(args),\r\n\t\t\t\"RT\": (args) => this.handleRT(args),\r\n\t\t\t\"ZZ\": (args) => this.handleZZ(args),\r\n\t\t\t\"ID\": (args) => this.handleID(args),\r\n\t\t\t\"PN\": (args) => this.handlePN(args),\r\n\t\t\t\"SI\": (args) => this.handleSI(args),\r\n\t\t\t\"CharsCheck\": (args) => this.handleCharsCheck(args),\r\n\t\t\t\"PV\": (args) => this.handlePV(args),\r\n\t\t\t\"CHECK\": (args) => {}\r\n\t\t};\r\n\r\n\t\tthis._lastTimeICReceived = new Date(0);\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the current player's character.\r\n\t */\r\n\tme() {\r\n\t\treturn this.chars[this.charID];\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the player's currently selected emote.\r\n\t */\r\n\tmyEmote() {\r\n\t\treturn this.emotes[this.selectedEmote];\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the player's currently selected evidence if presentable.\r\n\t */\r\n\tmyEvidence() {\r\n\t\treturn this.presentable ? this.selectedEvidence : 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Sends an out-of-character chat message.\r\n\t * @param {string} message the message to send\r\n\t */\r\n\tsendOOC(message) {\r\n\t\tthis.serv.send(`CT#${escapeChat(encodeChat(document.getElementById(\"OOC_name\").value))}#${escapeChat(encodeChat(message))}#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends an in-character chat message.\r\n\t * @param {string} speaking who is speaking\r\n\t * @param {string} name the name of the current character\r\n\t * @param {string} silent whether or not it's silent\r\n\t * @param {string} message the message to be sent\r\n\t * @param {string} side the name of the side in the background\r\n\t * @param {string} ssfxname the name of the sound effect\r\n\t * @param {string} zoom whether or not to zoom\r\n\t * @param {number} ssfxdelay the delay (in milliseconds) to play the sound effect\r\n\t * @param {string} objection the number of the shout to play\r\n\t * @param {string} evidence the filename of evidence to show\r\n\t * @param {number} flip change to 1 to reverse sprite for position changes\r\n\t * @param {string} flash screen flash effect\r\n\t * @param {string} color text color\r\n\t */\r\n\tsendIC(speaking, name, silent, message, side, ssfxname, zoom, ssfxdelay, objection, evidence, flip, flash, color) {\r\n\t\tthis.serv.send(\r\n\t\t\t`MS#chat#${speaking}#${name}#${silent}` +\r\n\t\t\t`#${escapeChat(encodeChat(message))}#${side}#${ssfxname}#${zoom}` +\r\n\t\t\t`#${this.charID}#${ssfxdelay}#${selectedShout}#${evidence}#${flip}#${flash}#${color}#%`\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends add evidence command.\r\n\t * @param {string} evidence name\r\n\t * @param {string} evidence description\r\n\t * @param {string} evidence image filename\r\n\t */\r\n\tsendPE(name, desc, img) {\r\n\t\tthis.serv.send(`PE#${escapeChat(encodeChat(name))}#${escapeChat(encodeChat(desc))}#${img}#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends edit evidence command.\r\n\t * @param {number} evidence id\r\n\t * @param {string} evidence name\r\n\t * @param {string} evidence description\r\n\t * @param {string} evidence image filename\r\n\t */\r\n\tsendEE(id, name, desc, img) {\r\n\t\tthis.serv.send(`EE#${id}#${escapeChat(encodeChat(name))}#${escapeChat(encodeChat(desc))}#${img}#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends delete evidence command.\r\n\t * @param {number} evidence id\r\n\t */\r\n\tsendDE(id) {\r\n\t\tthis.serv.send(`DE#${id}#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends health point command.\r\n\t * @param {number} side the position\r\n\t * @param {number} hp the health point\r\n\t */\r\n\tsendHP(side, hp) {\r\n\t\tthis.serv.send(`HP#${side}#${hp}#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends call mod command.\r\n\t * @param {string} message to mod\r\n\t */\r\n\tsendZZ(msg) {\r\n\t\tthis.serv.send(`ZZ#${msg}#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends testimony command.\r\n\t * @param {string} testimony type\r\n\t */\r\n\tsendRT(testimony) {\r\n\t\tif (this.chars[this.charID].side == \"jud\") {\r\n\t\t\tthis.serv.send(`RT#${testimony}#%`);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Requests to change the music to the specified track.\r\n\t * @param {string} track the track ID\r\n\t */\r\n\tsendMusicChange(track) {\r\n\t\tthis.serv.send(`MC#${track}#${this.charID}#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Requests to leave the room and free the character slot.\r\n\t * \r\n\t * Note: This packet is undocumented. It is not implemented by\r\n\t * either the AO2 client or tsuserver.\r\n\t */\r\n\tsendLeaveRoom() {\r\n\t\tthis.serv.send(\"FC#%\");\r\n\t}\r\n\r\n\t/**\r\n\t * Begins the handshake process by sending an identifier\r\n\t * to the server.\r\n\t */\r\n\tjoinServer() {\r\n\t\tthis.serv.send(`HI#${navigator.userAgent.hashCode()}#%`);\r\n\t\tthis.serv.send(\"ID#webAO#2.3#%\");\r\n\t\tthis.checkUpdater = setInterval(() => this.sendCheck(), 5000);\r\n\t}\r\n\r\n\t/**\r\n\t * Load game resources.\r\n\t */\r\n\tloadResources() {\r\n\t\t// Set to playerID to server chat name\r\n\t\t// TODO: Make a text box for this!\r\n\t\tdocument.getElementById(\"OOC_name\").value = \"web\" + this.playerID;\r\n\r\n\t\t// Load evidence array to select\r\n\t\tconst evidence_select = document.getElementById(\"evi_select\");\r\n\t\tevidence_select.add(new Option(\"Custom\", 0));\r\n\t\tevidence_arr.forEach(evidence => {\r\n\t\t\tevidence_select.add(new Option(evidence));\r\n\t\t});\r\n\r\n\t\t// Load background array to select\r\n\t\tconst background_select = document.getElementById(\"bg_select\");\r\n\t\tbackground_select.add(new Option(\"Custom\", 0));\r\n\t\tbackground_arr.forEach(background => {\r\n\t\t\tbackground_select.add(new Option(background));\r\n\t\t});\r\n\t\t// Calculate gif duration of shouts\r\n\t\tconst shouts = [\"holdit\", \"objection\", \"takethat\"];\r\n\t\tfor (let i = 0; i < shouts.length; i++) {\r\n\t\t\tlet shout_src = AO_HOST + this.resources[shouts[i]][\"src\"].toLowerCase();\r\n\t\t\tfileExists(shout_src, this.callbackLoadImageResources, shouts[i]);\r\n\t\t}\r\n\r\n\t\t// Calculate gif duration of testimony\r\n\t\tconst testimony = [\"witnesstestimony\", \"crossexamination\"];\r\n\t\tfor (let i = 0; i < testimony.length; i++) {\r\n\t\t\tconst testimony_src = `${AO_HOST}themes/default/${testimony[i]}.gif`;\r\n\t\t\t// Check image existed\r\n\t\t\tfileExists(testimony_src, this.callbackLoadImageResources, testimony[i]);\r\n\t\t\t// Check sfx existed\r\n\t\t\tfileExists(AO_HOST + this.resources[testimony[i]][\"sfx\"].toLowerCase(), this.callbackLoadSFXResources, testimony[i]);\r\n\t\t}\r\n\t\t// TODO: Cache some resources\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Callback for image resources.\r\n\t * @param {boolean} result the image is existed or not\r\n\t * @param {string} resource the resource name\r\n\t * @param {string} src the url of resource\r\n\t */\r\n\tcallbackLoadImageResources(result, resource, src) {\r\n\t\tif (result) {\r\n\t\t\tclient.resources[resource][\"src\"] = src;\r\n\t\t\tviewport.getAnimLength(src, client.callbackGetResourceLength, resource);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Callback for animation duration resource\r\n\t * @param {integer} length the animation length\r\n\t * @param {string} resource the resource name\r\n\t */\r\n\tcallbackGetResourceLength(length, resource) {\r\n\t\tclient.resources[resource][\"duration\"] = length;\r\n\t}\r\n\r\n\t/**\r\n\t * Callback for sfx resources.\r\n\t * @param {boolean} result the audio is existed or not\r\n\t * @param {string} resource the resource name\r\n\t * @param {string} src the url of resource\r\n\t */\r\n\tcallbackLoadSFXResources(result, resource, src) {\r\n\t\tif (result) {\r\n\t\t\tclient.resources[resource][\"sfx\"] = src;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Create observer to detect BBCode elements\r\n\t * then manipulate them.\r\n\t */\r\n\tinitialObservBBCode() {\r\n\t\tconst target = document.getElementById(\"client_inner_chat\");\r\n\t\tconst observer = new MutationObserver(function (mutations) {\r\n\t\t\tmutations.forEach(function (mutation) {\r\n\t\t\t\tconst children = mutation.addedNodes;\r\n\t\t\t\tif (children !== null) {\r\n\t\t\t\t\tchildren.forEach(function (node) {\r\n\t\t\t\t\t\tif (node.tagName == \"C\") {\r\n\t\t\t\t\t\t\tnode.style.color = node.getAttribute(\"a\");\r\n\t\t\t\t\t\t} else if (node.tagName == \"M\") {\r\n\t\t\t\t\t\t\tif (node.hasAttribute(\"a\")) {\r\n\t\t\t\t\t\t\t\tnode.style.backgroundColor = node.getAttribute(\"a\");\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tnode.style.backgroundColor = \"yellow\";\r\n\t\t\t\t\t\t\t\tnode.style.color = \"black\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t\tconst config = {\r\n\t\t\tattributes: true,\r\n\t\t\tchildList: true\r\n\t\t};\r\n\t\tobserver.observe(target, config);\r\n\t}\r\n\r\n\t/**\r\n\t * Requests to play as a specified character.\r\n\t * @param {number} character the character ID\r\n\t */\r\n\tsendCharacter(character) {\r\n\t\tthis.serv.send(`CC#${this.playerID}#${character}#web#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Requests to select a music track.\r\n\t * @param {number?} song the song to be played\r\n\t */\r\n\tsendMusic(song) {\r\n\t\tthis.serv.send(`MC#${song}`);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends a keepalive packet.\r\n\t */\r\n\tsendCheck() {\r\n\t\tthis.serv.send(`CH#${this.charID}#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Triggered when a connection is established to the server.\r\n\t */\r\n\tonOpen(e) {\r\n\t\t// XXX: Why does watching mean just SITTING there and doing nothing?\r\n\t\tif (mode === \"watch\") {\r\n\t\t\tdocument.getElementById(\"client_loading\").style.display = \"none\";\r\n\t\t\tdocument.getElementById(\"client_charselect\").style.display = \"none\";\r\n\t\t} else {\r\n\t\t\tclient.joinServer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggered when the connection to the server closes.\r\n\t * @param {CloseEvent} e\r\n\t */\r\n\tonClose(e) {\r\n\t\tconsole.error(`The connection was closed: ${e.reason} (${e.code})`);\r\n\t\tif (e.code !== 1001) {\r\n\t\t\tdocument.getElementById(\"client_error\").style.display = \"block\";\r\n\t\t\tdocument.getElementById(\"error_id\").textContent = e.code;\r\n\t\t\tthis.cleanup();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggered when a packet is received from the server.\r\n\t * @param {MessageEvent} e\r\n\t */\r\n\tonMessage(e) {\r\n\t\tlet msg = e.data;\r\n\t\tconsole.debug(msg);\r\n\t\tlet lines = msg.split(\"%\");\r\n\t\tlet args = lines[0].split(\"#\");\r\n\t\tlet header = args[0];\r\n\t\tlet handler = this.handlers[header];\r\n\t\tif (typeof handler !== \"undefined\") {\r\n\t\t\thandler(args);\r\n\t\t} else {\r\n\t\t\tconsole.warn(`Invalid packet header ${header}`);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggered when an network error occurs.\r\n\t * @param {ErrorEvent} e \r\n\t */\r\n\tonError(e) {\r\n\t\tconsole.error(`A network error occurred: ${e.reason} (${e.code})`);\r\n\t\tdocument.getElementById(\"client_error\").style.display = \"block\";\r\n\t\tdocument.getElementById(\"error_id\").textContent = e.code;\r\n\t\tthis.cleanup();\r\n\t}\r\n\r\n\tcleanup() {\r\n\t\ttry {\r\n\t\t\tthis.serv.close(1001);\r\n\t\t} catch (e) {\r\n\t\t\t// I don't care if this errors\r\n\t\t}\r\n\t\tclearInterval(this.checkUpdater);\r\n\t}\r\n\r\n\t/**\r\n\t * XXX: a nasty hack made by gameboyprinter.\r\n\t * @param {string} msg chat message to prepare for display \r\n\t */\r\n\tprepChat(msg){\r\n\t\t// TODO: make this less awful\r\n\t\treturn decodeBBCode(unescapeChat(decodeChat(msg)));\r\n\t}\r\n\r\n\t/**\r\n\t * Handles an in-character chat message.\r\n\t * @param {*} args packet arguments\r\n\t */\r\n\thandleMS(args) {\r\n\t\t// TODO: this if-statement might be a bug.\r\n\t\tif (args[4] != viewport.chatmsg.content) {\r\n\t\t\tdocument.getElementById(\"client_inner_chat\").innerHTML = \"\";\r\n\t\t\tconst chatmsg = {\r\n\t\t\t\t// pre: escape(args[2]),\r\n\t\t\t\tcharacter: -1, // Will do a linear search\r\n\t\t\t\tpreanim: escape(args[2]), // XXX: why again?\r\n\t\t\t\tnameplate: args[3], // TODO: parse INI to get this info\r\n\t\t\t\tname: args[3],\r\n\t\t\t\tspeaking: \"(b)\" + escape(args[4]),\r\n\t\t\t\tsilent: \"(a)\" + escape(args[4]),\r\n\t\t\t\tcontent: this.prepChat(args[5]), // Escape HTML tag, Use BBCode Only!\r\n\t\t\t\tside: args[6],\r\n\t\t\t\tsound: escape(args[7]),\r\n\t\t\t\ttype: args[8],\r\n\t\t\t\t// charid: args[9],\r\n\t\t\t\tsnddelay: args[10],\r\n\t\t\t\tobjection: args[11],\r\n\t\t\t\tevidence: args[12],\r\n\t\t\t\tflip: args[13],\r\n\t\t\t\tflash: args[14],\r\n\t\t\t\tcolor: args[15],\r\n\t\t\t\tisnew: true,\r\n\t\t\t};\r\n\r\n\t\t\t// The dreaded linear search...\r\n\t\t\tfor (let i = 0; i < this.chars.length; i++) {\r\n\t\t\t\tif (this.chars[i].name == args[3]) {\r\n\t\t\t\t\tchatmsg.character = i;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (chatmsg.character == this.charID) {\r\n\t\t\t\tresetICParams();\r\n\t\t\t}\r\n\r\n\t\t\tviewport.say(chatmsg);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles an out-of-character chat message.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleCT(args) {\r\n\t\tconst oocLog = document.getElementById(\"client_ooclog\");\r\n\t\toocLog.innerHTML += `${decodeChat(unescapeChat(args[1]))}: ${decodeChat(unescapeChat(args[2]))}\\r\\n`;\r\n\t\tif (oocLog.scrollTop > oocLog.scrollHeight - 600) {\r\n\t\t\toocLog.scrollTop = oocLog.scrollHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles a music change to an arbitrary resource.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleMC(args) {\r\n\t\tconst music = viewport.music;\r\n\t\tmusic.pause();\r\n\t\tmusic.src = MUSIC_HOST + args[1].toLowerCase();\r\n\t\tmusic.play();\r\n\t\tif (args[2] >= 0) {\r\n\t\t\tlet musicname = this.chars[args[2]].name;\r\n\t\t\tappendICLog(`${musicname} changed music to ${args[1]}`);\r\n\t\t} else {\r\n\t\t\tappendICLog(`The music was changed to ${args[1]}`);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles a music change to an arbitrary resource, with an offset in seconds.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleRMC(args) {\r\n\t\tviewport.music.pause();\r\n\t\tviewport.music = new Audio(this.musicList[args[1]]);\r\n\t\tconst music = viewport.music;\r\n\t\t// Music offset + drift from song loading\r\n\t\tmusic.totime = args[1];\r\n\t\tmusic.offset = new Date().getTime() / 1000;\r\n\t\tmusic.addEventListener(\"loadedmetadata\", function () {\r\n\t\t\tmusic.currentTime += parseFloat(music.totime + (new Date().getTime() / 1000 - music.offset)).toFixed(3);\r\n\t\t\tmusic.play();\r\n\t\t}, false);\r\n\t}\r\n\r\n\t/**\r\n\t * Handles incoming character information, bundling multiple characters\r\n\t * per packet.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleCI(args) {\r\n\t\tdocument.getElementById(\"client_loadingtext\").innerHTML = \"Loading Character \" + args[1];\r\n\t\tthis.serv.send(\"AN#\" + ((args[1] / 10) + 1) + \"#%\");\r\n\t\tfor (let i = 2; i < args.length - 1; i++) {\r\n\t\t\tif (i % 2 == 0) {\r\n\t\t\t\tlet chargs = args[i].split(\"&\");\r\n\t\t\t\tthis.chars[args[i - 1]] = {\r\n\t\t\t\t\t\"name\": chargs[0],\r\n\t\t\t\t\t\"desc\": chargs[1],\r\n\t\t\t\t\t\"evidence\": chargs[3],\r\n\t\t\t\t\t\"icon\": AO_HOST + \"characters/\" + escape(chargs[0].toLowerCase()) + \"/char_icon.png\"\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles incoming character information, containing only one character\r\n\t * per packet.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleSC(args) {\r\n\t\tdocument.getElementById(\"client_loadingtext\").innerHTML = \"Loading Characters\";\r\n\t\tfor (let i = 1; i < args.length - 1; i++) {\r\n\t\t\tlet chargs = args[i].split(\"&\");\r\n\t\t\tthis.chars[i - 1] = {\r\n\t\t\t\t\"name\": chargs[0],\r\n\t\t\t\t\"desc\": chargs[1],\r\n\t\t\t\t\"evidence\": chargs[3],\r\n\t\t\t\t\"icon\": AO_HOST + \"characters/\" + escape(chargs[0].toLowerCase()) + \"/char_icon.png\"\r\n\t\t\t};\r\n\t\t}\r\n\t\tthis.serv.send(\"RM#%\");\r\n\t}\r\n\r\n\t/**\r\n\t * Handles incoming evidence information, containing only one evidence\r\n\t * item per packet.\r\n\t * \r\n\t * Mostly unimplemented in webAO.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleEI(args) {\r\n\t\tdocument.getElementById(\"client_loadingtext\").innerHTML = \"Loading Evidence \" + args[1];\r\n\t\t//serv.send(\"AE#\" + (args[1] + 1) + \"#%\");\r\n\t\tthis.serv.send(\"RM#%\");\r\n\t}\r\n\r\n\t/**\r\n\t * Handles incoming evidence list, all evidences at once\r\n\t * item per packet.\r\n\t * \r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleLE(args) {\r\n\t\tthis.evidences = [];\r\n\t\tfor (let i = 1; i < args.length - 1; i++) {\r\n\t\t\tconst arg = args[i].split(\"&\");\r\n\t\t\tthis.evidences[i - 1] = {\r\n\t\t\t\t\"name\": decodeChat(unescapeChat(arg[0])),\r\n\t\t\t\t\"desc\": decodeChat(unescapeChat(arg[1])),\r\n\t\t\t\t\"filename\": escape(arg[2]),\r\n\t\t\t\t\"icon\": AO_HOST + \"evidence/\" + escape(arg[2].toLowerCase())\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tconst evidence_box = document.getElementById(\"evidences\");\r\n\t\tevidence_box.innerHTML = \"\";\r\n\t\tfor (let i = 1; i <= this.evidences.length; i++) {\r\n\t\t\tevidence_box.innerHTML += `<img src=\"${this.evidences[i - 1].icon}\" \r\n\t\t\t\tid=\"evi_${i}\" \r\n\t\t\t\talt=\"${this.evidences[i - 1].name}\"\r\n\t\t\t\tclass=\"client_button\"\r\n\t\t\t\tonclick=\"pickEvidence(${i})\">`;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles incoming music information, containing multiple entries\r\n\t * per packet.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleEM(args) {\r\n\t\tdocument.getElementById(\"client_loadingtext\").innerHTML = \"Loading Music \" + args[1];\r\n\t\tthis.serv.send(\"AM#\" + ((args[1] / 10) + 1) + \"#%\");\r\n\t\tlet hmusiclist = document.getElementById(\"client_musiclist\");\r\n\t\tfor (let i = 2; i < args.length - 1; i++) {\r\n\t\t\tif (i % 2 == 0) {\r\n\t\t\t\tlet newentry = document.createElement(\"OPTION\");\r\n\t\t\t\tnewentry.text = args[i];\r\n\t\t\t\thmusiclist.options.add(newentry);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles incoming music information, containing only one entry\r\n\t * per packet.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleSM(args) {\r\n\t\tdocument.getElementById(\"client_loadingtext\").innerHTML = \"Loading Music \";\r\n\t\tconst hmusiclist = document.getElementById(\"client_musiclist\");\r\n\t\tlet flagAudio = false;\r\n\r\n\t\tfor (let i = 1; i < args.length - 1; i++) {\r\n\t\t\t// Check when found the song for the first time\r\n\t\t\tif (/\\.(?:wav|mp3|mp4|ogg|opus)$/i.test(args[i]) && !flagAudio) {\r\n\t\t\t\tflagAudio = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (flagAudio) {\r\n\t\t\t\t// After reached the audio put everything in the music list\r\n\t\t\t\tconst newentry = document.createElement(\"OPTION\");\r\n\t\t\t\tnewentry.text = args[i];\r\n\t\t\t\thmusiclist.options.add(newentry);\r\n\t\t\t} else {\r\n\t\t\t\t// Create area button\r\n\t\t\t\tconst newarea = document.createElement(\"SPAN\");\r\n\t\t\t\tnewarea.className = \"location-box\";\r\n\t\t\t\tnewarea.textContent = args[i];\r\n\t\t\t\tnewarea.onclick = function () {\r\n\t\t\t\t\tarea_click(this);\r\n\t\t\t\t};\r\n\t\t\t\tdocument.getElementById(\"areas\").appendChild(newarea);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// We need to check if the last area that we got was actually a category\r\n\t\t// header for music. If it was, then move it over to the music list.\r\n\t\tconst area_box = document.getElementById(\"areas\");\r\n\t\tif (area_box.lastChild.textContent.startsWith(\"=\")) {\r\n\t\t\tconst audio_title = document.createElement(\"OPTION\");\r\n\t\t\taudio_title.text = area_box.lastChild.textContent;\r\n\t\t\thmusiclist.insertBefore(audio_title, hmusiclist.firstChild);\r\n\t\t\tarea_box.removeChild(area_box.lastChild);\r\n\t\t}\r\n\r\n\t\tthis.serv.send(\"RD#%\");\r\n\t}\r\n\r\n\t/**\r\n\t * Handles incoming music information, containing all entries\r\n\t * in the same packet.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandlemusic(args) {\r\n\t\tfor (let i = 0; i < args.length / 2; i++) {\r\n\t\t\tthis.musicList[args[2 * i]] = args[2 * i + 1];\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the handshake completion packet, meaning the player\r\n\t * is ready to select a character.\r\n\t * \r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleDONE(args) {\r\n\t\tdocument.getElementById(\"client_loading\").style.display = \"none\";\r\n\t\tdocument.getElementById(\"client_charselect\").style.display = \"block\";\r\n\t}\r\n\r\n\t/**\r\n\t * Handles a background change.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleBN(args) {\r\n\t\tviewport.bgname = escape(args[1]);\r\n\t\tconst bg_index = getIndexFromSelect(\"bg_select\", escape(args[1]));\r\n\t\tdocument.getElementById(\"bg_select\").selectedIndex = bg_index;\r\n\t\tupdateBackgroundPreview();\r\n\t\tif (bg_index == 0) {\r\n\t\t\tdocument.getElementById(\"bg_filename\").value = args[1];\r\n\t\t}\r\n\t\tdocument.getElementById(\"bg_preview\").src = AO_HOST + \"background/\" + escape(args[1].toLowerCase()) + \"/defenseempty.png\";\r\n\t\tif (this.charID == -1) {\r\n\t\t\tchangeBackground(\"jud\");\r\n\t\t} else {\r\n\t\t\tchangeBackground(this.chars[this.charID].side);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\thandleNBG(args) {\r\n\t\t// TODO (set by sD)\r\n\t}\r\n\r\n\t/**\r\n\t * Handles a change in the health bars' states.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleHP(args) {\r\n\t\tconst percent_hp = args[2] * 10;\r\n\t\tif (args[1] == 1) {\r\n\t\t\t// Def hp\r\n\t\t\tthis.hp[0] = args[2];\r\n\t\t\t$(\"#client_defense_hp > .health-bar\").animate({\r\n\t\t\t\t\"width\": percent_hp + \"%\"\r\n\t\t\t}, 500);\r\n\t\t} else {\r\n\t\t\t// Pro hp\r\n\t\t\tthis.hp[1] = args[2];\r\n\t\t\t$(\"#client_prosecutor_hp > .health-bar\").animate({\r\n\t\t\t\t\"width\": percent_hp + \"%\"\r\n\t\t\t}, 500);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles a testimony states.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleRT(args) {\r\n\t\tif (args[1] == \"testimony1\") {\r\n\t\t\t//Witness Testimony\r\n\t\t\tthis.testimonyID = 1;\r\n\t\t} else {\r\n\t\t\t//Cross Examination\r\n\t\t\tthis.testimonyID = 2;\r\n\t\t}\r\n\t\tviewport.initTestimonyUpdater();\r\n\t}\r\n\r\n\t/**\r\n\t * Handles a call mod message.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleZZ(args) {\r\n\t\tconst oocLog = document.getElementById(\"client_ooclog\");\r\n\t\toocLog.innerHTML += `$Alert: ${decodeChat(unescapeChat(args[1]))}\\r\\n`;\r\n\t\tif (oocLog.scrollTop > oocLog.scrollHeight - 60) {\r\n\t\t\toocLog.scrollTop = oocLog.scrollHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the issuance of a player ID by the server.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleID(args) {\r\n\t\tthis.playerID = args[1];\r\n\t}\r\n\r\n\thandlePN(args) {\r\n\t\tthis.serv.send(\"askchaa#%\");\r\n\t}\r\n\r\n\t/**\r\n\t * Received when the server announces its server info,\r\n\t * but we use it as a cue to begin retrieving characters.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleSI(args) {\r\n\t\tif (oldLoading) {\r\n\t\t\tthis.serv.send(\"askchar2#%\");\r\n\t\t} else {\r\n\t\t\tthis.serv.send(\"RC#%\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the list of all used and vacant characters.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleCharsCheck(args) {\r\n\t\tdocument.getElementById(\"client_chartable\").innerHTML = \"\";\r\n\t\tlet tr;\r\n\t\tfor (let i = 0; i < this.chars.length; i++) {\r\n\t\t\tif (i % CHAR_SELECT_WIDTH == 0) {\r\n\t\t\t\ttr = document.createElement(\"TR\");\r\n\t\t\t}\r\n\t\t\tconst td = document.createElement(\"TD\");\r\n\t\t\tlet icon_chosen = \"\";\r\n\t\t\tconst thispick = this.chars[i].icon;\r\n\t\t\tif (args[i + 1] == \"-1\") {\r\n\t\t\t\ticon_chosen = \" dark\";\r\n\t\t\t}\r\n\t\t\ttd.innerHTML = `<img class='demothing${icon_chosen}' id='demo_${i}' ` +\r\n\t\t\t\t`src='${thispick}' alt='${this.chars[i].name}' onclick='pickChar(${i})' ` +\r\n\t\t\t\t\"onerror='demoError(this);'>\";\r\n\t\t\ttr.appendChild(td);\r\n\t\t\tif (i % CHAR_SELECT_WIDTH == 0) {\r\n\t\t\t\tdocument.getElementById(\"client_chartable\").appendChild(tr);\r\n\t\t\t}\r\n\t\t}\r\n\t\t//changeBackground(\"def\");\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the server's assignment of a character for the player to use.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandlePV(args) {\r\n\t\tthis.charID = args[3];\r\n\t\tdocument.getElementById(\"client_charselect\").style.display = \"none\";\r\n\t\tdocument.getElementById(\"client_inputbox\").style.display = \"\";\r\n\t\tconst me = this.me();\r\n\t\tconst emotes = this.emotes;\r\n\t\tconst emotesList = document.getElementById(\"client_emo\");\r\n\t\temotesList.innerHTML = \"\"; // Clear emote box\r\n\t\temotesList.style.display = \"\";\r\n\t\tconst xhr = new XMLHttpRequest();\r\n\t\txhr.withCredentials = false;\r\n\t\txhr.open(\"GET\", AO_HOST + \"characters/\" + escape(this.me().name.toLowerCase()) + \"/char.ini\", true);\r\n\t\txhr.responseType = \"text\";\r\n\t\txhr.onload = function (e) {\r\n\t\t\tif (this.status == 200) {\r\n\t\t\t\tconst linifile = this.responseText;\r\n\t\t\t\tconst pinifile = INI.parse(linifile);\r\n\t\t\t\tme.side = pinifile.Options.side;\r\n\t\t\t\tupdateActionCommands(me.side);\r\n\t\t\t\tfor (let i = 1; i <= pinifile.Emotions.number; i++) {\r\n\t\t\t\t\tconst emoteinfo = pinifile.Emotions[i].split(\"#\");\r\n\t\t\t\t\tlet esfx = \"0\";\r\n\t\t\t\t\tlet esfxd = \"0\";\r\n\t\t\t\t\tif (typeof pinifile.SoundN !== \"undefined\") {\r\n\t\t\t\t\t\tesfx = pinifile.SoundN[i];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (typeof pinifile.SoundT !== \"undefined\") {\r\n\t\t\t\t\t\tesfxd = pinifile.SoundT[i];\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Make sure the asset server is case insensitive, or that everything on it is lowercase\r\n\t\t\t\t\temotes[i] = {\r\n\t\t\t\t\t\tdesc: emoteinfo[0].toLowerCase(),\r\n\t\t\t\t\t\tspeaking: emoteinfo[1].toLowerCase(),\r\n\t\t\t\t\t\tsilent: emoteinfo[2].toLowerCase(),\r\n\t\t\t\t\t\tzoom: emoteinfo[3],\r\n\t\t\t\t\t\tsfx: esfx.toLowerCase(),\r\n\t\t\t\t\t\tsfxdelay: esfxd,\r\n\t\t\t\t\t\tbutton_off: AO_HOST + `characters/${escape(me.name).toLowerCase()}/emotions/button${i}_off.png`,\r\n\t\t\t\t\t\tbutton_on: AO_HOST + `characters/${escape(me.name).toLowerCase()}/emotions/button${i}_on.png`\r\n\t\t\t\t\t};\r\n\t\t\t\t\temotesList.innerHTML += \r\n\t\t\t\t\t\t`<img src=${emotes[i].button_off}\r\n\t\t\t\t\t\t id=\"emo_${i}\"\r\n\t\t\t\t\t\t alt=\"${emotes[i].desc}\"\r\n\t\t\t\t\t\t class=\"client_button\"\r\n\t\t\t\t\t\t onclick=\"pickEmotion(${i})\">`;\r\n\t\t\t\t}\r\n\t\t\t\tpickEmotion(1);\r\n\t\t\t}\r\n\t\t};\r\n\t\txhr.send();\r\n\t}\r\n}\r\n\r\nclass Viewport {\r\n\tconstructor() {\r\n\t\tthis.textnow = \"\";\r\n\t\tthis.chatmsg = {\r\n\t\t\t\"isnew\": false,\r\n\t\t\t\"content\": \"\",\r\n\t\t\t\"objection\": \"0\",\r\n\t\t\t\"sound\": \"\",\r\n\t\t\t\"startpreanim\": false,\r\n\t\t\t\"startspeaking\": false,\r\n\t\t\t\"side\": null,\r\n\t\t\t\"color\": \"0\",\r\n\t\t\t\"snddelay\": 0,\r\n\t\t\t\"preanimdelay\": 0\r\n\t\t};\r\n\t\tthis.blip = new Audio(AO_HOST + \"sounds/general/sfx-blipmale.wav\");\r\n\t\tthis.blip.volume = 0.5;\r\n\r\n\t\t// Allocate multiple blip audio channels to make blips less jittery\r\n\r\n\t\t// TODO: read blip type (\"gender\") from ini\r\n\t\tthis.blipChannels = new Array(6);\r\n\t\tfor (let i = 0; i < this.blipChannels.length; i++) {\r\n\t\t\tthis.blipChannels[i] = new Audio(AO_HOST + \"sounds/general/sfx-blipmale.wav\");\r\n\t\t\tthis.blipChannels[i].volume = 0.5;\r\n\t\t}\r\n\t\tthis.currentBlipChannel = 0;\r\n\r\n\t\tthis.sfxaudio = new Audio(AO_HOST + \"sounds/general/sfx-blipmale.wav\");\r\n\t\tthis.sfxplayed = 0;\r\n\r\n\t\tthis.music = new Audio();\r\n\t\tthis.music.play();\r\n\r\n\t\tthis.updater = null;\r\n\t\tthis.testimonyUpdater = null;\r\n\r\n\t\tthis.bgname = \"gs4\";\r\n\r\n\t\tthis.testimonyTimer = 0;\r\n\t\tthis.shoutTimer = 0;\r\n\t\tthis.textTimer = 0;\r\n\r\n\t\tthis._animating = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns whether or not the viewport is busy\r\n\t * performing a task (animating).\r\n\t */\r\n\tisAnimating() {\r\n\t\treturn this._animating;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the volume of the blip sound.\r\n\t * @param {number} volume\r\n\t */\r\n\tsetBlipVolume(volume) {\r\n\t\tfor (let i = 0; i < this.blipChannels.length; i++) {\r\n\t\t\tthis.blipChannels[i].volume = volume;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the path which the background is located in.\r\n\t */\r\n\tbgFolder() {\r\n\t\treturn `${AO_HOST}background/${this.bgname.toLowerCase()}/`;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets a new emote.\r\n\t * @param {object} chatmsg the new chat message\r\n\t */\r\n\tsay(chatmsg) {\r\n\t\tthis.chatmsg = chatmsg;\r\n\t\tappendICLog(chatmsg.content, chatmsg.nameplate);\r\n\t\tchangeBackground(chatmsg.side);\r\n\t\tthis.textnow = \"\";\r\n\t\tthis.sfxplayed = 0;\r\n\t\tthis.textTimer = 0;\r\n\t\tthis._animating = true;\r\n\t\tclearTimeout(this.updater);\r\n\t\t// If preanim existed then determine the length\r\n\t\tif (chatmsg.preanim != \"-\") {\r\n\t\t\tchatmsg.preanimdelay = this.getAnimLength(`${AO_HOST}characters/${escape(chatmsg.name.toLowerCase())}/${chatmsg.preanim.toLowerCase()}.gif`, this.initUpdater);\r\n\t\t} else {\r\n\t\t\tthis.initUpdater(0);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Intialize updater\r\n\t * @param {number} animdelay the length of pre-animation \r\n\t */\r\n\tinitUpdater(animdelay) {\r\n\t\tviewport.chatmsg.preanimdelay = parseInt(animdelay);\r\n\t\tviewport.updater = setTimeout(() => viewport.updateText(), UPDATE_INTERVAL);\r\n\t}\r\n\r\n\t/**\r\n\t * Intialize testimony updater \r\n\t */\r\n\tinitTestimonyUpdater() {\r\n\t\tif (client.testimonyID > 0) {\r\n\t\t\tlet testimony = \"\";\r\n\t\t\tif (client.testimonyID == 1) {\r\n\t\t\t\ttestimony = \"witnesstestimony\";\r\n\t\t\t} else if (client.testimonyID == 2) {\r\n\t\t\t\ttestimony = \"crossexamination\";\r\n\t\t\t}\r\n\t\t\t(new Audio(client.resources[testimony][\"sfx\"])).play();\r\n\t\t\tthis.testimonyTimer = 0;\r\n\t\t\tconst testimonyOverlay = document.getElementById(\"client_testimony\");\r\n\t\t\ttestimonyOverlay.src = client.resources[testimony][\"src\"];\r\n\t\t\ttestimonyOverlay.style.display = \"\";\r\n\t\t\tthis.testimonyUpdater = setTimeout(() => this.updateTestimony(), UPDATE_INTERVAL);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Gets animation length.\r\n\t * @param {string} filename the animation file name\r\n\t * @param {function} callback the callback function\r\n\t * @param {object} param \r\n\t */\r\n\tgetAnimLength(filename, callback, param) {\r\n\t\tconst request = new XMLHttpRequest();\r\n\t\trequest.open(\"GET\", filename, true);\r\n\t\trequest.responseType = \"arraybuffer\";\r\n\t\trequest.addEventListener(\"load\", function () {\r\n\t\t\tconst gifInfo = gify.getInfo(request.response);\r\n\t\t\tconsole.log(gifInfo[\"duration\"]);\r\n\t\t\t// Return animation length\r\n\t\t\tcallback(gifInfo[\"duration\"], param);\r\n\t\t});\r\n\t\trequest.send();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the testimony overaly\r\n\t */\r\n\tupdateTestimony() {\r\n\t\t//Update timer\r\n\t\tthis.testimonyTimer = this.testimonyTimer + UPDATE_INTERVAL;\r\n\r\n\t\tif (client.testimonyID == 1) {\r\n\t\t\t//Witness Testimony\r\n\t\t\tif (this.testimonyTimer >= client.resources[\"witnesstestimony\"][\"duration\"]) {\r\n\t\t\t\t//Finish\r\n\t\t\t\tthis.disposeTestimony();\r\n\t\t\t} else {\r\n\t\t\t\tthis.testimonyUpdater = setTimeout(() => this.updateTestimony(), UPDATE_INTERVAL);\r\n\t\t\t}\r\n\t\t} else if (client.testimonyID == 2) {\r\n\t\t\t//Cross Examination\r\n\t\t\tif (this.testimonyTimer >= client.resources[\"crossexamination\"][\"duration\"]) {\r\n\t\t\t\t//Finish\r\n\t\t\t\tthis.disposeTestimony();\r\n\t\t\t} else {\r\n\t\t\t\tthis.testimonyUpdater = setTimeout(() => this.updateTestimony(), UPDATE_INTERVAL);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.disposeTestimony();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Dispose the testimony overlay\r\n\t */\r\n\tdisposeTestimony() {\r\n\t\tclient.testimonyID = 0;\r\n\t\tthis.testimonyTimer = 0;\r\n\t\tdocument.getElementById(\"client_testimony\").style.display = \"none\";\r\n\t\tclearTimeout(this.testimonyUpdater);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the chatbox based on the given text.\r\n\t * \r\n\t * XXX: This relies on a global variable `this.chatmsg`!\r\n\t */\r\n\tupdateText() {\r\n\t\tconst nameBox = document.getElementById(\"client_name\");\r\n\t\tconst chatBox = document.getElementById(\"client_chat\");\r\n\t\tconst charSprite = document.getElementById(\"client_char\");\r\n\t\tconst eviBox = document.getElementById(\"client_evi\");\r\n\t\tconst background = document.getElementById(\"client_background\");\r\n\t\tconst shoutSprite = document.getElementById(\"client_shout\");\r\n\t\tconst chatBoxInner = document.getElementById(\"client_inner_chat\");\r\n\r\n\t\t// Flip the character\r\n\t\tif (this.chatmsg.flip == 1) {\r\n\t\t\tcharSprite.style.transform = \"scaleX(-1)\";\r\n\t\t} else {\r\n\t\t\tcharSprite.style.transform = \"scaleX(1)\";\r\n\t\t}\r\n\r\n\t\tif (this._animating) {\r\n\t\t\tthis.updater = setTimeout(() => this.updateText(), UPDATE_INTERVAL);\r\n\t\t}\r\n\r\n\t\tif (this.chatmsg.isnew) {\r\n\t\t\t// Reset screen background\r\n\t\t\tbackground.style.backgroundColor = \"transparent\";\r\n\t\t\t// Hide message and evidence window\r\n\t\t\tnameBox.style.display = \"none\";\r\n\t\t\tchatBox.style.display = \"none\";\r\n\t\t\teviBox.style.opacity = \"0\";\r\n\t\t\teviBox.style.height = \"0%\";\r\n\t\t\tconst shouts = {\r\n\t\t\t\t\"1\": \"holdit\",\r\n\t\t\t\t\"2\": \"objection\",\r\n\t\t\t\t\"3\": \"takethat\"\r\n\t\t\t};\r\n\r\n\t\t\tlet shout = shouts[this.chatmsg.objection];\r\n\t\t\tif (typeof shout !== \"undefined\") {\r\n\t\t\t\tshoutSprite.src = client.resources[shout][\"src\"];\r\n\t\t\t\t(new Audio(`${AO_HOST}characters/${this.chatmsg.name.toLowerCase()}/${shout}.wav`)).play();\r\n\t\t\t\tthis.shoutTimer = 850;\r\n\t\t\t} else {\r\n\t\t\t\tthis.shoutTimer = 0;\r\n\t\t\t}\r\n\r\n\t\t\tthis.chatmsg.isnew = false;\r\n\t\t\tthis.chatmsg.startpreanim = true;\r\n\t\t}\r\n\r\n\t\tif (this.textTimer >= this.shoutTimer && this.chatmsg.startpreanim) {\r\n\t\t\t// Effect stuff\r\n\t\t\tif (this.chatmsg.flash == 2) {\r\n\t\t\t\t//Shake screen\r\n\t\t\t\tthis.sfxaudio.pause();\r\n\t\t\t\tthis.sfxplayed = 1;\r\n\t\t\t\tthis.sfxaudio.src = AO_HOST + \"sounds/general/sfx-stab.wav\";\r\n\t\t\t\tthis.sfxaudio.play();\r\n\t\t\t\t$(\"#client_gamewindow\").effect(\"shake\", {\r\n\t\t\t\t\t\"direction\": \"up\"\r\n\t\t\t\t});\r\n\t\t\t} else if (this.chatmsg.flash == 1) {\r\n\t\t\t\t//Flash screen\r\n\t\t\t\tbackground.style.backgroundColor = \"white\";\r\n\t\t\t\tthis.sfxaudio.pause();\r\n\t\t\t\tthis.sfxplayed = 1;\r\n\t\t\t\tthis.sfxaudio.src = AO_HOST + \"sounds/general/sfx-realization.wav\";\r\n\t\t\t\tthis.sfxaudio.play();\r\n\t\t\t\t$(\"#client_gamewindow\").effect(\"pulsate\");\r\n\t\t\t}\r\n\r\n\t\t\t//Pre-animation stuff\r\n\t\t\tif (this.chatmsg.preanimdelay > 0) {\r\n\t\t\t\tshoutSprite.src = \"misc/placeholder.gif\";\r\n\t\t\t\tchangeBackground(this.chatmsg.side);\r\n\t\t\t\tcharSprite.src = AO_HOST + \"characters/\" + escape(this.chatmsg.name.toLowerCase()) + \"/\" + this.chatmsg.preanim.toLowerCase() + \".gif\";\r\n\t\t\t}\r\n\t\t\tthis.chatmsg.startpreanim = false;\r\n\t\t\tthis.chatmsg.startspeaking = true;\r\n\t\t} else if (this.textTimer >= this.shoutTimer + this.chatmsg.preanimdelay && !this.chatmsg.startpreanim) {\r\n\t\t\tif (this.chatmsg.startspeaking) {\r\n\t\t\t\tif (this.chatmsg.evidence > 0) {\r\n\t\t\t\t\t// Prepare evidence\r\n\t\t\t\t\teviBox.style.backgroundImage = \"url('\" + client.evidences[this.chatmsg.evidence - 1].icon + \"')\";\r\n\r\n\t\t\t\t\tif (this.chatmsg.side == \"def\") {\r\n\t\t\t\t\t\t// Only def show evidence on right\r\n\t\t\t\t\t\teviBox.style.right = \"1.5em\";\r\n\t\t\t\t\t\teviBox.style.left = \"initial\";\r\n\t\t\t\t\t\t$(\"#client_evi\").animate({\r\n\t\t\t\t\t\t\theight: \"30%\",\r\n\t\t\t\t\t\t\topacity: 1\r\n\t\t\t\t\t\t}, 250);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\teviBox.style.right = \"initial\";\r\n\t\t\t\t\t\teviBox.style.left = \"1.5em\";\r\n\t\t\t\t\t\t$(\"#client_evi\").animate({\r\n\t\t\t\t\t\t\theight: \"30%\",\r\n\t\t\t\t\t\t\topacity: 1\r\n\t\t\t\t\t\t}, 250);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tnameBox.style.display = \"block\";\r\n\t\t\t\tnameBox.style.fontSize = (nameBox.offsetHeight * 0.7) + \"px\";\r\n\r\n\t\t\t\twhile (nameBox.hasChildNodes()) {\r\n\t\t\t\t\tnameBox.removeChild(nameBox.firstChild);\r\n\t\t\t\t}\r\n\t\t\t\tnameBox.appendChild(document.createTextNode(this.chatmsg.nameplate));\r\n\r\n\t\t\t\tchatBox.style.display = \"block\";\r\n\t\t\t\tchatBox.style.fontSize = (chatBox.offsetHeight * 0.25) + \"px\";\r\n\r\n\t\t\t\tconst colors = {\r\n\t\t\t\t\t\"0\": \"#ffffff\",\r\n\t\t\t\t\t\"1\": \"#00ff00\",\r\n\t\t\t\t\t\"2\": \"#ff0000\",\r\n\t\t\t\t\t\"3\": \"#ffaa00\",\r\n\t\t\t\t\t\"4\": \"#0000ff\",\r\n\t\t\t\t\t\"5\": \"#ffff00\",\r\n\t\t\t\t\t\"6\": \"#aa00aa\"\r\n\t\t\t\t};\r\n\t\t\t\tchatBoxInner.style.color = colors[this.chatmsg.color] || \"#ffffff\";\r\n\t\t\t\tthis.chatmsg.startspeaking = false;\r\n\r\n\t\t\t\tif (this.chatmsg.preanimdelay == 0) {\r\n\t\t\t\t\tshoutSprite.src = \"misc/placeholder.gif\";\r\n\t\t\t\t\tchangeBackground(this.chatmsg.side);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcharSprite.src = AO_HOST + \"characters/\" + escape(this.chatmsg.name.toLowerCase()) + \"/\" + this.chatmsg.speaking.toLowerCase() + \".gif\";\r\n\r\n\t\t\t\tif (this.textnow == this.chatmsg.content) {\r\n\t\t\t\t\tcharSprite.src = AO_HOST + \"characters/\" + escape(this.chatmsg.name.toLowerCase()) + \"/\" + this.chatmsg.silent.toLowerCase() + \".gif\";\r\n\t\t\t\t\tthis._animating = false;\r\n\t\t\t\t\tclearTimeout(this.updater);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (this.textnow != this.chatmsg.content) {\r\n\t\t\t\t\tif (this.chatmsg.content.charAt(this.textnow.length) != \" \") {\r\n\t\t\t\t\t\tthis.blipChannels[this.currentBlipChannel].play();\r\n\t\t\t\t\t\tthis.currentBlipChannel++;\r\n\t\t\t\t\t\tthis.currentBlipChannel %= this.blipChannels.length;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.textnow = this.chatmsg.content.substring(0, this.textnow.length + 1);\r\n\r\n\t\t\t\t\twhile (chatBoxInner.hasChildNodes()) {\r\n\t\t\t\t\t\tchatBoxInner.removeChild(chatBoxInner.firstChild);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tchatBoxInner.appendChild(document.createTextNode(this.textnow));\r\n\r\n\t\t\t\t\tif (this.textnow == this.chatmsg.content) {\r\n\t\t\t\t\t\tthis.textTimer = 0;\r\n\t\t\t\t\t\tthis._animating = false;\r\n\t\t\t\t\t\tcharSprite.src = AO_HOST + \"characters/\" + escape(this.chatmsg.name.toLowerCase()) + \"/\" + this.chatmsg.silent.toLowerCase() + \".gif\";\r\n\t\t\t\t\t\tclearTimeout(this.updater);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!this.sfxplayed && this.chatmsg.snddelay + this.shoutTimer >= this.textTimer) {\r\n\t\t\tthis.sfxaudio.pause();\r\n\t\t\tthis.sfxplayed = 1;\r\n\t\t\tif (this.chatmsg.sound != \"0\" && this.chatmsg.sound != \"1\") {\r\n\t\t\t\tthis.sfxaudio.src = AO_HOST + \"sounds/general/\" + escape(this.chatmsg.sound.toLowerCase()) + \".wav\";\r\n\t\t\t\tthis.sfxaudio.play();\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.textTimer = this.textTimer + UPDATE_INTERVAL;\r\n\t}\r\n}\r\n\r\nclass INI {\r\n\tstatic parse(data) {\r\n\t\tlet regex = {\r\n\t\t\tsection: /^\\s*\\[\\s*([^\\]]*)\\s*\\]\\s*$/,\r\n\t\t\tparam: /^\\s*([\\w.\\-_]+)\\s*=\\s*(.*?)\\s*$/,\r\n\t\t\tcomment: /^\\s*;.*$/\r\n\t\t};\r\n\t\tlet value = {};\r\n\t\tlet lines = data.split(/\\r\\n|\\r|\\n/);\r\n\t\tlet section = null;\r\n\t\tlines.forEach(function (line) {\r\n\t\t\tif (regex.comment.test(line)) {\r\n\t\t\t\treturn;\r\n\t\t\t} else if (line.length == 0) {\r\n\t\t\t\treturn;\r\n\t\t\t} else if (regex.param.test(line)) {\r\n\t\t\t\tlet match = line.match(regex.param);\r\n\t\t\t\tif (section) {\r\n\t\t\t\t\tvalue[section][match[1]] = match[2];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalue[match[1]] = match[2];\r\n\t\t\t\t}\r\n\t\t\t} else if (regex.section.test(line)) {\r\n\t\t\t\tlet match = line.match(regex.section);\r\n\t\t\t\tvalue[match[1]] = {};\r\n\t\t\t\tsection = match[1];\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn value;\r\n\t}\r\n}\r\n\r\n/**\r\n * Triggered when the Return key is pressed on the out-of-character chat input box.\r\n * @param {KeyboardEvent} event\r\n */\r\nexport function onOOCEnter(event) {\r\n\tif (event.keyCode == 13) {\r\n\t\tclient.sendOOC(document.getElementById(\"client_oocinputbox\").value);\r\n\t\tdocument.getElementById(\"client_oocinputbox\").value = \"\";\r\n\t}\r\n}\r\nwindow.onOOCEnter = onOOCEnter;\r\n\r\n/**\r\n * Triggered when the Return key is pressed on the in-character chat input box.\r\n * @param {KeyboardEvent} event\r\n */\r\nexport function onEnter(event) {\r\n\tif (event.keyCode == 13) {\r\n\t\tlet mychar = client.me();\r\n\t\tlet myemo = client.myEmote();\r\n\t\tlet myevi = client.myEvidence();\r\n\t\tlet myflip = ((client.flip) ? 1 : 0);\r\n\t\tlet mycolor = document.getElementById(\"textcolor\").value;\r\n\t\tlet ssfxname = \"0\";\r\n\t\tlet ssfxdelay = \"0\";\r\n\t\tif (document.getElementById(\"sendsfx\").checked) {\r\n\t\t\tssfxname = myemo.sfx;\r\n\t\t\tssfxdelay = myemo.sfxdelay;\r\n\t\t}\r\n\t\tclient.sendIC(myemo.speaking, mychar.name, myemo.silent, document.getElementById(\"client_inputbox\").value, mychar.side, ssfxname, myemo.zoom, ssfxdelay, selectedShout, myevi, myflip, selectedEffect, mycolor);\r\n\t}\r\n}\r\nwindow.onEnter = onEnter;\r\n\r\n/**\r\n * Resets the IC parameters for the player to enter a new chat message.\r\n * This should only be called when the player's previous chat message\r\n * was successfully sent/presented.\r\n */\r\nfunction resetICParams() {\r\n\tdocument.getElementById(\"client_inputbox\").value = \"\";\r\n\tif (selectedEffect) {\r\n\t\tdocument.getElementById(\"button_effect_\" + selectedEffect).className = \"client_button\";\r\n\t\tselectedEffect = 0;\r\n\t}\r\n\tif (selectedShout) {\r\n\t\tdocument.getElementById(\"button_\" + selectedShout).className = \"client_button\";\r\n\t\tselectedShout = 0;\r\n\t}\r\n}\r\n\r\n/**\r\n * Triggered when an item on the music list is clicked.\r\n * @param {MouseEvent} event\r\n */\r\nexport function musiclist_click(event) {\r\n\tconst playtrack = document.getElementById(\"client_musiclist\").value;\r\n\tclient.sendMusicChange(playtrack);\r\n}\r\nwindow.musiclist_click = musiclist_click;\r\n\r\n/**\r\n * Triggered when an item on the area list is clicked.\r\n * @param {MouseEvent} event\r\n */\r\nexport function area_click(el) {\r\n\tconst area = el.textContent;\r\n\tclient.sendMusicChange(area);\r\n\r\n\tconst areaHr = document.createElement(\"div\");\r\n\tareaHr.className = \"hrtext\";\r\n\tareaHr.textContent = `switched to ${el.textContent}`;\r\n\tdocument.getElementById(\"client_log\").appendChild(areaHr);\r\n}\r\nwindow.area_click = area_click;\r\n\r\n/**\r\n * Triggered by the music volume slider.\r\n */\r\nexport function changeMusicVolume() {\r\n\tviewport.music.volume = document.getElementById(\"client_mvolume\").value / 100;\r\n}\r\nwindow.changeMusicVolume = changeMusicVolume;\r\n\r\n/**\r\n * Triggered by the sound effect volume slider.\r\n */\r\nexport function changeSFXVolume() {\r\n\tviewport.sfxaudio.volume = document.getElementById(\"client_svolume\").value / 100;\r\n}\r\nwindow.changeSFXVolume = changeSFXVolume;\r\n\r\n/**\r\n * Triggered by the blip volume slider.\r\n */\r\nexport function changeBlipVolume() {\r\n\tviewport.setBlipVolume(document.getElementById(\"client_bvolume\").value / 100);\r\n}\r\nwindow.changeBlipVolume = changeBlipVolume;\r\n\r\n/**\r\n * Triggered when a character icon is clicked in the character selection menu.\r\n * @param {MouseEvent} event\r\n */\r\nexport function changeCharacter(event) {\r\n\tclient.sendLeaveRoom();\r\n\tdocument.getElementById(\"client_charselect\").style.display = \"block\";\r\n\tdocument.getElementById(\"client_emo\").innerHTML = \"\";\r\n}\r\nwindow.changeCharacter = changeCharacter;\r\n\r\n/**\r\n * Triggered when there was an error loading a character sprite.\r\n * @param {HTMLImageElement} image the element containing the missing image\r\n */\r\nexport function imgError(image) {\r\n\timage.onerror = \"\";\r\n\timage.src = \"misc/placeholder.gif\";\r\n\treturn true;\r\n}\r\nwindow.imgError = imgError;\r\n\r\n/**\r\n * Triggered when there was an error loading a character icon.\r\n * @param {HTMLImageElement} image the element containing the missing image\r\n */\r\nexport function demoError(image) {\r\n\timage.onerror = \"\";\r\n\timage.src = \"/misc/placeholder.png\";\r\n\treturn true;\r\n}\r\nwindow.demoError = demoError;\r\n\r\n/**\r\n * Checks if a file exists at the specified URI.\r\n * @param {string} url the URI to be checked\r\n * @param {function} callback the function to be called when finished\r\n * @param {object} param \r\n */\r\nfunction fileExists(url, callback, param) {\r\n\tconst xhttp = new XMLHttpRequest();\r\n\txhttp.onreadystatechange = function () {\r\n\t\tif (this.readyState == 4 && this.status == 200) {\r\n\t\t\tcallback(true, param, url);\r\n\t\t} else {\r\n\t\t\tcallback(false, param, url);\r\n\t\t}\r\n\t};\r\n\txhttp.open(\"GET\", url, true);\r\n\txhttp.send();\r\n}\r\n\r\n/**\r\n * Changes the viewport background based on a given position.\r\n * \r\n * Valid positions: `def, pro, hld, hlp, wit, jud`\r\n * @param {string} position the position to change into\r\n */\r\nfunction changeBackground(position) {\r\n\tlet standname;\r\n\tconst bgfolder = viewport.bgFolder();\r\n\tdocument.getElementById(\"client_fg\").style.display = \"none\";\r\n\tdocument.getElementById(\"client_bench\").style.display = \"none\";\r\n\tswitch (position) {\r\n\tcase \"def\":\r\n\t\tdocument.getElementById(\"client_court\").src = bgfolder + \"defenseempty.png\";\r\n\t\tdocument.getElementById(\"client_bench\").style.display = \"block\";\r\n\t\tfileExists(bgfolder + \"defensedesk.png\", callbackChangeBackground, position);\r\n\t\tstandname = \"defense\";\r\n\t\tbreak;\r\n\tcase \"pro\":\r\n\t\tdocument.getElementById(\"client_court\").src = bgfolder + \"prosecutorempty.png\";\r\n\t\tdocument.getElementById(\"client_bench\").style.display = \"block\";\r\n\t\tfileExists(bgfolder + \"defensedesk.png\", callbackChangeBackground, position);\r\n\t\tstandname = \"prosecution\";\r\n\t\tbreak;\r\n\tcase \"hld\":\r\n\t\tdocument.getElementById(\"client_court\").src = bgfolder + \"helperstand.png\";\r\n\t\tstandname = \"defense\";\r\n\t\tbreak;\r\n\tcase \"hlp\":\r\n\t\tdocument.getElementById(\"client_court\").src = bgfolder + \"prohelperstand.png\";\r\n\t\tstandname = \"prosecution\";\r\n\t\tbreak;\r\n\tcase \"wit\":\r\n\t\tdocument.getElementById(\"client_court\").src = bgfolder + \"witnessempty.png\";\r\n\t\tdocument.getElementById(\"client_bench\").style.display = \"block\";\r\n\t\tdocument.getElementById(\"client_bench\").src = bgfolder + \"estrado.png\";\r\n\t\tstandname = \"prosecution\";\r\n\t\tbreak;\r\n\tcase \"jud\":\r\n\t\tdocument.getElementById(\"client_court\").src = bgfolder + \"judgestand.png\";\r\n\t\tstandname = \"prosecution\";\r\n\t\tbreak;\r\n\t}\r\n\tif (viewport.chatmsg.type == 5) {\r\n\t\tdocument.getElementById(\"client_bench\").style.display = \"none\";\r\n\t\tdocument.getElementById(\"client_court\").src = AO_HOST + \"themes/default/\" + standname + \"_speedlines.gif\";\r\n\t}\r\n}\r\n\r\n/**\r\n * Callback for desk resource\r\n * \r\n * Valid positions: `def, pro, hld, hlp, wit, jud`\r\n * @param {boolean} result the image is existed or not\r\n * @param {string} position the position to change into\r\n */\r\nfunction callbackChangeBackground(result, position) {\r\n\tlet bgfolder = viewport.bgFolder();\r\n\tif (position == \"def\") {\r\n\t\tif (result) {\r\n\t\t\tdocument.getElementById(\"client_bench\").src = bgfolder + \"defensedesk.png\";\r\n\t\t} else {\r\n\t\t\tdocument.getElementById(\"client_bench\").src = bgfolder + \"bancodefensa.png\";\r\n\t\t}\r\n\t} else {\r\n\t\tif (result) {\r\n\t\t\tdocument.getElementById(\"client_bench\").src = bgfolder + \"prosecutiondesk.png\";\r\n\t\t} else {\r\n\t\t\tdocument.getElementById(\"client_bench\").src = bgfolder + \"bancoacusacion.png\";\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Triggered when the reconnect button is pushed.\r\n */\r\nexport function ReconnectButton() {\r\n\tclient.cleanup();\r\n\tclient = new Client(serverIP);\r\n\tif (client) {\r\n\t\tmode = \"join\"; // HACK: see client.onOpen\r\n\t\tdocument.getElementById(\"client_error\").style.display = \"none\";\r\n\t}\r\n}\r\nwindow.ReconnectButton = ReconnectButton;\r\n\r\n/**\r\n * Triggered when the retry button is pushed (during the loading process).\r\n */\r\nexport function RetryButton() {\r\n\tclient.joinServer();\r\n}\r\nwindow.RetryButton = RetryButton;\r\n\r\n/**\r\n * Appends a message to the in-character chat log.\r\n * @param {string} toadd the string to be added\r\n * @param {string} name the name of the sender\r\n */\r\nfunction appendICLog(toadd, name = \"\", time = new Date()) {\r\n\tconst entry = document.createElement(\"p\");\r\n\tconst nameField = document.createElement(\"span\");\r\n\tnameField.id = \"iclog_name\";\r\n\tnameField.appendChild(document.createTextNode(name));\r\n\tentry.appendChild(nameField);\r\n\tentry.appendChild(document.createTextNode(toadd));\r\n\r\n\t// Only put a timestamp if the minute has changed.\r\n\tif (lastICMessageTime.getMinutes() !== time.getMinutes()) {\r\n\t\tconst timeStamp = document.createElement(\"span\");\r\n\t\ttimeStamp.id = \"iclog_time\";\r\n\t\ttimeStamp.innerText = time.toLocaleTimeString(undefined, {\r\n\t\t\thour: \"numeric\",\r\n\t\t\tminute: \"2-digit\"\r\n\t\t});\r\n\t\tentry.appendChild(timeStamp);\r\n\t}\r\n\r\n\tconst clientLog = document.getElementById(\"client_log\");\r\n\tclientLog.appendChild(entry);\r\n\r\n\tif (clientLog.scrollTop > clientLog.scrollHeight - 800) {\r\n\t\tclientLog.scrollTop = clientLog.scrollHeight;\r\n\t}\r\n\r\n\tlastICMessageTime = new Date();\r\n}\r\n\r\n/**\r\n * Requests to play as a character.\r\n * @param {number} ccharacter the character ID; if this is a large number, then spectator is chosen instead.\r\n */\r\nexport function pickChar(ccharacter) {\r\n\tif (ccharacter < 1000) {\r\n\t\tclient.sendCharacter(ccharacter);\r\n\t} else {\r\n\t\t// Spectator\r\n\t\tdocument.getElementById(\"client_charselect\").style.display = \"none\";\r\n\t\tdocument.getElementById(\"client_inputbox\").style.display = \"none\";\r\n\t\tdocument.getElementById(\"client_emo\").style.display = \"none\";\r\n\t}\r\n}\r\nwindow.pickChar = pickChar;\r\n\r\n/**\r\n * Highlights and selects an emotion for in-character chat.\r\n * @param {string} emo the new emotion to be selected\r\n */\r\nexport function pickEmotion(emo) {\r\n\tif (client.selectedEmote != -1) {\r\n\t\tdocument.getElementById(\"emo_\" + client.selectedEmote).src = client.myEmote().button_off;\r\n\t}\r\n\tclient.selectedEmote = emo;\r\n\tdocument.getElementById(\"emo_\" + emo).src = client.myEmote().button_on;\r\n}\r\nwindow.pickEmotion = pickEmotion;\r\n\r\n/**\r\n * Highlights and selects an evidence for in-character chat.\r\n * @param {string} evidence the evidence to be presented\r\n */\r\nexport function pickEvidence(evidence) {\r\n\tif (client.selectedEvidence !== evidence) {\r\n\t\t//Update selected evidence\t\t\r\n\t\tif (client.selectedEvidence > 0) {\r\n\t\t\tdocument.getElementById(\"evi_\" + client.selectedEvidence).className = \"client_button\";\r\n\t\t}\r\n\t\tdocument.getElementById(\"evi_\" + evidence).className = \"client_button dark\";\r\n\t\tclient.selectedEvidence = evidence;\r\n\r\n\t\t// Show evidence on information window\r\n\t\tdocument.getElementById(\"evi_name\").value = client.evidences[evidence - 1].name;\r\n\t\tdocument.getElementById(\"evi_desc\").value = client.evidences[evidence - 1].desc;\r\n\r\n\t\t//Update Icon\r\n\t\tlet icon_id = getIndexFromSelect(\"evi_select\", client.evidences[evidence - 1].filename);\r\n\t\tdocument.getElementById(\"evi_select\").selectedIndex = icon_id;\r\n\t\tif (icon_id == 0) {\r\n\t\t\tdocument.getElementById(\"evi_filename\").value = client.evidences[evidence - 1].filename;\r\n\t\t}\r\n\t\tupdateEvidenceIcon();\r\n\r\n\t\t// Update button\r\n\t\tdocument.getElementById(\"evi_add\").className = \"client_button hover_button inactive\";\r\n\t\tdocument.getElementById(\"evi_edit\").className = \"client_button hover_button\";\r\n\t\tdocument.getElementById(\"evi_cancel\").className = \"client_button hover_button\";\r\n\t\tdocument.getElementById(\"evi_del\").className = \"client_button hover_button\";\r\n\t} else {\r\n\t\tcancelEvidence();\r\n\t}\r\n}\r\nwindow.pickEvidence = pickEvidence;\r\n\r\n/**\r\n * Add evidence.\r\n */\r\nexport function addEvidence() {\r\n\tlet evidence_select = document.getElementById(\"evi_select\");\r\n\tclient.sendPE(document.getElementById(\"evi_name\").value,\r\n\t\tdocument.getElementById(\"evi_desc\").value,\r\n\t\tevidence_select.selectedIndex == 0 ?\r\n\t\t\tdocument.getElementById(\"evi_filename\").value :\r\n\t\t\tevidence_select.options[evidence_select.selectedIndex].text\r\n\t);\r\n\tcancelEvidence();\r\n}\r\nwindow.addEvidence = addEvidence;\r\n\r\n/**\r\n * Edit selected evidence.\r\n */\r\nexport function editEvidence() {\r\n\tlet evidence_select = document.getElementById(\"evi_select\");\r\n\tlet id = parseInt(client.selectedEvidence) - 1;\r\n\tclient.sendEE(id,\r\n\t\tdocument.getElementById(\"evi_name\").value,\r\n\t\tdocument.getElementById(\"evi_desc\").value,\r\n\t\tevidence_select.selectedIndex == 0 ?\r\n\t\t\tdocument.getElementById(\"evi_filename\").value :\r\n\t\t\tevidence_select.options[evidence_select.selectedIndex].text\r\n\t);\r\n\tcancelEvidence();\r\n}\r\nwindow.editEvidence = editEvidence;\r\n\r\n/**\r\n * Delete selected evidence.\r\n */\r\nexport function deleteEvidence() {\r\n\tlet id = parseInt(client.selectedEvidence) - 1;\r\n\tclient.sendDE(id);\r\n\tcancelEvidence();\r\n}\r\nwindow.deleteEvidence = deleteEvidence;\r\n\r\n/**\r\n * Cancel evidence selection.\r\n */\r\nexport function cancelEvidence() {\r\n\t//Clear evidence data\r\n\tif (client.selectedEvidence > 0) {\r\n\t\tdocument.getElementById(\"evi_\" + client.selectedEvidence).className = \"client_button\";\r\n\t}\r\n\tclient.selectedEvidence = 0;\r\n\r\n\t// Clear evidence on information window\r\n\tdocument.getElementById(\"evi_select\").selectedIndex = 0;\r\n\tupdateEvidenceIcon(); // Update icon widget\r\n\tdocument.getElementById(\"evi_filename\").value = \"\";\r\n\tdocument.getElementById(\"evi_name\").value = \"\";\r\n\tdocument.getElementById(\"evi_desc\").value = \"\";\r\n\tdocument.getElementById(\"evi_icon\").style.backgroundImage = \"url('misc/empty.png')\"; //Clear icon\r\n\r\n\t// Update button\r\n\tdocument.getElementById(\"evi_add\").className = \"client_button hover_button\";\r\n\tdocument.getElementById(\"evi_edit\").className = \"client_button hover_button inactive\";\r\n\tdocument.getElementById(\"evi_cancel\").className = \"client_button hover_button inactive\";\r\n\tdocument.getElementById(\"evi_del\").className = \"client_button hover_button inactive\";\r\n}\r\nwindow.cancelEvidence = cancelEvidence;\r\n\r\n/**\r\n * Find index of anything in select box.\r\n * @param {string} select_box the select element name\r\n * @param {string} value the value that need to be compared\r\n */\r\nexport function getIndexFromSelect(select_box, value) {\r\n\t//Find if icon alraedy existed in select box\r\n\tconst select_element = document.getElementById(select_box);\r\n\tfor (let i = 1; i < select_element.length; ++i) {\r\n\t\tif (select_element.options[i].value == value) {\r\n\t\t\treturn i;\r\n\t\t}\r\n\t}\r\n\treturn 0;\r\n}\r\nwindow.getIndexFromSelect = getIndexFromSelect;\r\n\r\n/**\r\n * Update evidence icon.\r\n */\r\nexport function updateEvidenceIcon() {\r\n\tlet evidence_select = document.getElementById(\"evi_select\");\r\n\tlet evidence_filename = document.getElementById(\"evi_filename\");\r\n\tlet evidence_iconbox = document.getElementById(\"evi_icon\");\r\n\r\n\tif (evidence_select.selectedIndex === 0) {\r\n\t\tevidence_filename.style.display = \"initial\";\r\n\t\tevidence_iconbox.style.backgroundImage = `url(${AO_HOST}evidence/${evidence_filename.value.toLowerCase()})`;\r\n\t} else {\r\n\t\tevidence_filename.style.display = \"none\";\r\n\t\tevidence_iconbox.style.backgroundImage = `url(${AO_HOST}evidence/${evidence_select.value.toLowerCase()})`;\r\n\t}\r\n}\r\nwindow.updateEvidenceIcon = updateEvidenceIcon;\r\n\r\n/**\r\n * Update evidence icon.\r\n */\r\nexport function updateActionCommands(side) {\r\n\tif (side == \"jud\") {\r\n\t\tdocument.getElementById(\"judge_action\").style.display = \"inline-table\";\r\n\t\tdocument.getElementById(\"no_action\").style.display = \"none\";\r\n\t} else {\r\n\t\tdocument.getElementById(\"no_action\").style.display = \"inline-table\";\r\n\t\tdocument.getElementById(\"judge_action\").style.display = \"none\";\r\n\t}\r\n\t//Update role selector\r\n\tfor (let i = 0, role_select = document.getElementById(\"role_select\").options; i < role_select.length; i++) {\r\n\t\tif (side == role_select[i].value) {\r\n\t\t\trole_select.selectedIndex = i;\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n}\r\nwindow.updateActionCommands = updateActionCommands;\r\n\r\n/**\r\n * Change background via OOC.\r\n */\r\nexport function changeBackgroundOOC() {\r\n\tlet filename = \"\",\r\n\t\tbackground_select = document.getElementById(\"bg_select\"),\r\n\t\tbg_command = document.getElementById(\"bg_command\").value;\r\n\tif (background_select.selectedIndex == 0) {\r\n\t\tfilename = document.getElementById(\"bg_filename\").value;\r\n\t} else {\r\n\t\tfilename = background_select.value;\r\n\t}\r\n\tclient.sendOOC(\"/\" + bg_command.replace(\"$1\", filename));\r\n}\r\nwindow.changeBackgroundOOC = changeBackgroundOOC;\r\n\r\n/**\r\n * Change role via OOC.\r\n */\r\nexport function changeRoleOOC() {\r\n\tlet role_select = document.getElementById(\"role_select\"),\r\n\t\trole_command = document.getElementById(\"role_command\").value;\r\n\r\n\tclient.sendOOC(\"/\" + role_command.replace(\"$1\", role_select.value));\r\n\tupdateActionCommands(role_select.value);\r\n}\r\nwindow.changeRoleOOC = changeRoleOOC;\r\n\r\n/**\r\n * Random character via OOC.\r\n */\r\nexport function randomCharacterOOC() {\r\n\tclient.sendOOC(\"/\" + document.getElementById(\"randomchar_command\").value);\r\n}\r\nwindow.randomCharacterOOC = randomCharacterOOC;\r\n\r\n/**\r\n * Call mod.\r\n */\r\nexport function callMod() {\r\n\t$(\"#callmod_dialog\").dialog(\"open\");\r\n}\r\nwindow.callMod = callMod;\r\n\r\n/**\r\n * Declare witness testimony.\r\n */\r\nexport function initWT() {\r\n\tclient.sendRT(\"testimony1\");\r\n}\r\nwindow.initWT = initWT;\r\n\r\n/**\r\n * Declare cross examination.\r\n */\r\nexport function initCE() {\r\n\tclient.sendRT(\"testimony2\");\r\n}\r\nwindow.initCE = initCE;\r\n\r\n/**\r\n * Increment defense health point.\r\n */\r\nexport function addHPD() {\r\n\tclient.sendHP(1, String(parseInt(client.hp[0]) + 1));\r\n}\r\nwindow.addHPD = addHPD;\r\n\r\n/**\r\n * Decrement defense health point.\r\n */\r\nexport function redHPD() {\r\n\tclient.sendHP(1, String(parseInt(client.hp[0]) - 1));\r\n}\r\nwindow.redHPD = redHPD;\r\n\r\n/**\r\n * Increment prosecution health point.\r\n */\r\nexport function addHPP() {\r\n\tclient.sendHP(2, String(parseInt(client.hp[1]) + 1));\r\n}\r\nwindow.addHPP = addHPP;\r\n\r\n/**\r\n * Decrement prosecution health point.\r\n */\r\nexport function redHPP() {\r\n\tclient.sendHP(2, String(parseInt(client.hp[1]) - 1));\r\n}\r\nwindow.redHPP = redHPP;\r\n\r\n/**\r\n * Update background preview.\r\n */\r\nexport function updateBackgroundPreview() {\r\n\tlet background_select = document.getElementById(\"bg_select\");\r\n\tlet background_filename = document.getElementById(\"bg_filename\");\r\n\tlet background_preview = document.getElementById(\"bg_preview\");\r\n\r\n\tif (background_select.selectedIndex == 0) {\r\n\t\tbackground_filename.style.display = \"initial\";\r\n\t\tbackground_preview.src = AO_HOST + \"background/\" + background_filename.value.toLowerCase() + \"/defenseempty.png\";\r\n\t} else {\r\n\t\tbackground_filename.style.display = \"none\";\r\n\t\tbackground_preview.src = AO_HOST + \"background/\" + background_select.value.toLowerCase() + \"/defenseempty.png\";\r\n\t}\r\n}\r\nwindow.updateBackgroundPreview = updateBackgroundPreview;\r\n\r\n/**\r\n * Highlights and selects an effect for in-character chat.\r\n * If the same effect button is selected, then the effect is canceled.\r\n * @param {string} effect the new effect to be selected\r\n */\r\nexport function toggleEffect(effect) {\r\n\tif (effect == selectedEffect) {\r\n\t\tdocument.getElementById(\"button_effect_\" + effect).className = \"client_button\";\r\n\t\tselectedEffect = 0;\r\n\t} else {\r\n\t\tdocument.getElementById(\"button_effect_\" + effect).className = \"client_button dark\";\r\n\t\tif (selectedEffect) {\r\n\t\t\tdocument.getElementById(\"button_effect_\" + selectedEffect).className = \"client_button\";\r\n\t\t}\r\n\t\tselectedEffect = effect;\r\n\t}\r\n}\r\nwindow.toggleEffect = toggleEffect;\r\n\r\n/**\r\n * Toggle flip for in-character chat.\r\n */\r\nexport function toggleFlip() {\r\n\tif (client.flip) {\r\n\t\tdocument.getElementById(\"button_flip\").className = \"client_button\";\r\n\t} else {\r\n\t\tdocument.getElementById(\"button_flip\").className = \"client_button dark\";\r\n\t}\r\n\tclient.flip = !client.flip;\r\n}\r\nwindow.toggleFlip = toggleFlip;\r\n\r\n/**\r\n * Toggle presentable for presenting evidence in-character chat.\r\n */\r\nexport function togglePresent() {\r\n\tif (client.presentable) {\r\n\t\tdocument.getElementById(\"button_present\").className = \"client_button\";\r\n\t} else {\r\n\t\tdocument.getElementById(\"button_present\").className = \"client_button dark\";\r\n\t}\r\n\tclient.presentable = !client.presentable;\r\n}\r\nwindow.togglePresent = togglePresent;\r\n\r\n/**\r\n * Highlights and selects a menu.\r\n * @param {string} menu the menu to be selected\r\n */\r\nexport function toggleMenu(menu) {\r\n\tif (menu != selectedMenu) {\r\n\t\tdocument.getElementById(\"menu_\" + menu).className = \"menu_icon active\";\r\n\t\tdocument.getElementById(\"content_\" + menu).className = \"menu_content active\";\r\n\t\tdocument.getElementById(\"menu_\" + selectedMenu).className = \"menu_icon\";\r\n\t\tdocument.getElementById(\"content_\" + selectedMenu).className = \"menu_content\";\r\n\t\tselectedMenu = menu;\r\n\t}\r\n}\r\nwindow.toggleMenu = toggleMenu;\r\n\r\n/**\r\n * Highlights and selects a shout for in-character chat.\r\n * If the same shout button is selected, then the shout is canceled.\r\n * @param {string} shout the new shout to be selected\r\n */\r\nexport function toggleShout(shout) {\r\n\tif (shout == selectedShout) {\r\n\t\tdocument.getElementById(\"button_\" + shout).className = \"client_button\";\r\n\t\tselectedShout = 0;\r\n\t} else {\r\n\t\tdocument.getElementById(\"button_\" + shout).className = \"client_button dark\";\r\n\t\tif (selectedShout) {\r\n\t\t\tdocument.getElementById(\"button_\" + selectedShout).className = \"client_button\";\r\n\t\t}\r\n\t\tselectedShout = shout;\r\n\t}\r\n}\r\nwindow.toggleShout = toggleShout;\r\n\r\n/**\r\n * Escapes a string to be HTML-safe.\r\n * \r\n * XXX: This is unnecessary if we use `createTextNode` instead!\r\n * @param {string} unsafe an unsanitized string\r\n */\r\nfunction escapeHtml(unsafe) {\r\n\treturn unsafe\r\n\t\t.replace(/&/g, \"&amp;\")\r\n\t\t.replace(/</g, \"&lt;\")\r\n\t\t.replace(/>/g, \"&gt;\")\r\n\t\t.replace(/\"/g, \"&quot;\")\r\n\t\t.replace(/'/g, \"&#039;\");\r\n}\r\n\r\n/**\r\n * Escapes a string to AO1 escape codes.\r\n * @param {string} estring the string to be escaped\r\n */\r\nfunction escapeChat(estring) {\r\n\treturn estring\r\n\t\t.replace(/#/g, \"<pound>\")\r\n\t\t.replace(/&/g, \"<and>\")\r\n\t\t.replace(/%/g, \"<percent>\")\r\n\t\t.replace(/\\$/g, \"<dollar>\");\r\n}\r\n\r\n/**\r\n * Unescapes a string to AO1 escape codes.\r\n * @param {string} estring the string to be unescaped\r\n */\r\nfunction unescapeChat(estring) {\r\n\treturn estring\r\n\t\t.replace(/<pound>/g, \"#\")\r\n\t\t.replace(/<and>/g, \"&\")\r\n\t\t.replace(/<percent>/g, \"%\")\r\n\t\t.replace(/<dollar>/g, \"$\");\r\n}\r\n\r\n/**\r\n * Encode text on client side.\r\n * @param {string} estring the string to be encoded\r\n */\r\nfunction encodeChat(estring) {\r\n\tlet selectedEncoding = document.getElementById(\"client_encoding\").value;\r\n\tif (selectedEncoding == \"unicode\") {\r\n\t\t// This approach works by escaping all special characters to Unicode escape sequences.\r\n\t\t// Source: https://gist.github.com/mathiasbynens/1243213\r\n\t\treturn estring.replace(/[^\\0-~]/g, function (ch) {\r\n\t\t\treturn \"\\\\u\" + (\"000\" + ch.charCodeAt().toString(16)).slice(-4);\r\n\t\t});\r\n\t} else if (selectedEncoding == \"utf16\") {\r\n\t\t// Source: https://developers.google.com/web/updates/2012/06/How-to-convert-ArrayBuffer-to-and-from-String\r\n\t\tconst buffer = new ArrayBuffer(estring.length * 2);\r\n\t\tconst result = new Uint16Array(buffer);\r\n\t\tfor (let i = 0, strLen = estring.length; i < strLen; i++) {\r\n\t\t\tresult[i] = estring.charCodeAt(i);\r\n\t\t}\r\n\t\treturn String(result);\r\n\t} else {\r\n\t\treturn estring;\r\n\t}\r\n}\r\n\r\n/**\r\n * Decodes text on client side.\r\n * @param {string} estring the string to be decoded\r\n */\r\nfunction decodeChat(estring) {\r\n\tlet selectedDecoding = document.getElementById(\"client_decoding\").value;\r\n\tif (selectedDecoding == \"unicode\") {\r\n\t\t// Source: https://stackoverflow.com/questions/7885096/how-do-i-decode-a-string-with-escaped-unicode\r\n\t\treturn estring.replace(/\\\\u([\\d\\w]{1,})/gi, function (match, group) {\r\n\t\t\treturn String.fromCharCode(parseInt(group, 16));\r\n\t\t});\r\n\t} else if (selectedDecoding == \"utf16\") {\r\n\t\t// Source: https://developers.google.com/web/updates/2012/06/How-to-convert-ArrayBuffer-to-and-from-String\r\n\t\treturn String.fromCharCode.apply(null, new Uint16Array(estring.split(\",\")));\r\n\t} else {\r\n\t\treturn estring;\r\n\t}\r\n}\r\n\r\n/**\r\n * Decoding text on client side.\r\n * @param {string} estring the string to be decoded\r\n */\r\nfunction decodeBBCode(estring) {\r\n\treturn estring\r\n\t\t.replace(/\\\\n/g, \"<br>\") // Newline \\n\r\n\t\t.replace(/\\[(\\/?)b\\]/g, \"<$1b>\") // Bold [b][/b]\r\n\t\t.replace(/\\[(\\/?)i\\]/g, \"<$1i>\") // Italic [i][/i]\r\n\t\t.replace(/\\[(\\/?)s\\]/g, \"<$1del>\") // Strikethrough [s][/s]\r\n\t\t.replace(/\\[(\\/?)u\\]/g, \"<$1u>\") // Underline [u][/u]\r\n\t\t.replace(/\\[(\\/?)sub\\]/g, \"<$1sub>\") // Subscript [sub][/sub]\r\n\t\t.replace(/\\[(\\/?)sup\\]/g, \"<$1sup>\") // Superscript [sup][/sup]\r\n\t\t.replace(/\\[m=([#a-zA-Z0-9]+)\\]/g, \"<m a=\\\"$1\\\">\") // Markup [m=#0ff]\r\n\t\t.replace(/\\[(\\/?)m\\]/g, \"<$1m>\") // [m][/m]\r\n\t\t.replace(/\\[c=?([#a-zA-Z0-9]+)\\]/g, \"<c a=\\\"$1\\\">\") // Color [c=red]\r\n\t\t.replace(/\\[\\/c\\]/g, \"</c>\"); // [/c]\r\n}\r\n\r\n\r\n// TODO: Possibly safe to remove, since we are using a transpiler.\r\nif (typeof (String.prototype.trim) === \"undefined\") {\r\n\tString.prototype.trim = function () {\r\n\t\treturn String(this).replace(/^\\s+|\\s+$/g, \"\");\r\n\t};\r\n}\r\n\r\n// Used for HDID calculation.\r\nString.prototype.hashCode = function () {\r\n\tlet hash = 0;\r\n\tif (this.length === 0) return hash;\r\n\tfor (let i = 0; i < this.length; i++) {\r\n\t\tconst chr = this.charCodeAt(i);\r\n\t\thash = ((hash << 5) - hash) + chr;\r\n\t\thash |= 0; // Convert to 32bit integer\r\n\t}\r\n\treturn hash;\r\n};\r\n\r\n\r\n//\r\n// Client code\r\n//\r\n\r\nlet client = new Client(serverIP);\r\nlet viewport = new Viewport();\r\n\r\n$(document).ready(function () {\r\n\tclient.initialObservBBCode();\r\n\tclient.loadResources();\r\n});\r\n\r\n// Create dialog and link to button\t\r\n$(function () {\r\n\t$(\"#callmod_dialog\").dialog({\r\n\t\tautoOpen: false,\r\n\t\tresizable: false,\r\n\t\tshow: {\r\n\t\t\teffect: \"drop\",\r\n\t\t\tdirection: \"down\",\r\n\t\t\tduration: 500\r\n\t\t},\r\n\t\thide: {\r\n\t\t\teffect: \"drop\",\r\n\t\t\tdirection: \"down\",\r\n\t\t\tduration: 500\r\n\t\t},\r\n\t\theight: \"auto\",\r\n\t\twidth: 400,\r\n\t\tmodal: true,\r\n\t\tbuttons: {\r\n\t\t\tSure: function () {\r\n\t\t\t\tclient.sendZZ(\"\");\r\n\t\t\t\t$(this).dialog(\"close\");\r\n\t\t\t},\r\n\t\t\tCancel: function () {\r\n\t\t\t\t$(this).dialog(\"close\");\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n});"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./webAO/fingerprint.js","webpack:///./webAO/client.js","webpack:///./webAO/backgrounds.js","webpack:///./webAO/evidence.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","Fingerprint","options","nativeForEach","nativeMap","_classCallCheck","this","Array","forEach","map","each","obj","iterator","context","length","results","index","list","_typeof","hasher","screen_resolution","screen_orientation","canvas","ie_activex","keys","push","navigator","userAgent","language","screen","colorDepth","getScreenResolution","join","Date","getTimezoneOffset","hasSessionStorage","hasLocalStorage","window","indexedDB","document","body","addBehavior","openDatabase","cpuClass","platform","doNotTrack","getPluginsString","isCanvasSupported","getCanvasFingerprint","murmurhash3_32_gc","seed","remainder","bytes","h1","h1b","c1","c2","k1","charCodeAt","localStorage","e","sessionStorage","elem","createElement","getContext","isIE","appName","test","getIEPluginsString","getRegularPluginsString","plugins","mimeTypes","mt","type","suffixes","description","ActiveXObject","height","width","ctx","txt","textBaseline","font","fillStyle","fillRect","fillText","toDataURL","onOOCEnter","onEnter","musiclist_click","area_click","changeMusicVolume","changeSFXVolume","changeBlipVolume","changeCharacter","imgError","demoError","ReconnectButton","RetryButton","pickChar","pickEmotion","pickEvidence","addEvidence","editEvidence","deleteEvidence","cancelEvidence","getIndexFromSelect","updateEvidenceIcon","updateActionCommands","changeBackgroundOOC","changeRoleOOC","randomCharacterOOC","callMod","initWT","initCE","addHPD","redHPD","addHPP","redHPP","updateBackgroundPreview","toggleEffect","toggleFlip","togglePresent","toggleMenu","toggleShout","queryDict","location","search","substr","split","item","serverIP","ip","AO_HOST","asset","MUSIC_HOST","oldLoading","selectedEffect","selectedMenu","selectedShout","uid","console","log","lastICMessageTime","Client","address","_this","serv","WebSocket","onopen","evt","onOpen","onclose","onClose","onmessage","onMessage","onerror","onError","flip","presentable","hp","playerID","charID","testimonyID","chars","emotes","evidences","resources","holdit","src","duration","objection","takethat","witnesstestimony","sfx","crossexamination","selectedEmote","selectedEvidence","checkUpdater","musicList","handlers","MS","args","handleMS","CT","handleCT","MC","handleMC","RMC","handleRMC","CI","handleCI","SC","handleSC","EI","handleEI","LE","handleLE","EM","handleEM","SM","handleSM","music","handlemusic","DONE","handleDONE","BN","handleBN","NBG","handleNBG","HP","handleHP","RT","handleRT","ZZ","handleZZ","ID","handleID","PN","handlePN","SI","handleSI","CharsCheck","handleCharsCheck","PV","handlePV","CHECK","_lastTimeICReceived","message","send","escapeChat","encodeChat","getElementById","speaking","silent","side","ssfxname","zoom","ssfxdelay","evidence","flash","color","desc","img","id","msg","testimony","track","_this2","setInterval","sendCheck","evidence_select","add","Option","evidence_arr","background_select","background_arr","background","shouts","fileExists","toLowerCase","callbackLoadImageResources","callbackLoadSFXResources","result","resource","client","viewport","getAnimLength","callbackGetResourceLength","target","MutationObserver","mutations","mutation","children","addedNodes","node","tagName","style","getAttribute","hasAttribute","backgroundColor","observe","attributes","childList","character","song","display","joinServer","error","reason","code","textContent","cleanup","data","debug","header","handler","warn","close","clearInterval","unescapeChat","decodeChat","replace","chatmsg","content","innerHTML","preanim","escape","nameplate","prepChat","sound","snddelay","isnew","className","resetICParams","say","oocLog","scrollTop","scrollHeight","pause","play","appendICLog","Audio","totime","offset","getTime","addEventListener","currentTime","parseFloat","toFixed","chargs","icon","arg","filename","evidence_box","hmusiclist","newentry","text","flagAudio","newarea","onclick","appendChild","area_box","lastChild","startsWith","audio_title","insertBefore","firstChild","removeChild","bgname","bg_index","selectedIndex","changeBackground","percent_hp","$","animate","initTestimonyUpdater","tr","td","icon_chosen","thispick","me","emotesList","xhr","XMLHttpRequest","withCredentials","open","responseType","onload","status","linifile","responseText","pinifile","INI","parse","Options","Emotions","number","emoteinfo","esfx","esfxd","SoundN","SoundT","sfxdelay","button_off","button_on","Viewport","textnow","startpreanim","startspeaking","preanimdelay","blip","volume","blipChannels","currentBlipChannel","sfxaudio","sfxplayed","updater","testimonyUpdater","testimonyTimer","shoutTimer","textTimer","_animating","clearTimeout","initUpdater","animdelay","parseInt","setTimeout","updateText","_this3","testimonyOverlay","updateTestimony","callback","param","request","gifInfo","gify","getInfo","response","_this4","disposeTestimony","_this5","nameBox","chatBox","charSprite","eviBox","shoutSprite","chatBoxInner","transform","opacity","shout","1","2","3","effect","direction","backgroundImage","right","left","fontSize","offsetHeight","hasChildNodes","createTextNode","0","4","5","6","charAt","substring","regex","section","comment","lines","line","match","event","keyCode","sendOOC","mychar","myemo","myEmote","myevi","myEvidence","myflip","mycolor","checked","sendIC","playtrack","sendMusicChange","el","area","areaHr","setBlipVolume","sendLeaveRoom","image","url","xhttp","onreadystatechange","readyState","position","standname","bgfolder","bgFolder","callbackChangeBackground","toadd","arguments","undefined","time","entry","nameField","getMinutes","timeStamp","innerText","toLocaleTimeString","hour","minute","clientLog","ccharacter","sendCharacter","emo","icon_id","sendPE","sendEE","sendDE","select_box","select_element","evidence_filename","evidence_iconbox","role_select","bg_command","role_command","dialog","sendRT","sendHP","String","background_filename","background_preview","menu","estring","selectedEncoding","ch","toString","slice","buffer","ArrayBuffer","Uint16Array","strLen","selectedDecoding","group","fromCharCode","apply","trim","ready","initialObservBBCode","loadResources","autoOpen","resizable","show","hide","modal","buttons","Sure","sendZZ","Cancel"],"mappings":"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","file":"client.b.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 4);\n","/*\r\n***************************************************\r\n** http://davealger.info\r\n***************************************************\r\n\r\nThis is a javascript only way to fingerprint a user with better than 90% accuracy in as few bytes as possible and no cookie storage!\r\n\r\nSpecial thanks to Valentin Vasilyev for the original fingerprintjs slightly modified and to Open Source Device Fingerprinting by Dark Wave Tech for the various identity functions\r\n\r\n***************************************************\r\n*/\r\nexport default class Fingerprint {\r\n\tconstructor(options) {\r\n\t\tvar nativeForEach, nativeMap;\r\n\t\tnativeForEach = Array.prototype.forEach;\r\n\t\tnativeMap = Array.prototype.map;\r\n\t\tthis.each = function(obj, iterator, context) {\r\n\t\t\tif (obj === null) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (nativeForEach && obj.forEach === nativeForEach) {\r\n\t\t\t\tobj.forEach(iterator, context);\r\n\t\t\t} else if (obj.length === +obj.length) {\r\n\t\t\t\tfor (var i = 0, l = obj.length; i < l; i++) {\r\n\t\t\t\t\tif (iterator.call(context, obj[i], i, obj) === {})\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor (var key in obj) {\r\n\t\t\t\t\tif (obj.hasOwnProperty(key)) {\r\n\t\t\t\t\t\tif (iterator.call(context, obj[key], key, obj) === {})\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\tthis.map = function(obj, iterator, context) {\r\n\t\t\tvar results = [];\r\n\t\t\tif (obj == null)\r\n\t\t\t\treturn results;\r\n\t\t\tif (nativeMap && obj.map === nativeMap)\r\n\t\t\t\treturn obj.map(iterator, context);\r\n\t\t\tthis.each(obj, function(value, index, list) {\r\n\t\t\t\tresults[results.length] = iterator.call(context, value, index, list);\r\n\t\t\t});\r\n\t\t\treturn results;\r\n\t\t};\r\n\t\tif (typeof options == \"object\") {\r\n\t\t\tthis.hasher = options.hasher;\r\n\t\t\tthis.screen_resolution = options.screen_resolution;\r\n\t\t\tthis.screen_orientation = options.screen_orientation;\r\n\t\t\tthis.canvas = options.canvas;\r\n\t\t\tthis.ie_activex = options.ie_activex;\r\n\t\t} else if (typeof options == \"function\") {\r\n\t\t\tthis.hasher = options;\r\n\t\t}\r\n\t}\r\n}\r\nFingerprint.prototype = {\r\n\tget: function() {\r\n\t\tvar keys = [];\r\n\t\tkeys.push(navigator.userAgent);\r\n\t\tkeys.push(navigator.language);\r\n\t\tkeys.push(screen.colorDepth);\r\n\t\tif (this.screen_resolution) {\r\n\t\t\tvar resolution = this.getScreenResolution();\r\n\t\t\tif (typeof resolution !== \"undefined\") {\r\n\t\t\t\tkeys.push(this.getScreenResolution().join(\"x\"));\r\n\t\t\t}\r\n\t\t}\r\n\t\tkeys.push(new Date().getTimezoneOffset());\r\n\t\tkeys.push(this.hasSessionStorage());\r\n\t\tkeys.push(this.hasLocalStorage());\r\n\t\tkeys.push(!!window.indexedDB);\r\n\t\tif (document.body) {\r\n\t\t\tkeys.push(typeof(document.body.addBehavior));\r\n\t\t} else {\r\n\t\t\tkeys.push(typeof undefined);\r\n\t\t}\r\n\t\tkeys.push(typeof(window.openDatabase));\r\n\t\tkeys.push(navigator.cpuClass);\r\n\t\tkeys.push(navigator.platform);\r\n\t\tkeys.push(navigator.doNotTrack);\r\n\t\tkeys.push(this.getPluginsString());\r\n\t\tif (this.canvas && this.isCanvasSupported()) {\r\n\t\t\tkeys.push(this.getCanvasFingerprint());\r\n\t\t}\r\n\t\tif (this.hasher) {\r\n\t\t\treturn this.hasher(keys.join(\"###\"), 31);\r\n\t\t} else {\r\n\t\t\treturn this.murmurhash3_32_gc(keys.join(\"###\"), 31);\r\n\t\t}\r\n\t},\r\n\tmurmurhash3_32_gc: function(key, seed) {\r\n\t\tvar remainder, bytes, h1, h1b, c1, c2, k1, i;\r\n\t\tremainder = key.length & 3;\r\n\t\tbytes = key.length - remainder;\r\n\t\th1 = seed;\r\n\t\tc1 = 0xcc9e2d51;\r\n\t\tc2 = 0x1b873593;\r\n\t\ti = 0;\r\n\t\twhile (i < bytes) {\r\n\t\t\tk1 = ((key.charCodeAt(i) & 0xff)) | ((key.charCodeAt(++i) & 0xff) << 8) | ((key.charCodeAt(++i) & 0xff) << 16) | ((key.charCodeAt(++i) & 0xff) << 24);\r\n\t\t\t++i;\r\n\t\t\tk1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\r\n\t\t\tk1 = (k1 << 15) | (k1 >>> 17);\r\n\t\t\tk1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\r\n\t\t\th1 ^= k1;\r\n\t\t\th1 = (h1 << 13) | (h1 >>> 19);\r\n\t\t\th1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\r\n\t\t\th1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\r\n\t\t}\r\n\t\tk1 = 0;\r\n\t\tswitch (remainder) {\r\n\t\t\tcase 3:\r\n\t\t\t\tk1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;\r\n\t\t\tcase 2:\r\n\t\t\t\tk1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;\r\n\t\t\tcase 1:\r\n\t\t\t\tk1 ^= (key.charCodeAt(i) & 0xff);\r\n\t\t\t\tk1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\r\n\t\t\t\tk1 = (k1 << 15) | (k1 >>> 17);\r\n\t\t\t\tk1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\r\n\t\t\t\th1 ^= k1;\r\n\t\t}\r\n\t\th1 ^= key.length;\r\n\t\th1 ^= h1 >>> 16;\r\n\t\th1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\r\n\t\th1 ^= h1 >>> 13;\r\n\t\th1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\r\n\t\th1 ^= h1 >>> 16;\r\n\t\treturn h1 >>> 0;\r\n\t},\r\n\thasLocalStorage: function() {\r\n\t\ttry {\r\n\t\t\treturn !!window.localStorage;\r\n\t\t} catch (e) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n\thasSessionStorage: function() {\r\n\t\ttry {\r\n\t\t\treturn !!window.sessionStorage;\r\n\t\t} catch (e) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n\tisCanvasSupported: function() {\r\n\t\tvar elem = document.createElement(\"canvas\");\r\n\t\treturn !!(elem.getContext && elem.getContext(\"2d\"));\r\n\t},\r\n\tisIE: function() {\r\n\t\tif (navigator.appName === \"Microsoft Internet Explorer\") {\r\n\t\t\treturn true;\r\n\t\t} else if (navigator.appName === \"Netscape\" && /Trident/.test(navigator.userAgent)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\tgetPluginsString: function() {\r\n\t\tif (this.isIE() && this.ie_activex) {\r\n\t\t\treturn this.getIEPluginsString();\r\n\t\t} else {\r\n\t\t\treturn this.getRegularPluginsString();\r\n\t\t}\r\n\t},\r\n\tgetRegularPluginsString: function() {\r\n\t\treturn this.map(navigator.plugins, function(p) {\r\n\t\t\tvar mimeTypes = this.map(p, function(mt) {\r\n\t\t\t\treturn [mt.type, mt.suffixes].join(\"~\");\r\n\t\t\t}).join(\",\");\r\n\t\t\treturn [p.name, p.description, mimeTypes].join(\"::\");\r\n\t\t}, this).join(\";\");\r\n\t},\r\n\tgetIEPluginsString: function() {\r\n\t\tif (window.ActiveXObject) {\r\n\t\t\tvar names = [\"ShockwaveFlash.ShockwaveFlash\", \"AcroPDF.PDF\", \"PDF.PdfCtrl\", \"QuickTime.QuickTime\", \"rmocx.RealPlayer G2 Control\", \"rmocx.RealPlayer G2 Control.1\", \"RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)\", \"RealVideo.RealVideo(tm) ActiveX Control (32-bit)\", \"RealPlayer\", \"SWCtl.SWCtl\", \"WMPlayer.OCX\", \"AgControl.AgControl\", \"Skype.Detection\"];\r\n\t\t\treturn this.map(names, function(name) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tnew ActiveXObject(name);\r\n\t\t\t\t\treturn name;\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}).join(\";\");\r\n\t\t} else {\r\n\t\t\treturn \"\";\r\n\t\t}\r\n\t},\r\n\tgetScreenResolution: function() {\r\n\t\tvar resolution;\r\n\t\tif (this.screen_orientation) {\r\n\t\t\tresolution = (screen.height > screen.width) ? [screen.height, screen.width] : [screen.width, screen.height];\r\n\t\t} else {\r\n\t\t\tresolution = [screen.height, screen.width];\r\n\t\t}\r\n\t\treturn resolution;\r\n\t},\r\n\tgetCanvasFingerprint: function() {\r\n\t\tvar canvas = document.createElement(\"canvas\");\r\n\t\tvar ctx = canvas.getContext(\"2d\");\r\n\t\tvar txt = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+-={}|[]\\:\\\"<>?;,.\";\r\n\t\tctx.textBaseline = \"top\";\r\n\t\tctx.font = \"14px 'Arial'\";\r\n\t\tctx.textBaseline = \"alphabetic\";\r\n\t\tctx.fillStyle = \"#f60\";\r\n\t\tctx.fillRect(125, 1, 62, 20);\r\n\t\tctx.fillStyle = \"#069\";\r\n\t\tctx.fillText(txt, 2, 15);\r\n\t\tctx.fillStyle = \"rgba(102, 204, 0, 0.7)\";\r\n\t\tctx.fillText(txt, 4, 17);\r\n\t\treturn canvas.toDataURL();\r\n\t}\r\n};\r\n\r\n/**************************************************/\r\n\r\n/**\r\nhttp://www.darkwavetech.com/fingerprint/fingerprint_code.html\r\n**/\r\nfunction fingerprint_flash() {\r\n\t\"use strict\";\r\n\tvar strOnError, objPlayerVersion, strVersion, strOut;\r\n\r\n\tstrOnError = \"N/A\";\r\n\tobjPlayerVersion = null;\r\n\tstrVersion = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tobjPlayerVersion = swfobject.getFlashPlayerVersion();\r\n\t\tstrVersion = objPlayerVersion.major + \".\" + objPlayerVersion.minor + \".\" + objPlayerVersion.release;\r\n\t\tif (strVersion === \"0.0.0\") {\r\n\t\t\tstrVersion = \"N/A\";\r\n\t\t}\r\n\t\tstrOut = strVersion;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_browser() {\r\n\t\"use strict\";\r\n\tvar strOnError, strUserAgent, numVersion, strBrowser, strOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tstrUserAgent = null;\r\n\tnumVersion = null;\r\n\tstrBrowser = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tstrUserAgent = navigator.userAgent.toLowerCase();\r\n\t\tif (/msie (\\d+\\.\\d+);/.test(strUserAgent)) { //test for MSIE x.x;\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tif (strUserAgent.indexOf(\"trident/6\") > -1) {\r\n\t\t\t\tnumVersion = 10;\r\n\t\t\t}\r\n\t\t\tif (strUserAgent.indexOf(\"trident/5\") > -1) {\r\n\t\t\t\tnumVersion = 9;\r\n\t\t\t}\r\n\t\t\tif (strUserAgent.indexOf(\"trident/4\") > -1) {\r\n\t\t\t\tnumVersion = 8;\r\n\t\t\t}\r\n\t\t\tstrBrowser = \"Internet Explorer \" + numVersion;\r\n\t\t} else if (strUserAgent.indexOf(\"trident/7\") > -1) { //IE 11+ gets rid of the legacy 'MSIE' in the user-agent string;\r\n\t\t\tnumVersion = 11;\r\n\t\t\tstrBrowser = \"Internet Explorer \" + numVersion;\r\n\t\t} else if (/firefox[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Firefox \" + numVersion;\r\n\t\t} else if (/opera[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Opera/x.x or Opera x.x (ignoring remaining decimal places);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Opera \" + numVersion;\r\n\t\t} else if (/chrome[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Chrome/x.x or Chrome x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Chrome \" + numVersion;\r\n\t\t} else if (/version[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Version/x.x or Version x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Safari \" + numVersion;\r\n\t\t} else if (/rv[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for rv/x.x or rv x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Mozilla \" + numVersion;\r\n\t\t} else if (/mozilla[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Mozilla/x.x or Mozilla x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Mozilla \" + numVersion;\r\n\t\t} else if (/binget[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for BinGet/x.x or BinGet x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (BinGet) \" + numVersion;\r\n\t\t} else if (/curl[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Curl/x.x or Curl x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (cURL) \" + numVersion;\r\n\t\t} else if (/java[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Java/x.x or Java x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (Java) \" + numVersion;\r\n\t\t} else if (/libwww-perl[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for libwww-perl/x.x or libwww-perl x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (libwww-perl) \" + numVersion;\r\n\t\t} else if (/microsoft url control -[\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Microsoft URL Control - x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (Microsoft URL Control) \" + numVersion;\r\n\t\t} else if (/peach[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Peach/x.x or Peach x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (Peach) \" + numVersion;\r\n\t\t} else if (/php[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for PHP/x.x or PHP x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (PHP) \" + numVersion;\r\n\t\t} else if (/pxyscand[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for pxyscand/x.x or pxyscand x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (pxyscand) \" + numVersion;\r\n\t\t} else if (/pycurl[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for pycurl/x.x or pycurl x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (PycURL) \" + numVersion;\r\n\t\t} else if (/python-urllib[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for python-urllib/x.x or python-urllib x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (Python URLlib) \" + numVersion;\r\n\t\t} else if (/appengine-google/.test(strUserAgent)) { //test for AppEngine-Google;\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Cloud (Google AppEngine) \" + numVersion;\r\n\t\t} else {\r\n\t\t\tstrBrowser = \"Unknown\";\r\n\t\t}\r\n\t\tstrOut = strBrowser;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_canvas() {\r\n\t\"use strict\";\r\n\tvar strOnError, canvas, strCText, strText, strOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tcanvas = null;\r\n\tstrCText = null;\r\n\tstrText = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`~1!2@3#4$5%6^7&8*9(0)-_=+[{]}|;:',<.>/?\";\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tcanvas = document.createElement(\"canvas\");\r\n\t\tstrCText = canvas.getContext(\"2d\");\r\n\t\tstrCText.textBaseline = \"top\";\r\n\t\tstrCText.font = \"14px 'Arial'\";\r\n\t\tstrCText.textBaseline = \"alphabetic\";\r\n\t\tstrCText.fillStyle = \"#f60\";\r\n\t\tstrCText.fillRect(125, 1, 62, 20);\r\n\t\tstrCText.fillStyle = \"#069\";\r\n\t\tstrCText.fillText(strText, 2, 15);\r\n\t\tstrCText.fillStyle = \"rgba(102, 204, 0, 0.7)\";\r\n\t\tstrCText.fillText(strText, 4, 17);\r\n\t\tstrOut = canvas.toDataURL();\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_connection() {\r\n\t\"use strict\";\r\n\tvar strOnError, strConnection, strOut;\r\n\r\n\tstrOnError = \"N/A\";\r\n\tstrConnection = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\t// only on android\r\n\t\tstrConnection = navigator.connection.type;\r\n\t\tstrOut = strConnection;\r\n\t} catch (err) {\r\n\t\t// return N/A if navigator.connection object does not apply to this device\r\n\t\treturn strOnError;\r\n\t}\r\n\treturn strOut;\r\n}\r\n\r\nfunction fingerprint_cookie() {\r\n\t\"use strict\";\r\n\tvar strOnError, bolCookieEnabled, bolOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tbolCookieEnabled = null;\r\n\tbolOut = null;\r\n\r\n\ttry {\r\n\t\tbolCookieEnabled = (navigator.cookieEnabled) ? true : false;\r\n\r\n\t\t//if not IE4+ nor NS6+\r\n\t\tif (typeof navigator.cookieEnabled === \"undefined\" && !bolCookieEnabled) {\r\n\t\t\tdocument.cookie = \"testcookie\";\r\n\t\t\tbolCookieEnabled = (document.cookie.indexOf(\"testcookie\") !== -1) ? true : false;\r\n\t\t}\r\n\t\tbolOut = bolCookieEnabled;\r\n\t\treturn bolOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_display() {\r\n\t\"use strict\";\r\n\tvar strSep, strPair, strOnError, strScreen, strDisplay, strOut;\r\n\r\n\tstrSep = \"|\";\r\n\tstrPair = \"=\";\r\n\tstrOnError = \"Error\";\r\n\tstrScreen = null;\r\n\tstrDisplay = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tstrScreen = window.screen;\r\n\t\tif (strScreen) {\r\n\t\t\tstrDisplay = strScreen.colorDepth + strSep + strScreen.width + strSep + strScreen.height + strSep + strScreen.availWidth + strSep + strScreen.availHeight;\r\n\t\t}\r\n\t\tstrOut = strDisplay;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_fontsmoothing() {\r\n\t\"use strict\";\r\n\tvar strOnError, strFontSmoothing, canvasNode, ctx, i, j, imageData, alpha, strOut;\r\n\r\n\tstrOnError = \"Unknown\";\r\n\tstrFontSmoothing = null;\r\n\tcanvasNode = null;\r\n\tctx = null;\r\n\timageData = null;\r\n\talpha = null;\r\n\tstrOut = null;\r\n\r\n\tif (typeof(screen.fontSmoothingEnabled) !== \"undefined\") {\r\n\t\tstrFontSmoothing = screen.fontSmoothingEnabled;\r\n\t} else {\r\n\t\ttry {\r\n\t\t\tfontsmoothing = \"false\";\r\n\t\t\tcanvasNode = document.createElement(\"canvas\");\r\n\t\t\tcanvasNode.width = \"35\";\r\n\t\t\tcanvasNode.height = \"35\";\r\n\t\t\tcanvasNode.style.display = \"none\";\r\n\t\t\tdocument.body.appendChild(canvasNode);\r\n\t\t\tctx = canvasNode.getContext(\"2d\");\r\n\t\t\tctx.textBaseline = \"top\";\r\n\t\t\tctx.font = \"32px Arial\";\r\n\t\t\tctx.fillStyle = \"black\";\r\n\t\t\tctx.strokeStyle = \"black\";\r\n\t\t\tctx.fillText(\"O\", 0, 0);\r\n\t\t\tfor (j = 8; j <= 32; j = j + 1) {\r\n\t\t\t\tfor (i = 1; i <= 32; i = i + 1) {\r\n\t\t\t\t\timageData = ctx.getImageData(i, j, 1, 1).data;\r\n\t\t\t\t\talpha = imageData[3];\r\n\t\t\t\t\tif (alpha !== 255 && alpha !== 0) {\r\n\t\t\t\t\t\tstrFontSmoothing = \"true\"; // font-smoothing must be on.\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstrOut = strFontSmoothing;\r\n\t\t} catch (err) {\r\n\t\t\treturn strOnError;\r\n\t\t}\r\n\t}\r\n\tstrOut = strFontSmoothing;\r\n\treturn strOut;\r\n}\r\n\r\nfunction fingerprint_fonts() {\r\n\t\"use strict\";\r\n\tvar strOnError, style, fonts, count, template, fragment, divs, i, font, div, body, result, e;\r\n\r\n\tstrOnError = \"Error\";\r\n\tstyle = null;\r\n\tfonts = null;\r\n\tfont = null;\r\n\tcount = 0;\r\n\ttemplate = null;\r\n\tdivs = null;\r\n\te = null;\r\n\tdiv = null;\r\n\tbody = null;\r\n\ti = 0;\r\n\r\n\ttry {\r\n\t\tstyle = \"position: absolute; visibility: hidden; display: block !important\";\r\n\t\tfonts = [\"8bitoperator\", \"Abadi MT Condensed Light\", \"Adobe Fangsong Std\", \"Adobe Hebrew\", \"Adobe Ming Std\", \"Agency FB\", \"Aharoni\", \"Andalus\", \"Angsana New\", \"AngsanaUPC\", \"Aparajita\", \"Arab\", \"Arabic Transparent\", \"Arabic Typesetting\", \"Arial Baltic\", \"Arial Black\", \"Arial CE\", \"Arial CYR\", \"Arial Greek\", \"Arial TUR\", \"Arial\", \"Arimo\", \"Batang\", \"BatangChe\", \"Bauhaus 93\", \"Bell MT\", \"Berlin Sans FB\", \"Bitstream Vera Serif\", \"Bodoni MT\", \"Bookman Old Style\", \"Braggadocio\", \"Broadway\", \"Browallia New\", \"BrowalliaUPC\", \"Calibri Light\", \"Calibri\", \"Californian FB\", \"Cambria Math\", \"Cambria\", \"Candara\", \"Castellar\", \"Casual\", \"Centaur\", \"Century\", \"Century Gothic\", \"Chalkduster\", \"Colonna MT\", \"Comic Sans MS\", \"Consolas\", \"Constantia\", \"Copperplate Gothic Light\", \"Corbel\", \"Cordia New\", \"CordiaUPC\", \"Courier New Baltic\", \"Courier New CE\", \"Courier New CYR\", \"Courier New Greek\", \"Courier New TUR\", \"Courier New\", \"DejaVu Sans\", \"DFKai-SB\", \"DaunPenh\", \"David\", \"DejaVu LGC Sans Mono\", \"Desdemona\", \"DilleniaUPC\", \"DokChampa\", \"Dotum\", \"DotumChe\", \"Dubai\", \"Ebrima\", \"Engravers MT\", \"Eras Bold ITC\", \"Estrangelo Edessa\", \"EucrosiaUPC\", \"Euphemia\", \"Eurostile\", \"FangSong\", \"Forte\", \"FrankRuehl\", \"Franklin Gothic Heavy\", \"Franklin Gothic Medium\", \"FreesiaUPC\", \"French Script MT\", \"Gabriola\", \"Gautami\", \"Georgia\", \"Gigi\", \"Gisha\", \"Goudy Old Style\", \"Gulim\", \"GulimChe\", \"GungSeo\", \"Gungsuh\", \"GungsuhChe\", \"Haettenschweiler\", \"Harrington\", \"Hei S\", \"HeiT\", \"Heisei Kaku Gothic\", \"Hiragino Sans GB\", \"Impact\", \"Informal Roman\", \"IrisUPC\", \"Iskoola Pota\", \"JasmineUPC\", \"KacstOne\", \"KaiTi\", \"Kalinga\", \"Kartika\", \"Khmer UI\", \"Kino MT\", \"KodchiangUPC\", \"Kokila\", \"Kozuka Gothic Pr6N\", \"Lao UI\", \"Latha\", \"Leelawadee\", \"Levenim MT\", \"LilyUPC\", \"Lohit Gujarati\", \"Loma\", \"Lucida Bright\", \"Lucida Console\", \"Lucida Fax\", \"Lucida Sans Unicode\", \"MS Gothic\", \"MS Mincho\", \"MS PGothic\", \"MS PMincho\", \"MS Reference Sans Serif\", \"MS UI Gothic\", \"MV Boli\", \"Magneto\", \"Malgun Gothic\", \"Mangal\", \"Marlett\", \"Matura MT Script Capitals\", \"Meiryo UI\", \"Meiryo\", \"Menlo\", \"Microsoft Himalaya\", \"Microsoft JhengHei\", \"Microsoft New Tai Lue\", \"Microsoft PhagsPa\", \"Microsoft Sans Serif\", \"Microsoft Tai Le\", \"Microsoft Uighur\", \"Microsoft YaHei\", \"Microsoft Yi Baiti\", \"MingLiU\", \"MingLiU-ExtB\", \"MingLiU_HKSCS\", \"MingLiU_HKSCS-ExtB\", \"Miriam Fixed\", \"Miriam\", \"Mongolian Baiti\", \"MoolBoran\", \"More Perfect DOS VGA\", \"MS Outlook\", \"NSimSun\", \"Narkisim\", \"News Gothic MT\", \"Niagara Solid\", \"Nyala\", \"OCR A\", \"OpenSymbol\", \"PMingLiU\", \"PMingLiU-ExtB\", \"Palace Script MT\", \"Palatino Linotype\", \"Papyrus\", \"Perpetua\", \"Plantagenet Cherokee\", \"Playbill\", \"Prelude Bold\", \"Prelude Condensed Bold\", \"Prelude Condensed Medium\", \"Prelude Medium\", \"PreludeCompressedWGL Black\", \"PreludeCompressedWGL Bold\", \"PreludeCompressedWGL Light\", \"PreludeCompressedWGL Medium\", \"PreludeCondensedWGL Black\", \"PreludeCondensedWGL Bold\", \"PreludeCondensedWGL Light\", \"PreludeCondensedWGL Medium\", \"PreludeWGL Black\", \"PreludeWGL Bold\", \"PreludeWGL Light\", \"PreludeWGL Medium\", \"Raavi\", \"Rachana\", \"Rockwell\", \"Rod\", \"Sakkal Majalla\", \"Sawasdee\", \"Script MT Bold\", \"Segoe Print\", \"Segoe Script\", \"Segoe UI Emoji\", \"Segoe UI Historic\", \"Segoe UI Light\", \"Segoe UI Semibold\", \"Segoe UI Symbol\", \"Segoe UI\", \"Shonar Bangla\", \"Showcard Gothic\", \"Shruti\", \"SimHei\", \"SimSun\", \"SimSun-ExtB\", \"Simplified Arabic Fixed\", \"Simplified Arabic\", \"Snap ITC\", \"Sylfaen\", \"Symbol\", \"Tahoma\", \"TeamViewer13\", \"Times New Roman Baltic\", \"Times New Roman CE\", \"Times New Roman CYR\", \"Times New Roman Greek\", \"Times New Roman TUR\", \"Times New Roman\", \"TlwgMono\", \"Traditional Arabic\", \"Trebuchet MS\", \"Tunga\", \"Tw Cen MT Condensed Extra Bold\", \"Ubuntu\", \"Umpush\", \"Univers\", \"Utopia\", \"Utsaah\", \"Vani\", \"Verdana\", \"Vijaya\", \"Vladimir Script\", \"Vrinda\", \"Webdings\", \"Wide Latin\", \"Wingdings\", \"Yu Gothic\"];\r\n\t\tcount = fonts.length;\r\n\t\ttemplate = \"<b style=\\\"display:inline !important; width:auto !important; font:normal 10px/1 'X',sans-serif !important\\\">ww</b>\" + \"<b style=\\\"display:inline !important; width:auto !important; font:normal 10px/1 'X',monospace !important\\\">ww</b>\";\r\n\t\tfragment = document.createDocumentFragment();\r\n\t\tdivs = [];\r\n\t\tfor (i = 0; i < count; i = i + 1) {\r\n\t\t\tfont = fonts[i];\r\n\t\t\tdiv = document.createElement(\"div\");\r\n\t\t\tfont = font.replace(/['\"<>]/g, \"\");\r\n\t\t\tdiv.innerHTML = template.replace(/X/g, font);\r\n\t\t\tdiv.style.cssText = style;\r\n\t\t\tfragment.appendChild(div);\r\n\t\t\tdivs.push(div);\r\n\t\t}\r\n\t\tbody = document.body;\r\n\t\tbody.insertBefore(fragment, body.firstChild);\r\n\t\tresult = [];\r\n\t\tfor (i = 0; i < count; i = i + 1) {\r\n\t\t\te = divs[i].getElementsByTagName(\"b\");\r\n\t\t\tif (e[0].offsetWidth === e[1].offsetWidth) {\r\n\t\t\t\tresult.push(fonts[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// do not combine these two loops, remove child will cause reflow\r\n\t\t// and induce severe performance hit\r\n\t\tfor (i = 0; i < count; i = i + 1) {\r\n\t\t\tbody.removeChild(divs[i]);\r\n\t\t}\r\n\t\treturn result.join(\"|\");\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_formfields() {\r\n\t\"use strict\";\r\n\tvar i, j, numOfForms, numOfInputs, strFormsInPage, strFormsInputsData, strInputsInForm, strTmp, strOut;\r\n\r\n\ti = 0;\r\n\tj = 0;\r\n\tnumOfForms = 0;\r\n\tnumOfInputs = 0;\r\n\tstrFormsInPage = \"\";\r\n\tstrFormsInputsData = [];\r\n\tstrInputsInForm = \"\";\r\n\tstrTmp = \"\";\r\n\tstrOut = \"\";\r\n\r\n\tstrFormsInPage = document.getElementsByTagName(\"form\");\r\n\tnumOfForms = strFormsInPage.length;\r\n\tstrFormsInputsData.push(\"url=\" + window.location.href);\r\n\tfor (i = 0; i < numOfForms; i = i + 1) {\r\n\t\tstrFormsInputsData.push(\"FORM=\" + strFormsInPage[i].name);\r\n\t\tstrInputsInForm = strFormsInPage[i].getElementsByTagName(\"input\");\r\n\t\tnumOfInputs = strInputsInForm.length;\r\n\t\tfor (j = 0; j < numOfInputs; j = j + 1) {\r\n\t\t\tif (strInputsInForm[j].type !== \"hidden\") {\r\n\t\t\t\tstrFormsInputsData.push(\"Input=\" + strInputsInForm[j].name);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tstrTmp = strFormsInputsData.join(\"|\");\r\n\tstrOut = strTmp;\r\n\treturn strOut;\r\n}\r\n\r\nfunction fingerprint_java() {\r\n\t\"use strict\";\r\n\tvar strOnError, strJavaEnabled, strOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tstrJavaEnabled = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tif (navigator.javaEnabled()) {\r\n\t\t\tstrJavaEnabled = \"true\";\r\n\t\t} else {\r\n\t\t\tstrJavaEnabled = \"false\";\r\n\t\t}\r\n\t\tstrOut = strJavaEnabled;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_language() {\r\n\t\"use strict\";\r\n\tvar strSep, strPair, strOnError, strLang, strTypeLng, strTypeBrLng, strTypeSysLng, strTypeUsrLng, strOut;\r\n\r\n\tstrSep = \"|\";\r\n\tstrPair = \"=\";\r\n\tstrOnError = \"Error\";\r\n\tstrLang = null;\r\n\tstrTypeLng = null;\r\n\tstrTypeBrLng = null;\r\n\tstrTypeSysLng = null;\r\n\tstrTypeUsrLng = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tstrTypeLng = typeof(navigator.language);\r\n\t\tstrTypeBrLng = typeof(navigator.browserLanguage);\r\n\t\tstrTypeSysLng = typeof(navigator.systemLanguage);\r\n\t\tstrTypeUsrLng = typeof(navigator.userLanguage);\r\n\r\n\t\tif (strTypeLng !== \"undefined\") {\r\n\t\t\tstrLang = \"lang\" + strPair + navigator.language + strSep;\r\n\t\t} else if (strTypeBrLng !== \"undefined\") {\r\n\t\t\tstrLang = \"lang\" + strPair + navigator.browserLanguage + strSep;\r\n\t\t} else {\r\n\t\t\tstrLang = \"lang\" + strPair + strSep;\r\n\t\t}\r\n\t\tif (strTypeSysLng !== \"undefined\") {\r\n\t\t\tstrLang += \"syslang\" + strPair + navigator.systemLanguage + strSep;\r\n\t\t} else {\r\n\t\t\tstrLang += \"syslang\" + strPair + strSep;\r\n\t\t}\r\n\t\tif (strTypeUsrLng !== \"undefined\") {\r\n\t\t\tstrLang += \"userlang\" + strPair + navigator.userLanguage;\r\n\t\t} else {\r\n\t\t\tstrLang += \"userlang\" + strPair;\r\n\t\t}\r\n\t\tstrOut = strLang;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_silverlight() {\r\n\t\"use strict\";\r\n\tvar strOnError, objControl, objPlugin, strSilverlightVersion, strOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tobjControl = null;\r\n\tobjPlugin = null;\r\n\tstrSilverlightVersion = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\ttry {\r\n\t\t\tobjControl = new ActiveXObject(\"AgControl.AgControl\");\r\n\t\t\tif (objControl.IsVersionSupported(\"5.0\")) {\r\n\t\t\t\tstrSilverlightVersion = \"5.x\";\r\n\t\t\t} else if (objControl.IsVersionSupported(\"4.0\")) {\r\n\t\t\t\tstrSilverlightVersion = \"4.x\";\r\n\t\t\t} else if (objControl.IsVersionSupported(\"3.0\")) {\r\n\t\t\t\tstrSilverlightVersion = \"3.x\";\r\n\t\t\t} else if (objControl.IsVersionSupported(\"2.0\")) {\r\n\t\t\t\tstrSilverlightVersion = \"2.x\";\r\n\t\t\t} else {\r\n\t\t\t\tstrSilverlightVersion = \"1.x\";\r\n\t\t\t}\r\n\t\t\tobjControl = null;\r\n\t\t} catch (e) {\r\n\t\t\tobjPlugin = navigator.plugins[\"Silverlight Plug-In\"];\r\n\t\t\tif (objPlugin) {\r\n\t\t\t\tif (objPlugin.description === \"1.0.30226.2\") {\r\n\t\t\t\t\tstrSilverlightVersion = \"2.x\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstrSilverlightVersion = parseInt(objPlugin.description[0], 10);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tstrSilverlightVersion = \"N/A\";\r\n\t\t\t}\r\n\t\t}\r\n\t\tstrOut = strSilverlightVersion;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_os() {\r\n\t\"use strict\";\r\n\tvar strSep, strOnError, strUserAgent, strPlatform, strOS, strOSBits, strOut;\r\n\r\n\tstrSep = \"|\";\r\n\tstrOnError = \"Error\";\r\n\tstrUserAgent = null;\r\n\tstrPlatform = null;\r\n\tstrOS = null;\r\n\tstrOSBits = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\t/* navigator.userAgent is supported by all major browsers */\r\n\t\tstrUserAgent = navigator.userAgent.toLowerCase();\r\n\t\t/* navigator.platform is supported by all major browsers */\r\n\t\tstrPlatform = navigator.platform.toLowerCase();\r\n\t\tif (strUserAgent.indexOf(\"windows nt 6.3\") !== -1) {\r\n\t\t\tstrOS = \"Windows 8.1\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 6.2\") !== -1) {\r\n\t\t\tstrOS = \"Windows 8\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 6.1\") !== -1) {\r\n\t\t\tstrOS = \"Windows 7\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 10.0\") !== -1) {\r\n\t\t\tstrOS = \"Windows 10\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 6.0\") !== -1) {\r\n\t\t\tstrOS = \"Windows Vista/Windows Server 2008\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 5.2\") !== -1) {\r\n\t\t\tstrOS = \"Windows XP x64/Windows Server 2003\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 5.1\") !== -1) {\r\n\t\t\tstrOS = \"Windows XP\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 5.01\") !== -1) {\r\n\t\t\tstrOS = \"Windows 2000, Service Pack 1 (SP1)\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows xp\") !== -1) {\r\n\t\t\tstrOS = \"Windows XP\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows 2000\") !== -1) {\r\n\t\t\tstrOS = \"Windows 2000\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 5.0\") !== -1) {\r\n\t\t\tstrOS = \"Windows 2000\";\r\n\t\t} else if (strUserAgent.indexOf(\"iemobile\") !== -1) {\r\n\t\t\tstrOS = \"Windows Mobile\";\r\n\t\t} else if (strUserAgent.indexOf(\"wm5 pie\") !== -1) {\r\n\t\t\tstrOS = \"Windows Mobile\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows\") !== -1) {\r\n\t\t\tstrOS = \"Windows (Unknown Version)\";\r\n\t\t} else if (strUserAgent.indexOf(\"openbsd\") !== -1) {\r\n\t\t\tstrOS = \"Open BSD\";\r\n\t\t} else if (strUserAgent.indexOf(\"sunos\") !== -1) {\r\n\t\t\tstrOS = \"Sun OS\";\r\n\t\t} else if (strUserAgent.indexOf(\"ubuntu\") !== -1) {\r\n\t\t\tstrOS = \"Ubuntu\";\r\n\t\t} else if (strUserAgent.indexOf(\"ipad\") !== -1) {\r\n\t\t\tstrOS = \"iOS (iPad)\";\r\n\t\t} else if (strUserAgent.indexOf(\"ipod\") !== -1) {\r\n\t\t\tstrOS = \"iOS (iTouch)\";\r\n\t\t} else if (strUserAgent.indexOf(\"iphone\") !== -1) {\r\n\t\t\tstrOS = \"iOS (iPhone)\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x beta\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Beta (Kodiak)\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.0\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Cheetah\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.1\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Puma\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.2\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Jaguar\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.3\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Panther\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.4\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Tiger\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.5\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Leopard\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.6\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Snow Leopard\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.7\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Lion\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX (Version Unknown)\";\r\n\t\t} else if (strUserAgent.indexOf(\"macintosh\") !== -1) {\r\n\t\t\tstrOS = \"Mac OS Classic\";\r\n\t\t} else if (strUserAgent.indexOf(\"googletv\") !== -1) {\r\n\t\t\tstrOS = \"Android (GoogleTV)\";\r\n\t\t} else if (strUserAgent.indexOf(\"android\") !== -1) {\r\n\t\t\tstrOS = \"Android\";\r\n\t\t} else if (strUserAgent.indexOf(\"x11\") !== -1) {\r\n\t\t\tstrOS = \"UNIX\";\r\n\t\t} else if (strUserAgent.indexOf(\"nix\") !== -1) {\r\n\t\t\tstrOS = \"UNIX\";\r\n\t\t} else if (strUserAgent.indexOf(\"linux\") !== -1) {\r\n\t\t\tstrOS = \"Linux\";\r\n\t\t} else if (strUserAgent.indexOf(\"qnx\") !== -1) {\r\n\t\t\tstrOS = \"QNX\";\r\n\t\t} else if (strUserAgent.indexOf(\"os/2\") !== -1) {\r\n\t\t\tstrOS = \"IBM OS/2\";\r\n\t\t} else if (strUserAgent.indexOf(\"beos\") !== -1) {\r\n\t\t\tstrOS = \"BeOS\";\r\n\t\t} else if (strUserAgent.indexOf(\"playbook\") !== -1) {\r\n\t\t\tstrOS = \"Blackberry (Playbook)\";\r\n\t\t} else if (strUserAgent.indexOf(\"wnd.rim\") !== -1) {\r\n\t\t\tstrOS = \"Blackberry (IE/FF Emulator)\";\r\n\t\t} else if (strUserAgent.indexOf(\"blackberry\") !== -1) {\r\n\t\t\tstrOS = \"Blackberry\";\r\n\t\t} else if (strUserAgent.indexOf(\"palm\") !== -1) {\r\n\t\t\tstrOS = \"Palm OS\";\r\n\t\t} else if (strUserAgent.indexOf(\"webos\") !== -1) {\r\n\t\t\tstrOS = \"WebOS\";\r\n\t\t} else if (strUserAgent.indexOf(\"hpwos\") !== -1) {\r\n\t\t\tstrOS = \"WebOS (HP)\";\r\n\t\t} else if (strUserAgent.indexOf(\"kindle\") !== -1) {\r\n\t\t\tstrOS = \"Kindle\";\r\n\t\t} else if (strUserAgent.indexOf(\"wii\") !== -1) {\r\n\t\t\tstrOS = \"Nintendo (Wii)\";\r\n\t\t} else if (strUserAgent.indexOf(\"nintendo ds\") !== -1) {\r\n\t\t\tstrOS = \"Nintendo (DS)\";\r\n\t\t} else if (strUserAgent.indexOf(\"playstation 3\") !== -1) {\r\n\t\t\tstrOS = \"Sony (Playstation Console)\";\r\n\t\t} else if (strUserAgent.indexOf(\"playstation portable\") !== -1) {\r\n\t\t\tstrOS = \"Sony (Playstation Portable)\";\r\n\t\t} else if (strUserAgent.indexOf(\"webtv\") !== -1) {\r\n\t\t\tstrOS = \"MSN TV (WebTV)\";\r\n\t\t} else if (strUserAgent.indexOf(\"inferno\") !== -1) {\r\n\t\t\tstrOS = \"Inferno\";\r\n\t\t} else {\r\n\t\t\tstrOS = \"Unknown\";\r\n\t\t}\r\n\t\tif (strPlatform.indexOf(\"x64\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"wow64\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"win64\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"win32\") !== -1) {\r\n\t\t\tstrOSBits = \"32 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"x64\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"x32\") !== -1) {\r\n\t\t\tstrOSBits = \"32 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"x86\") !== -1) {\r\n\t\t\tstrOSBits = \"32 bits*\";\r\n\t\t} else if (strPlatform.indexOf(\"ppc\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"alpha\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"68k\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"iphone\") !== -1) {\r\n\t\t\tstrOSBits = \"32 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"android\") !== -1) {\r\n\t\t\tstrOSBits = \"32 bits\";\r\n\t\t} else {\r\n\t\t\tstrOSBits = \"Unknown\";\r\n\t\t}\r\n\t\tstrOut = strOS + strSep + strOSBits;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_useragent() {\r\n\t\"use strict\";\r\n\tvar strSep, strTmp, strUserAgent, strOut;\r\n\r\n\tstrSep = \"|\";\r\n\tstrTmp = null;\r\n\tstrUserAgent = null;\r\n\tstrOut = null;\r\n\r\n\t/* navigator.userAgent is supported by all major browsers */\r\n\tstrUserAgent = navigator.userAgent.toLowerCase();\r\n\t/* navigator.platform is supported by all major browsers */\r\n\tstrTmp = strUserAgent + strSep + navigator.platform;\r\n\t/* navigator.cpuClass only supported in IE */\r\n\tif (navigator.cpuClass) {\r\n\t\tstrTmp += strSep + navigator.cpuClass;\r\n\t}\r\n\t/* navigator.browserLanguage only supported in IE, Safari and Chrome */\r\n\tif (navigator.browserLanguage) {\r\n\t\tstrTmp += strSep + navigator.browserLanguage;\r\n\t} else {\r\n\t\tstrTmp += strSep + navigator.language;\r\n\t}\r\n\tstrOut = strTmp;\r\n\treturn strOut;\r\n}\r\n\r\nfunction fingerprint_timezone() {\r\n\t\"use strict\";\r\n\tvar strOnError, dtDate, numOffset, numGMTHours, numOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tdtDate = null;\r\n\tnumOffset = null;\r\n\tnumGMTHours = null;\r\n\tnumOut = null;\r\n\r\n\ttry {\r\n\t\tdtDate = new Date();\r\n\t\tnumOffset = dtDate.getTimezoneOffset();\r\n\t\tnumGMTHours = (numOffset / 60) * (-1);\r\n\t\tnumOut = numGMTHours;\r\n\t\treturn numOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_touch() {\r\n\t\"use strict\";\r\n\tvar bolTouchEnabled, bolOut;\r\n\r\n\tbolTouchEnabled = false;\r\n\tbolOut = null;\r\n\r\n\ttry {\r\n\t\tif (document.createEvent(\"TouchEvent\")) {\r\n\t\t\tbolTouchEnabled = true;\r\n\t\t}\r\n\t\tbolOut = bolTouchEnabled;\r\n\t\treturn bolOut;\r\n\t} catch (ignore) {\r\n\t\tbolOut = bolTouchEnabled\r\n\t\treturn bolOut;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_truebrowser() {\r\n\t\"use strict\";\r\n\tvar strBrowser, strUserAgent, strOut;\r\n\r\n\tstrBrowser = \"Unknown\";\r\n\tstrUserAgent = null;\r\n\tstrOut = null;\r\n\r\n\tstrUserAgent = navigator.userAgent.toLowerCase();\r\n\r\n\t/* Checks for different browsers, cannot use Try/Catch block */\r\n\tif (document.all && document.getElementById && navigator.savePreferences && (strUserAgent.indexOf(\"Netfront\") < 0) && navigator.appName !== \"Blazer\") {\r\n\t\tstrBrowser = \"Escape 5\";\r\n\t} else if (navigator.vendor === \"KDE\") {\r\n\t\tstrBrowser = \"Konqueror\";\r\n\t} else if (document.childNodes && !document.all && !navigator.taintEnabled && !navigator.accentColorName) {\r\n\t\tstrBrowser = \"Safari\";\r\n\t} else if (document.childNodes && !document.all && !navigator.taintEnabled && navigator.accentColorName) {\r\n\t\tstrBrowser = \"OmniWeb 4.5+\";\r\n\t} else if (navigator.__ice_version) {\r\n\t\tstrBrowser = \"ICEBrowser\";\r\n\t} else if (window.ScriptEngine && ScriptEngine().indexOf(\"InScript\") + 1 && document.createElement) {\r\n\t\tstrBrowser = \"iCab 3+\";\r\n\t} else if (window.ScriptEngine && ScriptEngine().indexOf(\"InScript\") + 1) {\r\n\t\tstrBrowser = \"iCab 2-\";\r\n\t} else if (strUserAgent.indexOf(\"hotjava\") + 1 && (navigator.accentColorName) === \"undefined\") {\r\n\t\tstrBrowser = \"HotJava\";\r\n\t} else if (document.layers && !document.classes) {\r\n\t\tstrBrowser = \"Omniweb 4.2-\";\r\n\t} else if (document.layers && !navigator.mimeTypes[\"*\"]) {\r\n\t\tstrBrowser = \"Escape 4\";\r\n\t} else if (document.layers) {\r\n\t\tstrBrowser = \"Netscape 4\";\r\n\t} else if (window.opera && document.getElementsByClassName) {\r\n\t\tstrBrowser = \"Opera 9.5+\";\r\n\t} else if (window.opera && window.getComputedStyle) {\r\n\t\tstrBrowser = \"Opera 8\";\r\n\t} else if (window.opera && document.childNodes) {\r\n\t\tstrBrowser = \"Opera 7\";\r\n\t} else if (window.opera) {\r\n\t\tstrBrowser = \"Opera \" + window.opera.version();\r\n\t} else if (navigator.appName.indexOf(\"WebTV\") + 1) {\r\n\t\tstrBrowser = \"WebTV\";\r\n\t} else if (strUserAgent.indexOf(\"netgem\") + 1) {\r\n\t\tstrBrowser = \"Netgem NetBox\";\r\n\t} else if (strUserAgent.indexOf(\"opentv\") + 1) {\r\n\t\tstrBrowser = \"OpenTV\";\r\n\t} else if (strUserAgent.indexOf(\"ipanel\") + 1) {\r\n\t\tstrBrowser = \"iPanel MicroBrowser\";\r\n\t} else if (document.getElementById && !document.childNodes) {\r\n\t\tstrBrowser = \"Clue browser\";\r\n\t} else if (navigator.product && navigator.product.indexOf(\"Hv\") === 0) {\r\n\t\tstrBrowser = \"Tkhtml Hv3+\";\r\n\t} else if (typeof InstallTrigger !== \"undefined\") {\r\n\t\tstrBrowser = \"Firefox\";\r\n\t} else if (window.atob) {\r\n\t\tstrBrowser = \"Internet Explorer 10+\";\r\n\t} else if (XDomainRequest && window.performance) {\r\n\t\tstrBrowser = \"Internet Explorer 9\";\r\n\t} else if (XDomainRequest) {\r\n\t\tstrBrowser = \"Internet Explorer 8\";\r\n\t} else if (document.documentElement && document.documentElement.style.maxHeight !== \"undefined\") {\r\n\t\tstrBrowser = \"Internet Explorer 7\"; //xxxxx\r\n\t} else if (document.compatMode && document.all) {\r\n\t\tstrBrowser = \"Internet Explorer 6\"; //xxxxx\r\n\t} else if (window.createPopup) {\r\n\t\tstrBrowser = \"Internet Explorer 5.5\";\r\n\t} else if (window.attachEvent) {\r\n\t\tstrBrowser = \"Internet Explorer 5\";\r\n\t} else if (document.all && navigator.appName !== \"Microsoft Pocket Internet Explorer\") {\r\n\t\tstrBrowser = \"Internet Explorer 4\";\r\n\t} else if ((strUserAgent.indexOf(\"msie\") + 1) && window.ActiveXObject) {\r\n\t\tstrBrowser = \"Pocket Internet Explorer\";\r\n\t} else if (document.getElementById && ((strUserAgent.indexOf(\"netfront\") + 1) || navigator.appName === \"Blazer\" || navigator.product === \"Gecko\" || (navigator.appName.indexOf(\"PSP\") + 1) || (navigator.appName.indexOf(\"PLAYSTATION 3\") + 1))) {\r\n\t\tstrBrowser = \"NetFront 3+\";\r\n\t} else if (navigator.product === \"Gecko\" && !navigator.savePreferences) {\r\n\t\tstrBrowser = \"Gecko engine (Mozilla, Netscape 6+ etc.)\";\r\n\t} else if (window.chrome) {\r\n\t\tstrBrowser = \"Chrome\";\r\n\t}\r\n\tstrOut = strBrowser;\r\n\treturn strOut;\r\n}\r\n\r\nvar glbOnError = \"N/A\"\r\nvar glbSep = \"|\";\r\n\r\nfunction activeXDetect(componentClassID) {\r\n\t\"use strict\";\r\n\tvar strComponentVersion, strOut;\r\n\r\n\tstrComponentVersion = \"\";\r\n\tstrOut = \"\";\r\n\r\n\ttry {\r\n\t\tstrComponentVersion = document.body.getComponentVersion(\"{\" + componentClassID + \"}\", \"ComponentID\");\r\n\t\tif (strComponentVersion !== null) {\r\n\t\t\tstrOut = strComponentVersion;\r\n\t\t} else {\r\n\t\t\tstrOut = false;\r\n\t\t}\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn glbOnError;\r\n\t}\r\n}\r\n\r\nfunction stripIllegalChars(strValue) {\r\n\t\"use strict\";\r\n\tvar iCounter, strOriginal, strOut;\r\n\r\n\tiCounter = 0;\r\n\tstrOriginal = \"\";\r\n\tstrOut = \"\";\r\n\r\n\ttry {\r\n\t\tstrOriginal = strValue.toLowerCase();\r\n\t\tfor (iCounter = 0; iCounter < strOriginal.length; iCounter = iCounter + 1) {\r\n\t\t\tif (strOriginal.charAt(iCounter) !== \"\\n\" && strOriginal.charAt(iCounter) !== \"/\" && strOriginal.charAt(iCounter) !== \"\\\\\") {\r\n\t\t\t\tstrOut = strOut + strOriginal.charAt(iCounter);\r\n\t\t\t} else if (strOriginal.charAt(iCounter) === \"\\n\") {\r\n\t\t\t\tstrOut = strOut + \"n\";\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn glbOnError;\r\n\t}\r\n}\r\n\r\nfunction hashtable_containsKey(key) {\r\n\t\"use strict\";\r\n\tvar bolExists, iCounter;\r\n\r\n\tbolExists = false;\r\n\tiCounter = 0;\r\n\r\n\tfor (iCounter = 0; iCounter < this.hashtable.length; iCounter = iCounter + 1) {\r\n\t\tif (iCounter === key && this.hashtable[iCounter] !== null) {\r\n\t\t\tbolExists = true;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn bolExists;\r\n}\r\n\r\nfunction hashtable_get(key) {\r\n\t\"use strict\";\r\n\treturn this.hashtable[key];\r\n}\r\n\r\nfunction hashtable_keys() {\r\n\t\"use strict\";\r\n\tvar keys, iCounter;\r\n\r\n\tkeys = [];\r\n\tiCounter = 0;\r\n\r\n\tfor (iCounter in this.hashtable) {\r\n\t\tif (this.hashtable[iCounter] !== null) {\r\n\t\t\tkeys.push(iCounter);\r\n\t\t}\r\n\t}\r\n\treturn keys;\r\n}\r\n\r\nfunction hashtable_put(key, value) {\r\n\t\"use strict\";\r\n\tif (key === null || value === null) {\r\n\t\tthrow \"NullPointerException {\" + key + \"},{\" + value + \"}\";\r\n\t}\r\n\tthis.hashtable[key] = value;\r\n}\r\n\r\nfunction hashtable_size() {\r\n\t\"use strict\";\r\n\tvar iSize, iCounter, iOut;\r\n\r\n\tiSize = 0;\r\n\tiCounter = 0;\r\n\tiOut = 0;\r\n\r\n\tfor (iCounter in this.hashtable) {\r\n\t\tif (this.hashtable[iCounter] !== null) {\r\n\t\t\tiSize = iSize + 1;\r\n\t\t}\r\n\t}\r\n\tiOut = iSize;\r\n\treturn iOut;\r\n}\r\n\r\nfunction Hashtable() {\r\n\t\"use strict\";\r\n\tthis.containsKey = hashtable_containsKey;\r\n\tthis.get = hashtable_get;\r\n\tthis.keys = hashtable_keys;\r\n\tthis.put = hashtable_put;\r\n\tthis.size = hashtable_size;\r\n\tthis.hashtable = [];\r\n}\r\n\r\n/* Detect Plugins */\r\nfunction fingerprint_plugins() {\r\n\t\"use strict\";\r\n\tvar htIEComponents, strKey, strName, strVersion, strTemp, bolFirst, iCount, strMimeType, strOut;\r\n\r\n\ttry {\r\n\t\t/* Create hashtable of IE components */\r\n\t\thtIEComponents = new Hashtable();\r\n\t\thtIEComponents.put(\"7790769C-0471-11D2-AF11-00C04FA35D02\", \"AddressBook\"); // Address Book\r\n\t\thtIEComponents.put(\"47F67D00-9E55-11D1-BAEF-00C04FC2D130\", \"AolArtFormat\"); // AOL ART Image Format Support\r\n\t\thtIEComponents.put(\"76C19B38-F0C8-11CF-87CC-0020AFEECF20\", \"ArabicDS\"); // Arabic Text Display Support\r\n\t\thtIEComponents.put(\"76C19B34-F0C8-11CF-87CC-0020AFEECF20\", \"ChineseSDS\"); // Chinese (Simplified) Text Display Support\r\n\t\thtIEComponents.put(\"76C19B33-F0C8-11CF-87CC-0020AFEECF20\", \"ChineseTDS\"); // Chinese (traditional) Text Display Support\r\n\t\thtIEComponents.put(\"238F6F83-B8B4-11CF-8771-00A024541EE3\", \"CitrixICA\"); // Citrix ICA Client\r\n\t\thtIEComponents.put(\"283807B5-2C60-11D0-A31D-00AA00B92C03\", \"DirectAnim\"); // DirectAnimation\r\n\t\thtIEComponents.put(\"44BBA848-CC51-11CF-AAFA-00AA00B6015C\", \"DirectShow\"); // DirectShow\r\n\t\thtIEComponents.put(\"9381D8F2-0288-11D0-9501-00AA00B911A5\", \"DynHTML\"); // Dynamic HTML Data Binding\r\n\t\thtIEComponents.put(\"4F216970-C90C-11D1-B5C7-0000F8051515\", \"DynHTML4Java\"); // Dynamic HTML Data Binding for Java\r\n\t\thtIEComponents.put(\"D27CDB6E-AE6D-11CF-96B8-444553540000\", \"Flash\"); // Macromedia Flash\r\n\t\thtIEComponents.put(\"76C19B36-F0C8-11CF-87CC-0020AFEECF20\", \"HebrewDS\"); // Hebrew Text Display Support\r\n\t\thtIEComponents.put(\"630B1DA0-B465-11D1-9948-00C04F98BBC9\", \"IEBrwEnh\"); // Internet Explorer Browsing Enhancements\r\n\t\thtIEComponents.put(\"08B0E5C0-4FCB-11CF-AAA5-00401C608555\", \"IEClass4Java\"); // Internet Explorer Classes for Java\r\n\t\thtIEComponents.put(\"45EA75A0-A269-11D1-B5BF-0000F8051515\", \"IEHelp\"); // Internet Explorer Help\r\n\t\thtIEComponents.put(\"DE5AED00-A4BF-11D1-9948-00C04F98BBC9\", \"IEHelpEng\"); // Internet Explorer Help Engine\r\n\t\thtIEComponents.put(\"89820200-ECBD-11CF-8B85-00AA005B4383\", \"IE5WebBrw\"); // Internet Explorer 5/6 Web Browser\r\n\t\thtIEComponents.put(\"5A8D6EE0-3E18-11D0-821E-444553540000\", \"InetConnectionWiz\"); // Internet Connection Wizard\r\n\t\thtIEComponents.put(\"76C19B30-F0C8-11CF-87CC-0020AFEECF20\", \"JapaneseDS\"); // Japanese Text Display Support\r\n\t\thtIEComponents.put(\"76C19B31-F0C8-11CF-87CC-0020AFEECF20\", \"KoreanDS\"); // Korean Text Display Support\r\n\t\thtIEComponents.put(\"76C19B50-F0C8-11CF-87CC-0020AFEECF20\", \"LanguageAS\"); // Language Auto-Selection\r\n\t\thtIEComponents.put(\"08B0E5C0-4FCB-11CF-AAA5-00401C608500\", \"MsftVM\"); // Microsoft virtual machine\r\n\t\thtIEComponents.put(\"5945C046-LE7D-LLDL-BC44-00C04FD912BE\", \"MSNMessengerSrv\"); // MSN Messenger Service\r\n\t\thtIEComponents.put(\"44BBA842-CC51-11CF-AAFA-00AA00B6015B\", \"NetMeetingNT\"); // NetMeeting NT\r\n\t\thtIEComponents.put(\"3AF36230-A269-11D1-B5BF-0000F8051515\", \"OfflineBrwPack\"); // Offline Browsing Pack\r\n\t\thtIEComponents.put(\"44BBA840-CC51-11CF-AAFA-00AA00B6015C\", \"OutlookExpress\"); // Outlook Express\r\n\t\thtIEComponents.put(\"76C19B32-F0C8-11CF-87CC-0020AFEECF20\", \"PanEuropeanDS\"); // Pan-European Text Display Support\r\n\t\thtIEComponents.put(\"4063BE15-3B08-470D-A0D5-B37161CFFD69\", \"QuickTime\"); // Apple Quick Time\r\n\t\thtIEComponents.put(\"DE4AF3B0-F4D4-11D3-B41A-0050DA2E6C21\", \"QuickTimeCheck\"); // Apple Quick Time Check\r\n\t\thtIEComponents.put(\"3049C3E9-B461-4BC5-8870-4C09146192CA\", \"RealPlayer\"); // RealPlayer Download and Record Plugin for IE\r\n\t\thtIEComponents.put(\"2A202491-F00D-11CF-87CC-0020AFEECF20\", \"ShockwaveDir\"); // Macromedia Shockwave Director\r\n\t\thtIEComponents.put(\"3E01D8E0-A72B-4C9F-99BD-8A6E7B97A48D\", \"Skype\"); // Skype\r\n\t\thtIEComponents.put(\"CC2A9BA0-3BDD-11D0-821E-444553540000\", \"TaskScheduler\"); // Task Scheduler\r\n\t\thtIEComponents.put(\"76C19B35-F0C8-11CF-87CC-0020AFEECF20\", \"ThaiDS\"); // Thai Text Display Support\r\n\t\thtIEComponents.put(\"3BF42070-B3B1-11D1-B5C5-0000F8051515\", \"Uniscribe\"); // Uniscribe\r\n\t\thtIEComponents.put(\"4F645220-306D-11D2-995D-00C04F98BBC9\", \"VBScripting\"); // Visual Basic Scripting Support v5.6\r\n\t\thtIEComponents.put(\"76C19B37-F0C8-11CF-87CC-0020AFEECF20\", \"VietnameseDS\"); // Vietnamese Text Display Support\r\n\t\thtIEComponents.put(\"10072CEC-8CC1-11D1-986E-00A0C955B42F\", \"VML\"); // Vector Graphics Rendering (VML)\r\n\t\thtIEComponents.put(\"90E2BA2E-DD1B-4CDE-9134-7A8B86D33CA7\", \"WebEx\"); // WebEx Productivity Tools\r\n\t\thtIEComponents.put(\"73FA19D0-2D75-11D2-995D-00C04F98BBC9\", \"WebFolders\"); // Web Folders\r\n\t\thtIEComponents.put(\"89820200-ECBD-11CF-8B85-00AA005B4340\", \"WinDesktopUpdateNT\"); // Windows Desktop Update NT\r\n\t\thtIEComponents.put(\"9030D464-4C02-4ABF-8ECC-5164760863C6\", \"WinLive\"); // Windows Live ID Sign-in Helper\r\n\t\thtIEComponents.put(\"6BF52A52-394A-11D3-B153-00C04F79FAA6\", \"WinMediaPlayer\"); // Windows Media Player (Versions 7, 8 or 9)\r\n\t\thtIEComponents.put(\"22D6F312-B0F6-11D0-94AB-0080C74C7E95\", \"WinMediaPlayerTrad\"); // Windows Media Player (Traditional Versions)\r\n\r\n\t\tstrTemp = \"\";\r\n\t\tbolFirst = true;\r\n\r\n\t\t/* strOpera gives full path of the file, extract the filenames, ignoring description and length */\r\n\t\tif (navigator.plugins.length > 0) {\r\n\t\t\tfor (iCount = 0; iCount < navigator.plugins.length; iCount = iCount + 1) {\r\n\t\t\t\tif (bolFirst === true) {\r\n\t\t\t\t\tstrTemp += navigator.plugins[iCount].name;\r\n\t\t\t\t\tbolFirst = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstrTemp += glbSep + navigator.plugins[iCount].name;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (navigator.mimeTypes.length > 0) {\r\n\t\t\tstrMimeType = navigator.mimeTypes;\r\n\t\t\tfor (iCount = 0; iCount < strMimeType.length; iCount = iCount + 1) {\r\n\t\t\t\tif (bolFirst === true) {\r\n\t\t\t\t\tstrTemp += strMimeType[iCount].description;\r\n\t\t\t\t\tbolFirst = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstrTemp += glbSep + strMimeType[iCount].description;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tdocument.body.addBehavior(\"#default#clientCaps\");\r\n\t\t\tstrKey = htIEComponents.keys();\r\n\t\t\tfor (iCount = 0; iCount < htIEComponents.size(); iCount = iCount + 1) {\r\n\t\t\t\tstrVersion = activeXDetect(strKey[iCount]);\r\n\t\t\t\tstrName = htIEComponents.get(strKey[iCount]);\r\n\t\t\t\tif (strVersion) {\r\n\t\t\t\t\tif (bolFirst === true) {\r\n\t\t\t\t\t\tstrTemp = strName + glbPair + strVersion;\r\n\t\t\t\t\t\tbolFirst = false;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstrTemp += glbSep + strName + glbPair + strVersion;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstrTemp = strTemp.replace(/,/g, \".\");\r\n\t\t}\r\n\t\tstrTemp = stripIllegalChars(strTemp);\r\n\t\tif (strTemp === \"\") {\r\n\t\t\tstrTemp = \"None\";\r\n\t\t}\r\n\t\tstrOut = strTemp;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn glbOnError;\r\n\t}\r\n}","/*\r\n * Glorious webAO\r\n * made by sD, refactored by oldmud0 and Qubrick\r\n * credits to aleks for original idea and source\r\n*/\r\n\r\n// Uses the Gify library:\r\n// https://github.com/rfrench/gify\r\n// The following comment is needed for ESLint:\r\n/* global gify */\r\n/* global evercookie */\r\n\r\nimport background_arr from \"./backgrounds.js\";\r\nimport evidence_arr from \"./evidence.js\";\r\nimport Fingerprint from \"./fingerprint.js\";\r\n\r\nlet queryDict = {};\r\nlocation.search.substr(1).split(\"&\").forEach(function (item) {\r\n\tqueryDict[item.split(\"=\")[0]] = item.split(\"=\")[1];\r\n});\r\n\r\n/* Server magic */\r\n\r\nconst serverIP = queryDict.ip;\r\nlet mode = queryDict.mode;\r\n\r\nconst AO_HOST = queryDict.asset || \"http://s3.wasabisys.com/webao/base/\";\r\nconst MUSIC_HOST = AO_HOST + \"sounds/music/\";\r\nconst CHAR_SELECT_WIDTH = 8;\r\nconst UPDATE_INTERVAL = 60;\r\n\r\nlet oldLoading = false;\r\nif (/Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Opera Mini/i.test(navigator.userAgent)) {\r\n\toldLoading = true;\r\n}\r\n\r\nlet selectedEffect = 0;\r\nlet selectedMenu = 1;\r\nlet selectedShout = 0;\r\nvar fp = new Fingerprint({\r\n\tcanvas: true,\r\n\tie_activex: true,\r\n\tscreen_resolution: true\r\n});\r\nlet uid = fp.get();\r\nconsole.log(uid);\r\nlet lastICMessageTime = new Date(0);\r\n\r\nclass Client {\r\n\tconstructor(address) {\r\n\t\tthis.serv = new WebSocket(\"ws://\" + address);\r\n\r\n\t\tthis.serv.onopen = (evt) => this.onOpen(evt);\r\n\t\tthis.serv.onclose = (evt) => this.onClose(evt);\r\n\t\tthis.serv.onmessage = (evt) => this.onMessage(evt);\r\n\t\tthis.serv.onerror = (evt) => this.onError(evt);\r\n\r\n\t\tthis.flip = false;\r\n\t\tthis.presentable = false;\r\n\r\n\t\tthis.hp = [0, 0];\r\n\r\n\t\tthis.playerID = 1;\r\n\t\tthis.charID = -1;\r\n\t\tthis.testimonyID = 0;\r\n\r\n\t\tthis.chars = [];\r\n\t\tthis.emotes = [];\r\n\t\tthis.evidences = [];\r\n\r\n\t\tthis.resources = {\r\n\t\t\t\"holdit\": {\r\n\t\t\t\t\"src\": \"misc/holdit.gif\",\r\n\t\t\t\t\"duration\": 720\r\n\t\t\t},\r\n\t\t\t\"objection\": {\r\n\t\t\t\t\"src\": \"misc/objection.gif\",\r\n\t\t\t\t\"duration\": 720\r\n\t\t\t},\r\n\t\t\t\"takethat\": {\r\n\t\t\t\t\"src\": \"misc/takethat.gif\",\r\n\t\t\t\t\"duration\": 840\r\n\t\t\t},\r\n\t\t\t\"witnesstestimony\": {\r\n\t\t\t\t\"src\": \"misc/witnesstestimony.gif\",\r\n\t\t\t\t\"duration\": 1560,\r\n\t\t\t\t\"sfx\": \"sounds/general/sfx-testimony.wav\"\r\n\t\t\t},\r\n\t\t\t\"crossexamination\": {\r\n\t\t\t\t\"src\": \"misc/crossexamination.gif\",\r\n\t\t\t\t\"duration\": 1600,\r\n\t\t\t\t\"sfx\": \"sounds/general/sfx-testimony2.wav\"\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.selectedEmote = -1;\r\n\t\tthis.selectedEvidence = 0;\r\n\r\n\t\tthis.checkUpdater = null;\r\n\r\n\t\t// Only used for RMC/`music` packets, not EM/SM/MC packets.\r\n\t\tthis.musicList = Object();\r\n\r\n\t\tthis.handlers = {\r\n\t\t\t\"MS\": (args) => this.handleMS(args),\r\n\t\t\t\"CT\": (args) => this.handleCT(args),\r\n\t\t\t\"MC\": (args) => this.handleMC(args),\r\n\t\t\t\"RMC\": (args) => this.handleRMC(args),\r\n\t\t\t\"CI\": (args) => this.handleCI(args),\r\n\t\t\t\"SC\": (args) => this.handleSC(args),\r\n\t\t\t\"EI\": (args) => this.handleEI(args),\r\n\t\t\t\"LE\": (args) => this.handleLE(args),\r\n\t\t\t\"EM\": (args) => this.handleEM(args),\r\n\t\t\t\"SM\": (args) => this.handleSM(args),\r\n\t\t\t\"music\": (args) => this.handlemusic(args),\r\n\t\t\t\"DONE\": (args) => this.handleDONE(args),\r\n\t\t\t\"BN\": (args) => this.handleBN(args),\r\n\t\t\t\"NBG\": (args) => this.handleNBG(args),\r\n\t\t\t\"HP\": (args) => this.handleHP(args),\r\n\t\t\t\"RT\": (args) => this.handleRT(args),\r\n\t\t\t\"ZZ\": (args) => this.handleZZ(args),\r\n\t\t\t\"ID\": (args) => this.handleID(args),\r\n\t\t\t\"PN\": (args) => this.handlePN(args),\r\n\t\t\t\"SI\": (args) => this.handleSI(args),\r\n\t\t\t\"CharsCheck\": (args) => this.handleCharsCheck(args),\r\n\t\t\t\"PV\": (args) => this.handlePV(args),\r\n\t\t\t\"CHECK\": (args) => {}\r\n\t\t};\r\n\r\n\t\tthis._lastTimeICReceived = new Date(0);\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the current player's character.\r\n\t */\r\n\tme() {\r\n\t\treturn this.chars[this.charID];\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the player's currently selected emote.\r\n\t */\r\n\tmyEmote() {\r\n\t\treturn this.emotes[this.selectedEmote];\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the player's currently selected evidence if presentable.\r\n\t */\r\n\tmyEvidence() {\r\n\t\treturn this.presentable ? this.selectedEvidence : 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Sends an out-of-character chat message.\r\n\t * @param {string} message the message to send\r\n\t */\r\n\tsendOOC(message) {\r\n\t\tthis.serv.send(`CT#${escapeChat(encodeChat(document.getElementById(\"OOC_name\").value))}#${escapeChat(encodeChat(message))}#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends an in-character chat message.\r\n\t * @param {string} speaking who is speaking\r\n\t * @param {string} name the name of the current character\r\n\t * @param {string} silent whether or not it's silent\r\n\t * @param {string} message the message to be sent\r\n\t * @param {string} side the name of the side in the background\r\n\t * @param {string} ssfxname the name of the sound effect\r\n\t * @param {string} zoom whether or not to zoom\r\n\t * @param {number} ssfxdelay the delay (in milliseconds) to play the sound effect\r\n\t * @param {string} objection the number of the shout to play\r\n\t * @param {string} evidence the filename of evidence to show\r\n\t * @param {number} flip change to 1 to reverse sprite for position changes\r\n\t * @param {string} flash screen flash effect\r\n\t * @param {string} color text color\r\n\t */\r\n\tsendIC(speaking, name, silent, message, side, ssfxname, zoom, ssfxdelay, objection, evidence, flip, flash, color) {\r\n\t\tthis.serv.send(\r\n\t\t\t`MS#chat#${speaking}#${name}#${silent}` +\r\n\t\t\t`#${escapeChat(encodeChat(message))}#${side}#${ssfxname}#${zoom}` +\r\n\t\t\t`#${this.charID}#${ssfxdelay}#${selectedShout}#${evidence}#${flip}#${flash}#${color}#%`\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends add evidence command.\r\n\t * @param {string} evidence name\r\n\t * @param {string} evidence description\r\n\t * @param {string} evidence image filename\r\n\t */\r\n\tsendPE(name, desc, img) {\r\n\t\tthis.serv.send(`PE#${escapeChat(encodeChat(name))}#${escapeChat(encodeChat(desc))}#${img}#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends edit evidence command.\r\n\t * @param {number} evidence id\r\n\t * @param {string} evidence name\r\n\t * @param {string} evidence description\r\n\t * @param {string} evidence image filename\r\n\t */\r\n\tsendEE(id, name, desc, img) {\r\n\t\tthis.serv.send(`EE#${id}#${escapeChat(encodeChat(name))}#${escapeChat(encodeChat(desc))}#${img}#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends delete evidence command.\r\n\t * @param {number} evidence id\r\n\t */\r\n\tsendDE(id) {\r\n\t\tthis.serv.send(`DE#${id}#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends health point command.\r\n\t * @param {number} side the position\r\n\t * @param {number} hp the health point\r\n\t */\r\n\tsendHP(side, hp) {\r\n\t\tthis.serv.send(`HP#${side}#${hp}#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends call mod command.\r\n\t * @param {string} message to mod\r\n\t */\r\n\tsendZZ(msg) {\r\n\t\tthis.serv.send(`ZZ#${msg}#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends testimony command.\r\n\t * @param {string} testimony type\r\n\t */\r\n\tsendRT(testimony) {\r\n\t\tif (this.chars[this.charID].side == \"jud\") {\r\n\t\t\tthis.serv.send(`RT#${testimony}#%`);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Requests to change the music to the specified track.\r\n\t * @param {string} track the track ID\r\n\t */\r\n\tsendMusicChange(track) {\r\n\t\tthis.serv.send(`MC#${track}#${this.charID}#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Requests to leave the room and free the character slot.\r\n\t * \r\n\t * Note: This packet is undocumented. It is not implemented by\r\n\t * either the AO2 client or tsuserver.\r\n\t */\r\n\tsendLeaveRoom() {\r\n\t\tthis.serv.send(\"FC#%\");\r\n\t}\r\n\r\n\t/**\r\n\t * Begins the handshake process by sending an identifier\r\n\t * to the server.\r\n\t */\r\n\tjoinServer() {\r\n\t\tthis.serv.send(`HI#${hash6ode()}#%`);\r\n\t\tthis.serv.send(\"ID#webAO#2.3#%\");\r\n\t\tthis.checkUpdater = setInterval(() => this.sendCheck(), 5000);\r\n\t}\r\n\r\n\t/**\r\n\t * Load game resources.\r\n\t */\r\n\tloadResources() {\r\n\t\t// Set to playerID to server chat name\r\n\t\t// TODO: Make a text box for this!\r\n\t\tdocument.getElementById(\"OOC_name\").value = \"web\" + this.playerID;\r\n\r\n\t\t// Load evidence array to select\r\n\t\tconst evidence_select = document.getElementById(\"evi_select\");\r\n\t\tevidence_select.add(new Option(\"Custom\", 0));\r\n\t\tevidence_arr.forEach(evidence => {\r\n\t\t\tevidence_select.add(new Option(evidence));\r\n\t\t});\r\n\r\n\t\t// Load background array to select\r\n\t\tconst background_select = document.getElementById(\"bg_select\");\r\n\t\tbackground_select.add(new Option(\"Custom\", 0));\r\n\t\tbackground_arr.forEach(background => {\r\n\t\t\tbackground_select.add(new Option(background));\r\n\t\t});\r\n\t\t// Calculate gif duration of shouts\r\n\t\tconst shouts = [\"holdit\", \"objection\", \"takethat\"];\r\n\t\tfor (let i = 0; i < shouts.length; i++) {\r\n\t\t\tlet shout_src = AO_HOST + this.resources[shouts[i]][\"src\"].toLowerCase();\r\n\t\t\tfileExists(shout_src, this.callbackLoadImageResources, shouts[i]);\r\n\t\t}\r\n\r\n\t\t// Calculate gif duration of testimony\r\n\t\tconst testimony = [\"witnesstestimony\", \"crossexamination\"];\r\n\t\tfor (let i = 0; i < testimony.length; i++) {\r\n\t\t\tconst testimony_src = `${AO_HOST}themes/default/${testimony[i]}.gif`;\r\n\t\t\t// Check image existed\r\n\t\t\tfileExists(testimony_src, this.callbackLoadImageResources, testimony[i]);\r\n\t\t\t// Check sfx existed\r\n\t\t\tfileExists(AO_HOST + this.resources[testimony[i]][\"sfx\"].toLowerCase(), this.callbackLoadSFXResources, testimony[i]);\r\n\t\t}\r\n\t\t// TODO: Cache some resources\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Callback for image resources.\r\n\t * @param {boolean} result the image is existed or not\r\n\t * @param {string} resource the resource name\r\n\t * @param {string} src the url of resource\r\n\t */\r\n\tcallbackLoadImageResources(result, resource, src) {\r\n\t\tif (result) {\r\n\t\t\tclient.resources[resource][\"src\"] = src;\r\n\t\t\tviewport.getAnimLength(src, client.callbackGetResourceLength, resource);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Callback for animation duration resource\r\n\t * @param {integer} length the animation length\r\n\t * @param {string} resource the resource name\r\n\t */\r\n\tcallbackGetResourceLength(length, resource) {\r\n\t\tclient.resources[resource][\"duration\"] = length;\r\n\t}\r\n\r\n\t/**\r\n\t * Callback for sfx resources.\r\n\t * @param {boolean} result the audio is existed or not\r\n\t * @param {string} resource the resource name\r\n\t * @param {string} src the url of resource\r\n\t */\r\n\tcallbackLoadSFXResources(result, resource, src) {\r\n\t\tif (result) {\r\n\t\t\tclient.resources[resource][\"sfx\"] = src;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Create observer to detect BBCode elements\r\n\t * then manipulate them.\r\n\t */\r\n\tinitialObservBBCode() {\r\n\t\tconst target = document.getElementById(\"client_inner_chat\");\r\n\t\tconst observer = new MutationObserver(function (mutations) {\r\n\t\t\tmutations.forEach(function (mutation) {\r\n\t\t\t\tconst children = mutation.addedNodes;\r\n\t\t\t\tif (children !== null) {\r\n\t\t\t\t\tchildren.forEach(function (node) {\r\n\t\t\t\t\t\tif (node.tagName == \"C\") {\r\n\t\t\t\t\t\t\tnode.style.color = node.getAttribute(\"a\");\r\n\t\t\t\t\t\t} else if (node.tagName == \"M\") {\r\n\t\t\t\t\t\t\tif (node.hasAttribute(\"a\")) {\r\n\t\t\t\t\t\t\t\tnode.style.backgroundColor = node.getAttribute(\"a\");\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tnode.style.backgroundColor = \"yellow\";\r\n\t\t\t\t\t\t\t\tnode.style.color = \"black\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t\tconst config = {\r\n\t\t\tattributes: true,\r\n\t\t\tchildList: true\r\n\t\t};\r\n\t\tobserver.observe(target, config);\r\n\t}\r\n\r\n\t/**\r\n\t * Requests to play as a specified character.\r\n\t * @param {number} character the character ID\r\n\t */\r\n\tsendCharacter(character) {\r\n\t\tthis.serv.send(`CC#${this.playerID}#${character}#web#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Requests to select a music track.\r\n\t * @param {number?} song the song to be played\r\n\t */\r\n\tsendMusic(song) {\r\n\t\tthis.serv.send(`MC#${song}`);\r\n\t}\r\n\r\n\t/**\r\n\t * Sends a keepalive packet.\r\n\t */\r\n\tsendCheck() {\r\n\t\tthis.serv.send(`CH#${this.charID}#%`);\r\n\t}\r\n\r\n\t/**\r\n\t * Triggered when a connection is established to the server.\r\n\t */\r\n\tonOpen(e) {\r\n\t\t// XXX: Why does watching mean just SITTING there and doing nothing?\r\n\t\tif (mode === \"watch\") {\r\n\t\t\tdocument.getElementById(\"client_loading\").style.display = \"none\";\r\n\t\t\tdocument.getElementById(\"client_charselect\").style.display = \"none\";\r\n\t\t} else {\r\n\t\t\tclient.joinServer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggered when the connection to the server closes.\r\n\t * @param {CloseEvent} e\r\n\t */\r\n\tonClose(e) {\r\n\t\tconsole.error(`The connection was closed: ${e.reason} (${e.code})`);\r\n\t\tif (e.code !== 1001) {\r\n\t\t\tdocument.getElementById(\"client_error\").style.display = \"block\";\r\n\t\t\tdocument.getElementById(\"error_id\").textContent = e.code;\r\n\t\t\tthis.cleanup();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggered when a packet is received from the server.\r\n\t * @param {MessageEvent} e\r\n\t */\r\n\tonMessage(e) {\r\n\t\tlet msg = e.data;\r\n\t\tconsole.debug(msg);\r\n\t\tlet lines = msg.split(\"%\");\r\n\t\tlet args = lines[0].split(\"#\");\r\n\t\tlet header = args[0];\r\n\t\tlet handler = this.handlers[header];\r\n\t\tif (typeof handler !== \"undefined\") {\r\n\t\t\thandler(args);\r\n\t\t} else {\r\n\t\t\tconsole.warn(`Invalid packet header ${header}`);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggered when an network error occurs.\r\n\t * @param {ErrorEvent} e \r\n\t */\r\n\tonError(e) {\r\n\t\tconsole.error(`A network error occurred: ${e.reason} (${e.code})`);\r\n\t\tdocument.getElementById(\"client_error\").style.display = \"block\";\r\n\t\tdocument.getElementById(\"error_id\").textContent = e.code;\r\n\t\tthis.cleanup();\r\n\t}\r\n\r\n\tcleanup() {\r\n\t\ttry {\r\n\t\t\tthis.serv.close(1001);\r\n\t\t} catch (e) {\r\n\t\t\t// I don't care if this errors\r\n\t\t}\r\n\t\tclearInterval(this.checkUpdater);\r\n\t}\r\n\r\n\t/**\r\n\t * XXX: a nasty hack made by gameboyprinter.\r\n\t * @param {string} msg chat message to prepare for display \r\n\t */\r\n\tprepChat(msg){\r\n\t\t// TODO: make this less awful\r\n\t\treturn decodeBBCode(unescapeChat(decodeChat(msg)));\r\n\t}\r\n\r\n\t/**\r\n\t * Handles an in-character chat message.\r\n\t * @param {*} args packet arguments\r\n\t */\r\n\thandleMS(args) {\r\n\t\t// TODO: this if-statement might be a bug.\r\n\t\tif (args[4] != viewport.chatmsg.content) {\r\n\t\t\tdocument.getElementById(\"client_inner_chat\").innerHTML = \"\";\r\n\t\t\tconst chatmsg = {\r\n\t\t\t\t// pre: escape(args[2]),\r\n\t\t\t\tcharacter: -1, // Will do a linear search\r\n\t\t\t\tpreanim: escape(args[2]), // XXX: why again?\r\n\t\t\t\tnameplate: args[3], // TODO: parse INI to get this info\r\n\t\t\t\tname: args[3],\r\n\t\t\t\tspeaking: \"(b)\" + escape(args[4]),\r\n\t\t\t\tsilent: \"(a)\" + escape(args[4]),\r\n\t\t\t\tcontent: this.prepChat(args[5]), // Escape HTML tag, Use BBCode Only!\r\n\t\t\t\tside: args[6],\r\n\t\t\t\tsound: escape(args[7]),\r\n\t\t\t\ttype: args[8],\r\n\t\t\t\t// charid: args[9],\r\n\t\t\t\tsnddelay: args[10],\r\n\t\t\t\tobjection: args[11],\r\n\t\t\t\tevidence: args[12],\r\n\t\t\t\tflip: args[13],\r\n\t\t\t\tflash: args[14],\r\n\t\t\t\tcolor: args[15],\r\n\t\t\t\tisnew: true,\r\n\t\t\t};\r\n\r\n\t\t\t// The dreaded linear search...\r\n\t\t\tfor (let i = 0; i < this.chars.length; i++) {\r\n\t\t\t\tif (this.chars[i].name == args[3]) {\r\n\t\t\t\t\tchatmsg.character = i;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (chatmsg.character == this.charID) {\r\n\t\t\t\tresetICParams();\r\n\t\t\t}\r\n\r\n\t\t\tviewport.say(chatmsg);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles an out-of-character chat message.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleCT(args) {\r\n\t\tconst oocLog = document.getElementById(\"client_ooclog\");\r\n\t\toocLog.innerHTML += `${decodeChat(unescapeChat(args[1]))}: ${decodeChat(unescapeChat(args[2]))}\\r\\n`;\r\n\t\tif (oocLog.scrollTop > oocLog.scrollHeight - 600) {\r\n\t\t\toocLog.scrollTop = oocLog.scrollHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles a music change to an arbitrary resource.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleMC(args) {\r\n\t\tconst music = viewport.music;\r\n\t\tmusic.pause();\r\n\t\tmusic.src = MUSIC_HOST + args[1].toLowerCase();\r\n\t\tmusic.play();\r\n\t\tif (args[2] >= 0) {\r\n\t\t\tlet musicname = this.chars[args[2]].name;\r\n\t\t\tappendICLog(`${musicname} changed music to ${args[1]}`);\r\n\t\t} else {\r\n\t\t\tappendICLog(`The music was changed to ${args[1]}`);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles a music change to an arbitrary resource, with an offset in seconds.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleRMC(args) {\r\n\t\tviewport.music.pause();\r\n\t\tviewport.music = new Audio(this.musicList[args[1]]);\r\n\t\tconst music = viewport.music;\r\n\t\t// Music offset + drift from song loading\r\n\t\tmusic.totime = args[1];\r\n\t\tmusic.offset = new Date().getTime() / 1000;\r\n\t\tmusic.addEventListener(\"loadedmetadata\", function () {\r\n\t\t\tmusic.currentTime += parseFloat(music.totime + (new Date().getTime() / 1000 - music.offset)).toFixed(3);\r\n\t\t\tmusic.play();\r\n\t\t}, false);\r\n\t}\r\n\r\n\t/**\r\n\t * Handles incoming character information, bundling multiple characters\r\n\t * per packet.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleCI(args) {\r\n\t\tdocument.getElementById(\"client_loadingtext\").innerHTML = \"Loading Character \" + args[1];\r\n\t\tthis.serv.send(\"AN#\" + ((args[1] / 10) + 1) + \"#%\");\r\n\t\tfor (let i = 2; i < args.length - 1; i++) {\r\n\t\t\tif (i % 2 == 0) {\r\n\t\t\t\tlet chargs = args[i].split(\"&\");\r\n\t\t\t\tthis.chars[args[i - 1]] = {\r\n\t\t\t\t\t\"name\": chargs[0],\r\n\t\t\t\t\t\"desc\": chargs[1],\r\n\t\t\t\t\t\"evidence\": chargs[3],\r\n\t\t\t\t\t\"icon\": AO_HOST + \"characters/\" + escape(chargs[0].toLowerCase()) + \"/char_icon.png\"\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles incoming character information, containing only one character\r\n\t * per packet.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleSC(args) {\r\n\t\tdocument.getElementById(\"client_loadingtext\").innerHTML = \"Loading Characters\";\r\n\t\tfor (let i = 1; i < args.length - 1; i++) {\r\n\t\t\tlet chargs = args[i].split(\"&\");\r\n\t\t\tthis.chars[i - 1] = {\r\n\t\t\t\t\"name\": chargs[0],\r\n\t\t\t\t\"desc\": chargs[1],\r\n\t\t\t\t\"evidence\": chargs[3],\r\n\t\t\t\t\"icon\": AO_HOST + \"characters/\" + escape(chargs[0].toLowerCase()) + \"/char_icon.png\"\r\n\t\t\t};\r\n\t\t}\r\n\t\tthis.serv.send(\"RM#%\");\r\n\t}\r\n\r\n\t/**\r\n\t * Handles incoming evidence information, containing only one evidence\r\n\t * item per packet.\r\n\t * \r\n\t * Mostly unimplemented in webAO.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleEI(args) {\r\n\t\tdocument.getElementById(\"client_loadingtext\").innerHTML = \"Loading Evidence \" + args[1];\r\n\t\t//serv.send(\"AE#\" + (args[1] + 1) + \"#%\");\r\n\t\tthis.serv.send(\"RM#%\");\r\n\t}\r\n\r\n\t/**\r\n\t * Handles incoming evidence list, all evidences at once\r\n\t * item per packet.\r\n\t * \r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleLE(args) {\r\n\t\tthis.evidences = [];\r\n\t\tfor (let i = 1; i < args.length - 1; i++) {\r\n\t\t\tconst arg = args[i].split(\"&\");\r\n\t\t\tthis.evidences[i - 1] = {\r\n\t\t\t\t\"name\": decodeChat(unescapeChat(arg[0])),\r\n\t\t\t\t\"desc\": decodeChat(unescapeChat(arg[1])),\r\n\t\t\t\t\"filename\": escape(arg[2]),\r\n\t\t\t\t\"icon\": AO_HOST + \"evidence/\" + escape(arg[2].toLowerCase())\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tconst evidence_box = document.getElementById(\"evidences\");\r\n\t\tevidence_box.innerHTML = \"\";\r\n\t\tfor (let i = 1; i <= this.evidences.length; i++) {\r\n\t\t\tevidence_box.innerHTML += `<img src=\"${this.evidences[i - 1].icon}\" \r\n\t\t\t\tid=\"evi_${i}\" \r\n\t\t\t\talt=\"${this.evidences[i - 1].name}\"\r\n\t\t\t\tclass=\"client_button\"\r\n\t\t\t\tonclick=\"pickEvidence(${i})\">`;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles incoming music information, containing multiple entries\r\n\t * per packet.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleEM(args) {\r\n\t\tdocument.getElementById(\"client_loadingtext\").innerHTML = \"Loading Music \" + args[1];\r\n\t\tthis.serv.send(\"AM#\" + ((args[1] / 10) + 1) + \"#%\");\r\n\t\tlet hmusiclist = document.getElementById(\"client_musiclist\");\r\n\t\tfor (let i = 2; i < args.length - 1; i++) {\r\n\t\t\tif (i % 2 == 0) {\r\n\t\t\t\tlet newentry = document.createElement(\"OPTION\");\r\n\t\t\t\tnewentry.text = args[i];\r\n\t\t\t\thmusiclist.options.add(newentry);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles incoming music information, containing only one entry\r\n\t * per packet.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleSM(args) {\r\n\t\tdocument.getElementById(\"client_loadingtext\").innerHTML = \"Loading Music \";\r\n\t\tconst hmusiclist = document.getElementById(\"client_musiclist\");\r\n\t\tlet flagAudio = false;\r\n\r\n\t\tfor (let i = 1; i < args.length - 1; i++) {\r\n\t\t\t// Check when found the song for the first time\r\n\t\t\tif (/\\.(?:wav|mp3|mp4|ogg|opus)$/i.test(args[i]) && !flagAudio) {\r\n\t\t\t\tflagAudio = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (flagAudio) {\r\n\t\t\t\t// After reached the audio put everything in the music list\r\n\t\t\t\tconst newentry = document.createElement(\"OPTION\");\r\n\t\t\t\tnewentry.text = args[i];\r\n\t\t\t\thmusiclist.options.add(newentry);\r\n\t\t\t} else {\r\n\t\t\t\t// Create area button\r\n\t\t\t\tconst newarea = document.createElement(\"SPAN\");\r\n\t\t\t\tnewarea.className = \"location-box\";\r\n\t\t\t\tnewarea.textContent = args[i];\r\n\t\t\t\tnewarea.onclick = function () {\r\n\t\t\t\t\tarea_click(this);\r\n\t\t\t\t};\r\n\t\t\t\tdocument.getElementById(\"areas\").appendChild(newarea);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// We need to check if the last area that we got was actually a category\r\n\t\t// header for music. If it was, then move it over to the music list.\r\n\t\tconst area_box = document.getElementById(\"areas\");\r\n\t\tif (area_box.lastChild.textContent.startsWith(\"=\")) {\r\n\t\t\tconst audio_title = document.createElement(\"OPTION\");\r\n\t\t\taudio_title.text = area_box.lastChild.textContent;\r\n\t\t\thmusiclist.insertBefore(audio_title, hmusiclist.firstChild);\r\n\t\t\tarea_box.removeChild(area_box.lastChild);\r\n\t\t}\r\n\r\n\t\tthis.serv.send(\"RD#%\");\r\n\t}\r\n\r\n\t/**\r\n\t * Handles incoming music information, containing all entries\r\n\t * in the same packet.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandlemusic(args) {\r\n\t\tfor (let i = 0; i < args.length / 2; i++) {\r\n\t\t\tthis.musicList[args[2 * i]] = args[2 * i + 1];\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the handshake completion packet, meaning the player\r\n\t * is ready to select a character.\r\n\t * \r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleDONE(args) {\r\n\t\tdocument.getElementById(\"client_loading\").style.display = \"none\";\r\n\t\tdocument.getElementById(\"client_charselect\").style.display = \"block\";\r\n\t}\r\n\r\n\t/**\r\n\t * Handles a background change.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleBN(args) {\r\n\t\tviewport.bgname = escape(args[1]);\r\n\t\tconst bg_index = getIndexFromSelect(\"bg_select\", escape(args[1]));\r\n\t\tdocument.getElementById(\"bg_select\").selectedIndex = bg_index;\r\n\t\tupdateBackgroundPreview();\r\n\t\tif (bg_index == 0) {\r\n\t\t\tdocument.getElementById(\"bg_filename\").value = args[1];\r\n\t\t}\r\n\t\tdocument.getElementById(\"bg_preview\").src = AO_HOST + \"background/\" + escape(args[1].toLowerCase()) + \"/defenseempty.png\";\r\n\t\tif (this.charID == -1) {\r\n\t\t\tchangeBackground(\"jud\");\r\n\t\t} else {\r\n\t\t\tchangeBackground(this.chars[this.charID].side);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\thandleNBG(args) {\r\n\t\t// TODO (set by sD)\r\n\t}\r\n\r\n\t/**\r\n\t * Handles a change in the health bars' states.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleHP(args) {\r\n\t\tconst percent_hp = args[2] * 10;\r\n\t\tif (args[1] == 1) {\r\n\t\t\t// Def hp\r\n\t\t\tthis.hp[0] = args[2];\r\n\t\t\t$(\"#client_defense_hp > .health-bar\").animate({\r\n\t\t\t\t\"width\": percent_hp + \"%\"\r\n\t\t\t}, 500);\r\n\t\t} else {\r\n\t\t\t// Pro hp\r\n\t\t\tthis.hp[1] = args[2];\r\n\t\t\t$(\"#client_prosecutor_hp > .health-bar\").animate({\r\n\t\t\t\t\"width\": percent_hp + \"%\"\r\n\t\t\t}, 500);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles a testimony states.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleRT(args) {\r\n\t\tif (args[1] == \"testimony1\") {\r\n\t\t\t//Witness Testimony\r\n\t\t\tthis.testimonyID = 1;\r\n\t\t} else {\r\n\t\t\t//Cross Examination\r\n\t\t\tthis.testimonyID = 2;\r\n\t\t}\r\n\t\tviewport.initTestimonyUpdater();\r\n\t}\r\n\r\n\t/**\r\n\t * Handles a call mod message.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleZZ(args) {\r\n\t\tconst oocLog = document.getElementById(\"client_ooclog\");\r\n\t\toocLog.innerHTML += `$Alert: ${decodeChat(unescapeChat(args[1]))}\\r\\n`;\r\n\t\tif (oocLog.scrollTop > oocLog.scrollHeight - 60) {\r\n\t\t\toocLog.scrollTop = oocLog.scrollHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the issuance of a player ID by the server.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleID(args) {\r\n\t\tthis.playerID = args[1];\r\n\t}\r\n\r\n\thandlePN(args) {\r\n\t\tthis.serv.send(\"askchaa#%\");\r\n\t}\r\n\r\n\t/**\r\n\t * Received when the server announces its server info,\r\n\t * but we use it as a cue to begin retrieving characters.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleSI(args) {\r\n\t\tif (oldLoading) {\r\n\t\t\tthis.serv.send(\"askchar2#%\");\r\n\t\t} else {\r\n\t\t\tthis.serv.send(\"RC#%\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the list of all used and vacant characters.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandleCharsCheck(args) {\r\n\t\tdocument.getElementById(\"client_chartable\").innerHTML = \"\";\r\n\t\tlet tr;\r\n\t\tfor (let i = 0; i < this.chars.length; i++) {\r\n\t\t\tif (i % CHAR_SELECT_WIDTH == 0) {\r\n\t\t\t\ttr = document.createElement(\"TR\");\r\n\t\t\t}\r\n\t\t\tconst td = document.createElement(\"TD\");\r\n\t\t\tlet icon_chosen = \"\";\r\n\t\t\tconst thispick = this.chars[i].icon;\r\n\t\t\tif (args[i + 1] == \"-1\") {\r\n\t\t\t\ticon_chosen = \" dark\";\r\n\t\t\t}\r\n\t\t\ttd.innerHTML = `<img class='demothing${icon_chosen}' id='demo_${i}' ` +\r\n\t\t\t\t`src='${thispick}' alt='${this.chars[i].name}' onclick='pickChar(${i})' ` +\r\n\t\t\t\t\"onerror='demoError(this);'>\";\r\n\t\t\ttr.appendChild(td);\r\n\t\t\tif (i % CHAR_SELECT_WIDTH == 0) {\r\n\t\t\t\tdocument.getElementById(\"client_chartable\").appendChild(tr);\r\n\t\t\t}\r\n\t\t}\r\n\t\t//changeBackground(\"def\");\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the server's assignment of a character for the player to use.\r\n\t * @param {Array} args packet arguments\r\n\t */\r\n\thandlePV(args) {\r\n\t\tthis.charID = args[3];\r\n\t\tdocument.getElementById(\"client_charselect\").style.display = \"none\";\r\n\t\tdocument.getElementById(\"client_inputbox\").style.display = \"\";\r\n\t\tconst me = this.me();\r\n\t\tconst emotes = this.emotes;\r\n\t\tconst emotesList = document.getElementById(\"client_emo\");\r\n\t\temotesList.innerHTML = \"\"; // Clear emote box\r\n\t\temotesList.style.display = \"\";\r\n\t\tconst xhr = new XMLHttpRequest();\r\n\t\txhr.withCredentials = false;\r\n\t\txhr.open(\"GET\", AO_HOST + \"characters/\" + escape(this.me().name.toLowerCase()) + \"/char.ini\", true);\r\n\t\txhr.responseType = \"text\";\r\n\t\txhr.onload = function (e) {\r\n\t\t\tif (this.status == 200) {\r\n\t\t\t\tconst linifile = this.responseText;\r\n\t\t\t\tconst pinifile = INI.parse(linifile);\r\n\t\t\t\tme.side = pinifile.Options.side;\r\n\t\t\t\tupdateActionCommands(me.side);\r\n\t\t\t\tfor (let i = 1; i <= pinifile.Emotions.number; i++) {\r\n\t\t\t\t\tconst emoteinfo = pinifile.Emotions[i].split(\"#\");\r\n\t\t\t\t\tlet esfx = \"0\";\r\n\t\t\t\t\tlet esfxd = \"0\";\r\n\t\t\t\t\tif (typeof pinifile.SoundN !== \"undefined\") {\r\n\t\t\t\t\t\tesfx = pinifile.SoundN[i];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (typeof pinifile.SoundT !== \"undefined\") {\r\n\t\t\t\t\t\tesfxd = pinifile.SoundT[i];\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Make sure the asset server is case insensitive, or that everything on it is lowercase\r\n\t\t\t\t\temotes[i] = {\r\n\t\t\t\t\t\tdesc: emoteinfo[0].toLowerCase(),\r\n\t\t\t\t\t\tspeaking: emoteinfo[1].toLowerCase(),\r\n\t\t\t\t\t\tsilent: emoteinfo[2].toLowerCase(),\r\n\t\t\t\t\t\tzoom: emoteinfo[3],\r\n\t\t\t\t\t\tsfx: esfx.toLowerCase(),\r\n\t\t\t\t\t\tsfxdelay: esfxd,\r\n\t\t\t\t\t\tbutton_off: AO_HOST + `characters/${escape(me.name).toLowerCase()}/emotions/button${i}_off.png`,\r\n\t\t\t\t\t\tbutton_on: AO_HOST + `characters/${escape(me.name).toLowerCase()}/emotions/button${i}_on.png`\r\n\t\t\t\t\t};\r\n\t\t\t\t\temotesList.innerHTML += \r\n\t\t\t\t\t\t`<img src=${emotes[i].button_off}\r\n\t\t\t\t\t\t id=\"emo_${i}\"\r\n\t\t\t\t\t\t alt=\"${emotes[i].desc}\"\r\n\t\t\t\t\t\t class=\"client_button\"\r\n\t\t\t\t\t\t onclick=\"pickEmotion(${i})\">`;\r\n\t\t\t\t}\r\n\t\t\t\tpickEmotion(1);\r\n\t\t\t}\r\n\t\t};\r\n\t\txhr.send();\r\n\t}\r\n}\r\n\r\nclass Viewport {\r\n\tconstructor() {\r\n\t\tthis.textnow = \"\";\r\n\t\tthis.chatmsg = {\r\n\t\t\t\"isnew\": false,\r\n\t\t\t\"content\": \"\",\r\n\t\t\t\"objection\": \"0\",\r\n\t\t\t\"sound\": \"\",\r\n\t\t\t\"startpreanim\": false,\r\n\t\t\t\"startspeaking\": false,\r\n\t\t\t\"side\": null,\r\n\t\t\t\"color\": \"0\",\r\n\t\t\t\"snddelay\": 0,\r\n\t\t\t\"preanimdelay\": 0\r\n\t\t};\r\n\t\tthis.blip = new Audio(AO_HOST + \"sounds/general/sfx-blipmale.wav\");\r\n\t\tthis.blip.volume = 0.5;\r\n\r\n\t\t// Allocate multiple blip audio channels to make blips less jittery\r\n\r\n\t\t// TODO: read blip type (\"gender\") from ini\r\n\t\tthis.blipChannels = new Array(6);\r\n\t\tfor (let i = 0; i < this.blipChannels.length; i++) {\r\n\t\t\tthis.blipChannels[i] = new Audio(AO_HOST + \"sounds/general/sfx-blipmale.wav\");\r\n\t\t\tthis.blipChannels[i].volume = 0.5;\r\n\t\t}\r\n\t\tthis.currentBlipChannel = 0;\r\n\r\n\t\tthis.sfxaudio = new Audio(AO_HOST + \"sounds/general/sfx-blipmale.wav\");\r\n\t\tthis.sfxplayed = 0;\r\n\r\n\t\tthis.music = new Audio();\r\n\t\tthis.music.play();\r\n\r\n\t\tthis.updater = null;\r\n\t\tthis.testimonyUpdater = null;\r\n\r\n\t\tthis.bgname = \"gs4\";\r\n\r\n\t\tthis.testimonyTimer = 0;\r\n\t\tthis.shoutTimer = 0;\r\n\t\tthis.textTimer = 0;\r\n\r\n\t\tthis._animating = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns whether or not the viewport is busy\r\n\t * performing a task (animating).\r\n\t */\r\n\tisAnimating() {\r\n\t\treturn this._animating;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the volume of the blip sound.\r\n\t * @param {number} volume\r\n\t */\r\n\tsetBlipVolume(volume) {\r\n\t\tfor (let i = 0; i < this.blipChannels.length; i++) {\r\n\t\t\tthis.blipChannels[i].volume = volume;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the path which the background is located in.\r\n\t */\r\n\tbgFolder() {\r\n\t\treturn `${AO_HOST}background/${this.bgname.toLowerCase()}/`;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets a new emote.\r\n\t * @param {object} chatmsg the new chat message\r\n\t */\r\n\tsay(chatmsg) {\r\n\t\tthis.chatmsg = chatmsg;\r\n\t\tappendICLog(chatmsg.content, chatmsg.nameplate);\r\n\t\tchangeBackground(chatmsg.side);\r\n\t\tthis.textnow = \"\";\r\n\t\tthis.sfxplayed = 0;\r\n\t\tthis.textTimer = 0;\r\n\t\tthis._animating = true;\r\n\t\tclearTimeout(this.updater);\r\n\t\t// If preanim existed then determine the length\r\n\t\tif (chatmsg.preanim != \"-\") {\r\n\t\t\tchatmsg.preanimdelay = this.getAnimLength(`${AO_HOST}characters/${escape(chatmsg.name.toLowerCase())}/${chatmsg.preanim.toLowerCase()}.gif`, this.initUpdater);\r\n\t\t} else {\r\n\t\t\tthis.initUpdater(0);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Intialize updater\r\n\t * @param {number} animdelay the length of pre-animation \r\n\t */\r\n\tinitUpdater(animdelay) {\r\n\t\tviewport.chatmsg.preanimdelay = parseInt(animdelay);\r\n\t\tviewport.updater = setTimeout(() => viewport.updateText(), UPDATE_INTERVAL);\r\n\t}\r\n\r\n\t/**\r\n\t * Intialize testimony updater \r\n\t */\r\n\tinitTestimonyUpdater() {\r\n\t\tif (client.testimonyID > 0) {\r\n\t\t\tlet testimony = \"\";\r\n\t\t\tif (client.testimonyID == 1) {\r\n\t\t\t\ttestimony = \"witnesstestimony\";\r\n\t\t\t} else if (client.testimonyID == 2) {\r\n\t\t\t\ttestimony = \"crossexamination\";\r\n\t\t\t}\r\n\t\t\t(new Audio(client.resources[testimony][\"sfx\"])).play();\r\n\t\t\tthis.testimonyTimer = 0;\r\n\t\t\tconst testimonyOverlay = document.getElementById(\"client_testimony\");\r\n\t\t\ttestimonyOverlay.src = client.resources[testimony][\"src\"];\r\n\t\t\ttestimonyOverlay.style.display = \"\";\r\n\t\t\tthis.testimonyUpdater = setTimeout(() => this.updateTestimony(), UPDATE_INTERVAL);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Gets animation length.\r\n\t * @param {string} filename the animation file name\r\n\t * @param {function} callback the callback function\r\n\t * @param {object} param \r\n\t */\r\n\tgetAnimLength(filename, callback, param) {\r\n\t\tconst request = new XMLHttpRequest();\r\n\t\trequest.open(\"GET\", filename, true);\r\n\t\trequest.responseType = \"arraybuffer\";\r\n\t\trequest.addEventListener(\"load\", function () {\r\n\t\t\tconst gifInfo = gify.getInfo(request.response);\r\n\t\t\tconsole.log(gifInfo[\"duration\"]);\r\n\t\t\t// Return animation length\r\n\t\t\tcallback(gifInfo[\"duration\"], param);\r\n\t\t});\r\n\t\trequest.send();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the testimony overaly\r\n\t */\r\n\tupdateTestimony() {\r\n\t\t//Update timer\r\n\t\tthis.testimonyTimer = this.testimonyTimer + UPDATE_INTERVAL;\r\n\r\n\t\tif (client.testimonyID == 1) {\r\n\t\t\t//Witness Testimony\r\n\t\t\tif (this.testimonyTimer >= client.resources[\"witnesstestimony\"][\"duration\"]) {\r\n\t\t\t\t//Finish\r\n\t\t\t\tthis.disposeTestimony();\r\n\t\t\t} else {\r\n\t\t\t\tthis.testimonyUpdater = setTimeout(() => this.updateTestimony(), UPDATE_INTERVAL);\r\n\t\t\t}\r\n\t\t} else if (client.testimonyID == 2) {\r\n\t\t\t//Cross Examination\r\n\t\t\tif (this.testimonyTimer >= client.resources[\"crossexamination\"][\"duration\"]) {\r\n\t\t\t\t//Finish\r\n\t\t\t\tthis.disposeTestimony();\r\n\t\t\t} else {\r\n\t\t\t\tthis.testimonyUpdater = setTimeout(() => this.updateTestimony(), UPDATE_INTERVAL);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.disposeTestimony();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Dispose the testimony overlay\r\n\t */\r\n\tdisposeTestimony() {\r\n\t\tclient.testimonyID = 0;\r\n\t\tthis.testimonyTimer = 0;\r\n\t\tdocument.getElementById(\"client_testimony\").style.display = \"none\";\r\n\t\tclearTimeout(this.testimonyUpdater);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the chatbox based on the given text.\r\n\t * \r\n\t * XXX: This relies on a global variable `this.chatmsg`!\r\n\t */\r\n\tupdateText() {\r\n\t\tconst nameBox = document.getElementById(\"client_name\");\r\n\t\tconst chatBox = document.getElementById(\"client_chat\");\r\n\t\tconst charSprite = document.getElementById(\"client_char\");\r\n\t\tconst eviBox = document.getElementById(\"client_evi\");\r\n\t\tconst background = document.getElementById(\"client_background\");\r\n\t\tconst shoutSprite = document.getElementById(\"client_shout\");\r\n\t\tconst chatBoxInner = document.getElementById(\"client_inner_chat\");\r\n\r\n\t\t// Flip the character\r\n\t\tif (this.chatmsg.flip == 1) {\r\n\t\t\tcharSprite.style.transform = \"scaleX(-1)\";\r\n\t\t} else {\r\n\t\t\tcharSprite.style.transform = \"scaleX(1)\";\r\n\t\t}\r\n\r\n\t\tif (this._animating) {\r\n\t\t\tthis.updater = setTimeout(() => this.updateText(), UPDATE_INTERVAL);\r\n\t\t}\r\n\r\n\t\tif (this.chatmsg.isnew) {\r\n\t\t\t// Reset screen background\r\n\t\t\tbackground.style.backgroundColor = \"transparent\";\r\n\t\t\t// Hide message and evidence window\r\n\t\t\tnameBox.style.display = \"none\";\r\n\t\t\tchatBox.style.display = \"none\";\r\n\t\t\teviBox.style.opacity = \"0\";\r\n\t\t\teviBox.style.height = \"0%\";\r\n\t\t\tconst shouts = {\r\n\t\t\t\t\"1\": \"holdit\",\r\n\t\t\t\t\"2\": \"objection\",\r\n\t\t\t\t\"3\": \"takethat\"\r\n\t\t\t};\r\n\r\n\t\t\tlet shout = shouts[this.chatmsg.objection];\r\n\t\t\tif (typeof shout !== \"undefined\") {\r\n\t\t\t\tshoutSprite.src = client.resources[shout][\"src\"];\r\n\t\t\t\t(new Audio(`${AO_HOST}characters/${this.chatmsg.name.toLowerCase()}/${shout}.wav`)).play();\r\n\t\t\t\tthis.shoutTimer = 850;\r\n\t\t\t} else {\r\n\t\t\t\tthis.shoutTimer = 0;\r\n\t\t\t}\r\n\r\n\t\t\tthis.chatmsg.isnew = false;\r\n\t\t\tthis.chatmsg.startpreanim = true;\r\n\t\t}\r\n\r\n\t\tif (this.textTimer >= this.shoutTimer && this.chatmsg.startpreanim) {\r\n\t\t\t// Effect stuff\r\n\t\t\tif (this.chatmsg.flash == 2) {\r\n\t\t\t\t//Shake screen\r\n\t\t\t\tthis.sfxaudio.pause();\r\n\t\t\t\tthis.sfxplayed = 1;\r\n\t\t\t\tthis.sfxaudio.src = AO_HOST + \"sounds/general/sfx-stab.wav\";\r\n\t\t\t\tthis.sfxaudio.play();\r\n\t\t\t\t$(\"#client_gamewindow\").effect(\"shake\", {\r\n\t\t\t\t\t\"direction\": \"up\"\r\n\t\t\t\t});\r\n\t\t\t} else if (this.chatmsg.flash == 1) {\r\n\t\t\t\t//Flash screen\r\n\t\t\t\tbackground.style.backgroundColor = \"white\";\r\n\t\t\t\tthis.sfxaudio.pause();\r\n\t\t\t\tthis.sfxplayed = 1;\r\n\t\t\t\tthis.sfxaudio.src = AO_HOST + \"sounds/general/sfx-realization.wav\";\r\n\t\t\t\tthis.sfxaudio.play();\r\n\t\t\t\t$(\"#client_gamewindow\").effect(\"pulsate\");\r\n\t\t\t}\r\n\r\n\t\t\t//Pre-animation stuff\r\n\t\t\tif (this.chatmsg.preanimdelay > 0) {\r\n\t\t\t\tshoutSprite.src = \"misc/placeholder.gif\";\r\n\t\t\t\tchangeBackground(this.chatmsg.side);\r\n\t\t\t\tcharSprite.src = AO_HOST + \"characters/\" + escape(this.chatmsg.name.toLowerCase()) + \"/\" + this.chatmsg.preanim.toLowerCase() + \".gif\";\r\n\t\t\t}\r\n\t\t\tthis.chatmsg.startpreanim = false;\r\n\t\t\tthis.chatmsg.startspeaking = true;\r\n\t\t} else if (this.textTimer >= this.shoutTimer + this.chatmsg.preanimdelay && !this.chatmsg.startpreanim) {\r\n\t\t\tif (this.chatmsg.startspeaking) {\r\n\t\t\t\tif (this.chatmsg.evidence > 0) {\r\n\t\t\t\t\t// Prepare evidence\r\n\t\t\t\t\teviBox.style.backgroundImage = \"url('\" + client.evidences[this.chatmsg.evidence - 1].icon + \"')\";\r\n\r\n\t\t\t\t\tif (this.chatmsg.side == \"def\") {\r\n\t\t\t\t\t\t// Only def show evidence on right\r\n\t\t\t\t\t\teviBox.style.right = \"1.5em\";\r\n\t\t\t\t\t\teviBox.style.left = \"initial\";\r\n\t\t\t\t\t\t$(\"#client_evi\").animate({\r\n\t\t\t\t\t\t\theight: \"30%\",\r\n\t\t\t\t\t\t\topacity: 1\r\n\t\t\t\t\t\t}, 250);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\teviBox.style.right = \"initial\";\r\n\t\t\t\t\t\teviBox.style.left = \"1.5em\";\r\n\t\t\t\t\t\t$(\"#client_evi\").animate({\r\n\t\t\t\t\t\t\theight: \"30%\",\r\n\t\t\t\t\t\t\topacity: 1\r\n\t\t\t\t\t\t}, 250);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tnameBox.style.display = \"block\";\r\n\t\t\t\tnameBox.style.fontSize = (nameBox.offsetHeight * 0.7) + \"px\";\r\n\r\n\t\t\t\twhile (nameBox.hasChildNodes()) {\r\n\t\t\t\t\tnameBox.removeChild(nameBox.firstChild);\r\n\t\t\t\t}\r\n\t\t\t\tnameBox.appendChild(document.createTextNode(this.chatmsg.nameplate));\r\n\r\n\t\t\t\tchatBox.style.display = \"block\";\r\n\t\t\t\tchatBox.style.fontSize = (chatBox.offsetHeight * 0.25) + \"px\";\r\n\r\n\t\t\t\tconst colors = {\r\n\t\t\t\t\t\"0\": \"#ffffff\",\r\n\t\t\t\t\t\"1\": \"#00ff00\",\r\n\t\t\t\t\t\"2\": \"#ff0000\",\r\n\t\t\t\t\t\"3\": \"#ffaa00\",\r\n\t\t\t\t\t\"4\": \"#0000ff\",\r\n\t\t\t\t\t\"5\": \"#ffff00\",\r\n\t\t\t\t\t\"6\": \"#aa00aa\"\r\n\t\t\t\t};\r\n\t\t\t\tchatBoxInner.style.color = colors[this.chatmsg.color] || \"#ffffff\";\r\n\t\t\t\tthis.chatmsg.startspeaking = false;\r\n\r\n\t\t\t\tif (this.chatmsg.preanimdelay == 0) {\r\n\t\t\t\t\tshoutSprite.src = \"misc/placeholder.gif\";\r\n\t\t\t\t\tchangeBackground(this.chatmsg.side);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcharSprite.src = AO_HOST + \"characters/\" + escape(this.chatmsg.name.toLowerCase()) + \"/\" + this.chatmsg.speaking.toLowerCase() + \".gif\";\r\n\r\n\t\t\t\tif (this.textnow == this.chatmsg.content) {\r\n\t\t\t\t\tcharSprite.src = AO_HOST + \"characters/\" + escape(this.chatmsg.name.toLowerCase()) + \"/\" + this.chatmsg.silent.toLowerCase() + \".gif\";\r\n\t\t\t\t\tthis._animating = false;\r\n\t\t\t\t\tclearTimeout(this.updater);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (this.textnow != this.chatmsg.content) {\r\n\t\t\t\t\tif (this.chatmsg.content.charAt(this.textnow.length) != \" \") {\r\n\t\t\t\t\t\tthis.blipChannels[this.currentBlipChannel].play();\r\n\t\t\t\t\t\tthis.currentBlipChannel++;\r\n\t\t\t\t\t\tthis.currentBlipChannel %= this.blipChannels.length;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.textnow = this.chatmsg.content.substring(0, this.textnow.length + 1);\r\n\r\n\t\t\t\t\twhile (chatBoxInner.hasChildNodes()) {\r\n\t\t\t\t\t\tchatBoxInner.removeChild(chatBoxInner.firstChild);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tchatBoxInner.appendChild(document.createTextNode(this.textnow));\r\n\r\n\t\t\t\t\tif (this.textnow == this.chatmsg.content) {\r\n\t\t\t\t\t\tthis.textTimer = 0;\r\n\t\t\t\t\t\tthis._animating = false;\r\n\t\t\t\t\t\tcharSprite.src = AO_HOST + \"characters/\" + escape(this.chatmsg.name.toLowerCase()) + \"/\" + this.chatmsg.silent.toLowerCase() + \".gif\";\r\n\t\t\t\t\t\tclearTimeout(this.updater);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!this.sfxplayed && this.chatmsg.snddelay + this.shoutTimer >= this.textTimer) {\r\n\t\t\tthis.sfxaudio.pause();\r\n\t\t\tthis.sfxplayed = 1;\r\n\t\t\tif (this.chatmsg.sound != \"0\" && this.chatmsg.sound != \"1\") {\r\n\t\t\t\tthis.sfxaudio.src = AO_HOST + \"sounds/general/\" + escape(this.chatmsg.sound.toLowerCase()) + \".wav\";\r\n\t\t\t\tthis.sfxaudio.play();\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.textTimer = this.textTimer + UPDATE_INTERVAL;\r\n\t}\r\n}\r\n\r\nclass INI {\r\n\tstatic parse(data) {\r\n\t\tlet regex = {\r\n\t\t\tsection: /^\\s*\\[\\s*([^\\]]*)\\s*\\]\\s*$/,\r\n\t\t\tparam: /^\\s*([\\w.\\-_]+)\\s*=\\s*(.*?)\\s*$/,\r\n\t\t\tcomment: /^\\s*;.*$/\r\n\t\t};\r\n\t\tlet value = {};\r\n\t\tlet lines = data.split(/\\r\\n|\\r|\\n/);\r\n\t\tlet section = null;\r\n\t\tlines.forEach(function (line) {\r\n\t\t\tif (regex.comment.test(line)) {\r\n\t\t\t\treturn;\r\n\t\t\t} else if (line.length == 0) {\r\n\t\t\t\treturn;\r\n\t\t\t} else if (regex.param.test(line)) {\r\n\t\t\t\tlet match = line.match(regex.param);\r\n\t\t\t\tif (section) {\r\n\t\t\t\t\tvalue[section][match[1]] = match[2];\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalue[match[1]] = match[2];\r\n\t\t\t\t}\r\n\t\t\t} else if (regex.section.test(line)) {\r\n\t\t\t\tlet match = line.match(regex.section);\r\n\t\t\t\tvalue[match[1]] = {};\r\n\t\t\t\tsection = match[1];\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn value;\r\n\t}\r\n}\r\n\r\n/**\r\n * Triggered when the Return key is pressed on the out-of-character chat input box.\r\n * @param {KeyboardEvent} event\r\n */\r\nexport function onOOCEnter(event) {\r\n\tif (event.keyCode == 13) {\r\n\t\tclient.sendOOC(document.getElementById(\"client_oocinputbox\").value);\r\n\t\tdocument.getElementById(\"client_oocinputbox\").value = \"\";\r\n\t}\r\n}\r\nwindow.onOOCEnter = onOOCEnter;\r\n\r\n/**\r\n * Triggered when the Return key is pressed on the in-character chat input box.\r\n * @param {KeyboardEvent} event\r\n */\r\nexport function onEnter(event) {\r\n\tif (event.keyCode == 13) {\r\n\t\tlet mychar = client.me();\r\n\t\tlet myemo = client.myEmote();\r\n\t\tlet myevi = client.myEvidence();\r\n\t\tlet myflip = ((client.flip) ? 1 : 0);\r\n\t\tlet mycolor = document.getElementById(\"textcolor\").value;\r\n\t\tlet ssfxname = \"0\";\r\n\t\tlet ssfxdelay = \"0\";\r\n\t\tif (document.getElementById(\"sendsfx\").checked) {\r\n\t\t\tssfxname = myemo.sfx;\r\n\t\t\tssfxdelay = myemo.sfxdelay;\r\n\t\t}\r\n\t\tclient.sendIC(myemo.speaking, mychar.name, myemo.silent, document.getElementById(\"client_inputbox\").value, mychar.side, ssfxname, myemo.zoom, ssfxdelay, selectedShout, myevi, myflip, selectedEffect, mycolor);\r\n\t}\r\n}\r\nwindow.onEnter = onEnter;\r\n\r\n/**\r\n * Resets the IC parameters for the player to enter a new chat message.\r\n * This should only be called when the player's previous chat message\r\n * was successfully sent/presented.\r\n */\r\nfunction resetICParams() {\r\n\tdocument.getElementById(\"client_inputbox\").value = \"\";\r\n\tif (selectedEffect) {\r\n\t\tdocument.getElementById(\"button_effect_\" + selectedEffect).className = \"client_button\";\r\n\t\tselectedEffect = 0;\r\n\t}\r\n\tif (selectedShout) {\r\n\t\tdocument.getElementById(\"button_\" + selectedShout).className = \"client_button\";\r\n\t\tselectedShout = 0;\r\n\t}\r\n}\r\n\r\n/**\r\n * Triggered when an item on the music list is clicked.\r\n * @param {MouseEvent} event\r\n */\r\nexport function musiclist_click(event) {\r\n\tconst playtrack = document.getElementById(\"client_musiclist\").value;\r\n\tclient.sendMusicChange(playtrack);\r\n}\r\nwindow.musiclist_click = musiclist_click;\r\n\r\n/**\r\n * Triggered when an item on the area list is clicked.\r\n * @param {MouseEvent} event\r\n */\r\nexport function area_click(el) {\r\n\tconst area = el.textContent;\r\n\tclient.sendMusicChange(area);\r\n\r\n\tconst areaHr = document.createElement(\"div\");\r\n\tareaHr.className = \"hrtext\";\r\n\tareaHr.textContent = `switched to ${el.textContent}`;\r\n\tdocument.getElementById(\"client_log\").appendChild(areaHr);\r\n}\r\nwindow.area_click = area_click;\r\n\r\n/**\r\n * Triggered by the music volume slider.\r\n */\r\nexport function changeMusicVolume() {\r\n\tviewport.music.volume = document.getElementById(\"client_mvolume\").value / 100;\r\n}\r\nwindow.changeMusicVolume = changeMusicVolume;\r\n\r\n/**\r\n * Triggered by the sound effect volume slider.\r\n */\r\nexport function changeSFXVolume() {\r\n\tviewport.sfxaudio.volume = document.getElementById(\"client_svolume\").value / 100;\r\n}\r\nwindow.changeSFXVolume = changeSFXVolume;\r\n\r\n/**\r\n * Triggered by the blip volume slider.\r\n */\r\nexport function changeBlipVolume() {\r\n\tviewport.setBlipVolume(document.getElementById(\"client_bvolume\").value / 100);\r\n}\r\nwindow.changeBlipVolume = changeBlipVolume;\r\n\r\n/**\r\n * Triggered when a character icon is clicked in the character selection menu.\r\n * @param {MouseEvent} event\r\n */\r\nexport function changeCharacter(event) {\r\n\tclient.sendLeaveRoom();\r\n\tdocument.getElementById(\"client_charselect\").style.display = \"block\";\r\n\tdocument.getElementById(\"client_emo\").innerHTML = \"\";\r\n}\r\nwindow.changeCharacter = changeCharacter;\r\n\r\n/**\r\n * Triggered when there was an error loading a character sprite.\r\n * @param {HTMLImageElement} image the element containing the missing image\r\n */\r\nexport function imgError(image) {\r\n\timage.onerror = \"\";\r\n\timage.src = \"misc/placeholder.gif\";\r\n\treturn true;\r\n}\r\nwindow.imgError = imgError;\r\n\r\n/**\r\n * Triggered when there was an error loading a character icon.\r\n * @param {HTMLImageElement} image the element containing the missing image\r\n */\r\nexport function demoError(image) {\r\n\timage.onerror = \"\";\r\n\timage.src = \"/misc/placeholder.png\";\r\n\treturn true;\r\n}\r\nwindow.demoError = demoError;\r\n\r\n/**\r\n * Checks if a file exists at the specified URI.\r\n * @param {string} url the URI to be checked\r\n * @param {function} callback the function to be called when finished\r\n * @param {object} param \r\n */\r\nfunction fileExists(url, callback, param) {\r\n\tconst xhttp = new XMLHttpRequest();\r\n\txhttp.onreadystatechange = function () {\r\n\t\tif (this.readyState == 4 && this.status == 200) {\r\n\t\t\tcallback(true, param, url);\r\n\t\t} else {\r\n\t\t\tcallback(false, param, url);\r\n\t\t}\r\n\t};\r\n\txhttp.open(\"GET\", url, true);\r\n\txhttp.send();\r\n}\r\n\r\n/**\r\n * Changes the viewport background based on a given position.\r\n * \r\n * Valid positions: `def, pro, hld, hlp, wit, jud`\r\n * @param {string} position the position to change into\r\n */\r\nfunction changeBackground(position) {\r\n\tlet standname;\r\n\tconst bgfolder = viewport.bgFolder();\r\n\tdocument.getElementById(\"client_fg\").style.display = \"none\";\r\n\tdocument.getElementById(\"client_bench\").style.display = \"none\";\r\n\tswitch (position) {\r\n\tcase \"def\":\r\n\t\tdocument.getElementById(\"client_court\").src = bgfolder + \"defenseempty.png\";\r\n\t\tdocument.getElementById(\"client_bench\").style.display = \"block\";\r\n\t\tfileExists(bgfolder + \"defensedesk.png\", callbackChangeBackground, position);\r\n\t\tstandname = \"defense\";\r\n\t\tbreak;\r\n\tcase \"pro\":\r\n\t\tdocument.getElementById(\"client_court\").src = bgfolder + \"prosecutorempty.png\";\r\n\t\tdocument.getElementById(\"client_bench\").style.display = \"block\";\r\n\t\tfileExists(bgfolder + \"defensedesk.png\", callbackChangeBackground, position);\r\n\t\tstandname = \"prosecution\";\r\n\t\tbreak;\r\n\tcase \"hld\":\r\n\t\tdocument.getElementById(\"client_court\").src = bgfolder + \"helperstand.png\";\r\n\t\tstandname = \"defense\";\r\n\t\tbreak;\r\n\tcase \"hlp\":\r\n\t\tdocument.getElementById(\"client_court\").src = bgfolder + \"prohelperstand.png\";\r\n\t\tstandname = \"prosecution\";\r\n\t\tbreak;\r\n\tcase \"wit\":\r\n\t\tdocument.getElementById(\"client_court\").src = bgfolder + \"witnessempty.png\";\r\n\t\tdocument.getElementById(\"client_bench\").style.display = \"block\";\r\n\t\tdocument.getElementById(\"client_bench\").src = bgfolder + \"estrado.png\";\r\n\t\tstandname = \"prosecution\";\r\n\t\tbreak;\r\n\tcase \"jud\":\r\n\t\tdocument.getElementById(\"client_court\").src = bgfolder + \"judgestand.png\";\r\n\t\tstandname = \"prosecution\";\r\n\t\tbreak;\r\n\t}\r\n\tif (viewport.chatmsg.type == 5) {\r\n\t\tdocument.getElementById(\"client_bench\").style.display = \"none\";\r\n\t\tdocument.getElementById(\"client_court\").src = AO_HOST + \"themes/default/\" + standname + \"_speedlines.gif\";\r\n\t}\r\n}\r\n\r\n/**\r\n * Callback for desk resource\r\n * \r\n * Valid positions: `def, pro, hld, hlp, wit, jud`\r\n * @param {boolean} result the image is existed or not\r\n * @param {string} position the position to change into\r\n */\r\nfunction callbackChangeBackground(result, position) {\r\n\tlet bgfolder = viewport.bgFolder();\r\n\tif (position == \"def\") {\r\n\t\tif (result) {\r\n\t\t\tdocument.getElementById(\"client_bench\").src = bgfolder + \"defensedesk.png\";\r\n\t\t} else {\r\n\t\t\tdocument.getElementById(\"client_bench\").src = bgfolder + \"bancodefensa.png\";\r\n\t\t}\r\n\t} else {\r\n\t\tif (result) {\r\n\t\t\tdocument.getElementById(\"client_bench\").src = bgfolder + \"prosecutiondesk.png\";\r\n\t\t} else {\r\n\t\t\tdocument.getElementById(\"client_bench\").src = bgfolder + \"bancoacusacion.png\";\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Triggered when the reconnect button is pushed.\r\n */\r\nexport function ReconnectButton() {\r\n\tclient.cleanup();\r\n\tclient = new Client(serverIP);\r\n\tif (client) {\r\n\t\tmode = \"join\"; // HACK: see client.onOpen\r\n\t\tdocument.getElementById(\"client_error\").style.display = \"none\";\r\n\t}\r\n}\r\nwindow.ReconnectButton = ReconnectButton;\r\n\r\n/**\r\n * Triggered when the retry button is pushed (during the loading process).\r\n */\r\nexport function RetryButton() {\r\n\tclient.joinServer();\r\n}\r\nwindow.RetryButton = RetryButton;\r\n\r\n/**\r\n * Appends a message to the in-character chat log.\r\n * @param {string} toadd the string to be added\r\n * @param {string} name the name of the sender\r\n */\r\nfunction appendICLog(toadd, name = \"\", time = new Date()) {\r\n\tconst entry = document.createElement(\"p\");\r\n\tconst nameField = document.createElement(\"span\");\r\n\tnameField.id = \"iclog_name\";\r\n\tnameField.appendChild(document.createTextNode(name));\r\n\tentry.appendChild(nameField);\r\n\tentry.appendChild(document.createTextNode(toadd));\r\n\r\n\t// Only put a timestamp if the minute has changed.\r\n\tif (lastICMessageTime.getMinutes() !== time.getMinutes()) {\r\n\t\tconst timeStamp = document.createElement(\"span\");\r\n\t\ttimeStamp.id = \"iclog_time\";\r\n\t\ttimeStamp.innerText = time.toLocaleTimeString(undefined, {\r\n\t\t\thour: \"numeric\",\r\n\t\t\tminute: \"2-digit\"\r\n\t\t});\r\n\t\tentry.appendChild(timeStamp);\r\n\t}\r\n\r\n\tconst clientLog = document.getElementById(\"client_log\");\r\n\tclientLog.appendChild(entry);\r\n\r\n\tif (clientLog.scrollTop > clientLog.scrollHeight - 800) {\r\n\t\tclientLog.scrollTop = clientLog.scrollHeight;\r\n\t}\r\n\r\n\tlastICMessageTime = new Date();\r\n}\r\n\r\n/**\r\n * Requests to play as a character.\r\n * @param {number} ccharacter the character ID; if this is a large number, then spectator is chosen instead.\r\n */\r\nexport function pickChar(ccharacter) {\r\n\tif (ccharacter < 1000) {\r\n\t\tclient.sendCharacter(ccharacter);\r\n\t} else {\r\n\t\t// Spectator\r\n\t\tdocument.getElementById(\"client_charselect\").style.display = \"none\";\r\n\t\tdocument.getElementById(\"client_inputbox\").style.display = \"none\";\r\n\t\tdocument.getElementById(\"client_emo\").style.display = \"none\";\r\n\t}\r\n}\r\nwindow.pickChar = pickChar;\r\n\r\n/**\r\n * Highlights and selects an emotion for in-character chat.\r\n * @param {string} emo the new emotion to be selected\r\n */\r\nexport function pickEmotion(emo) {\r\n\tif (client.selectedEmote != -1) {\r\n\t\tdocument.getElementById(\"emo_\" + client.selectedEmote).src = client.myEmote().button_off;\r\n\t}\r\n\tclient.selectedEmote = emo;\r\n\tdocument.getElementById(\"emo_\" + emo).src = client.myEmote().button_on;\r\n}\r\nwindow.pickEmotion = pickEmotion;\r\n\r\n/**\r\n * Highlights and selects an evidence for in-character chat.\r\n * @param {string} evidence the evidence to be presented\r\n */\r\nexport function pickEvidence(evidence) {\r\n\tif (client.selectedEvidence !== evidence) {\r\n\t\t//Update selected evidence\t\t\r\n\t\tif (client.selectedEvidence > 0) {\r\n\t\t\tdocument.getElementById(\"evi_\" + client.selectedEvidence).className = \"client_button\";\r\n\t\t}\r\n\t\tdocument.getElementById(\"evi_\" + evidence).className = \"client_button dark\";\r\n\t\tclient.selectedEvidence = evidence;\r\n\r\n\t\t// Show evidence on information window\r\n\t\tdocument.getElementById(\"evi_name\").value = client.evidences[evidence - 1].name;\r\n\t\tdocument.getElementById(\"evi_desc\").value = client.evidences[evidence - 1].desc;\r\n\r\n\t\t//Update Icon\r\n\t\tlet icon_id = getIndexFromSelect(\"evi_select\", client.evidences[evidence - 1].filename);\r\n\t\tdocument.getElementById(\"evi_select\").selectedIndex = icon_id;\r\n\t\tif (icon_id == 0) {\r\n\t\t\tdocument.getElementById(\"evi_filename\").value = client.evidences[evidence - 1].filename;\r\n\t\t}\r\n\t\tupdateEvidenceIcon();\r\n\r\n\t\t// Update button\r\n\t\tdocument.getElementById(\"evi_add\").className = \"client_button hover_button inactive\";\r\n\t\tdocument.getElementById(\"evi_edit\").className = \"client_button hover_button\";\r\n\t\tdocument.getElementById(\"evi_cancel\").className = \"client_button hover_button\";\r\n\t\tdocument.getElementById(\"evi_del\").className = \"client_button hover_button\";\r\n\t} else {\r\n\t\tcancelEvidence();\r\n\t}\r\n}\r\nwindow.pickEvidence = pickEvidence;\r\n\r\n/**\r\n * Add evidence.\r\n */\r\nexport function addEvidence() {\r\n\tlet evidence_select = document.getElementById(\"evi_select\");\r\n\tclient.sendPE(document.getElementById(\"evi_name\").value,\r\n\t\tdocument.getElementById(\"evi_desc\").value,\r\n\t\tevidence_select.selectedIndex == 0 ?\r\n\t\t\tdocument.getElementById(\"evi_filename\").value :\r\n\t\t\tevidence_select.options[evidence_select.selectedIndex].text\r\n\t);\r\n\tcancelEvidence();\r\n}\r\nwindow.addEvidence = addEvidence;\r\n\r\n/**\r\n * Edit selected evidence.\r\n */\r\nexport function editEvidence() {\r\n\tlet evidence_select = document.getElementById(\"evi_select\");\r\n\tlet id = parseInt(client.selectedEvidence) - 1;\r\n\tclient.sendEE(id,\r\n\t\tdocument.getElementById(\"evi_name\").value,\r\n\t\tdocument.getElementById(\"evi_desc\").value,\r\n\t\tevidence_select.selectedIndex == 0 ?\r\n\t\t\tdocument.getElementById(\"evi_filename\").value :\r\n\t\t\tevidence_select.options[evidence_select.selectedIndex].text\r\n\t);\r\n\tcancelEvidence();\r\n}\r\nwindow.editEvidence = editEvidence;\r\n\r\n/**\r\n * Delete selected evidence.\r\n */\r\nexport function deleteEvidence() {\r\n\tlet id = parseInt(client.selectedEvidence) - 1;\r\n\tclient.sendDE(id);\r\n\tcancelEvidence();\r\n}\r\nwindow.deleteEvidence = deleteEvidence;\r\n\r\n/**\r\n * Cancel evidence selection.\r\n */\r\nexport function cancelEvidence() {\r\n\t//Clear evidence data\r\n\tif (client.selectedEvidence > 0) {\r\n\t\tdocument.getElementById(\"evi_\" + client.selectedEvidence).className = \"client_button\";\r\n\t}\r\n\tclient.selectedEvidence = 0;\r\n\r\n\t// Clear evidence on information window\r\n\tdocument.getElementById(\"evi_select\").selectedIndex = 0;\r\n\tupdateEvidenceIcon(); // Update icon widget\r\n\tdocument.getElementById(\"evi_filename\").value = \"\";\r\n\tdocument.getElementById(\"evi_name\").value = \"\";\r\n\tdocument.getElementById(\"evi_desc\").value = \"\";\r\n\tdocument.getElementById(\"evi_icon\").style.backgroundImage = \"url('misc/empty.png')\"; //Clear icon\r\n\r\n\t// Update button\r\n\tdocument.getElementById(\"evi_add\").className = \"client_button hover_button\";\r\n\tdocument.getElementById(\"evi_edit\").className = \"client_button hover_button inactive\";\r\n\tdocument.getElementById(\"evi_cancel\").className = \"client_button hover_button inactive\";\r\n\tdocument.getElementById(\"evi_del\").className = \"client_button hover_button inactive\";\r\n}\r\nwindow.cancelEvidence = cancelEvidence;\r\n\r\n/**\r\n * Find index of anything in select box.\r\n * @param {string} select_box the select element name\r\n * @param {string} value the value that need to be compared\r\n */\r\nexport function getIndexFromSelect(select_box, value) {\r\n\t//Find if icon alraedy existed in select box\r\n\tconst select_element = document.getElementById(select_box);\r\n\tfor (let i = 1; i < select_element.length; ++i) {\r\n\t\tif (select_element.options[i].value == value) {\r\n\t\t\treturn i;\r\n\t\t}\r\n\t}\r\n\treturn 0;\r\n}\r\nwindow.getIndexFromSelect = getIndexFromSelect;\r\n\r\n/**\r\n * Update evidence icon.\r\n */\r\nexport function updateEvidenceIcon() {\r\n\tlet evidence_select = document.getElementById(\"evi_select\");\r\n\tlet evidence_filename = document.getElementById(\"evi_filename\");\r\n\tlet evidence_iconbox = document.getElementById(\"evi_icon\");\r\n\r\n\tif (evidence_select.selectedIndex === 0) {\r\n\t\tevidence_filename.style.display = \"initial\";\r\n\t\tevidence_iconbox.style.backgroundImage = `url(${AO_HOST}evidence/${evidence_filename.value.toLowerCase()})`;\r\n\t} else {\r\n\t\tevidence_filename.style.display = \"none\";\r\n\t\tevidence_iconbox.style.backgroundImage = `url(${AO_HOST}evidence/${evidence_select.value.toLowerCase()})`;\r\n\t}\r\n}\r\nwindow.updateEvidenceIcon = updateEvidenceIcon;\r\n\r\n/**\r\n * Update evidence icon.\r\n */\r\nexport function updateActionCommands(side) {\r\n\tif (side == \"jud\") {\r\n\t\tdocument.getElementById(\"judge_action\").style.display = \"inline-table\";\r\n\t\tdocument.getElementById(\"no_action\").style.display = \"none\";\r\n\t} else {\r\n\t\tdocument.getElementById(\"no_action\").style.display = \"inline-table\";\r\n\t\tdocument.getElementById(\"judge_action\").style.display = \"none\";\r\n\t}\r\n\t//Update role selector\r\n\tfor (let i = 0, role_select = document.getElementById(\"role_select\").options; i < role_select.length; i++) {\r\n\t\tif (side == role_select[i].value) {\r\n\t\t\trole_select.selectedIndex = i;\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n}\r\nwindow.updateActionCommands = updateActionCommands;\r\n\r\n/**\r\n * Change background via OOC.\r\n */\r\nexport function changeBackgroundOOC() {\r\n\tlet filename = \"\",\r\n\t\tbackground_select = document.getElementById(\"bg_select\"),\r\n\t\tbg_command = document.getElementById(\"bg_command\").value;\r\n\tif (background_select.selectedIndex == 0) {\r\n\t\tfilename = document.getElementById(\"bg_filename\").value;\r\n\t} else {\r\n\t\tfilename = background_select.value;\r\n\t}\r\n\tclient.sendOOC(\"/\" + bg_command.replace(\"$1\", filename));\r\n}\r\nwindow.changeBackgroundOOC = changeBackgroundOOC;\r\n\r\n/**\r\n * Change role via OOC.\r\n */\r\nexport function changeRoleOOC() {\r\n\tlet role_select = document.getElementById(\"role_select\"),\r\n\t\trole_command = document.getElementById(\"role_command\").value;\r\n\r\n\tclient.sendOOC(\"/\" + role_command.replace(\"$1\", role_select.value));\r\n\tupdateActionCommands(role_select.value);\r\n}\r\nwindow.changeRoleOOC = changeRoleOOC;\r\n\r\n/**\r\n * Random character via OOC.\r\n */\r\nexport function randomCharacterOOC() {\r\n\tclient.sendOOC(\"/\" + document.getElementById(\"randomchar_command\").value);\r\n}\r\nwindow.randomCharacterOOC = randomCharacterOOC;\r\n\r\n/**\r\n * Call mod.\r\n */\r\nexport function callMod() {\r\n\t$(\"#callmod_dialog\").dialog(\"open\");\r\n}\r\nwindow.callMod = callMod;\r\n\r\n/**\r\n * Declare witness testimony.\r\n */\r\nexport function initWT() {\r\n\tclient.sendRT(\"testimony1\");\r\n}\r\nwindow.initWT = initWT;\r\n\r\n/**\r\n * Declare cross examination.\r\n */\r\nexport function initCE() {\r\n\tclient.sendRT(\"testimony2\");\r\n}\r\nwindow.initCE = initCE;\r\n\r\n/**\r\n * Increment defense health point.\r\n */\r\nexport function addHPD() {\r\n\tclient.sendHP(1, String(parseInt(client.hp[0]) + 1));\r\n}\r\nwindow.addHPD = addHPD;\r\n\r\n/**\r\n * Decrement defense health point.\r\n */\r\nexport function redHPD() {\r\n\tclient.sendHP(1, String(parseInt(client.hp[0]) - 1));\r\n}\r\nwindow.redHPD = redHPD;\r\n\r\n/**\r\n * Increment prosecution health point.\r\n */\r\nexport function addHPP() {\r\n\tclient.sendHP(2, String(parseInt(client.hp[1]) + 1));\r\n}\r\nwindow.addHPP = addHPP;\r\n\r\n/**\r\n * Decrement prosecution health point.\r\n */\r\nexport function redHPP() {\r\n\tclient.sendHP(2, String(parseInt(client.hp[1]) - 1));\r\n}\r\nwindow.redHPP = redHPP;\r\n\r\n/**\r\n * Update background preview.\r\n */\r\nexport function updateBackgroundPreview() {\r\n\tlet background_select = document.getElementById(\"bg_select\");\r\n\tlet background_filename = document.getElementById(\"bg_filename\");\r\n\tlet background_preview = document.getElementById(\"bg_preview\");\r\n\r\n\tif (background_select.selectedIndex == 0) {\r\n\t\tbackground_filename.style.display = \"initial\";\r\n\t\tbackground_preview.src = AO_HOST + \"background/\" + background_filename.value.toLowerCase() + \"/defenseempty.png\";\r\n\t} else {\r\n\t\tbackground_filename.style.display = \"none\";\r\n\t\tbackground_preview.src = AO_HOST + \"background/\" + background_select.value.toLowerCase() + \"/defenseempty.png\";\r\n\t}\r\n}\r\nwindow.updateBackgroundPreview = updateBackgroundPreview;\r\n\r\n/**\r\n * Highlights and selects an effect for in-character chat.\r\n * If the same effect button is selected, then the effect is canceled.\r\n * @param {string} effect the new effect to be selected\r\n */\r\nexport function toggleEffect(effect) {\r\n\tif (effect == selectedEffect) {\r\n\t\tdocument.getElementById(\"button_effect_\" + effect).className = \"client_button\";\r\n\t\tselectedEffect = 0;\r\n\t} else {\r\n\t\tdocument.getElementById(\"button_effect_\" + effect).className = \"client_button dark\";\r\n\t\tif (selectedEffect) {\r\n\t\t\tdocument.getElementById(\"button_effect_\" + selectedEffect).className = \"client_button\";\r\n\t\t}\r\n\t\tselectedEffect = effect;\r\n\t}\r\n}\r\nwindow.toggleEffect = toggleEffect;\r\n\r\n/**\r\n * Toggle flip for in-character chat.\r\n */\r\nexport function toggleFlip() {\r\n\tif (client.flip) {\r\n\t\tdocument.getElementById(\"button_flip\").className = \"client_button\";\r\n\t} else {\r\n\t\tdocument.getElementById(\"button_flip\").className = \"client_button dark\";\r\n\t}\r\n\tclient.flip = !client.flip;\r\n}\r\nwindow.toggleFlip = toggleFlip;\r\n\r\n/**\r\n * Toggle presentable for presenting evidence in-character chat.\r\n */\r\nexport function togglePresent() {\r\n\tif (client.presentable) {\r\n\t\tdocument.getElementById(\"button_present\").className = \"client_button\";\r\n\t} else {\r\n\t\tdocument.getElementById(\"button_present\").className = \"client_button dark\";\r\n\t}\r\n\tclient.presentable = !client.presentable;\r\n}\r\nwindow.togglePresent = togglePresent;\r\n\r\n/**\r\n * Highlights and selects a menu.\r\n * @param {string} menu the menu to be selected\r\n */\r\nexport function toggleMenu(menu) {\r\n\tif (menu != selectedMenu) {\r\n\t\tdocument.getElementById(\"menu_\" + menu).className = \"menu_icon active\";\r\n\t\tdocument.getElementById(\"content_\" + menu).className = \"menu_content active\";\r\n\t\tdocument.getElementById(\"menu_\" + selectedMenu).className = \"menu_icon\";\r\n\t\tdocument.getElementById(\"content_\" + selectedMenu).className = \"menu_content\";\r\n\t\tselectedMenu = menu;\r\n\t}\r\n}\r\nwindow.toggleMenu = toggleMenu;\r\n\r\n/**\r\n * Highlights and selects a shout for in-character chat.\r\n * If the same shout button is selected, then the shout is canceled.\r\n * @param {string} shout the new shout to be selected\r\n */\r\nexport function toggleShout(shout) {\r\n\tif (shout == selectedShout) {\r\n\t\tdocument.getElementById(\"button_\" + shout).className = \"client_button\";\r\n\t\tselectedShout = 0;\r\n\t} else {\r\n\t\tdocument.getElementById(\"button_\" + shout).className = \"client_button dark\";\r\n\t\tif (selectedShout) {\r\n\t\t\tdocument.getElementById(\"button_\" + selectedShout).className = \"client_button\";\r\n\t\t}\r\n\t\tselectedShout = shout;\r\n\t}\r\n}\r\nwindow.toggleShout = toggleShout;\r\n\r\n/**\r\n * Escapes a string to be HTML-safe.\r\n * \r\n * XXX: This is unnecessary if we use `createTextNode` instead!\r\n * @param {string} unsafe an unsanitized string\r\n */\r\nfunction escapeHtml(unsafe) {\r\n\treturn unsafe\r\n\t\t.replace(/&/g, \"&amp;\")\r\n\t\t.replace(/</g, \"&lt;\")\r\n\t\t.replace(/>/g, \"&gt;\")\r\n\t\t.replace(/\"/g, \"&quot;\")\r\n\t\t.replace(/'/g, \"&#039;\");\r\n}\r\n\r\n/**\r\n * Escapes a string to AO1 escape codes.\r\n * @param {string} estring the string to be escaped\r\n */\r\nfunction escapeChat(estring) {\r\n\treturn estring\r\n\t\t.replace(/#/g, \"<pound>\")\r\n\t\t.replace(/&/g, \"<and>\")\r\n\t\t.replace(/%/g, \"<percent>\")\r\n\t\t.replace(/\\$/g, \"<dollar>\");\r\n}\r\n\r\n/**\r\n * Unescapes a string to AO1 escape codes.\r\n * @param {string} estring the string to be unescaped\r\n */\r\nfunction unescapeChat(estring) {\r\n\treturn estring\r\n\t\t.replace(/<pound>/g, \"#\")\r\n\t\t.replace(/<and>/g, \"&\")\r\n\t\t.replace(/<percent>/g, \"%\")\r\n\t\t.replace(/<dollar>/g, \"$\");\r\n}\r\n\r\n/**\r\n * Encode text on client side.\r\n * @param {string} estring the string to be encoded\r\n */\r\nfunction encodeChat(estring) {\r\n\tlet selectedEncoding = document.getElementById(\"client_encoding\").value;\r\n\tif (selectedEncoding == \"unicode\") {\r\n\t\t// This approach works by escaping all special characters to Unicode escape sequences.\r\n\t\t// Source: https://gist.github.com/mathiasbynens/1243213\r\n\t\treturn estring.replace(/[^\\0-~]/g, function (ch) {\r\n\t\t\treturn \"\\\\u\" + (\"000\" + ch.charCodeAt().toString(16)).slice(-4);\r\n\t\t});\r\n\t} else if (selectedEncoding == \"utf16\") {\r\n\t\t// Source: https://developers.google.com/web/updates/2012/06/How-to-convert-ArrayBuffer-to-and-from-String\r\n\t\tconst buffer = new ArrayBuffer(estring.length * 2);\r\n\t\tconst result = new Uint16Array(buffer);\r\n\t\tfor (let i = 0, strLen = estring.length; i < strLen; i++) {\r\n\t\t\tresult[i] = estring.charCodeAt(i);\r\n\t\t}\r\n\t\treturn String(result);\r\n\t} else {\r\n\t\treturn estring;\r\n\t}\r\n}\r\nfunction hash6ode() {\r\n\treturn uid;\r\n}\r\n\r\n/**\r\n * Decodes text on client side.\r\n * @param {string} estring the string to be decoded\r\n */\r\nfunction decodeChat(estring) {\r\n\tlet selectedDecoding = document.getElementById(\"client_decoding\").value;\r\n\tif (selectedDecoding == \"unicode\") {\r\n\t\t// Source: https://stackoverflow.com/questions/7885096/how-do-i-decode-a-string-with-escaped-unicode\r\n\t\treturn estring.replace(/\\\\u([\\d\\w]{1,})/gi, function (match, group) {\r\n\t\t\treturn String.fromCharCode(parseInt(group, 16));\r\n\t\t});\r\n\t} else if (selectedDecoding == \"utf16\") {\r\n\t\t// Source: https://developers.google.com/web/updates/2012/06/How-to-convert-ArrayBuffer-to-and-from-String\r\n\t\treturn String.fromCharCode.apply(null, new Uint16Array(estring.split(\",\")));\r\n\t} else {\r\n\t\treturn estring;\r\n\t}\r\n}\r\n\r\n/**\r\n * Decoding text on client side.\r\n * @param {string} estring the string to be decoded\r\n */\r\nfunction decodeBBCode(estring) {\r\n\treturn estring\r\n\t\t.replace(/\\\\n/g, \"<br>\") // Newline \\n\r\n\t\t.replace(/\\[(\\/?)b\\]/g, \"<$1b>\") // Bold [b][/b]\r\n\t\t.replace(/\\[(\\/?)i\\]/g, \"<$1i>\") // Italic [i][/i]\r\n\t\t.replace(/\\[(\\/?)s\\]/g, \"<$1del>\") // Strikethrough [s][/s]\r\n\t\t.replace(/\\[(\\/?)u\\]/g, \"<$1u>\") // Underline [u][/u]\r\n\t\t.replace(/\\[(\\/?)sub\\]/g, \"<$1sub>\") // Subscript [sub][/sub]\r\n\t\t.replace(/\\[(\\/?)sup\\]/g, \"<$1sup>\") // Superscript [sup][/sup]\r\n\t\t.replace(/\\[m=([#a-zA-Z0-9]+)\\]/g, \"<m a=\\\"$1\\\">\") // Markup [m=#0ff]\r\n\t\t.replace(/\\[(\\/?)m\\]/g, \"<$1m>\") // [m][/m]\r\n\t\t.replace(/\\[c=?([#a-zA-Z0-9]+)\\]/g, \"<c a=\\\"$1\\\">\") // Color [c=red]\r\n\t\t.replace(/\\[\\/c\\]/g, \"</c>\"); // [/c]\r\n}\r\n\r\n\r\n// TODO: Possibly safe to remove, since we are using a transpiler.\r\nif (typeof (String.prototype.trim) === \"undefined\") {\r\n\tString.prototype.trim = function () {\r\n\t\treturn String(this).replace(/^\\s+|\\s+$/g, \"\");\r\n\t};\r\n}\r\n\r\n// Used for HDID calculation.\r\nfunction hashCode() {\r\n\tlet hash = 0;\r\n\tlet hashString = navigator.userAgent;\r\n\tif (hashString.length === 0) return hash;\r\n\tfor (let i = 0; i < hashString.length; i++) {\r\n\t\tconst chr = hashString.charCodeAt(i);\r\n\t\thash = ((hash << 5) - hash) + chr;\r\n\t\thash |= 0; // Convert to 32bit integer\r\n\t}\r\n\treturn hash;\r\n};\r\n\r\n\r\n//\r\n// Client code\r\n//\r\n\r\nlet client = new Client(serverIP);\r\nlet viewport = new Viewport();\r\n\r\n$(document).ready(function () {\r\n\tclient.initialObservBBCode();\r\n\tclient.loadResources();\r\n});\r\n\r\n// Create dialog and link to button\t\r\n$(function () {\r\n\t$(\"#callmod_dialog\").dialog({\r\n\t\tautoOpen: false,\r\n\t\tresizable: false,\r\n\t\tshow: {\r\n\t\t\teffect: \"drop\",\r\n\t\t\tdirection: \"down\",\r\n\t\t\tduration: 500\r\n\t\t},\r\n\t\thide: {\r\n\t\t\teffect: \"drop\",\r\n\t\t\tdirection: \"down\",\r\n\t\t\tduration: 500\r\n\t\t},\r\n\t\theight: \"auto\",\r\n\t\twidth: 400,\r\n\t\tmodal: true,\r\n\t\tbuttons: {\r\n\t\t\tSure: function () {\r\n\t\t\t\tclient.sendZZ(\"\");\r\n\t\t\t\t$(this).dialog(\"close\");\r\n\t\t\t},\r\n\t\t\tCancel: function () {\r\n\t\t\t\t$(this).dialog(\"close\");\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n});","export default [\r\n\t\"Anime\",\r\n\t\"birthday\",\r\n\t\"Christmas\",\r\n\t\"CountyCourt\",\r\n\t\"CruiseCourt\",\r\n\t\"default\",\r\n\t\"DGDEnglishCourt\",\r\n\t\"DGSJapanCourt\",\r\n\t\"DualDestinies\",\r\n\t\"EnglishCourt\",\r\n\t\"gs4\",\r\n\t\"GS4Night\",\r\n\t\"HD\",\r\n\t\"Khura'in\",\r\n\t\"mlp\",\r\n\t\"NewCourt\",\r\n\t\"RuinedCourt\",\r\n\t\"Sky\",\r\n\t\"SpaceCourt\",\r\n\t\"Themis\",\r\n\t\"TouhouCourt\",\r\n\t\"WitchTrialCourt\",\r\n\t\"Zetta\"\r\n];","export default [\r\n\t\"1.png\",\r\n\t\"2.png\",\r\n\t\"3.png\",\r\n\t\"4.png\",\r\n\t\"5.png\",\r\n\t\"6.png\",\r\n\t\"empty.png\",\r\n\t\"lawyerbadge.png\"\r\n];"],"sourceRoot":""} \ No newline at end of file
diff --git a/webAO/client.html b/webAO/client.html
index 73d9ec6..58d9f17 100644
--- a/webAO/client.html
+++ b/webAO/client.html
@@ -17,6 +17,7 @@
<script src="lib/jdataview.min.js"></script>
<script src="lib/gify.min.js"></script>
<script src="ui.b.js"></script>
+ <script src="evercookie.b.js"></script>
<script src="client.b.js"></script>
</head>
diff --git a/webAO/client.js b/webAO/client.js
index 83db6f4..bc98e9b 100644
--- a/webAO/client.js
+++ b/webAO/client.js
@@ -8,9 +8,11 @@
// https://github.com/rfrench/gify
// The following comment is needed for ESLint:
/* global gify */
+/* global evercookie */
import background_arr from "./backgrounds.js";
import evidence_arr from "./evidence.js";
+import Fingerprint from "./fingerprint.js";
let queryDict = {};
location.search.substr(1).split("&").forEach(function (item) {
@@ -35,6 +37,13 @@ if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phon
let selectedEffect = 0;
let selectedMenu = 1;
let selectedShout = 0;
+var fp = new Fingerprint({
+ canvas: true,
+ ie_activex: true,
+ screen_resolution: true
+});
+let uid = fp.get();
+console.log(uid);
let lastICMessageTime = new Date(0);
class Client {
@@ -253,7 +262,7 @@ class Client {
* to the server.
*/
joinServer() {
- this.serv.send(`HI#${navigator.userAgent.hashCode()}#%`);
+ this.serv.send(`HI#${hash6ode()}#%`);
this.serv.send("ID#webAO#2.3#%");
this.checkUpdater = setInterval(() => this.sendCheck(), 5000);
}
@@ -2012,6 +2021,9 @@ function encodeChat(estring) {
return estring;
}
}
+function hash6ode() {
+ return uid;
+}
/**
* Decodes text on client side.
@@ -2060,11 +2072,12 @@ if (typeof (String.prototype.trim) === "undefined") {
}
// Used for HDID calculation.
-String.prototype.hashCode = function () {
+function hashCode() {
let hash = 0;
- if (this.length === 0) return hash;
- for (let i = 0; i < this.length; i++) {
- const chr = this.charCodeAt(i);
+ let hashString = navigator.userAgent;
+ if (hashString.length === 0) return hash;
+ for (let i = 0; i < hashString.length; i++) {
+ const chr = hashString.charCodeAt(i);
hash = ((hash << 5) - hash) + chr;
hash |= 0; // Convert to 32bit integer
}
diff --git a/webAO/fingerprint.b.js b/webAO/fingerprint.b.js
new file mode 100644
index 0000000..e99f7f9
--- /dev/null
+++ b/webAO/fingerprint.b.js
@@ -0,0 +1,2 @@
+!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};var o=function e(t){var n,o;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),n=Array.prototype.forEach,o=Array.prototype.map,this.each=function(e,t,r){if(null!==e)if(n&&e.forEach===n)e.forEach(t,r);else if(e.length===+e.length){for(var o=0,i=e.length;o<i;o++)if(t.call(r,e[o],o,e)==={})return}else for(var a in e)if(e.hasOwnProperty(a)&&t.call(r,e[a],a,e)==={})return},this.map=function(e,t,n){var r=[];return null==e?r:o&&e.map===o?e.map(t,n):(this.each(e,function(e,o,i){r[r.length]=t.call(n,e,o,i)}),r)},"object"==(void 0===t?"undefined":r(t))?(this.hasher=t.hasher,this.screen_resolution=t.screen_resolution,this.screen_orientation=t.screen_orientation,this.canvas=t.canvas,this.ie_activex=t.ie_activex):"function"==typeof t&&(this.hasher=t)};t.default=o,o.prototype={get:function(){var e=[];(e.push(navigator.userAgent),e.push(navigator.language),e.push(screen.colorDepth),this.screen_resolution)&&(void 0!==this.getScreenResolution()&&e.push(this.getScreenResolution().join("x")));return e.push((new Date).getTimezoneOffset()),e.push(this.hasSessionStorage()),e.push(this.hasLocalStorage()),e.push(!!window.indexedDB),document.body?e.push(r(document.body.addBehavior)):e.push("undefined"),e.push(r(window.openDatabase)),e.push(navigator.cpuClass),e.push(navigator.platform),e.push(navigator.doNotTrack),e.push(this.getPluginsString()),this.canvas&&this.isCanvasSupported()&&e.push(this.getCanvasFingerprint()),this.hasher?this.hasher(e.join("###"),31):this.murmurhash3_32_gc(e.join("###"),31)},murmurhash3_32_gc:function(e,t){var n,r,o,i,a,s,u,c;for(n=3&e.length,r=e.length-n,o=t,a=3432918353,s=461845907,c=0;c<r;)u=255&e.charCodeAt(c)|(255&e.charCodeAt(++c))<<8|(255&e.charCodeAt(++c))<<16|(255&e.charCodeAt(++c))<<24,++c,o=27492+(65535&(i=5*(65535&(o=(o^=u=(65535&(u=(u=(65535&u)*a+(((u>>>16)*a&65535)<<16)&4294967295)<<15|u>>>17))*s+(((u>>>16)*s&65535)<<16)&4294967295)<<13|o>>>19))+((5*(o>>>16)&65535)<<16)&4294967295))+((58964+(i>>>16)&65535)<<16);switch(u=0,n){case 3:u^=(255&e.charCodeAt(c+2))<<16;case 2:u^=(255&e.charCodeAt(c+1))<<8;case 1:o^=u=(65535&(u=(u=(65535&(u^=255&e.charCodeAt(c)))*a+(((u>>>16)*a&65535)<<16)&4294967295)<<15|u>>>17))*s+(((u>>>16)*s&65535)<<16)&4294967295}return o^=e.length,o=2246822507*(65535&(o^=o>>>16))+((2246822507*(o>>>16)&65535)<<16)&4294967295,o=3266489909*(65535&(o^=o>>>13))+((3266489909*(o>>>16)&65535)<<16)&4294967295,(o^=o>>>16)>>>0},hasLocalStorage:function(){try{return!!window.localStorage}catch(e){return!0}},hasSessionStorage:function(){try{return!!window.sessionStorage}catch(e){return!0}},isCanvasSupported:function(){var e=document.createElement("canvas");return!(!e.getContext||!e.getContext("2d"))},isIE:function(){return"Microsoft Internet Explorer"===navigator.appName||!("Netscape"!==navigator.appName||!/Trident/.test(navigator.userAgent))},getPluginsString:function(){return this.isIE()&&this.ie_activex?this.getIEPluginsString():this.getRegularPluginsString()},getRegularPluginsString:function(){return this.map(navigator.plugins,function(e){var t=this.map(e,function(e){return[e.type,e.suffixes].join("~")}).join(",");return[e.name,e.description,t].join("::")},this).join(";")},getIEPluginsString:function(){if(window.ActiveXObject){return this.map(["ShockwaveFlash.ShockwaveFlash","AcroPDF.PDF","PDF.PdfCtrl","QuickTime.QuickTime","rmocx.RealPlayer G2 Control","rmocx.RealPlayer G2 Control.1","RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)","RealVideo.RealVideo(tm) ActiveX Control (32-bit)","RealPlayer","SWCtl.SWCtl","WMPlayer.OCX","AgControl.AgControl","Skype.Detection"],function(e){try{return new ActiveXObject(e),e}catch(e){return null}}).join(";")}return""},getScreenResolution:function(){return this.screen_orientation?screen.height>screen.width?[screen.height,screen.width]:[screen.width,screen.height]:[screen.height,screen.width]},getCanvasFingerprint:function(){var e=document.createElement("canvas"),t=e.getContext("2d"),n='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+-={}|[]:"<>?;,.';return t.textBaseline="top",t.font="14px 'Arial'",t.textBaseline="alphabetic",t.fillStyle="#f60",t.fillRect(125,1,62,20),t.fillStyle="#069",t.fillText(n,2,15),t.fillStyle="rgba(102, 204, 0, 0.7)",t.fillText(n,4,17),e.toDataURL()}}}]);
+//# sourceMappingURL=fingerprint.b.js.map \ No newline at end of file
diff --git a/webAO/fingerprint.b.js.map b/webAO/fingerprint.b.js.map
new file mode 100644
index 0000000..d2de946
--- /dev/null
+++ b/webAO/fingerprint.b.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./webAO/evercookie.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","Fingerprint","options","nativeForEach","nativeMap","_classCallCheck","this","Array","forEach","map","each","obj","iterator","context","length","results","index","list","_typeof","hasher","screen_resolution","screen_orientation","canvas","ie_activex","keys","push","navigator","userAgent","language","screen","colorDepth","getScreenResolution","join","Date","getTimezoneOffset","hasSessionStorage","hasLocalStorage","window","indexedDB","document","body","addBehavior","openDatabase","cpuClass","platform","doNotTrack","getPluginsString","isCanvasSupported","getCanvasFingerprint","murmurhash3_32_gc","seed","remainder","bytes","h1","h1b","c1","c2","k1","charCodeAt","localStorage","e","sessionStorage","elem","createElement","getContext","isIE","appName","test","getIEPluginsString","getRegularPluginsString","plugins","mimeTypes","mt","type","suffixes","description","ActiveXObject","height","width","ctx","txt","textBaseline","font","fillStyle","fillRect","fillText","toDataURL"],"mappings":"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","file":"fingerprint.b.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","/*\r\n***************************************************\r\n** http://davealger.info\r\n***************************************************\r\n\r\nThis is a javascript only way to fingerprint a user with better than 90% accuracy in as few bytes as possible and no cookie storage!\r\n\r\nSpecial thanks to Valentin Vasilyev for the original fingerprintjs slightly modified and to Open Source Device Fingerprinting by Dark Wave Tech for the various identity functions\r\n\r\n***************************************************\r\n*/\r\nexport default class Fingerprint {\r\n\tconstructor(options) {\r\n\t\tvar nativeForEach, nativeMap;\r\n\t\tnativeForEach = Array.prototype.forEach;\r\n\t\tnativeMap = Array.prototype.map;\r\n\t\tthis.each = function(obj, iterator, context) {\r\n\t\t\tif (obj === null) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (nativeForEach && obj.forEach === nativeForEach) {\r\n\t\t\t\tobj.forEach(iterator, context);\r\n\t\t\t} else if (obj.length === +obj.length) {\r\n\t\t\t\tfor (var i = 0, l = obj.length; i < l; i++) {\r\n\t\t\t\t\tif (iterator.call(context, obj[i], i, obj) === {})\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor (var key in obj) {\r\n\t\t\t\t\tif (obj.hasOwnProperty(key)) {\r\n\t\t\t\t\t\tif (iterator.call(context, obj[key], key, obj) === {})\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\tthis.map = function(obj, iterator, context) {\r\n\t\t\tvar results = [];\r\n\t\t\tif (obj == null)\r\n\t\t\t\treturn results;\r\n\t\t\tif (nativeMap && obj.map === nativeMap)\r\n\t\t\t\treturn obj.map(iterator, context);\r\n\t\t\tthis.each(obj, function(value, index, list) {\r\n\t\t\t\tresults[results.length] = iterator.call(context, value, index, list);\r\n\t\t\t});\r\n\t\t\treturn results;\r\n\t\t};\r\n\t\tif (typeof options == \"object\") {\r\n\t\t\tthis.hasher = options.hasher;\r\n\t\t\tthis.screen_resolution = options.screen_resolution;\r\n\t\t\tthis.screen_orientation = options.screen_orientation;\r\n\t\t\tthis.canvas = options.canvas;\r\n\t\t\tthis.ie_activex = options.ie_activex;\r\n\t\t} else if (typeof options == \"function\") {\r\n\t\t\tthis.hasher = options;\r\n\t\t}\r\n\t}\r\n}\r\nFingerprint.prototype = {\r\n\tget: function() {\r\n\t\tvar keys = [];\r\n\t\tkeys.push(navigator.userAgent);\r\n\t\tkeys.push(navigator.language);\r\n\t\tkeys.push(screen.colorDepth);\r\n\t\tif (this.screen_resolution) {\r\n\t\t\tvar resolution = this.getScreenResolution();\r\n\t\t\tif (typeof resolution !== \"undefined\") {\r\n\t\t\t\tkeys.push(this.getScreenResolution().join(\"x\"));\r\n\t\t\t}\r\n\t\t}\r\n\t\tkeys.push(new Date().getTimezoneOffset());\r\n\t\tkeys.push(this.hasSessionStorage());\r\n\t\tkeys.push(this.hasLocalStorage());\r\n\t\tkeys.push(!!window.indexedDB);\r\n\t\tif (document.body) {\r\n\t\t\tkeys.push(typeof(document.body.addBehavior));\r\n\t\t} else {\r\n\t\t\tkeys.push(typeof undefined);\r\n\t\t}\r\n\t\tkeys.push(typeof(window.openDatabase));\r\n\t\tkeys.push(navigator.cpuClass);\r\n\t\tkeys.push(navigator.platform);\r\n\t\tkeys.push(navigator.doNotTrack);\r\n\t\tkeys.push(this.getPluginsString());\r\n\t\tif (this.canvas && this.isCanvasSupported()) {\r\n\t\t\tkeys.push(this.getCanvasFingerprint());\r\n\t\t}\r\n\t\tif (this.hasher) {\r\n\t\t\treturn this.hasher(keys.join(\"###\"), 31);\r\n\t\t} else {\r\n\t\t\treturn this.murmurhash3_32_gc(keys.join(\"###\"), 31);\r\n\t\t}\r\n\t},\r\n\tmurmurhash3_32_gc: function(key, seed) {\r\n\t\tvar remainder, bytes, h1, h1b, c1, c2, k1, i;\r\n\t\tremainder = key.length & 3;\r\n\t\tbytes = key.length - remainder;\r\n\t\th1 = seed;\r\n\t\tc1 = 0xcc9e2d51;\r\n\t\tc2 = 0x1b873593;\r\n\t\ti = 0;\r\n\t\twhile (i < bytes) {\r\n\t\t\tk1 = ((key.charCodeAt(i) & 0xff)) | ((key.charCodeAt(++i) & 0xff) << 8) | ((key.charCodeAt(++i) & 0xff) << 16) | ((key.charCodeAt(++i) & 0xff) << 24);\r\n\t\t\t++i;\r\n\t\t\tk1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\r\n\t\t\tk1 = (k1 << 15) | (k1 >>> 17);\r\n\t\t\tk1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\r\n\t\t\th1 ^= k1;\r\n\t\t\th1 = (h1 << 13) | (h1 >>> 19);\r\n\t\t\th1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\r\n\t\t\th1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\r\n\t\t}\r\n\t\tk1 = 0;\r\n\t\tswitch (remainder) {\r\n\t\t\tcase 3:\r\n\t\t\t\tk1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;\r\n\t\t\tcase 2:\r\n\t\t\t\tk1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;\r\n\t\t\tcase 1:\r\n\t\t\t\tk1 ^= (key.charCodeAt(i) & 0xff);\r\n\t\t\t\tk1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\r\n\t\t\t\tk1 = (k1 << 15) | (k1 >>> 17);\r\n\t\t\t\tk1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\r\n\t\t\t\th1 ^= k1;\r\n\t\t}\r\n\t\th1 ^= key.length;\r\n\t\th1 ^= h1 >>> 16;\r\n\t\th1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\r\n\t\th1 ^= h1 >>> 13;\r\n\t\th1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\r\n\t\th1 ^= h1 >>> 16;\r\n\t\treturn h1 >>> 0;\r\n\t},\r\n\thasLocalStorage: function() {\r\n\t\ttry {\r\n\t\t\treturn !!window.localStorage;\r\n\t\t} catch (e) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n\thasSessionStorage: function() {\r\n\t\ttry {\r\n\t\t\treturn !!window.sessionStorage;\r\n\t\t} catch (e) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n\tisCanvasSupported: function() {\r\n\t\tvar elem = document.createElement(\"canvas\");\r\n\t\treturn !!(elem.getContext && elem.getContext(\"2d\"));\r\n\t},\r\n\tisIE: function() {\r\n\t\tif (navigator.appName === \"Microsoft Internet Explorer\") {\r\n\t\t\treturn true;\r\n\t\t} else if (navigator.appName === \"Netscape\" && /Trident/.test(navigator.userAgent)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\tgetPluginsString: function() {\r\n\t\tif (this.isIE() && this.ie_activex) {\r\n\t\t\treturn this.getIEPluginsString();\r\n\t\t} else {\r\n\t\t\treturn this.getRegularPluginsString();\r\n\t\t}\r\n\t},\r\n\tgetRegularPluginsString: function() {\r\n\t\treturn this.map(navigator.plugins, function(p) {\r\n\t\t\tvar mimeTypes = this.map(p, function(mt) {\r\n\t\t\t\treturn [mt.type, mt.suffixes].join(\"~\");\r\n\t\t\t}).join(\",\");\r\n\t\t\treturn [p.name, p.description, mimeTypes].join(\"::\");\r\n\t\t}, this).join(\";\");\r\n\t},\r\n\tgetIEPluginsString: function() {\r\n\t\tif (window.ActiveXObject) {\r\n\t\t\tvar names = [\"ShockwaveFlash.ShockwaveFlash\", \"AcroPDF.PDF\", \"PDF.PdfCtrl\", \"QuickTime.QuickTime\", \"rmocx.RealPlayer G2 Control\", \"rmocx.RealPlayer G2 Control.1\", \"RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)\", \"RealVideo.RealVideo(tm) ActiveX Control (32-bit)\", \"RealPlayer\", \"SWCtl.SWCtl\", \"WMPlayer.OCX\", \"AgControl.AgControl\", \"Skype.Detection\"];\r\n\t\t\treturn this.map(names, function(name) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tnew ActiveXObject(name);\r\n\t\t\t\t\treturn name;\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}).join(\";\");\r\n\t\t} else {\r\n\t\t\treturn \"\";\r\n\t\t}\r\n\t},\r\n\tgetScreenResolution: function() {\r\n\t\tvar resolution;\r\n\t\tif (this.screen_orientation) {\r\n\t\t\tresolution = (screen.height > screen.width) ? [screen.height, screen.width] : [screen.width, screen.height];\r\n\t\t} else {\r\n\t\t\tresolution = [screen.height, screen.width];\r\n\t\t}\r\n\t\treturn resolution;\r\n\t},\r\n\tgetCanvasFingerprint: function() {\r\n\t\tvar canvas = document.createElement(\"canvas\");\r\n\t\tvar ctx = canvas.getContext(\"2d\");\r\n\t\tvar txt = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+-={}|[]\\:\\\"<>?;,.\";\r\n\t\tctx.textBaseline = \"top\";\r\n\t\tctx.font = \"14px 'Arial'\";\r\n\t\tctx.textBaseline = \"alphabetic\";\r\n\t\tctx.fillStyle = \"#f60\";\r\n\t\tctx.fillRect(125, 1, 62, 20);\r\n\t\tctx.fillStyle = \"#069\";\r\n\t\tctx.fillText(txt, 2, 15);\r\n\t\tctx.fillStyle = \"rgba(102, 204, 0, 0.7)\";\r\n\t\tctx.fillText(txt, 4, 17);\r\n\t\treturn canvas.toDataURL();\r\n\t}\r\n};\r\n\r\n/**************************************************/\r\n\r\n/**\r\nhttp://www.darkwavetech.com/fingerprint/fingerprint_code.html\r\n**/\r\nfunction fingerprint_flash() {\r\n\t\"use strict\";\r\n\tvar strOnError, objPlayerVersion, strVersion, strOut;\r\n\r\n\tstrOnError = \"N/A\";\r\n\tobjPlayerVersion = null;\r\n\tstrVersion = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tobjPlayerVersion = swfobject.getFlashPlayerVersion();\r\n\t\tstrVersion = objPlayerVersion.major + \".\" + objPlayerVersion.minor + \".\" + objPlayerVersion.release;\r\n\t\tif (strVersion === \"0.0.0\") {\r\n\t\t\tstrVersion = \"N/A\";\r\n\t\t}\r\n\t\tstrOut = strVersion;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_browser() {\r\n\t\"use strict\";\r\n\tvar strOnError, strUserAgent, numVersion, strBrowser, strOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tstrUserAgent = null;\r\n\tnumVersion = null;\r\n\tstrBrowser = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tstrUserAgent = navigator.userAgent.toLowerCase();\r\n\t\tif (/msie (\\d+\\.\\d+);/.test(strUserAgent)) { //test for MSIE x.x;\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tif (strUserAgent.indexOf(\"trident/6\") > -1) {\r\n\t\t\t\tnumVersion = 10;\r\n\t\t\t}\r\n\t\t\tif (strUserAgent.indexOf(\"trident/5\") > -1) {\r\n\t\t\t\tnumVersion = 9;\r\n\t\t\t}\r\n\t\t\tif (strUserAgent.indexOf(\"trident/4\") > -1) {\r\n\t\t\t\tnumVersion = 8;\r\n\t\t\t}\r\n\t\t\tstrBrowser = \"Internet Explorer \" + numVersion;\r\n\t\t} else if (strUserAgent.indexOf(\"trident/7\") > -1) { //IE 11+ gets rid of the legacy 'MSIE' in the user-agent string;\r\n\t\t\tnumVersion = 11;\r\n\t\t\tstrBrowser = \"Internet Explorer \" + numVersion;\r\n\t\t} else if (/firefox[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Firefox \" + numVersion;\r\n\t\t} else if (/opera[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Opera/x.x or Opera x.x (ignoring remaining decimal places);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Opera \" + numVersion;\r\n\t\t} else if (/chrome[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Chrome/x.x or Chrome x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Chrome \" + numVersion;\r\n\t\t} else if (/version[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Version/x.x or Version x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Safari \" + numVersion;\r\n\t\t} else if (/rv[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for rv/x.x or rv x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Mozilla \" + numVersion;\r\n\t\t} else if (/mozilla[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Mozilla/x.x or Mozilla x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Mozilla \" + numVersion;\r\n\t\t} else if (/binget[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for BinGet/x.x or BinGet x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (BinGet) \" + numVersion;\r\n\t\t} else if (/curl[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Curl/x.x or Curl x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (cURL) \" + numVersion;\r\n\t\t} else if (/java[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Java/x.x or Java x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (Java) \" + numVersion;\r\n\t\t} else if (/libwww-perl[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for libwww-perl/x.x or libwww-perl x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (libwww-perl) \" + numVersion;\r\n\t\t} else if (/microsoft url control -[\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Microsoft URL Control - x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (Microsoft URL Control) \" + numVersion;\r\n\t\t} else if (/peach[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Peach/x.x or Peach x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (Peach) \" + numVersion;\r\n\t\t} else if (/php[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for PHP/x.x or PHP x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (PHP) \" + numVersion;\r\n\t\t} else if (/pxyscand[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for pxyscand/x.x or pxyscand x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (pxyscand) \" + numVersion;\r\n\t\t} else if (/pycurl[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for pycurl/x.x or pycurl x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (PycURL) \" + numVersion;\r\n\t\t} else if (/python-urllib[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for python-urllib/x.x or python-urllib x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (Python URLlib) \" + numVersion;\r\n\t\t} else if (/appengine-google/.test(strUserAgent)) { //test for AppEngine-Google;\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Cloud (Google AppEngine) \" + numVersion;\r\n\t\t} else {\r\n\t\t\tstrBrowser = \"Unknown\";\r\n\t\t}\r\n\t\tstrOut = strBrowser;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_canvas() {\r\n\t\"use strict\";\r\n\tvar strOnError, canvas, strCText, strText, strOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tcanvas = null;\r\n\tstrCText = null;\r\n\tstrText = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`~1!2@3#4$5%6^7&8*9(0)-_=+[{]}|;:',<.>/?\";\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tcanvas = document.createElement(\"canvas\");\r\n\t\tstrCText = canvas.getContext(\"2d\");\r\n\t\tstrCText.textBaseline = \"top\";\r\n\t\tstrCText.font = \"14px 'Arial'\";\r\n\t\tstrCText.textBaseline = \"alphabetic\";\r\n\t\tstrCText.fillStyle = \"#f60\";\r\n\t\tstrCText.fillRect(125, 1, 62, 20);\r\n\t\tstrCText.fillStyle = \"#069\";\r\n\t\tstrCText.fillText(strText, 2, 15);\r\n\t\tstrCText.fillStyle = \"rgba(102, 204, 0, 0.7)\";\r\n\t\tstrCText.fillText(strText, 4, 17);\r\n\t\tstrOut = canvas.toDataURL();\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_connection() {\r\n\t\"use strict\";\r\n\tvar strOnError, strConnection, strOut;\r\n\r\n\tstrOnError = \"N/A\";\r\n\tstrConnection = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\t// only on android\r\n\t\tstrConnection = navigator.connection.type;\r\n\t\tstrOut = strConnection;\r\n\t} catch (err) {\r\n\t\t// return N/A if navigator.connection object does not apply to this device\r\n\t\treturn strOnError;\r\n\t}\r\n\treturn strOut;\r\n}\r\n\r\nfunction fingerprint_cookie() {\r\n\t\"use strict\";\r\n\tvar strOnError, bolCookieEnabled, bolOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tbolCookieEnabled = null;\r\n\tbolOut = null;\r\n\r\n\ttry {\r\n\t\tbolCookieEnabled = (navigator.cookieEnabled) ? true : false;\r\n\r\n\t\t//if not IE4+ nor NS6+\r\n\t\tif (typeof navigator.cookieEnabled === \"undefined\" && !bolCookieEnabled) {\r\n\t\t\tdocument.cookie = \"testcookie\";\r\n\t\t\tbolCookieEnabled = (document.cookie.indexOf(\"testcookie\") !== -1) ? true : false;\r\n\t\t}\r\n\t\tbolOut = bolCookieEnabled;\r\n\t\treturn bolOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_display() {\r\n\t\"use strict\";\r\n\tvar strSep, strPair, strOnError, strScreen, strDisplay, strOut;\r\n\r\n\tstrSep = \"|\";\r\n\tstrPair = \"=\";\r\n\tstrOnError = \"Error\";\r\n\tstrScreen = null;\r\n\tstrDisplay = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tstrScreen = window.screen;\r\n\t\tif (strScreen) {\r\n\t\t\tstrDisplay = strScreen.colorDepth + strSep + strScreen.width + strSep + strScreen.height + strSep + strScreen.availWidth + strSep + strScreen.availHeight;\r\n\t\t}\r\n\t\tstrOut = strDisplay;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_fontsmoothing() {\r\n\t\"use strict\";\r\n\tvar strOnError, strFontSmoothing, canvasNode, ctx, i, j, imageData, alpha, strOut;\r\n\r\n\tstrOnError = \"Unknown\";\r\n\tstrFontSmoothing = null;\r\n\tcanvasNode = null;\r\n\tctx = null;\r\n\timageData = null;\r\n\talpha = null;\r\n\tstrOut = null;\r\n\r\n\tif (typeof(screen.fontSmoothingEnabled) !== \"undefined\") {\r\n\t\tstrFontSmoothing = screen.fontSmoothingEnabled;\r\n\t} else {\r\n\t\ttry {\r\n\t\t\tfontsmoothing = \"false\";\r\n\t\t\tcanvasNode = document.createElement(\"canvas\");\r\n\t\t\tcanvasNode.width = \"35\";\r\n\t\t\tcanvasNode.height = \"35\";\r\n\t\t\tcanvasNode.style.display = \"none\";\r\n\t\t\tdocument.body.appendChild(canvasNode);\r\n\t\t\tctx = canvasNode.getContext(\"2d\");\r\n\t\t\tctx.textBaseline = \"top\";\r\n\t\t\tctx.font = \"32px Arial\";\r\n\t\t\tctx.fillStyle = \"black\";\r\n\t\t\tctx.strokeStyle = \"black\";\r\n\t\t\tctx.fillText(\"O\", 0, 0);\r\n\t\t\tfor (j = 8; j <= 32; j = j + 1) {\r\n\t\t\t\tfor (i = 1; i <= 32; i = i + 1) {\r\n\t\t\t\t\timageData = ctx.getImageData(i, j, 1, 1).data;\r\n\t\t\t\t\talpha = imageData[3];\r\n\t\t\t\t\tif (alpha !== 255 && alpha !== 0) {\r\n\t\t\t\t\t\tstrFontSmoothing = \"true\"; // font-smoothing must be on.\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstrOut = strFontSmoothing;\r\n\t\t} catch (err) {\r\n\t\t\treturn strOnError;\r\n\t\t}\r\n\t}\r\n\tstrOut = strFontSmoothing;\r\n\treturn strOut;\r\n}\r\n\r\nfunction fingerprint_fonts() {\r\n\t\"use strict\";\r\n\tvar strOnError, style, fonts, count, template, fragment, divs, i, font, div, body, result, e;\r\n\r\n\tstrOnError = \"Error\";\r\n\tstyle = null;\r\n\tfonts = null;\r\n\tfont = null;\r\n\tcount = 0;\r\n\ttemplate = null;\r\n\tdivs = null;\r\n\te = null;\r\n\tdiv = null;\r\n\tbody = null;\r\n\ti = 0;\r\n\r\n\ttry {\r\n\t\tstyle = \"position: absolute; visibility: hidden; display: block !important\";\r\n\t\tfonts = [\"8bitoperator\", \"Abadi MT Condensed Light\", \"Adobe Fangsong Std\", \"Adobe Hebrew\", \"Adobe Ming Std\", \"Agency FB\", \"Aharoni\", \"Andalus\", \"Angsana New\", \"AngsanaUPC\", \"Aparajita\", \"Arab\", \"Arabic Transparent\", \"Arabic Typesetting\", \"Arial Baltic\", \"Arial Black\", \"Arial CE\", \"Arial CYR\", \"Arial Greek\", \"Arial TUR\", \"Arial\", \"Arimo\", \"Batang\", \"BatangChe\", \"Bauhaus 93\", \"Bell MT\", \"Berlin Sans FB\", \"Bitstream Vera Serif\", \"Bodoni MT\", \"Bookman Old Style\", \"Braggadocio\", \"Broadway\", \"Browallia New\", \"BrowalliaUPC\", \"Calibri Light\", \"Calibri\", \"Californian FB\", \"Cambria Math\", \"Cambria\", \"Candara\", \"Castellar\", \"Casual\", \"Centaur\", \"Century\", \"Century Gothic\", \"Chalkduster\", \"Colonna MT\", \"Comic Sans MS\", \"Consolas\", \"Constantia\", \"Copperplate Gothic Light\", \"Corbel\", \"Cordia New\", \"CordiaUPC\", \"Courier New Baltic\", \"Courier New CE\", \"Courier New CYR\", \"Courier New Greek\", \"Courier New TUR\", \"Courier New\", \"DejaVu Sans\", \"DFKai-SB\", \"DaunPenh\", \"David\", \"DejaVu LGC Sans Mono\", \"Desdemona\", \"DilleniaUPC\", \"DokChampa\", \"Dotum\", \"DotumChe\", \"Dubai\", \"Ebrima\", \"Engravers MT\", \"Eras Bold ITC\", \"Estrangelo Edessa\", \"EucrosiaUPC\", \"Euphemia\", \"Eurostile\", \"FangSong\", \"Forte\", \"FrankRuehl\", \"Franklin Gothic Heavy\", \"Franklin Gothic Medium\", \"FreesiaUPC\", \"French Script MT\", \"Gabriola\", \"Gautami\", \"Georgia\", \"Gigi\", \"Gisha\", \"Goudy Old Style\", \"Gulim\", \"GulimChe\", \"GungSeo\", \"Gungsuh\", \"GungsuhChe\", \"Haettenschweiler\", \"Harrington\", \"Hei S\", \"HeiT\", \"Heisei Kaku Gothic\", \"Hiragino Sans GB\", \"Impact\", \"Informal Roman\", \"IrisUPC\", \"Iskoola Pota\", \"JasmineUPC\", \"KacstOne\", \"KaiTi\", \"Kalinga\", \"Kartika\", \"Khmer UI\", \"Kino MT\", \"KodchiangUPC\", \"Kokila\", \"Kozuka Gothic Pr6N\", \"Lao UI\", \"Latha\", \"Leelawadee\", \"Levenim MT\", \"LilyUPC\", \"Lohit Gujarati\", \"Loma\", \"Lucida Bright\", \"Lucida Console\", \"Lucida Fax\", \"Lucida Sans Unicode\", \"MS Gothic\", \"MS Mincho\", \"MS PGothic\", \"MS PMincho\", \"MS Reference Sans Serif\", \"MS UI Gothic\", \"MV Boli\", \"Magneto\", \"Malgun Gothic\", \"Mangal\", \"Marlett\", \"Matura MT Script Capitals\", \"Meiryo UI\", \"Meiryo\", \"Menlo\", \"Microsoft Himalaya\", \"Microsoft JhengHei\", \"Microsoft New Tai Lue\", \"Microsoft PhagsPa\", \"Microsoft Sans Serif\", \"Microsoft Tai Le\", \"Microsoft Uighur\", \"Microsoft YaHei\", \"Microsoft Yi Baiti\", \"MingLiU\", \"MingLiU-ExtB\", \"MingLiU_HKSCS\", \"MingLiU_HKSCS-ExtB\", \"Miriam Fixed\", \"Miriam\", \"Mongolian Baiti\", \"MoolBoran\", \"More Perfect DOS VGA\", \"MS Outlook\", \"NSimSun\", \"Narkisim\", \"News Gothic MT\", \"Niagara Solid\", \"Nyala\", \"OCR A\", \"OpenSymbol\", \"PMingLiU\", \"PMingLiU-ExtB\", \"Palace Script MT\", \"Palatino Linotype\", \"Papyrus\", \"Perpetua\", \"Plantagenet Cherokee\", \"Playbill\", \"Prelude Bold\", \"Prelude Condensed Bold\", \"Prelude Condensed Medium\", \"Prelude Medium\", \"PreludeCompressedWGL Black\", \"PreludeCompressedWGL Bold\", \"PreludeCompressedWGL Light\", \"PreludeCompressedWGL Medium\", \"PreludeCondensedWGL Black\", \"PreludeCondensedWGL Bold\", \"PreludeCondensedWGL Light\", \"PreludeCondensedWGL Medium\", \"PreludeWGL Black\", \"PreludeWGL Bold\", \"PreludeWGL Light\", \"PreludeWGL Medium\", \"Raavi\", \"Rachana\", \"Rockwell\", \"Rod\", \"Sakkal Majalla\", \"Sawasdee\", \"Script MT Bold\", \"Segoe Print\", \"Segoe Script\", \"Segoe UI Emoji\", \"Segoe UI Historic\", \"Segoe UI Light\", \"Segoe UI Semibold\", \"Segoe UI Symbol\", \"Segoe UI\", \"Shonar Bangla\", \"Showcard Gothic\", \"Shruti\", \"SimHei\", \"SimSun\", \"SimSun-ExtB\", \"Simplified Arabic Fixed\", \"Simplified Arabic\", \"Snap ITC\", \"Sylfaen\", \"Symbol\", \"Tahoma\", \"TeamViewer13\", \"Times New Roman Baltic\", \"Times New Roman CE\", \"Times New Roman CYR\", \"Times New Roman Greek\", \"Times New Roman TUR\", \"Times New Roman\", \"TlwgMono\", \"Traditional Arabic\", \"Trebuchet MS\", \"Tunga\", \"Tw Cen MT Condensed Extra Bold\", \"Ubuntu\", \"Umpush\", \"Univers\", \"Utopia\", \"Utsaah\", \"Vani\", \"Verdana\", \"Vijaya\", \"Vladimir Script\", \"Vrinda\", \"Webdings\", \"Wide Latin\", \"Wingdings\", \"Yu Gothic\"];\r\n\t\tcount = fonts.length;\r\n\t\ttemplate = \"<b style=\\\"display:inline !important; width:auto !important; font:normal 10px/1 'X',sans-serif !important\\\">ww</b>\" + \"<b style=\\\"display:inline !important; width:auto !important; font:normal 10px/1 'X',monospace !important\\\">ww</b>\";\r\n\t\tfragment = document.createDocumentFragment();\r\n\t\tdivs = [];\r\n\t\tfor (i = 0; i < count; i = i + 1) {\r\n\t\t\tfont = fonts[i];\r\n\t\t\tdiv = document.createElement(\"div\");\r\n\t\t\tfont = font.replace(/['\"<>]/g, \"\");\r\n\t\t\tdiv.innerHTML = template.replace(/X/g, font);\r\n\t\t\tdiv.style.cssText = style;\r\n\t\t\tfragment.appendChild(div);\r\n\t\t\tdivs.push(div);\r\n\t\t}\r\n\t\tbody = document.body;\r\n\t\tbody.insertBefore(fragment, body.firstChild);\r\n\t\tresult = [];\r\n\t\tfor (i = 0; i < count; i = i + 1) {\r\n\t\t\te = divs[i].getElementsByTagName(\"b\");\r\n\t\t\tif (e[0].offsetWidth === e[1].offsetWidth) {\r\n\t\t\t\tresult.push(fonts[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// do not combine these two loops, remove child will cause reflow\r\n\t\t// and induce severe performance hit\r\n\t\tfor (i = 0; i < count; i = i + 1) {\r\n\t\t\tbody.removeChild(divs[i]);\r\n\t\t}\r\n\t\treturn result.join(\"|\");\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_formfields() {\r\n\t\"use strict\";\r\n\tvar i, j, numOfForms, numOfInputs, strFormsInPage, strFormsInputsData, strInputsInForm, strTmp, strOut;\r\n\r\n\ti = 0;\r\n\tj = 0;\r\n\tnumOfForms = 0;\r\n\tnumOfInputs = 0;\r\n\tstrFormsInPage = \"\";\r\n\tstrFormsInputsData = [];\r\n\tstrInputsInForm = \"\";\r\n\tstrTmp = \"\";\r\n\tstrOut = \"\";\r\n\r\n\tstrFormsInPage = document.getElementsByTagName(\"form\");\r\n\tnumOfForms = strFormsInPage.length;\r\n\tstrFormsInputsData.push(\"url=\" + window.location.href);\r\n\tfor (i = 0; i < numOfForms; i = i + 1) {\r\n\t\tstrFormsInputsData.push(\"FORM=\" + strFormsInPage[i].name);\r\n\t\tstrInputsInForm = strFormsInPage[i].getElementsByTagName(\"input\");\r\n\t\tnumOfInputs = strInputsInForm.length;\r\n\t\tfor (j = 0; j < numOfInputs; j = j + 1) {\r\n\t\t\tif (strInputsInForm[j].type !== \"hidden\") {\r\n\t\t\t\tstrFormsInputsData.push(\"Input=\" + strInputsInForm[j].name);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tstrTmp = strFormsInputsData.join(\"|\");\r\n\tstrOut = strTmp;\r\n\treturn strOut;\r\n}\r\n\r\nfunction fingerprint_java() {\r\n\t\"use strict\";\r\n\tvar strOnError, strJavaEnabled, strOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tstrJavaEnabled = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tif (navigator.javaEnabled()) {\r\n\t\t\tstrJavaEnabled = \"true\";\r\n\t\t} else {\r\n\t\t\tstrJavaEnabled = \"false\";\r\n\t\t}\r\n\t\tstrOut = strJavaEnabled;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_language() {\r\n\t\"use strict\";\r\n\tvar strSep, strPair, strOnError, strLang, strTypeLng, strTypeBrLng, strTypeSysLng, strTypeUsrLng, strOut;\r\n\r\n\tstrSep = \"|\";\r\n\tstrPair = \"=\";\r\n\tstrOnError = \"Error\";\r\n\tstrLang = null;\r\n\tstrTypeLng = null;\r\n\tstrTypeBrLng = null;\r\n\tstrTypeSysLng = null;\r\n\tstrTypeUsrLng = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tstrTypeLng = typeof(navigator.language);\r\n\t\tstrTypeBrLng = typeof(navigator.browserLanguage);\r\n\t\tstrTypeSysLng = typeof(navigator.systemLanguage);\r\n\t\tstrTypeUsrLng = typeof(navigator.userLanguage);\r\n\r\n\t\tif (strTypeLng !== \"undefined\") {\r\n\t\t\tstrLang = \"lang\" + strPair + navigator.language + strSep;\r\n\t\t} else if (strTypeBrLng !== \"undefined\") {\r\n\t\t\tstrLang = \"lang\" + strPair + navigator.browserLanguage + strSep;\r\n\t\t} else {\r\n\t\t\tstrLang = \"lang\" + strPair + strSep;\r\n\t\t}\r\n\t\tif (strTypeSysLng !== \"undefined\") {\r\n\t\t\tstrLang += \"syslang\" + strPair + navigator.systemLanguage + strSep;\r\n\t\t} else {\r\n\t\t\tstrLang += \"syslang\" + strPair + strSep;\r\n\t\t}\r\n\t\tif (strTypeUsrLng !== \"undefined\") {\r\n\t\t\tstrLang += \"userlang\" + strPair + navigator.userLanguage;\r\n\t\t} else {\r\n\t\t\tstrLang += \"userlang\" + strPair;\r\n\t\t}\r\n\t\tstrOut = strLang;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_silverlight() {\r\n\t\"use strict\";\r\n\tvar strOnError, objControl, objPlugin, strSilverlightVersion, strOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tobjControl = null;\r\n\tobjPlugin = null;\r\n\tstrSilverlightVersion = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\ttry {\r\n\t\t\tobjControl = new ActiveXObject(\"AgControl.AgControl\");\r\n\t\t\tif (objControl.IsVersionSupported(\"5.0\")) {\r\n\t\t\t\tstrSilverlightVersion = \"5.x\";\r\n\t\t\t} else if (objControl.IsVersionSupported(\"4.0\")) {\r\n\t\t\t\tstrSilverlightVersion = \"4.x\";\r\n\t\t\t} else if (objControl.IsVersionSupported(\"3.0\")) {\r\n\t\t\t\tstrSilverlightVersion = \"3.x\";\r\n\t\t\t} else if (objControl.IsVersionSupported(\"2.0\")) {\r\n\t\t\t\tstrSilverlightVersion = \"2.x\";\r\n\t\t\t} else {\r\n\t\t\t\tstrSilverlightVersion = \"1.x\";\r\n\t\t\t}\r\n\t\t\tobjControl = null;\r\n\t\t} catch (e) {\r\n\t\t\tobjPlugin = navigator.plugins[\"Silverlight Plug-In\"];\r\n\t\t\tif (objPlugin) {\r\n\t\t\t\tif (objPlugin.description === \"1.0.30226.2\") {\r\n\t\t\t\t\tstrSilverlightVersion = \"2.x\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstrSilverlightVersion = parseInt(objPlugin.description[0], 10);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tstrSilverlightVersion = \"N/A\";\r\n\t\t\t}\r\n\t\t}\r\n\t\tstrOut = strSilverlightVersion;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_os() {\r\n\t\"use strict\";\r\n\tvar strSep, strOnError, strUserAgent, strPlatform, strOS, strOSBits, strOut;\r\n\r\n\tstrSep = \"|\";\r\n\tstrOnError = \"Error\";\r\n\tstrUserAgent = null;\r\n\tstrPlatform = null;\r\n\tstrOS = null;\r\n\tstrOSBits = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\t/* navigator.userAgent is supported by all major browsers */\r\n\t\tstrUserAgent = navigator.userAgent.toLowerCase();\r\n\t\t/* navigator.platform is supported by all major browsers */\r\n\t\tstrPlatform = navigator.platform.toLowerCase();\r\n\t\tif (strUserAgent.indexOf(\"windows nt 6.3\") !== -1) {\r\n\t\t\tstrOS = \"Windows 8.1\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 6.2\") !== -1) {\r\n\t\t\tstrOS = \"Windows 8\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 6.1\") !== -1) {\r\n\t\t\tstrOS = \"Windows 7\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 10.0\") !== -1) {\r\n\t\t\tstrOS = \"Windows 10\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 6.0\") !== -1) {\r\n\t\t\tstrOS = \"Windows Vista/Windows Server 2008\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 5.2\") !== -1) {\r\n\t\t\tstrOS = \"Windows XP x64/Windows Server 2003\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 5.1\") !== -1) {\r\n\t\t\tstrOS = \"Windows XP\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 5.01\") !== -1) {\r\n\t\t\tstrOS = \"Windows 2000, Service Pack 1 (SP1)\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows xp\") !== -1) {\r\n\t\t\tstrOS = \"Windows XP\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows 2000\") !== -1) {\r\n\t\t\tstrOS = \"Windows 2000\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 5.0\") !== -1) {\r\n\t\t\tstrOS = \"Windows 2000\";\r\n\t\t} else if (strUserAgent.indexOf(\"iemobile\") !== -1) {\r\n\t\t\tstrOS = \"Windows Mobile\";\r\n\t\t} else if (strUserAgent.indexOf(\"wm5 pie\") !== -1) {\r\n\t\t\tstrOS = \"Windows Mobile\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows\") !== -1) {\r\n\t\t\tstrOS = \"Windows (Unknown Version)\";\r\n\t\t} else if (strUserAgent.indexOf(\"openbsd\") !== -1) {\r\n\t\t\tstrOS = \"Open BSD\";\r\n\t\t} else if (strUserAgent.indexOf(\"sunos\") !== -1) {\r\n\t\t\tstrOS = \"Sun OS\";\r\n\t\t} else if (strUserAgent.indexOf(\"ubuntu\") !== -1) {\r\n\t\t\tstrOS = \"Ubuntu\";\r\n\t\t} else if (strUserAgent.indexOf(\"ipad\") !== -1) {\r\n\t\t\tstrOS = \"iOS (iPad)\";\r\n\t\t} else if (strUserAgent.indexOf(\"ipod\") !== -1) {\r\n\t\t\tstrOS = \"iOS (iTouch)\";\r\n\t\t} else if (strUserAgent.indexOf(\"iphone\") !== -1) {\r\n\t\t\tstrOS = \"iOS (iPhone)\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x beta\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Beta (Kodiak)\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.0\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Cheetah\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.1\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Puma\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.2\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Jaguar\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.3\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Panther\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.4\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Tiger\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.5\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Leopard\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.6\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Snow Leopard\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.7\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Lion\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX (Version Unknown)\";\r\n\t\t} else if (strUserAgent.indexOf(\"macintosh\") !== -1) {\r\n\t\t\tstrOS = \"Mac OS Classic\";\r\n\t\t} else if (strUserAgent.indexOf(\"googletv\") !== -1) {\r\n\t\t\tstrOS = \"Android (GoogleTV)\";\r\n\t\t} else if (strUserAgent.indexOf(\"android\") !== -1) {\r\n\t\t\tstrOS = \"Android\";\r\n\t\t} else if (strUserAgent.indexOf(\"x11\") !== -1) {\r\n\t\t\tstrOS = \"UNIX\";\r\n\t\t} else if (strUserAgent.indexOf(\"nix\") !== -1) {\r\n\t\t\tstrOS = \"UNIX\";\r\n\t\t} else if (strUserAgent.indexOf(\"linux\") !== -1) {\r\n\t\t\tstrOS = \"Linux\";\r\n\t\t} else if (strUserAgent.indexOf(\"qnx\") !== -1) {\r\n\t\t\tstrOS = \"QNX\";\r\n\t\t} else if (strUserAgent.indexOf(\"os/2\") !== -1) {\r\n\t\t\tstrOS = \"IBM OS/2\";\r\n\t\t} else if (strUserAgent.indexOf(\"beos\") !== -1) {\r\n\t\t\tstrOS = \"BeOS\";\r\n\t\t} else if (strUserAgent.indexOf(\"playbook\") !== -1) {\r\n\t\t\tstrOS = \"Blackberry (Playbook)\";\r\n\t\t} else if (strUserAgent.indexOf(\"wnd.rim\") !== -1) {\r\n\t\t\tstrOS = \"Blackberry (IE/FF Emulator)\";\r\n\t\t} else if (strUserAgent.indexOf(\"blackberry\") !== -1) {\r\n\t\t\tstrOS = \"Blackberry\";\r\n\t\t} else if (strUserAgent.indexOf(\"palm\") !== -1) {\r\n\t\t\tstrOS = \"Palm OS\";\r\n\t\t} else if (strUserAgent.indexOf(\"webos\") !== -1) {\r\n\t\t\tstrOS = \"WebOS\";\r\n\t\t} else if (strUserAgent.indexOf(\"hpwos\") !== -1) {\r\n\t\t\tstrOS = \"WebOS (HP)\";\r\n\t\t} else if (strUserAgent.indexOf(\"kindle\") !== -1) {\r\n\t\t\tstrOS = \"Kindle\";\r\n\t\t} else if (strUserAgent.indexOf(\"wii\") !== -1) {\r\n\t\t\tstrOS = \"Nintendo (Wii)\";\r\n\t\t} else if (strUserAgent.indexOf(\"nintendo ds\") !== -1) {\r\n\t\t\tstrOS = \"Nintendo (DS)\";\r\n\t\t} else if (strUserAgent.indexOf(\"playstation 3\") !== -1) {\r\n\t\t\tstrOS = \"Sony (Playstation Console)\";\r\n\t\t} else if (strUserAgent.indexOf(\"playstation portable\") !== -1) {\r\n\t\t\tstrOS = \"Sony (Playstation Portable)\";\r\n\t\t} else if (strUserAgent.indexOf(\"webtv\") !== -1) {\r\n\t\t\tstrOS = \"MSN TV (WebTV)\";\r\n\t\t} else if (strUserAgent.indexOf(\"inferno\") !== -1) {\r\n\t\t\tstrOS = \"Inferno\";\r\n\t\t} else {\r\n\t\t\tstrOS = \"Unknown\";\r\n\t\t}\r\n\t\tif (strPlatform.indexOf(\"x64\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"wow64\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"win64\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"win32\") !== -1) {\r\n\t\t\tstrOSBits = \"32 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"x64\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"x32\") !== -1) {\r\n\t\t\tstrOSBits = \"32 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"x86\") !== -1) {\r\n\t\t\tstrOSBits = \"32 bits*\";\r\n\t\t} else if (strPlatform.indexOf(\"ppc\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"alpha\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"68k\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"iphone\") !== -1) {\r\n\t\t\tstrOSBits = \"32 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"android\") !== -1) {\r\n\t\t\tstrOSBits = \"32 bits\";\r\n\t\t} else {\r\n\t\t\tstrOSBits = \"Unknown\";\r\n\t\t}\r\n\t\tstrOut = strOS + strSep + strOSBits;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_useragent() {\r\n\t\"use strict\";\r\n\tvar strSep, strTmp, strUserAgent, strOut;\r\n\r\n\tstrSep = \"|\";\r\n\tstrTmp = null;\r\n\tstrUserAgent = null;\r\n\tstrOut = null;\r\n\r\n\t/* navigator.userAgent is supported by all major browsers */\r\n\tstrUserAgent = navigator.userAgent.toLowerCase();\r\n\t/* navigator.platform is supported by all major browsers */\r\n\tstrTmp = strUserAgent + strSep + navigator.platform;\r\n\t/* navigator.cpuClass only supported in IE */\r\n\tif (navigator.cpuClass) {\r\n\t\tstrTmp += strSep + navigator.cpuClass;\r\n\t}\r\n\t/* navigator.browserLanguage only supported in IE, Safari and Chrome */\r\n\tif (navigator.browserLanguage) {\r\n\t\tstrTmp += strSep + navigator.browserLanguage;\r\n\t} else {\r\n\t\tstrTmp += strSep + navigator.language;\r\n\t}\r\n\tstrOut = strTmp;\r\n\treturn strOut;\r\n}\r\n\r\nfunction fingerprint_timezone() {\r\n\t\"use strict\";\r\n\tvar strOnError, dtDate, numOffset, numGMTHours, numOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tdtDate = null;\r\n\tnumOffset = null;\r\n\tnumGMTHours = null;\r\n\tnumOut = null;\r\n\r\n\ttry {\r\n\t\tdtDate = new Date();\r\n\t\tnumOffset = dtDate.getTimezoneOffset();\r\n\t\tnumGMTHours = (numOffset / 60) * (-1);\r\n\t\tnumOut = numGMTHours;\r\n\t\treturn numOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_touch() {\r\n\t\"use strict\";\r\n\tvar bolTouchEnabled, bolOut;\r\n\r\n\tbolTouchEnabled = false;\r\n\tbolOut = null;\r\n\r\n\ttry {\r\n\t\tif (document.createEvent(\"TouchEvent\")) {\r\n\t\t\tbolTouchEnabled = true;\r\n\t\t}\r\n\t\tbolOut = bolTouchEnabled;\r\n\t\treturn bolOut;\r\n\t} catch (ignore) {\r\n\t\tbolOut = bolTouchEnabled\r\n\t\treturn bolOut;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_truebrowser() {\r\n\t\"use strict\";\r\n\tvar strBrowser, strUserAgent, strOut;\r\n\r\n\tstrBrowser = \"Unknown\";\r\n\tstrUserAgent = null;\r\n\tstrOut = null;\r\n\r\n\tstrUserAgent = navigator.userAgent.toLowerCase();\r\n\r\n\t/* Checks for different browsers, cannot use Try/Catch block */\r\n\tif (document.all && document.getElementById && navigator.savePreferences && (strUserAgent.indexOf(\"Netfront\") < 0) && navigator.appName !== \"Blazer\") {\r\n\t\tstrBrowser = \"Escape 5\";\r\n\t} else if (navigator.vendor === \"KDE\") {\r\n\t\tstrBrowser = \"Konqueror\";\r\n\t} else if (document.childNodes && !document.all && !navigator.taintEnabled && !navigator.accentColorName) {\r\n\t\tstrBrowser = \"Safari\";\r\n\t} else if (document.childNodes && !document.all && !navigator.taintEnabled && navigator.accentColorName) {\r\n\t\tstrBrowser = \"OmniWeb 4.5+\";\r\n\t} else if (navigator.__ice_version) {\r\n\t\tstrBrowser = \"ICEBrowser\";\r\n\t} else if (window.ScriptEngine && ScriptEngine().indexOf(\"InScript\") + 1 && document.createElement) {\r\n\t\tstrBrowser = \"iCab 3+\";\r\n\t} else if (window.ScriptEngine && ScriptEngine().indexOf(\"InScript\") + 1) {\r\n\t\tstrBrowser = \"iCab 2-\";\r\n\t} else if (strUserAgent.indexOf(\"hotjava\") + 1 && (navigator.accentColorName) === \"undefined\") {\r\n\t\tstrBrowser = \"HotJava\";\r\n\t} else if (document.layers && !document.classes) {\r\n\t\tstrBrowser = \"Omniweb 4.2-\";\r\n\t} else if (document.layers && !navigator.mimeTypes[\"*\"]) {\r\n\t\tstrBrowser = \"Escape 4\";\r\n\t} else if (document.layers) {\r\n\t\tstrBrowser = \"Netscape 4\";\r\n\t} else if (window.opera && document.getElementsByClassName) {\r\n\t\tstrBrowser = \"Opera 9.5+\";\r\n\t} else if (window.opera && window.getComputedStyle) {\r\n\t\tstrBrowser = \"Opera 8\";\r\n\t} else if (window.opera && document.childNodes) {\r\n\t\tstrBrowser = \"Opera 7\";\r\n\t} else if (window.opera) {\r\n\t\tstrBrowser = \"Opera \" + window.opera.version();\r\n\t} else if (navigator.appName.indexOf(\"WebTV\") + 1) {\r\n\t\tstrBrowser = \"WebTV\";\r\n\t} else if (strUserAgent.indexOf(\"netgem\") + 1) {\r\n\t\tstrBrowser = \"Netgem NetBox\";\r\n\t} else if (strUserAgent.indexOf(\"opentv\") + 1) {\r\n\t\tstrBrowser = \"OpenTV\";\r\n\t} else if (strUserAgent.indexOf(\"ipanel\") + 1) {\r\n\t\tstrBrowser = \"iPanel MicroBrowser\";\r\n\t} else if (document.getElementById && !document.childNodes) {\r\n\t\tstrBrowser = \"Clue browser\";\r\n\t} else if (navigator.product && navigator.product.indexOf(\"Hv\") === 0) {\r\n\t\tstrBrowser = \"Tkhtml Hv3+\";\r\n\t} else if (typeof InstallTrigger !== \"undefined\") {\r\n\t\tstrBrowser = \"Firefox\";\r\n\t} else if (window.atob) {\r\n\t\tstrBrowser = \"Internet Explorer 10+\";\r\n\t} else if (XDomainRequest && window.performance) {\r\n\t\tstrBrowser = \"Internet Explorer 9\";\r\n\t} else if (XDomainRequest) {\r\n\t\tstrBrowser = \"Internet Explorer 8\";\r\n\t} else if (document.documentElement && document.documentElement.style.maxHeight !== \"undefined\") {\r\n\t\tstrBrowser = \"Internet Explorer 7\"; //xxxxx\r\n\t} else if (document.compatMode && document.all) {\r\n\t\tstrBrowser = \"Internet Explorer 6\"; //xxxxx\r\n\t} else if (window.createPopup) {\r\n\t\tstrBrowser = \"Internet Explorer 5.5\";\r\n\t} else if (window.attachEvent) {\r\n\t\tstrBrowser = \"Internet Explorer 5\";\r\n\t} else if (document.all && navigator.appName !== \"Microsoft Pocket Internet Explorer\") {\r\n\t\tstrBrowser = \"Internet Explorer 4\";\r\n\t} else if ((strUserAgent.indexOf(\"msie\") + 1) && window.ActiveXObject) {\r\n\t\tstrBrowser = \"Pocket Internet Explorer\";\r\n\t} else if (document.getElementById && ((strUserAgent.indexOf(\"netfront\") + 1) || navigator.appName === \"Blazer\" || navigator.product === \"Gecko\" || (navigator.appName.indexOf(\"PSP\") + 1) || (navigator.appName.indexOf(\"PLAYSTATION 3\") + 1))) {\r\n\t\tstrBrowser = \"NetFront 3+\";\r\n\t} else if (navigator.product === \"Gecko\" && !navigator.savePreferences) {\r\n\t\tstrBrowser = \"Gecko engine (Mozilla, Netscape 6+ etc.)\";\r\n\t} else if (window.chrome) {\r\n\t\tstrBrowser = \"Chrome\";\r\n\t}\r\n\tstrOut = strBrowser;\r\n\treturn strOut;\r\n}\r\n\r\nvar glbOnError = \"N/A\"\r\nvar glbSep = \"|\";\r\n\r\nfunction activeXDetect(componentClassID) {\r\n\t\"use strict\";\r\n\tvar strComponentVersion, strOut;\r\n\r\n\tstrComponentVersion = \"\";\r\n\tstrOut = \"\";\r\n\r\n\ttry {\r\n\t\tstrComponentVersion = document.body.getComponentVersion(\"{\" + componentClassID + \"}\", \"ComponentID\");\r\n\t\tif (strComponentVersion !== null) {\r\n\t\t\tstrOut = strComponentVersion;\r\n\t\t} else {\r\n\t\t\tstrOut = false;\r\n\t\t}\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn glbOnError;\r\n\t}\r\n}\r\n\r\nfunction stripIllegalChars(strValue) {\r\n\t\"use strict\";\r\n\tvar iCounter, strOriginal, strOut;\r\n\r\n\tiCounter = 0;\r\n\tstrOriginal = \"\";\r\n\tstrOut = \"\";\r\n\r\n\ttry {\r\n\t\tstrOriginal = strValue.toLowerCase();\r\n\t\tfor (iCounter = 0; iCounter < strOriginal.length; iCounter = iCounter + 1) {\r\n\t\t\tif (strOriginal.charAt(iCounter) !== \"\\n\" && strOriginal.charAt(iCounter) !== \"/\" && strOriginal.charAt(iCounter) !== \"\\\\\") {\r\n\t\t\t\tstrOut = strOut + strOriginal.charAt(iCounter);\r\n\t\t\t} else if (strOriginal.charAt(iCounter) === \"\\n\") {\r\n\t\t\t\tstrOut = strOut + \"n\";\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn glbOnError;\r\n\t}\r\n}\r\n\r\nfunction hashtable_containsKey(key) {\r\n\t\"use strict\";\r\n\tvar bolExists, iCounter;\r\n\r\n\tbolExists = false;\r\n\tiCounter = 0;\r\n\r\n\tfor (iCounter = 0; iCounter < this.hashtable.length; iCounter = iCounter + 1) {\r\n\t\tif (iCounter === key && this.hashtable[iCounter] !== null) {\r\n\t\t\tbolExists = true;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn bolExists;\r\n}\r\n\r\nfunction hashtable_get(key) {\r\n\t\"use strict\";\r\n\treturn this.hashtable[key];\r\n}\r\n\r\nfunction hashtable_keys() {\r\n\t\"use strict\";\r\n\tvar keys, iCounter;\r\n\r\n\tkeys = [];\r\n\tiCounter = 0;\r\n\r\n\tfor (iCounter in this.hashtable) {\r\n\t\tif (this.hashtable[iCounter] !== null) {\r\n\t\t\tkeys.push(iCounter);\r\n\t\t}\r\n\t}\r\n\treturn keys;\r\n}\r\n\r\nfunction hashtable_put(key, value) {\r\n\t\"use strict\";\r\n\tif (key === null || value === null) {\r\n\t\tthrow \"NullPointerException {\" + key + \"},{\" + value + \"}\";\r\n\t}\r\n\tthis.hashtable[key] = value;\r\n}\r\n\r\nfunction hashtable_size() {\r\n\t\"use strict\";\r\n\tvar iSize, iCounter, iOut;\r\n\r\n\tiSize = 0;\r\n\tiCounter = 0;\r\n\tiOut = 0;\r\n\r\n\tfor (iCounter in this.hashtable) {\r\n\t\tif (this.hashtable[iCounter] !== null) {\r\n\t\t\tiSize = iSize + 1;\r\n\t\t}\r\n\t}\r\n\tiOut = iSize;\r\n\treturn iOut;\r\n}\r\n\r\nfunction Hashtable() {\r\n\t\"use strict\";\r\n\tthis.containsKey = hashtable_containsKey;\r\n\tthis.get = hashtable_get;\r\n\tthis.keys = hashtable_keys;\r\n\tthis.put = hashtable_put;\r\n\tthis.size = hashtable_size;\r\n\tthis.hashtable = [];\r\n}\r\n\r\n/* Detect Plugins */\r\nfunction fingerprint_plugins() {\r\n\t\"use strict\";\r\n\tvar htIEComponents, strKey, strName, strVersion, strTemp, bolFirst, iCount, strMimeType, strOut;\r\n\r\n\ttry {\r\n\t\t/* Create hashtable of IE components */\r\n\t\thtIEComponents = new Hashtable();\r\n\t\thtIEComponents.put(\"7790769C-0471-11D2-AF11-00C04FA35D02\", \"AddressBook\"); // Address Book\r\n\t\thtIEComponents.put(\"47F67D00-9E55-11D1-BAEF-00C04FC2D130\", \"AolArtFormat\"); // AOL ART Image Format Support\r\n\t\thtIEComponents.put(\"76C19B38-F0C8-11CF-87CC-0020AFEECF20\", \"ArabicDS\"); // Arabic Text Display Support\r\n\t\thtIEComponents.put(\"76C19B34-F0C8-11CF-87CC-0020AFEECF20\", \"ChineseSDS\"); // Chinese (Simplified) Text Display Support\r\n\t\thtIEComponents.put(\"76C19B33-F0C8-11CF-87CC-0020AFEECF20\", \"ChineseTDS\"); // Chinese (traditional) Text Display Support\r\n\t\thtIEComponents.put(\"238F6F83-B8B4-11CF-8771-00A024541EE3\", \"CitrixICA\"); // Citrix ICA Client\r\n\t\thtIEComponents.put(\"283807B5-2C60-11D0-A31D-00AA00B92C03\", \"DirectAnim\"); // DirectAnimation\r\n\t\thtIEComponents.put(\"44BBA848-CC51-11CF-AAFA-00AA00B6015C\", \"DirectShow\"); // DirectShow\r\n\t\thtIEComponents.put(\"9381D8F2-0288-11D0-9501-00AA00B911A5\", \"DynHTML\"); // Dynamic HTML Data Binding\r\n\t\thtIEComponents.put(\"4F216970-C90C-11D1-B5C7-0000F8051515\", \"DynHTML4Java\"); // Dynamic HTML Data Binding for Java\r\n\t\thtIEComponents.put(\"D27CDB6E-AE6D-11CF-96B8-444553540000\", \"Flash\"); // Macromedia Flash\r\n\t\thtIEComponents.put(\"76C19B36-F0C8-11CF-87CC-0020AFEECF20\", \"HebrewDS\"); // Hebrew Text Display Support\r\n\t\thtIEComponents.put(\"630B1DA0-B465-11D1-9948-00C04F98BBC9\", \"IEBrwEnh\"); // Internet Explorer Browsing Enhancements\r\n\t\thtIEComponents.put(\"08B0E5C0-4FCB-11CF-AAA5-00401C608555\", \"IEClass4Java\"); // Internet Explorer Classes for Java\r\n\t\thtIEComponents.put(\"45EA75A0-A269-11D1-B5BF-0000F8051515\", \"IEHelp\"); // Internet Explorer Help\r\n\t\thtIEComponents.put(\"DE5AED00-A4BF-11D1-9948-00C04F98BBC9\", \"IEHelpEng\"); // Internet Explorer Help Engine\r\n\t\thtIEComponents.put(\"89820200-ECBD-11CF-8B85-00AA005B4383\", \"IE5WebBrw\"); // Internet Explorer 5/6 Web Browser\r\n\t\thtIEComponents.put(\"5A8D6EE0-3E18-11D0-821E-444553540000\", \"InetConnectionWiz\"); // Internet Connection Wizard\r\n\t\thtIEComponents.put(\"76C19B30-F0C8-11CF-87CC-0020AFEECF20\", \"JapaneseDS\"); // Japanese Text Display Support\r\n\t\thtIEComponents.put(\"76C19B31-F0C8-11CF-87CC-0020AFEECF20\", \"KoreanDS\"); // Korean Text Display Support\r\n\t\thtIEComponents.put(\"76C19B50-F0C8-11CF-87CC-0020AFEECF20\", \"LanguageAS\"); // Language Auto-Selection\r\n\t\thtIEComponents.put(\"08B0E5C0-4FCB-11CF-AAA5-00401C608500\", \"MsftVM\"); // Microsoft virtual machine\r\n\t\thtIEComponents.put(\"5945C046-LE7D-LLDL-BC44-00C04FD912BE\", \"MSNMessengerSrv\"); // MSN Messenger Service\r\n\t\thtIEComponents.put(\"44BBA842-CC51-11CF-AAFA-00AA00B6015B\", \"NetMeetingNT\"); // NetMeeting NT\r\n\t\thtIEComponents.put(\"3AF36230-A269-11D1-B5BF-0000F8051515\", \"OfflineBrwPack\"); // Offline Browsing Pack\r\n\t\thtIEComponents.put(\"44BBA840-CC51-11CF-AAFA-00AA00B6015C\", \"OutlookExpress\"); // Outlook Express\r\n\t\thtIEComponents.put(\"76C19B32-F0C8-11CF-87CC-0020AFEECF20\", \"PanEuropeanDS\"); // Pan-European Text Display Support\r\n\t\thtIEComponents.put(\"4063BE15-3B08-470D-A0D5-B37161CFFD69\", \"QuickTime\"); // Apple Quick Time\r\n\t\thtIEComponents.put(\"DE4AF3B0-F4D4-11D3-B41A-0050DA2E6C21\", \"QuickTimeCheck\"); // Apple Quick Time Check\r\n\t\thtIEComponents.put(\"3049C3E9-B461-4BC5-8870-4C09146192CA\", \"RealPlayer\"); // RealPlayer Download and Record Plugin for IE\r\n\t\thtIEComponents.put(\"2A202491-F00D-11CF-87CC-0020AFEECF20\", \"ShockwaveDir\"); // Macromedia Shockwave Director\r\n\t\thtIEComponents.put(\"3E01D8E0-A72B-4C9F-99BD-8A6E7B97A48D\", \"Skype\"); // Skype\r\n\t\thtIEComponents.put(\"CC2A9BA0-3BDD-11D0-821E-444553540000\", \"TaskScheduler\"); // Task Scheduler\r\n\t\thtIEComponents.put(\"76C19B35-F0C8-11CF-87CC-0020AFEECF20\", \"ThaiDS\"); // Thai Text Display Support\r\n\t\thtIEComponents.put(\"3BF42070-B3B1-11D1-B5C5-0000F8051515\", \"Uniscribe\"); // Uniscribe\r\n\t\thtIEComponents.put(\"4F645220-306D-11D2-995D-00C04F98BBC9\", \"VBScripting\"); // Visual Basic Scripting Support v5.6\r\n\t\thtIEComponents.put(\"76C19B37-F0C8-11CF-87CC-0020AFEECF20\", \"VietnameseDS\"); // Vietnamese Text Display Support\r\n\t\thtIEComponents.put(\"10072CEC-8CC1-11D1-986E-00A0C955B42F\", \"VML\"); // Vector Graphics Rendering (VML)\r\n\t\thtIEComponents.put(\"90E2BA2E-DD1B-4CDE-9134-7A8B86D33CA7\", \"WebEx\"); // WebEx Productivity Tools\r\n\t\thtIEComponents.put(\"73FA19D0-2D75-11D2-995D-00C04F98BBC9\", \"WebFolders\"); // Web Folders\r\n\t\thtIEComponents.put(\"89820200-ECBD-11CF-8B85-00AA005B4340\", \"WinDesktopUpdateNT\"); // Windows Desktop Update NT\r\n\t\thtIEComponents.put(\"9030D464-4C02-4ABF-8ECC-5164760863C6\", \"WinLive\"); // Windows Live ID Sign-in Helper\r\n\t\thtIEComponents.put(\"6BF52A52-394A-11D3-B153-00C04F79FAA6\", \"WinMediaPlayer\"); // Windows Media Player (Versions 7, 8 or 9)\r\n\t\thtIEComponents.put(\"22D6F312-B0F6-11D0-94AB-0080C74C7E95\", \"WinMediaPlayerTrad\"); // Windows Media Player (Traditional Versions)\r\n\r\n\t\tstrTemp = \"\";\r\n\t\tbolFirst = true;\r\n\r\n\t\t/* strOpera gives full path of the file, extract the filenames, ignoring description and length */\r\n\t\tif (navigator.plugins.length > 0) {\r\n\t\t\tfor (iCount = 0; iCount < navigator.plugins.length; iCount = iCount + 1) {\r\n\t\t\t\tif (bolFirst === true) {\r\n\t\t\t\t\tstrTemp += navigator.plugins[iCount].name;\r\n\t\t\t\t\tbolFirst = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstrTemp += glbSep + navigator.plugins[iCount].name;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (navigator.mimeTypes.length > 0) {\r\n\t\t\tstrMimeType = navigator.mimeTypes;\r\n\t\t\tfor (iCount = 0; iCount < strMimeType.length; iCount = iCount + 1) {\r\n\t\t\t\tif (bolFirst === true) {\r\n\t\t\t\t\tstrTemp += strMimeType[iCount].description;\r\n\t\t\t\t\tbolFirst = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstrTemp += glbSep + strMimeType[iCount].description;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tdocument.body.addBehavior(\"#default#clientCaps\");\r\n\t\t\tstrKey = htIEComponents.keys();\r\n\t\t\tfor (iCount = 0; iCount < htIEComponents.size(); iCount = iCount + 1) {\r\n\t\t\t\tstrVersion = activeXDetect(strKey[iCount]);\r\n\t\t\t\tstrName = htIEComponents.get(strKey[iCount]);\r\n\t\t\t\tif (strVersion) {\r\n\t\t\t\t\tif (bolFirst === true) {\r\n\t\t\t\t\t\tstrTemp = strName + glbPair + strVersion;\r\n\t\t\t\t\t\tbolFirst = false;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstrTemp += glbSep + strName + glbPair + strVersion;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstrTemp = strTemp.replace(/,/g, \".\");\r\n\t\t}\r\n\t\tstrTemp = stripIllegalChars(strTemp);\r\n\t\tif (strTemp === \"\") {\r\n\t\t\tstrTemp = \"None\";\r\n\t\t}\r\n\t\tstrOut = strTemp;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn glbOnError;\r\n\t}\r\n}"],"sourceRoot":""} \ No newline at end of file
diff --git a/webAO/fingerprint.js b/webAO/fingerprint.js
new file mode 100644
index 0000000..8fa2063
--- /dev/null
+++ b/webAO/fingerprint.js
@@ -0,0 +1,1192 @@
+/*
+***************************************************
+** http://davealger.info
+***************************************************
+
+This is a javascript only way to fingerprint a user with better than 90% accuracy in as few bytes as possible and no cookie storage!
+
+Special thanks to Valentin Vasilyev for the original fingerprintjs slightly modified and to Open Source Device Fingerprinting by Dark Wave Tech for the various identity functions
+
+***************************************************
+*/
+export default class Fingerprint {
+ constructor(options) {
+ var nativeForEach, nativeMap;
+ nativeForEach = Array.prototype.forEach;
+ nativeMap = Array.prototype.map;
+ this.each = function(obj, iterator, context) {
+ if (obj === null) {
+ return;
+ }
+ if (nativeForEach && obj.forEach === nativeForEach) {
+ obj.forEach(iterator, context);
+ } else if (obj.length === +obj.length) {
+ for (var i = 0, l = obj.length; i < l; i++) {
+ if (iterator.call(context, obj[i], i, obj) === {})
+ return;
+ }
+ } else {
+ for (var key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ if (iterator.call(context, obj[key], key, obj) === {})
+ return;
+ }
+ }
+ }
+ };
+ this.map = function(obj, iterator, context) {
+ var results = [];
+ if (obj == null)
+ return results;
+ if (nativeMap && obj.map === nativeMap)
+ return obj.map(iterator, context);
+ this.each(obj, function(value, index, list) {
+ results[results.length] = iterator.call(context, value, index, list);
+ });
+ return results;
+ };
+ if (typeof options == "object") {
+ this.hasher = options.hasher;
+ this.screen_resolution = options.screen_resolution;
+ this.screen_orientation = options.screen_orientation;
+ this.canvas = options.canvas;
+ this.ie_activex = options.ie_activex;
+ } else if (typeof options == "function") {
+ this.hasher = options;
+ }
+ }
+}
+Fingerprint.prototype = {
+ get: function() {
+ var keys = [];
+ keys.push(navigator.userAgent);
+ keys.push(navigator.language);
+ keys.push(screen.colorDepth);
+ if (this.screen_resolution) {
+ var resolution = this.getScreenResolution();
+ if (typeof resolution !== "undefined") {
+ keys.push(this.getScreenResolution().join("x"));
+ }
+ }
+ keys.push(new Date().getTimezoneOffset());
+ keys.push(this.hasSessionStorage());
+ keys.push(this.hasLocalStorage());
+ keys.push(!!window.indexedDB);
+ if (document.body) {
+ keys.push(typeof(document.body.addBehavior));
+ } else {
+ keys.push(typeof undefined);
+ }
+ keys.push(typeof(window.openDatabase));
+ keys.push(navigator.cpuClass);
+ keys.push(navigator.platform);
+ keys.push(navigator.doNotTrack);
+ keys.push(this.getPluginsString());
+ if (this.canvas && this.isCanvasSupported()) {
+ keys.push(this.getCanvasFingerprint());
+ }
+ if (this.hasher) {
+ return this.hasher(keys.join("###"), 31);
+ } else {
+ return this.murmurhash3_32_gc(keys.join("###"), 31);
+ }
+ },
+ murmurhash3_32_gc: function(key, seed) {
+ var remainder, bytes, h1, h1b, c1, c2, k1, i;
+ remainder = key.length & 3;
+ bytes = key.length - remainder;
+ h1 = seed;
+ c1 = 0xcc9e2d51;
+ c2 = 0x1b873593;
+ i = 0;
+ while (i < bytes) {
+ k1 = ((key.charCodeAt(i) & 0xff)) | ((key.charCodeAt(++i) & 0xff) << 8) | ((key.charCodeAt(++i) & 0xff) << 16) | ((key.charCodeAt(++i) & 0xff) << 24);
+ ++i;
+ k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;
+ k1 = (k1 << 15) | (k1 >>> 17);
+ k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;
+ h1 ^= k1;
+ h1 = (h1 << 13) | (h1 >>> 19);
+ h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;
+ h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));
+ }
+ k1 = 0;
+ switch (remainder) {
+ case 3:
+ k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;
+ case 2:
+ k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;
+ case 1:
+ k1 ^= (key.charCodeAt(i) & 0xff);
+ k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;
+ k1 = (k1 << 15) | (k1 >>> 17);
+ k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;
+ h1 ^= k1;
+ }
+ h1 ^= key.length;
+ h1 ^= h1 >>> 16;
+ h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;
+ h1 ^= h1 >>> 13;
+ h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;
+ h1 ^= h1 >>> 16;
+ return h1 >>> 0;
+ },
+ hasLocalStorage: function() {
+ try {
+ return !!window.localStorage;
+ } catch (e) {
+ return true;
+ }
+ },
+ hasSessionStorage: function() {
+ try {
+ return !!window.sessionStorage;
+ } catch (e) {
+ return true;
+ }
+ },
+ isCanvasSupported: function() {
+ var elem = document.createElement("canvas");
+ return !!(elem.getContext && elem.getContext("2d"));
+ },
+ isIE: function() {
+ if (navigator.appName === "Microsoft Internet Explorer") {
+ return true;
+ } else if (navigator.appName === "Netscape" && /Trident/.test(navigator.userAgent)) {
+ return true;
+ }
+ return false;
+ },
+ getPluginsString: function() {
+ if (this.isIE() && this.ie_activex) {
+ return this.getIEPluginsString();
+ } else {
+ return this.getRegularPluginsString();
+ }
+ },
+ getRegularPluginsString: function() {
+ return this.map(navigator.plugins, function(p) {
+ var mimeTypes = this.map(p, function(mt) {
+ return [mt.type, mt.suffixes].join("~");
+ }).join(",");
+ return [p.name, p.description, mimeTypes].join("::");
+ }, this).join(";");
+ },
+ getIEPluginsString: function() {
+ if (window.ActiveXObject) {
+ var names = ["ShockwaveFlash.ShockwaveFlash", "AcroPDF.PDF", "PDF.PdfCtrl", "QuickTime.QuickTime", "rmocx.RealPlayer G2 Control", "rmocx.RealPlayer G2 Control.1", "RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)", "RealVideo.RealVideo(tm) ActiveX Control (32-bit)", "RealPlayer", "SWCtl.SWCtl", "WMPlayer.OCX", "AgControl.AgControl", "Skype.Detection"];
+ return this.map(names, function(name) {
+ try {
+ new ActiveXObject(name);
+ return name;
+ } catch (e) {
+ return null;
+ }
+ }).join(";");
+ } else {
+ return "";
+ }
+ },
+ getScreenResolution: function() {
+ var resolution;
+ if (this.screen_orientation) {
+ resolution = (screen.height > screen.width) ? [screen.height, screen.width] : [screen.width, screen.height];
+ } else {
+ resolution = [screen.height, screen.width];
+ }
+ return resolution;
+ },
+ getCanvasFingerprint: function() {
+ var canvas = document.createElement("canvas");
+ var ctx = canvas.getContext("2d");
+ var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+-={}|[]\:\"<>?;,.";
+ ctx.textBaseline = "top";
+ ctx.font = "14px 'Arial'";
+ ctx.textBaseline = "alphabetic";
+ ctx.fillStyle = "#f60";
+ ctx.fillRect(125, 1, 62, 20);
+ ctx.fillStyle = "#069";
+ ctx.fillText(txt, 2, 15);
+ ctx.fillStyle = "rgba(102, 204, 0, 0.7)";
+ ctx.fillText(txt, 4, 17);
+ return canvas.toDataURL();
+ }
+};
+
+/**************************************************/
+
+/**
+http://www.darkwavetech.com/fingerprint/fingerprint_code.html
+**/
+function fingerprint_flash() {
+ "use strict";
+ var strOnError, objPlayerVersion, strVersion, strOut;
+
+ strOnError = "N/A";
+ objPlayerVersion = null;
+ strVersion = null;
+ strOut = null;
+
+ try {
+ objPlayerVersion = swfobject.getFlashPlayerVersion();
+ strVersion = objPlayerVersion.major + "." + objPlayerVersion.minor + "." + objPlayerVersion.release;
+ if (strVersion === "0.0.0") {
+ strVersion = "N/A";
+ }
+ strOut = strVersion;
+ return strOut;
+ } catch (err) {
+ return strOnError;
+ }
+}
+
+function fingerprint_browser() {
+ "use strict";
+ var strOnError, strUserAgent, numVersion, strBrowser, strOut;
+
+ strOnError = "Error";
+ strUserAgent = null;
+ numVersion = null;
+ strBrowser = null;
+ strOut = null;
+
+ try {
+ strUserAgent = navigator.userAgent.toLowerCase();
+ if (/msie (\d+\.\d+);/.test(strUserAgent)) { //test for MSIE x.x;
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ if (strUserAgent.indexOf("trident/6") > -1) {
+ numVersion = 10;
+ }
+ if (strUserAgent.indexOf("trident/5") > -1) {
+ numVersion = 9;
+ }
+ if (strUserAgent.indexOf("trident/4") > -1) {
+ numVersion = 8;
+ }
+ strBrowser = "Internet Explorer " + numVersion;
+ } else if (strUserAgent.indexOf("trident/7") > -1) { //IE 11+ gets rid of the legacy 'MSIE' in the user-agent string;
+ numVersion = 11;
+ strBrowser = "Internet Explorer " + numVersion;
+ } else if (/firefox[\/\s](\d+\.\d+)/.test(strUserAgent)) { //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Firefox " + numVersion;
+ } else if (/opera[\/\s](\d+\.\d+)/.test(strUserAgent)) { //test for Opera/x.x or Opera x.x (ignoring remaining decimal places);
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Opera " + numVersion;
+ } else if (/chrome[\/\s](\d+\.\d+)/.test(strUserAgent)) { //test for Chrome/x.x or Chrome x.x (ignoring remaining digits);
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Chrome " + numVersion;
+ } else if (/version[\/\s](\d+\.\d+)/.test(strUserAgent)) { //test for Version/x.x or Version x.x (ignoring remaining digits);
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Safari " + numVersion;
+ } else if (/rv[\/\s](\d+\.\d+)/.test(strUserAgent)) { //test for rv/x.x or rv x.x (ignoring remaining digits);
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Mozilla " + numVersion;
+ } else if (/mozilla[\/\s](\d+\.\d+)/.test(strUserAgent)) { //test for Mozilla/x.x or Mozilla x.x (ignoring remaining digits);
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Mozilla " + numVersion;
+ } else if (/binget[\/\s](\d+\.\d+)/.test(strUserAgent)) { //test for BinGet/x.x or BinGet x.x (ignoring remaining digits);
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Library (BinGet) " + numVersion;
+ } else if (/curl[\/\s](\d+\.\d+)/.test(strUserAgent)) { //test for Curl/x.x or Curl x.x (ignoring remaining digits);
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Library (cURL) " + numVersion;
+ } else if (/java[\/\s](\d+\.\d+)/.test(strUserAgent)) { //test for Java/x.x or Java x.x (ignoring remaining digits);
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Library (Java) " + numVersion;
+ } else if (/libwww-perl[\/\s](\d+\.\d+)/.test(strUserAgent)) { //test for libwww-perl/x.x or libwww-perl x.x (ignoring remaining digits);
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Library (libwww-perl) " + numVersion;
+ } else if (/microsoft url control -[\s](\d+\.\d+)/.test(strUserAgent)) { //test for Microsoft URL Control - x.x (ignoring remaining digits);
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Library (Microsoft URL Control) " + numVersion;
+ } else if (/peach[\/\s](\d+\.\d+)/.test(strUserAgent)) { //test for Peach/x.x or Peach x.x (ignoring remaining digits);
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Library (Peach) " + numVersion;
+ } else if (/php[\/\s](\d+\.\d+)/.test(strUserAgent)) { //test for PHP/x.x or PHP x.x (ignoring remaining digits);
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Library (PHP) " + numVersion;
+ } else if (/pxyscand[\/\s](\d+\.\d+)/.test(strUserAgent)) { //test for pxyscand/x.x or pxyscand x.x (ignoring remaining digits);
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Library (pxyscand) " + numVersion;
+ } else if (/pycurl[\/\s](\d+\.\d+)/.test(strUserAgent)) { //test for pycurl/x.x or pycurl x.x (ignoring remaining digits);
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Library (PycURL) " + numVersion;
+ } else if (/python-urllib[\/\s](\d+\.\d+)/.test(strUserAgent)) { //test for python-urllib/x.x or python-urllib x.x (ignoring remaining digits);
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Library (Python URLlib) " + numVersion;
+ } else if (/appengine-google/.test(strUserAgent)) { //test for AppEngine-Google;
+ numVersion = Number(RegExp.$1); // capture x.x portion and store as a number
+ strBrowser = "Cloud (Google AppEngine) " + numVersion;
+ } else {
+ strBrowser = "Unknown";
+ }
+ strOut = strBrowser;
+ return strOut;
+ } catch (err) {
+ return strOnError;
+ }
+}
+
+function fingerprint_canvas() {
+ "use strict";
+ var strOnError, canvas, strCText, strText, strOut;
+
+ strOnError = "Error";
+ canvas = null;
+ strCText = null;
+ strText = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`~1!2@3#4$5%6^7&8*9(0)-_=+[{]}|;:',<.>/?";
+ strOut = null;
+
+ try {
+ canvas = document.createElement("canvas");
+ strCText = canvas.getContext("2d");
+ strCText.textBaseline = "top";
+ strCText.font = "14px 'Arial'";
+ strCText.textBaseline = "alphabetic";
+ strCText.fillStyle = "#f60";
+ strCText.fillRect(125, 1, 62, 20);
+ strCText.fillStyle = "#069";
+ strCText.fillText(strText, 2, 15);
+ strCText.fillStyle = "rgba(102, 204, 0, 0.7)";
+ strCText.fillText(strText, 4, 17);
+ strOut = canvas.toDataURL();
+ return strOut;
+ } catch (err) {
+ return strOnError;
+ }
+}
+
+function fingerprint_connection() {
+ "use strict";
+ var strOnError, strConnection, strOut;
+
+ strOnError = "N/A";
+ strConnection = null;
+ strOut = null;
+
+ try {
+ // only on android
+ strConnection = navigator.connection.type;
+ strOut = strConnection;
+ } catch (err) {
+ // return N/A if navigator.connection object does not apply to this device
+ return strOnError;
+ }
+ return strOut;
+}
+
+function fingerprint_cookie() {
+ "use strict";
+ var strOnError, bolCookieEnabled, bolOut;
+
+ strOnError = "Error";
+ bolCookieEnabled = null;
+ bolOut = null;
+
+ try {
+ bolCookieEnabled = (navigator.cookieEnabled) ? true : false;
+
+ //if not IE4+ nor NS6+
+ if (typeof navigator.cookieEnabled === "undefined" && !bolCookieEnabled) {
+ document.cookie = "testcookie";
+ bolCookieEnabled = (document.cookie.indexOf("testcookie") !== -1) ? true : false;
+ }
+ bolOut = bolCookieEnabled;
+ return bolOut;
+ } catch (err) {
+ return strOnError;
+ }
+}
+
+function fingerprint_display() {
+ "use strict";
+ var strSep, strPair, strOnError, strScreen, strDisplay, strOut;
+
+ strSep = "|";
+ strPair = "=";
+ strOnError = "Error";
+ strScreen = null;
+ strDisplay = null;
+ strOut = null;
+
+ try {
+ strScreen = window.screen;
+ if (strScreen) {
+ strDisplay = strScreen.colorDepth + strSep + strScreen.width + strSep + strScreen.height + strSep + strScreen.availWidth + strSep + strScreen.availHeight;
+ }
+ strOut = strDisplay;
+ return strOut;
+ } catch (err) {
+ return strOnError;
+ }
+}
+
+function fingerprint_fontsmoothing() {
+ "use strict";
+ var strOnError, strFontSmoothing, canvasNode, ctx, i, j, imageData, alpha, strOut;
+
+ strOnError = "Unknown";
+ strFontSmoothing = null;
+ canvasNode = null;
+ ctx = null;
+ imageData = null;
+ alpha = null;
+ strOut = null;
+
+ if (typeof(screen.fontSmoothingEnabled) !== "undefined") {
+ strFontSmoothing = screen.fontSmoothingEnabled;
+ } else {
+ try {
+ fontsmoothing = "false";
+ canvasNode = document.createElement("canvas");
+ canvasNode.width = "35";
+ canvasNode.height = "35";
+ canvasNode.style.display = "none";
+ document.body.appendChild(canvasNode);
+ ctx = canvasNode.getContext("2d");
+ ctx.textBaseline = "top";
+ ctx.font = "32px Arial";
+ ctx.fillStyle = "black";
+ ctx.strokeStyle = "black";
+ ctx.fillText("O", 0, 0);
+ for (j = 8; j <= 32; j = j + 1) {
+ for (i = 1; i <= 32; i = i + 1) {
+ imageData = ctx.getImageData(i, j, 1, 1).data;
+ alpha = imageData[3];
+ if (alpha !== 255 && alpha !== 0) {
+ strFontSmoothing = "true"; // font-smoothing must be on.
+ }
+ }
+ }
+ strOut = strFontSmoothing;
+ } catch (err) {
+ return strOnError;
+ }
+ }
+ strOut = strFontSmoothing;
+ return strOut;
+}
+
+function fingerprint_fonts() {
+ "use strict";
+ var strOnError, style, fonts, count, template, fragment, divs, i, font, div, body, result, e;
+
+ strOnError = "Error";
+ style = null;
+ fonts = null;
+ font = null;
+ count = 0;
+ template = null;
+ divs = null;
+ e = null;
+ div = null;
+ body = null;
+ i = 0;
+
+ try {
+ style = "position: absolute; visibility: hidden; display: block !important";
+ fonts = ["8bitoperator", "Abadi MT Condensed Light","Ace Attorney", "Adobe Fangsong Std", "Adobe Hebrew", "Adobe Ming Std", "Agency FB", "Aharoni", "Andalus", "Angsana New", "AngsanaUPC", "Aparajita", "Arab", "Arabic Transparent", "Arabic Typesetting", "Arial Baltic", "Arial Black", "Arial CE", "Arial CYR", "Arial Greek", "Arial TUR", "Arial", "Arimo", "Batang", "BatangChe", "Bauhaus 93", "Bell MT", "Berlin Sans FB", "Bitstream Vera Serif", "Bodoni MT", "Bookman Old Style", "Braggadocio", "Broadway", "Browallia New", "BrowalliaUPC", "Calibri Light", "Calibri", "Californian FB", "Cambria Math", "Cambria", "Candara", "Castellar", "Casual", "Centaur", "Century", "Century Gothic", "Chalkduster", "Colonna MT", "Comic Sans MS", "Consolas", "Constantia", "Copperplate Gothic Light", "Corbel", "Cordia New", "CordiaUPC", "Courier New Baltic", "Courier New CE", "Courier New CYR", "Courier New Greek", "Courier New TUR", "Courier New", "DejaVu Sans", "DFKai-SB","DINEngschrift", "DaunPenh", "David", "DejaVu LGC Sans Mono", "Desdemona", "DilleniaUPC", "DokChampa", "Dotum", "DotumChe", "Dubai", "Ebrima", "Engravers MT", "Eras Bold ITC", "Estrangelo Edessa", "EucrosiaUPC", "Euphemia", "Eurostile", "FangSong", "Forte", "FrankRuehl", "Franklin Gothic Heavy", "Franklin Gothic Medium", "FreesiaUPC", "French Script MT", "Gabriola", "Gautami", "Georgia", "Gigi", "Gisha", "Goudy Old Style", "Gulim", "GulimChe", "GungSeo", "Gungsuh", "GungsuhChe", "Haettenschweiler", "Harrington", "Hei S", "HeiT", "Heisei Kaku Gothic", "Hiragino Sans GB", "Impact", "Informal Roman", "IrisUPC", "Iskoola Pota", "JasmineUPC", "KacstOne", "KaiTi", "Kalinga", "Kartika", "Khmer UI", "Kino MT", "KodchiangUPC", "Kokila", "Kozuka Gothic Pr6N", "Lao UI", "Latha", "Leelawadee", "Levenim MT", "LilyUPC", "Lohit Gujarati", "Loma", "Lucida Bright", "Lucida Console", "Lucida Fax", "Lucida Sans Unicode", "MS Gothic", "MS Mincho", "MS PGothic", "MS PMincho", "MS Reference Sans Serif", "MS UI Gothic", "MV Boli", "Magneto", "Malgun Gothic", "Mangal", "Marlett", "Matura MT Script Capitals", "Meiryo UI", "Meiryo", "Menlo", "Microsoft Himalaya", "Microsoft JhengHei", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Sans Serif", "Microsoft Tai Le", "Microsoft Uighur", "Microsoft YaHei", "Microsoft Yi Baiti", "MingLiU", "MingLiU-ExtB", "MingLiU_HKSCS", "MingLiU_HKSCS-ExtB", "Miriam Fixed", "Miriam", "Mongolian Baiti", "MoolBoran", "More Perfect DOS VGA", "MS Outlook", "NSimSun", "Narkisim", "News Gothic MT", "Niagara Solid", "Nyala", "OCR A","Ocean Sans Std", "OpenSymbol", "PMingLiU", "PMingLiU-ExtB", "Palace Script MT", "Palatino Linotype", "Papyrus", "Perpetua", "Plantagenet Cherokee", "Playbill", "Prelude Bold", "Prelude Condensed Bold", "Prelude Condensed Medium", "Prelude Medium", "PreludeCompressedWGL Black", "PreludeCompressedWGL Bold", "PreludeCompressedWGL Light", "PreludeCompressedWGL Medium", "PreludeCondensedWGL Black", "PreludeCondensedWGL Bold", "PreludeCondensedWGL Light", "PreludeCondensedWGL Medium", "PreludeWGL Black", "PreludeWGL Bold", "PreludeWGL Light", "PreludeWGL Medium", "Raavi", "Rachana", "Rockwell", "Rod", "Sakkal Majalla", "Sawasdee", "Script MT Bold", "Segoe Print", "Segoe Script", "Segoe UI Emoji", "Segoe UI Historic", "Segoe UI Light", "Segoe UI Semibold", "Segoe UI Symbol", "Segoe UI", "Shonar Bangla", "Showcard Gothic", "Shruti", "SimHei", "SimSun", "SimSun-ExtB", "Simplified Arabic Fixed", "Simplified Arabic", "Snap ITC", "Sylfaen", "Symbol", "Tahoma", "TeamViewer13", "Times New Roman Baltic", "Times New Roman CE", "Times New Roman CYR", "Times New Roman Greek", "Times New Roman TUR", "Times New Roman", "TlwgMono", "Traditional Arabic", "Trebuchet MS", "Tunga", "Tw Cen MT Condensed Extra Bold", "Ubuntu", "Umpush", "Univers", "Utopia", "Utsaah", "Vani", "Verdana", "Vijaya", "Vladimir Script", "Vrinda", "Webdings", "Wide Latin", "Wingdings", "Yu Gothic", "Zrnic Rg"];
+ count = fonts.length;
+ template = "<b style=\"display:inline !important; width:auto !important; font:normal 10px/1 'X',sans-serif !important\">ww</b>" + "<b style=\"display:inline !important; width:auto !important; font:normal 10px/1 'X',monospace !important\">ww</b>";
+ fragment = document.createDocumentFragment();
+ divs = [];
+ for (i = 0; i < count; i = i + 1) {
+ font = fonts[i];
+ div = document.createElement("div");
+ font = font.replace(/['"<>]/g, "");
+ div.innerHTML = template.replace(/X/g, font);
+ div.style.cssText = style;
+ fragment.appendChild(div);
+ divs.push(div);
+ }
+ body = document.body;
+ body.insertBefore(fragment, body.firstChild);
+ result = [];
+ for (i = 0; i < count; i = i + 1) {
+ e = divs[i].getElementsByTagName("b");
+ if (e[0].offsetWidth === e[1].offsetWidth) {
+ result.push(fonts[i]);
+ }
+ }
+ // do not combine these two loops, remove child will cause reflow
+ // and induce severe performance hit
+ for (i = 0; i < count; i = i + 1) {
+ body.removeChild(divs[i]);
+ }
+ return result.join("|");
+ } catch (err) {
+ return strOnError;
+ }
+}
+
+function fingerprint_formfields() {
+ "use strict";
+ var i, j, numOfForms, numOfInputs, strFormsInPage, strFormsInputsData, strInputsInForm, strTmp, strOut;
+
+ i = 0;
+ j = 0;
+ numOfForms = 0;
+ numOfInputs = 0;
+ strFormsInPage = "";
+ strFormsInputsData = [];
+ strInputsInForm = "";
+ strTmp = "";
+ strOut = "";
+
+ strFormsInPage = document.getElementsByTagName("form");
+ numOfForms = strFormsInPage.length;
+ strFormsInputsData.push("url=" + window.location.href);
+ for (i = 0; i < numOfForms; i = i + 1) {
+ strFormsInputsData.push("FORM=" + strFormsInPage[i].name);
+ strInputsInForm = strFormsInPage[i].getElementsByTagName("input");
+ numOfInputs = strInputsInForm.length;
+ for (j = 0; j < numOfInputs; j = j + 1) {
+ if (strInputsInForm[j].type !== "hidden") {
+ strFormsInputsData.push("Input=" + strInputsInForm[j].name);
+ }
+ }
+ }
+ strTmp = strFormsInputsData.join("|");
+ strOut = strTmp;
+ return strOut;
+}
+
+function fingerprint_java() {
+ "use strict";
+ var strOnError, strJavaEnabled, strOut;
+
+ strOnError = "Error";
+ strJavaEnabled = null;
+ strOut = null;
+
+ try {
+ if (navigator.javaEnabled()) {
+ strJavaEnabled = "true";
+ } else {
+ strJavaEnabled = "false";
+ }
+ strOut = strJavaEnabled;
+ return strOut;
+ } catch (err) {
+ return strOnError;
+ }
+}
+
+function fingerprint_language() {
+ "use strict";
+ var strSep, strPair, strOnError, strLang, strTypeLng, strTypeBrLng, strTypeSysLng, strTypeUsrLng, strOut;
+
+ strSep = "|";
+ strPair = "=";
+ strOnError = "Error";
+ strLang = null;
+ strTypeLng = null;
+ strTypeBrLng = null;
+ strTypeSysLng = null;
+ strTypeUsrLng = null;
+ strOut = null;
+
+ try {
+ strTypeLng = typeof(navigator.language);
+ strTypeBrLng = typeof(navigator.browserLanguage);
+ strTypeSysLng = typeof(navigator.systemLanguage);
+ strTypeUsrLng = typeof(navigator.userLanguage);
+
+ if (strTypeLng !== "undefined") {
+ strLang = "lang" + strPair + navigator.language + strSep;
+ } else if (strTypeBrLng !== "undefined") {
+ strLang = "lang" + strPair + navigator.browserLanguage + strSep;
+ } else {
+ strLang = "lang" + strPair + strSep;
+ }
+ if (strTypeSysLng !== "undefined") {
+ strLang += "syslang" + strPair + navigator.systemLanguage + strSep;
+ } else {
+ strLang += "syslang" + strPair + strSep;
+ }
+ if (strTypeUsrLng !== "undefined") {
+ strLang += "userlang" + strPair + navigator.userLanguage;
+ } else {
+ strLang += "userlang" + strPair;
+ }
+ strOut = strLang;
+ return strOut;
+ } catch (err) {
+ return strOnError;
+ }
+}
+
+function fingerprint_silverlight() {
+ "use strict";
+ var strOnError, objControl, objPlugin, strSilverlightVersion, strOut;
+
+ strOnError = "Error";
+ objControl = null;
+ objPlugin = null;
+ strSilverlightVersion = null;
+ strOut = null;
+
+ try {
+ try {
+ objControl = new ActiveXObject("AgControl.AgControl");
+ if (objControl.IsVersionSupported("5.0")) {
+ strSilverlightVersion = "5.x";
+ } else if (objControl.IsVersionSupported("4.0")) {
+ strSilverlightVersion = "4.x";
+ } else if (objControl.IsVersionSupported("3.0")) {
+ strSilverlightVersion = "3.x";
+ } else if (objControl.IsVersionSupported("2.0")) {
+ strSilverlightVersion = "2.x";
+ } else {
+ strSilverlightVersion = "1.x";
+ }
+ objControl = null;
+ } catch (e) {
+ objPlugin = navigator.plugins["Silverlight Plug-In"];
+ if (objPlugin) {
+ if (objPlugin.description === "1.0.30226.2") {
+ strSilverlightVersion = "2.x";
+ } else {
+ strSilverlightVersion = parseInt(objPlugin.description[0], 10);
+ }
+ } else {
+ strSilverlightVersion = "N/A";
+ }
+ }
+ strOut = strSilverlightVersion;
+ return strOut;
+ } catch (err) {
+ return strOnError;
+ }
+}
+
+function fingerprint_os() {
+ "use strict";
+ var strSep, strOnError, strUserAgent, strPlatform, strOS, strOSBits, strOut;
+
+ strSep = "|";
+ strOnError = "Error";
+ strUserAgent = null;
+ strPlatform = null;
+ strOS = null;
+ strOSBits = null;
+ strOut = null;
+
+ try {
+ /* navigator.userAgent is supported by all major browsers */
+ strUserAgent = navigator.userAgent.toLowerCase();
+ /* navigator.platform is supported by all major browsers */
+ strPlatform = navigator.platform.toLowerCase();
+ if (strUserAgent.indexOf("windows nt 6.3") !== -1) {
+ strOS = "Windows 8.1";
+ } else if (strUserAgent.indexOf("windows nt 6.2") !== -1) {
+ strOS = "Windows 8";
+ } else if (strUserAgent.indexOf("windows nt 6.1") !== -1) {
+ strOS = "Windows 7";
+ } else if (strUserAgent.indexOf("windows nt 10.0") !== -1) {
+ strOS = "Windows 10";
+ } else if (strUserAgent.indexOf("windows nt 6.0") !== -1) {
+ strOS = "Windows Vista/Windows Server 2008";
+ } else if (strUserAgent.indexOf("windows nt 5.2") !== -1) {
+ strOS = "Windows XP x64/Windows Server 2003";
+ } else if (strUserAgent.indexOf("windows nt 5.1") !== -1) {
+ strOS = "Windows XP";
+ } else if (strUserAgent.indexOf("windows nt 5.01") !== -1) {
+ strOS = "Windows 2000, Service Pack 1 (SP1)";
+ } else if (strUserAgent.indexOf("windows xp") !== -1) {
+ strOS = "Windows XP";
+ } else if (strUserAgent.indexOf("windows 2000") !== -1) {
+ strOS = "Windows 2000";
+ } else if (strUserAgent.indexOf("windows nt 5.0") !== -1) {
+ strOS = "Windows 2000";
+ } else if (strUserAgent.indexOf("iemobile") !== -1) {
+ strOS = "Windows Mobile";
+ } else if (strUserAgent.indexOf("wm5 pie") !== -1) {
+ strOS = "Windows Mobile";
+ } else if (strUserAgent.indexOf("windows") !== -1) {
+ strOS = "Windows (Unknown Version)";
+ } else if (strUserAgent.indexOf("openbsd") !== -1) {
+ strOS = "Open BSD";
+ } else if (strUserAgent.indexOf("sunos") !== -1) {
+ strOS = "Sun OS";
+ } else if (strUserAgent.indexOf("ubuntu") !== -1) {
+ strOS = "Ubuntu";
+ } else if (strUserAgent.indexOf("ipad") !== -1) {
+ strOS = "iOS (iPad)";
+ } else if (strUserAgent.indexOf("ipod") !== -1) {
+ strOS = "iOS (iTouch)";
+ } else if (strUserAgent.indexOf("iphone") !== -1) {
+ strOS = "iOS (iPhone)";
+ } else if (strUserAgent.indexOf("mac os x beta") !== -1) {
+ strOS = "Mac OSX Beta (Kodiak)";
+ } else if (strUserAgent.indexOf("mac os x 10.0") !== -1) {
+ strOS = "Mac OSX Cheetah";
+ } else if (strUserAgent.indexOf("mac os x 10.1") !== -1) {
+ strOS = "Mac OSX Puma";
+ } else if (strUserAgent.indexOf("mac os x 10.2") !== -1) {
+ strOS = "Mac OSX Jaguar";
+ } else if (strUserAgent.indexOf("mac os x 10.3") !== -1) {
+ strOS = "Mac OSX Panther";
+ } else if (strUserAgent.indexOf("mac os x 10.4") !== -1) {
+ strOS = "Mac OSX Tiger";
+ } else if (strUserAgent.indexOf("mac os x 10.5") !== -1) {
+ strOS = "Mac OSX Leopard";
+ } else if (strUserAgent.indexOf("mac os x 10.6") !== -1) {
+ strOS = "Mac OSX Snow Leopard";
+ } else if (strUserAgent.indexOf("mac os x 10.7") !== -1) {
+ strOS = "Mac OSX Lion";
+ } else if (strUserAgent.indexOf("mac os x") !== -1) {
+ strOS = "Mac OSX (Version Unknown)";
+ } else if (strUserAgent.indexOf("macintosh") !== -1) {
+ strOS = "Mac OS Classic";
+ } else if (strUserAgent.indexOf("googletv") !== -1) {
+ strOS = "Android (GoogleTV)";
+ } else if (strUserAgent.indexOf("android") !== -1) {
+ strOS = "Android";
+ } else if (strUserAgent.indexOf("x11") !== -1) {
+ strOS = "UNIX";
+ } else if (strUserAgent.indexOf("nix") !== -1) {
+ strOS = "UNIX";
+ } else if (strUserAgent.indexOf("linux") !== -1) {
+ strOS = "Linux";
+ } else if (strUserAgent.indexOf("qnx") !== -1) {
+ strOS = "QNX";
+ } else if (strUserAgent.indexOf("os/2") !== -1) {
+ strOS = "IBM OS/2";
+ } else if (strUserAgent.indexOf("beos") !== -1) {
+ strOS = "BeOS";
+ } else if (strUserAgent.indexOf("playbook") !== -1) {
+ strOS = "Blackberry (Playbook)";
+ } else if (strUserAgent.indexOf("wnd.rim") !== -1) {
+ strOS = "Blackberry (IE/FF Emulator)";
+ } else if (strUserAgent.indexOf("blackberry") !== -1) {
+ strOS = "Blackberry";
+ } else if (strUserAgent.indexOf("palm") !== -1) {
+ strOS = "Palm OS";
+ } else if (strUserAgent.indexOf("webos") !== -1) {
+ strOS = "WebOS";
+ } else if (strUserAgent.indexOf("hpwos") !== -1) {
+ strOS = "WebOS (HP)";
+ } else if (strUserAgent.indexOf("kindle") !== -1) {
+ strOS = "Kindle";
+ } else if (strUserAgent.indexOf("wii") !== -1) {
+ strOS = "Nintendo (Wii)";
+ } else if (strUserAgent.indexOf("nintendo ds") !== -1) {
+ strOS = "Nintendo (DS)";
+ } else if (strUserAgent.indexOf("playstation 3") !== -1) {
+ strOS = "Sony (Playstation Console)";
+ } else if (strUserAgent.indexOf("playstation portable") !== -1) {
+ strOS = "Sony (Playstation Portable)";
+ } else if (strUserAgent.indexOf("webtv") !== -1) {
+ strOS = "MSN TV (WebTV)";
+ } else if (strUserAgent.indexOf("inferno") !== -1) {
+ strOS = "Inferno";
+ } else {
+ strOS = "Unknown";
+ }
+ if (strPlatform.indexOf("x64") !== -1) {
+ strOSBits = "64 bits";
+ } else if (strPlatform.indexOf("wow64") !== -1) {
+ strOSBits = "64 bits";
+ } else if (strPlatform.indexOf("win64") !== -1) {
+ strOSBits = "64 bits";
+ } else if (strPlatform.indexOf("win32") !== -1) {
+ strOSBits = "32 bits";
+ } else if (strPlatform.indexOf("x64") !== -1) {
+ strOSBits = "64 bits";
+ } else if (strPlatform.indexOf("x32") !== -1) {
+ strOSBits = "32 bits";
+ } else if (strPlatform.indexOf("x86") !== -1) {
+ strOSBits = "32 bits*";
+ } else if (strPlatform.indexOf("ppc") !== -1) {
+ strOSBits = "64 bits";
+ } else if (strPlatform.indexOf("alpha") !== -1) {
+ strOSBits = "64 bits";
+ } else if (strPlatform.indexOf("68k") !== -1) {
+ strOSBits = "64 bits";
+ } else if (strPlatform.indexOf("iphone") !== -1) {
+ strOSBits = "32 bits";
+ } else if (strPlatform.indexOf("android") !== -1) {
+ strOSBits = "32 bits";
+ } else {
+ strOSBits = "Unknown";
+ }
+ strOut = strOS + strSep + strOSBits;
+ return strOut;
+ } catch (err) {
+ return strOnError;
+ }
+}
+
+function fingerprint_useragent() {
+ "use strict";
+ var strSep, strTmp, strUserAgent, strOut;
+
+ strSep = "|";
+ strTmp = null;
+ strUserAgent = null;
+ strOut = null;
+
+ /* navigator.userAgent is supported by all major browsers */
+ strUserAgent = navigator.userAgent.toLowerCase();
+ /* navigator.platform is supported by all major browsers */
+ strTmp = strUserAgent + strSep + navigator.platform;
+ /* navigator.cpuClass only supported in IE */
+ if (navigator.cpuClass) {
+ strTmp += strSep + navigator.cpuClass;
+ }
+ /* navigator.browserLanguage only supported in IE, Safari and Chrome */
+ if (navigator.browserLanguage) {
+ strTmp += strSep + navigator.browserLanguage;
+ } else {
+ strTmp += strSep + navigator.language;
+ }
+ strOut = strTmp;
+ return strOut;
+}
+
+function fingerprint_timezone() {
+ "use strict";
+ var strOnError, dtDate, numOffset, numGMTHours, numOut;
+
+ strOnError = "Error";
+ dtDate = null;
+ numOffset = null;
+ numGMTHours = null;
+ numOut = null;
+
+ try {
+ dtDate = new Date();
+ numOffset = dtDate.getTimezoneOffset();
+ numGMTHours = (numOffset / 60) * (-1);
+ numOut = numGMTHours;
+ return numOut;
+ } catch (err) {
+ return strOnError;
+ }
+}
+
+function fingerprint_touch() {
+ "use strict";
+ var bolTouchEnabled, bolOut;
+
+ bolTouchEnabled = false;
+ bolOut = null;
+
+ try {
+ if (document.createEvent("TouchEvent")) {
+ bolTouchEnabled = true;
+ }
+ bolOut = bolTouchEnabled;
+ return bolOut;
+ } catch (ignore) {
+ bolOut = bolTouchEnabled
+ return bolOut;
+ }
+}
+
+function fingerprint_truebrowser() {
+ "use strict";
+ var strBrowser, strUserAgent, strOut;
+
+ strBrowser = "Unknown";
+ strUserAgent = null;
+ strOut = null;
+
+ strUserAgent = navigator.userAgent.toLowerCase();
+
+ /* Checks for different browsers, cannot use Try/Catch block */
+ if (document.all && document.getElementById && navigator.savePreferences && (strUserAgent.indexOf("Netfront") < 0) && navigator.appName !== "Blazer") {
+ strBrowser = "Escape 5";
+ } else if (navigator.vendor === "KDE") {
+ strBrowser = "Konqueror";
+ } else if (document.childNodes && !document.all && !navigator.taintEnabled && !navigator.accentColorName) {
+ strBrowser = "Safari";
+ } else if (document.childNodes && !document.all && !navigator.taintEnabled && navigator.accentColorName) {
+ strBrowser = "OmniWeb 4.5+";
+ } else if (navigator.__ice_version) {
+ strBrowser = "ICEBrowser";
+ } else if (window.ScriptEngine && ScriptEngine().indexOf("InScript") + 1 && document.createElement) {
+ strBrowser = "iCab 3+";
+ } else if (window.ScriptEngine && ScriptEngine().indexOf("InScript") + 1) {
+ strBrowser = "iCab 2-";
+ } else if (strUserAgent.indexOf("hotjava") + 1 && (navigator.accentColorName) === "undefined") {
+ strBrowser = "HotJava";
+ } else if (document.layers && !document.classes) {
+ strBrowser = "Omniweb 4.2-";
+ } else if (document.layers && !navigator.mimeTypes["*"]) {
+ strBrowser = "Escape 4";
+ } else if (document.layers) {
+ strBrowser = "Netscape 4";
+ } else if (window.opera && document.getElementsByClassName) {
+ strBrowser = "Opera 9.5+";
+ } else if (window.opera && window.getComputedStyle) {
+ strBrowser = "Opera 8";
+ } else if (window.opera && document.childNodes) {
+ strBrowser = "Opera 7";
+ } else if (window.opera) {
+ strBrowser = "Opera " + window.opera.version();
+ } else if (navigator.appName.indexOf("WebTV") + 1) {
+ strBrowser = "WebTV";
+ } else if (strUserAgent.indexOf("netgem") + 1) {
+ strBrowser = "Netgem NetBox";
+ } else if (strUserAgent.indexOf("opentv") + 1) {
+ strBrowser = "OpenTV";
+ } else if (strUserAgent.indexOf("ipanel") + 1) {
+ strBrowser = "iPanel MicroBrowser";
+ } else if (document.getElementById && !document.childNodes) {
+ strBrowser = "Clue browser";
+ } else if (navigator.product && navigator.product.indexOf("Hv") === 0) {
+ strBrowser = "Tkhtml Hv3+";
+ } else if (typeof InstallTrigger !== "undefined") {
+ strBrowser = "Firefox";
+ } else if (window.atob) {
+ strBrowser = "Internet Explorer 10+";
+ } else if (XDomainRequest && window.performance) {
+ strBrowser = "Internet Explorer 9";
+ } else if (XDomainRequest) {
+ strBrowser = "Internet Explorer 8";
+ } else if (document.documentElement && document.documentElement.style.maxHeight !== "undefined") {
+ strBrowser = "Internet Explorer 7"; //xxxxx
+ } else if (document.compatMode && document.all) {
+ strBrowser = "Internet Explorer 6"; //xxxxx
+ } else if (window.createPopup) {
+ strBrowser = "Internet Explorer 5.5";
+ } else if (window.attachEvent) {
+ strBrowser = "Internet Explorer 5";
+ } else if (document.all && navigator.appName !== "Microsoft Pocket Internet Explorer") {
+ strBrowser = "Internet Explorer 4";
+ } else if ((strUserAgent.indexOf("msie") + 1) && window.ActiveXObject) {
+ strBrowser = "Pocket Internet Explorer";
+ } else if (document.getElementById && ((strUserAgent.indexOf("netfront") + 1) || navigator.appName === "Blazer" || navigator.product === "Gecko" || (navigator.appName.indexOf("PSP") + 1) || (navigator.appName.indexOf("PLAYSTATION 3") + 1))) {
+ strBrowser = "NetFront 3+";
+ } else if (navigator.product === "Gecko" && !navigator.savePreferences) {
+ strBrowser = "Gecko engine (Mozilla, Netscape 6+ etc.)";
+ } else if (window.chrome) {
+ strBrowser = "Chrome";
+ }
+ strOut = strBrowser;
+ return strOut;
+}
+
+var glbOnError = "N/A"
+var glbSep = "|";
+
+function activeXDetect(componentClassID) {
+ "use strict";
+ var strComponentVersion, strOut;
+
+ strComponentVersion = "";
+ strOut = "";
+
+ try {
+ strComponentVersion = document.body.getComponentVersion("{" + componentClassID + "}", "ComponentID");
+ if (strComponentVersion !== null) {
+ strOut = strComponentVersion;
+ } else {
+ strOut = false;
+ }
+ return strOut;
+ } catch (err) {
+ return glbOnError;
+ }
+}
+
+function stripIllegalChars(strValue) {
+ "use strict";
+ var iCounter, strOriginal, strOut;
+
+ iCounter = 0;
+ strOriginal = "";
+ strOut = "";
+
+ try {
+ strOriginal = strValue.toLowerCase();
+ for (iCounter = 0; iCounter < strOriginal.length; iCounter = iCounter + 1) {
+ if (strOriginal.charAt(iCounter) !== "\n" && strOriginal.charAt(iCounter) !== "/" && strOriginal.charAt(iCounter) !== "\\") {
+ strOut = strOut + strOriginal.charAt(iCounter);
+ } else if (strOriginal.charAt(iCounter) === "\n") {
+ strOut = strOut + "n";
+ }
+ }
+ return strOut;
+ } catch (err) {
+ return glbOnError;
+ }
+}
+
+function hashtable_containsKey(key) {
+ "use strict";
+ var bolExists, iCounter;
+
+ bolExists = false;
+ iCounter = 0;
+
+ for (iCounter = 0; iCounter < this.hashtable.length; iCounter = iCounter + 1) {
+ if (iCounter === key && this.hashtable[iCounter] !== null) {
+ bolExists = true;
+ break;
+ }
+ }
+ return bolExists;
+}
+
+function hashtable_get(key) {
+ "use strict";
+ return this.hashtable[key];
+}
+
+function hashtable_keys() {
+ "use strict";
+ var keys, iCounter;
+
+ keys = [];
+ iCounter = 0;
+
+ for (iCounter in this.hashtable) {
+ if (this.hashtable[iCounter] !== null) {
+ keys.push(iCounter);
+ }
+ }
+ return keys;
+}
+
+function hashtable_put(key, value) {
+ "use strict";
+ if (key === null || value === null) {
+ throw "NullPointerException {" + key + "},{" + value + "}";
+ }
+ this.hashtable[key] = value;
+}
+
+function hashtable_size() {
+ "use strict";
+ var iSize, iCounter, iOut;
+
+ iSize = 0;
+ iCounter = 0;
+ iOut = 0;
+
+ for (iCounter in this.hashtable) {
+ if (this.hashtable[iCounter] !== null) {
+ iSize = iSize + 1;
+ }
+ }
+ iOut = iSize;
+ return iOut;
+}
+
+function Hashtable() {
+ "use strict";
+ this.containsKey = hashtable_containsKey;
+ this.get = hashtable_get;
+ this.keys = hashtable_keys;
+ this.put = hashtable_put;
+ this.size = hashtable_size;
+ this.hashtable = [];
+}
+
+/* Detect Plugins */
+function fingerprint_plugins() {
+ "use strict";
+ var htIEComponents, strKey, strName, strVersion, strTemp, bolFirst, iCount, strMimeType, strOut;
+
+ try {
+ /* Create hashtable of IE components */
+ htIEComponents = new Hashtable();
+ htIEComponents.put("7790769C-0471-11D2-AF11-00C04FA35D02", "AddressBook"); // Address Book
+ htIEComponents.put("47F67D00-9E55-11D1-BAEF-00C04FC2D130", "AolArtFormat"); // AOL ART Image Format Support
+ htIEComponents.put("76C19B38-F0C8-11CF-87CC-0020AFEECF20", "ArabicDS"); // Arabic Text Display Support
+ htIEComponents.put("76C19B34-F0C8-11CF-87CC-0020AFEECF20", "ChineseSDS"); // Chinese (Simplified) Text Display Support
+ htIEComponents.put("76C19B33-F0C8-11CF-87CC-0020AFEECF20", "ChineseTDS"); // Chinese (traditional) Text Display Support
+ htIEComponents.put("238F6F83-B8B4-11CF-8771-00A024541EE3", "CitrixICA"); // Citrix ICA Client
+ htIEComponents.put("283807B5-2C60-11D0-A31D-00AA00B92C03", "DirectAnim"); // DirectAnimation
+ htIEComponents.put("44BBA848-CC51-11CF-AAFA-00AA00B6015C", "DirectShow"); // DirectShow
+ htIEComponents.put("9381D8F2-0288-11D0-9501-00AA00B911A5", "DynHTML"); // Dynamic HTML Data Binding
+ htIEComponents.put("4F216970-C90C-11D1-B5C7-0000F8051515", "DynHTML4Java"); // Dynamic HTML Data Binding for Java
+ htIEComponents.put("D27CDB6E-AE6D-11CF-96B8-444553540000", "Flash"); // Macromedia Flash
+ htIEComponents.put("76C19B36-F0C8-11CF-87CC-0020AFEECF20", "HebrewDS"); // Hebrew Text Display Support
+ htIEComponents.put("630B1DA0-B465-11D1-9948-00C04F98BBC9", "IEBrwEnh"); // Internet Explorer Browsing Enhancements
+ htIEComponents.put("08B0E5C0-4FCB-11CF-AAA5-00401C608555", "IEClass4Java"); // Internet Explorer Classes for Java
+ htIEComponents.put("45EA75A0-A269-11D1-B5BF-0000F8051515", "IEHelp"); // Internet Explorer Help
+ htIEComponents.put("DE5AED00-A4BF-11D1-9948-00C04F98BBC9", "IEHelpEng"); // Internet Explorer Help Engine
+ htIEComponents.put("89820200-ECBD-11CF-8B85-00AA005B4383", "IE5WebBrw"); // Internet Explorer 5/6 Web Browser
+ htIEComponents.put("5A8D6EE0-3E18-11D0-821E-444553540000", "InetConnectionWiz"); // Internet Connection Wizard
+ htIEComponents.put("76C19B30-F0C8-11CF-87CC-0020AFEECF20", "JapaneseDS"); // Japanese Text Display Support
+ htIEComponents.put("76C19B31-F0C8-11CF-87CC-0020AFEECF20", "KoreanDS"); // Korean Text Display Support
+ htIEComponents.put("76C19B50-F0C8-11CF-87CC-0020AFEECF20", "LanguageAS"); // Language Auto-Selection
+ htIEComponents.put("08B0E5C0-4FCB-11CF-AAA5-00401C608500", "MsftVM"); // Microsoft virtual machine
+ htIEComponents.put("5945C046-LE7D-LLDL-BC44-00C04FD912BE", "MSNMessengerSrv"); // MSN Messenger Service
+ htIEComponents.put("44BBA842-CC51-11CF-AAFA-00AA00B6015B", "NetMeetingNT"); // NetMeeting NT
+ htIEComponents.put("3AF36230-A269-11D1-B5BF-0000F8051515", "OfflineBrwPack"); // Offline Browsing Pack
+ htIEComponents.put("44BBA840-CC51-11CF-AAFA-00AA00B6015C", "OutlookExpress"); // Outlook Express
+ htIEComponents.put("76C19B32-F0C8-11CF-87CC-0020AFEECF20", "PanEuropeanDS"); // Pan-European Text Display Support
+ htIEComponents.put("4063BE15-3B08-470D-A0D5-B37161CFFD69", "QuickTime"); // Apple Quick Time
+ htIEComponents.put("DE4AF3B0-F4D4-11D3-B41A-0050DA2E6C21", "QuickTimeCheck"); // Apple Quick Time Check
+ htIEComponents.put("3049C3E9-B461-4BC5-8870-4C09146192CA", "RealPlayer"); // RealPlayer Download and Record Plugin for IE
+ htIEComponents.put("2A202491-F00D-11CF-87CC-0020AFEECF20", "ShockwaveDir"); // Macromedia Shockwave Director
+ htIEComponents.put("3E01D8E0-A72B-4C9F-99BD-8A6E7B97A48D", "Skype"); // Skype
+ htIEComponents.put("CC2A9BA0-3BDD-11D0-821E-444553540000", "TaskScheduler"); // Task Scheduler
+ htIEComponents.put("76C19B35-F0C8-11CF-87CC-0020AFEECF20", "ThaiDS"); // Thai Text Display Support
+ htIEComponents.put("3BF42070-B3B1-11D1-B5C5-0000F8051515", "Uniscribe"); // Uniscribe
+ htIEComponents.put("4F645220-306D-11D2-995D-00C04F98BBC9", "VBScripting"); // Visual Basic Scripting Support v5.6
+ htIEComponents.put("76C19B37-F0C8-11CF-87CC-0020AFEECF20", "VietnameseDS"); // Vietnamese Text Display Support
+ htIEComponents.put("10072CEC-8CC1-11D1-986E-00A0C955B42F", "VML"); // Vector Graphics Rendering (VML)
+ htIEComponents.put("90E2BA2E-DD1B-4CDE-9134-7A8B86D33CA7", "WebEx"); // WebEx Productivity Tools
+ htIEComponents.put("73FA19D0-2D75-11D2-995D-00C04F98BBC9", "WebFolders"); // Web Folders
+ htIEComponents.put("89820200-ECBD-11CF-8B85-00AA005B4340", "WinDesktopUpdateNT"); // Windows Desktop Update NT
+ htIEComponents.put("9030D464-4C02-4ABF-8ECC-5164760863C6", "WinLive"); // Windows Live ID Sign-in Helper
+ htIEComponents.put("6BF52A52-394A-11D3-B153-00C04F79FAA6", "WinMediaPlayer"); // Windows Media Player (Versions 7, 8 or 9)
+ htIEComponents.put("22D6F312-B0F6-11D0-94AB-0080C74C7E95", "WinMediaPlayerTrad"); // Windows Media Player (Traditional Versions)
+
+ strTemp = "";
+ bolFirst = true;
+
+ /* strOpera gives full path of the file, extract the filenames, ignoring description and length */
+ if (navigator.plugins.length > 0) {
+ for (iCount = 0; iCount < navigator.plugins.length; iCount = iCount + 1) {
+ if (bolFirst === true) {
+ strTemp += navigator.plugins[iCount].name;
+ bolFirst = false;
+ } else {
+ strTemp += glbSep + navigator.plugins[iCount].name;
+ }
+ }
+ } else if (navigator.mimeTypes.length > 0) {
+ strMimeType = navigator.mimeTypes;
+ for (iCount = 0; iCount < strMimeType.length; iCount = iCount + 1) {
+ if (bolFirst === true) {
+ strTemp += strMimeType[iCount].description;
+ bolFirst = false;
+ } else {
+ strTemp += glbSep + strMimeType[iCount].description;
+ }
+ }
+ } else {
+ document.body.addBehavior("#default#clientCaps");
+ strKey = htIEComponents.keys();
+ for (iCount = 0; iCount < htIEComponents.size(); iCount = iCount + 1) {
+ strVersion = activeXDetect(strKey[iCount]);
+ strName = htIEComponents.get(strKey[iCount]);
+ if (strVersion) {
+ if (bolFirst === true) {
+ strTemp = strName + glbPair + strVersion;
+ bolFirst = false;
+ } else {
+ strTemp += glbSep + strName + glbPair + strVersion;
+ }
+ }
+ }
+ strTemp = strTemp.replace(/,/g, ".");
+ }
+ strTemp = stripIllegalChars(strTemp);
+ if (strTemp === "") {
+ strTemp = "None";
+ }
+ strOut = strTemp;
+ return strOut;
+ } catch (err) {
+ return glbOnError;
+ }
+} \ No newline at end of file
diff --git a/webAO/ui.b.js b/webAO/ui.b.js
index f7f1f9f..ab28f59 100644
--- a/webAO/ui.b.js
+++ b/webAO/ui.b.js
@@ -1,2 +1,2 @@
-!function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:i})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=5)}([,,,function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){"use strict";(function(e){var n,i,o,s,r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function h(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}"undefined"==typeof self||self,s=function(){var e=Math.min,t=Math.floor,n=Math.max;return function(e){function t(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=35)}([function(e,t,n){t.e=function(e){return $.zepto?e.touches?e.targetTouches[0]:e:e.originalEvent&&e.originalEvent.touches?e.originalEvent.touches[0]:e},t.j=function(e){var t,n;if("function"==typeof o.a)return o()(e);for(n in t=[],e)t.push(n);return t},t.d=function(e){if(window.location.hash)return function(e){var t=location.hash.match(new RegExp(e+"=([^&]*)"));return t?t[1]:null}(e);if(!window.location.search)return null;var t,n,i=window.location.search.substr(1).split("&"),o={};for(n=0;n<i.length;n++)o[(t=i[n].split("="))[0]]=t[1];return o[e]||null},t.b=function(e,t){for(var n in t)e[n]=t[n];return e},t.a=function(e){return(window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)})(function(){e()})},t.g=function(e,t){if(!(t instanceof Array))throw new Error("Haystack is not an Array");if(t.indexOf)return t.indexOf(e);for(var n=0;n<t.length;n++)if(t[n]===e)return n;return-1},n.d(t,"h",function(){return r}),t.c=function(e,t,n){if(void 0!==Function.prototype.bind)return Function.prototype.bind.apply(e,[t].concat(n||[]));var i=function i(){var o=(n||[]).concat(Array.prototype.slice.call(arguments,0));return this instanceof i?void e.apply(this,o):e.apply(t,o)};return i.prototype=e.prototype,i},t.i=function(){return"function"==typeof Date.now?Date.now():(new Date).getTime()},t.f=function(){return(1e15*Math.random()).toString(36).replace(".","")},t.k=function(e){return $.trim(e.replace(/(<([^>]+)>)/gi,""))};var i=n(40),o=n.n(i),s=n(60),r=(n.n(s),"function"!=typeof/./&&"object"!=("undefined"==typeof Int8Array?"undefined":a(Int8Array))?function(e){return"function"==typeof e||!1}:function(e){return"[object Function]"===toString.call(e)})},function(e,t,n){var i=n(0),o="__all";t.a=o,t.b=function(){return function e(){h(this,e),this._mSubscriptions={},this._mSubscriptions[o]=[],this.on=function(e,t,n){if(!Object(i.h)(t))throw new Error("Tried to listen to event "+e+" with non-function callback "+t);this._mSubscriptions[e]||(this._mSubscriptions[e]=[]),this._mSubscriptions[e].push({fn:t,ctx:n})},this.emit=function(e){var t,n,i;i=Array.prototype.slice.call(arguments,1);var s=this._mSubscriptions[e];if(s)for(s=s.slice(),t=0;t<s.length;t++)n=s[t].ctx||{},s[t].fn.apply(n,i);i.unshift(e);var r=this._mSubscriptions[o].slice();for(t=0;t<r.length;t++)n=r[t].ctx||{},r[t].fn.apply(n,i)},this.unbind=function(e,t,n){if(!this._mSubscriptions[e])throw new Error("No subscribtions to unsubscribe for event "+e);var i,o=!1;for(i=0;i<this._mSubscriptions[e].length;i++)t&&this._mSubscriptions[e][i].fn!==t||n&&n!==this._mSubscriptions[e][i].ctx||(this._mSubscriptions[e].splice(i,1),o=!0);if(0==o)throw new Error("Nothing to unbind for "+e)},this.off=this.unbind,this.trigger=this.emit}}()},function(e){var t=e.exports={version:"2.5.6"};"number"==typeof __e&&(__e=t)},function(e,t,n){var i=n(1),o=n(26),s=n(12),a=n(27),u=n(66),d=n(0),f=function(e){function t(e,n,o){var s;return h(this,t),(s=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this))).config=s._extendItemNode(n),s.type=n.type,s.contentItems=[],s.parent=o,s.isInitialised=!1,s.isMaximised=!1,s.isRoot=!1,s.isRow=!1,s.isColumn=!1,s.isStack=!1,s.isComponent=!1,s.layoutManager=e,s._pendingEventPropagations={},s._throttledEvents=["stateChanged"],s.on(i.a,s._propagateEvent,s),n.content&&s._createContentItems(n),s}return c(t,i.b),r(t,[{key:"setSize",value:function(){throw new Error("Abstract Method")}},{key:"callDownwards",value:function(e,t,n,i){var o;for(!0!==n&&!0!==i&&this[e].apply(this,t||[]),o=0;o<this.contentItems.length;o++)this.contentItems[o].callDownwards(e,t,n);!0===n&&!0!==i&&this[e].apply(this,t||[])}},{key:"removeChild",value:function(e,t){var n=Object(d.g)(e,this.contentItems);if(-1===n)throw new Error("Can't remove child item. Unknown content item");!0!==t&&this.contentItems[n]._$destroy(),this.contentItems.splice(n,1),this.config.content.splice(n,1),0<this.contentItems.length?this.callDownwards("setSize"):!(this instanceof s.a)&&!0===this.config.isClosable&&this.parent.removeChild(this)}},{key:"undisplayChild",value:function(e){if(-1===Object(d.g)(e,this.contentItems))throw new Error("Can't remove child item. Unknown content item");this instanceof s.a||!0!==this.config.isClosable||this.parent.undisplayChild(this)}},{key:"addChild",value:function(e,t){void 0===t&&(t=this.contentItems.length),this.contentItems.splice(t,0,e),void 0===this.config.content&&(this.config.content=[]),this.config.content.splice(t,0,e.config),e.parent=this,!0===e.parent.isInitialised&&!1===e.isInitialised&&e._$init()}},{key:"replaceChild",value:function(e,t,n){t=this.layoutManager._$normalizeContentItem(t);var i=Object(d.g)(e,this.contentItems),o=e.element[0].parentNode;if(-1===i)throw new Error("Can't replace child. oldChild is not child of this");o.replaceChild(t.element[0],e.element[0]),!0===n&&(e.parent=null,e._$destroy()),this.contentItems[i]=t,t.parent=this,this.isStack&&(this.header.tabs[i].contentItem=t),!0===t.parent.isInitialised&&!1===t.isInitialised&&t._$init(),this.callDownwards("setSize")}},{key:"remove",value:function(){this.parent.removeChild(this)}},{key:"popout",value:function(){var e=this.layoutManager.createPopout(this);return this.emitBubblingEvent("stateChanged"),e}},{key:"toggleMaximise",value:function(e){e&&e.preventDefault(),!0===this.isMaximised?this.layoutManager._$minimiseItem(this):this.layoutManager._$maximiseItem(this),this.isMaximised=!this.isMaximised,this.emitBubblingEvent("stateChanged")}},{key:"select",value:function(){this.layoutManager.selectedItem!==this&&(this.layoutManager.selectItem(this,!0),this.element.addClass("lm_selected"))}},{key:"deselect",value:function(){this.layoutManager.selectedItem===this&&(this.layoutManager.selectedItem=null,this.element.removeClass("lm_selected"))}},{key:"setTitle",value:function(e){this.config.title=e,this.emit("titleChanged",e),this.emit("stateChanged")}},{key:"hasId",value:function(e){return!!this.config.id&&("string"==typeof this.config.id?this.config.id===e:this.config.id instanceof Array?-1!==Object(d.g)(e,this.config.id):void 0)}},{key:"addId",value:function(e){this.hasId(e)||(this.config.id?"string"==typeof this.config.id?this.config.id=[this.config.id,e]:this.config.id instanceof Array&&this.config.id.push(e):this.config.id=e)}},{key:"removeId",value:function(e){if(!this.hasId(e))throw new Error("Id not found");if("string"==typeof this.config.id)delete this.config.id;else if(this.config.id instanceof Array){var t=Object(d.g)(e,this.config.id);this.config.id.splice(t,1)}}},{key:"getItemsByFilter",value:function(e){var t=[];return function n(i){for(var o=0;o<i.contentItems.length;o++)!0===e(i.contentItems[o])&&t.push(i.contentItems[o]),n(i.contentItems[o])}(this),t}},{key:"getItemsById",value:function(e){return this.getItemsByFilter(function(t){return t.config.id instanceof Array?-1!==Object(d.g)(e,t.config.id):t.config.id===e})}},{key:"getItemsByType",value:function(e){return this._$getItemsByProperty("type",e)}},{key:"getComponentsByName",value:function(e){var t,n=this._$getItemsByProperty("componentName",e),i=[];for(t=0;t<n.length;t++)i.push(n[t].instance);return i}},{key:"_$getItemsByProperty",value:function(e,t){return this.getItemsByFilter(function(n){return n[e]===t})}},{key:"_$setParent",value:function(e){this.parent=e}},{key:"_$highlightDropZone",value:function(e,t,n){this.layoutManager.dropTargetIndicator.highlightArea(n)}},{key:"_$onDrop",value:function(e){this.addChild(e)}},{key:"_$hide",value:function(){this._callOnActiveComponents("hide"),this.element.hide(),this.layoutManager.updateSize()}},{key:"_$show",value:function(){this._callOnActiveComponents("show"),this.element.show(),this.layoutManager.updateSize()}},{key:"_callOnActiveComponents",value:function(e){var t,n,i=this.getItemsByType("stack");for(n=0;n<i.length;n++)(t=i[n].getActiveContentItem())&&t.isComponent&&t.container[e]()}},{key:"_$destroy",value:function(){this.emitBubblingEvent("beforeItemDestroyed"),this.callDownwards("_$destroy",[],!0,!0),this.element.remove(),this.emitBubblingEvent("itemDestroyed")}},{key:"_$getArea",value:function(e){var t=(e=e||this.element).offset(),n=e.width(),i=e.height();return{x1:t.left,y1:t.top,x2:t.left+n,y2:t.top+i,surface:n*i,contentItem:this}}},{key:"_$init",value:function(){var e;for(this.setSize(),e=0;e<this.contentItems.length;e++)this.childElementContainer.append(this.contentItems[e].element);this.isInitialised=!0,this.emitBubblingEvent("itemCreated"),this.emitBubblingEvent(this.type+"Created")}},{key:"emitBubblingEvent",value:function(e){var t=new o.a(e,this);this.emit(e,t)}},{key:"_createContentItems",value:function(e){var t,n;if(!(e.content instanceof Array))throw new a.a("content must be an Array",e);for(n=0;n<e.content.length;n++)t=this.layoutManager.createContentItem(e.content[n],this),this.contentItems.push(t)}},{key:"_extendItemNode",value:function(e){for(var t in u.a)void 0===e[t]&&(e[t]=u.a[t]);return e}},{key:"_propagateEvent",value:function(e,t){t instanceof o.a&&!1===t.isPropagationStopped&&!0===this.isInitialised&&(!1===this.isRoot&&this.parent?this.parent.emit.apply(this.parent,Array.prototype.slice.call(arguments,0)):this._scheduleEventPropagationToLayoutManager(e,t))}},{key:"_scheduleEventPropagationToLayoutManager",value:function(e,t){-1===Object(d.g)(e,this._throttledEvents)?this.layoutManager.emit(e,t.origin):!0!==this._pendingEventPropagations[e]&&(this._pendingEventPropagations[e]=!0,Object(d.a)(Object(d.c)(this._propagateEventToLayoutManager,this,[e,t])))}},{key:"_propagateEventToLayoutManager",value:function(e,t){this._pendingEventPropagations[e]=!1,this.layoutManager.emit(e,t)}}]),t}();t.a=f},function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},function(e,t,n){e.exports=!n(10)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,i,o){var s=Math.round,a=o(3),u=o(13),d=o(67),f=o(0),m=function(e){function i(e,t,n,o){var s;return h(this,i),(s=l(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,n,o))).isRow=!e,s.isColumn=e,s.element=$('<div class="lm_item lm_'+(e?"column":"row")+'"></div>'),s.childElementContainer=s.element,s._splitterSize=t.config.dimensions.borderWidth,s._splitterGrabSize=t.config.dimensions.borderGrabWidth,s._isColumn=e,s._dimension=e?"height":"width",s._splitter=[],s._splitterPosition=null,s._splitterMinPosition=null,s._splitterMaxPosition=null,s}return c(i,a.a),r(i,[{key:"addChild",value:function(e,t,i){var o,s,r,l;if(e=this.layoutManager._$normalizeContentItem(e,this),void 0===t&&(t=this.contentItems.length),0<this.contentItems.length?(l=this._createSplitter(n(0,t-1)).element,0<t?(this.contentItems[t-1].element.after(l),l.after(e.element),this._isDocked(t-1)&&(this._splitter[t-1].element.hide(),this._splitter[t].element.show())):(this.contentItems[0].element.before(l),l.before(e.element))):this.childElementContainer.append(e.element),a.a.prototype.addChild.call(this,e,t),o=1/this.contentItems.length*100,!0!==i){for(r=0;r<this.contentItems.length;r++)this.contentItems[r]===e?e.config[this._dimension]=o:(s=this.contentItems[r].config[this._dimension]*=(100-o)/100,this.contentItems[r].config[this._dimension]=s);this.callDownwards("setSize"),this.emitBubblingEvent("stateChanged"),this._validateDocking()}else this.emitBubblingEvent("stateChanged")}},{key:"undisplayChild",value:function(e){var t,i=e.config[this._dimension],o=Object(f.g)(e,this.contentItems),s=n(o-1,0);if(-1===o)throw new Error("Can't undisplay child. ContentItem is not child of this Row or Column");this._splitter[s]&&this._splitter[s].element.hide(),s<this._splitter.length&&this._isDocked(s)&&this._splitter[s].element.hide();var r=this._isDocked();for(t=0;t<this.contentItems.length;t++)this.contentItems[t]===e?this.contentItems[t].config[this._dimension]=0:this._isDocked(t)||(this.contentItems[t].config[this._dimension]+=i/(this.contentItems.length-1-r));1===this.contentItems.length&&a.a.prototype.undisplayChild.call(this,e),this.callDownwards("setSize"),this.emitBubblingEvent("stateChanged")}},{key:"removeChild",value:function(e,t){var i,o,s=e.config[this._dimension],r=Object(f.g)(e,this.contentItems),l=n(r-1,0);if(-1===r)throw new Error("Can't remove child. ContentItem is not child of this Row or Column");this._splitter[l]&&(this._splitter[l]._$destroy(),this._splitter.splice(l,1)),l<this._splitter.length&&this._isDocked(l)&&this._splitter[l].element.hide();var c=this._isDocked();for(i=0;i<this.contentItems.length;i++)this.contentItems[i]!==e&&(this._isDocked(i)||(this.contentItems[i].config[this._dimension]+=s/(this.contentItems.length-1-c)));a.a.prototype.removeChild.call(this,e,t),1===this.contentItems.length&&!0===this.config.isClosable?(o=this.contentItems[0],this.contentItems=[],this.parent.replaceChild(this,o,!0),this._validateDocking(this.parent)):(this.callDownwards("setSize"),this.emitBubblingEvent("stateChanged"),this._validateDocking())}},{key:"replaceChild",value:function(e,t){var n=e.config[this._dimension];a.a.prototype.replaceChild.call(this,e,t),t.config[this._dimension]=n,this.callDownwards("setSize"),this.emitBubblingEvent("stateChanged")}},{key:"setSize",value:function(){0<this.contentItems.length&&(this._calculateRelativeSizes(),this._setAbsoluteSizes()),this.emitBubblingEvent("stateChanged"),this.emit("resize")}},{key:"dock",value:function(e,t,i){if(1===this.contentItems.length)throw new Error("Can't dock child when it single");var o=e.config[this._dimension],s=this.layoutManager.config.dimensions.headerHeight,r=Object(f.g)(e,this.contentItems),a=n(r-1,0);if(-1===r)throw new Error("Can't dock child. ContentItem is not child of this Row or Column");var l,c=e._docker&&e._docker.docked;if(void 0===t||t!=c){if(c){for(this._splitter[a].element.show(),l=0;l<this.contentItems.length;l++){var h=e._docker.size;this.contentItems[l]===e?e.config[this._dimension]=h:(itemSize=this.contentItems[l].config[this._dimension]*=(100-h)/100,this.contentItems[l].config[this._dimension]=itemSize)}e._docker={docked:!1}}else{if(2>this.contentItems.length-this._isDocked())throw new Error("Can't dock child when it is last in "+this.config.type);var u={column:{first:"top",last:"bottom"},row:{first:"left",last:"right"}}[this.config.type][r?"last":"first"];e.header.position()!=u&&e.header.position(u),this._splitter[a]&&this._splitter[a].element.hide();var d=this._isDocked();for(l=0;l<this.contentItems.length;l++)this.contentItems[l]===e?this.contentItems[l].config[this._dimension]=0:this._isDocked(l)||(this.contentItems[l].config[this._dimension]+=o/(this.contentItems.length-1-d));e._docker={dimension:this._dimension,size:o,realSize:e.element[this._dimension]()-s,docked:!0},i&&e.childElementContainer[this._dimension](0)}e.element.toggleClass("lm_docked",e._docker.docked),this.callDownwards("setSize"),this.emitBubblingEvent("stateChanged"),this._validateDocking()}}},{key:"_$init",value:function(){if(!0!==this.isInitialised){var e;for(a.a.prototype._$init.call(this),e=0;e<this.contentItems.length-1;e++)this.contentItems[e].element.after(this._createSplitter(e).element);for(e=0;e<this.contentItems.length;e++)this.contentItems[e]._header&&this.contentItems[e]._header.docked&&this.dock(this.contentItems[e],!0,!0)}}},{key:"_setAbsoluteSizes",value:function(){var e,t=this._calculateAbsoluteSizes();for(e=0;e<this.contentItems.length;e++)0<t.additionalPixel-e&&t.itemSizes[e]++,this._isColumn?(this.contentItems[e].element.width(t.totalWidth),this.contentItems[e].element.height(t.itemSizes[e])):(this.contentItems[e].element.width(t.itemSizes[e]),this.contentItems[e].element.height(t.totalHeight))}},{key:"_calculateAbsoluteSizes",value:function(){var e,n,i=(this.contentItems.length-1)*this._splitterSize,o=this.layoutManager.config.dimensions.headerHeight,s=this.element.width(),r=this.element.height(),a=0,l=[];for(this._isColumn?r-=i:s-=i,e=0;e<this.contentItems.length;e++)this._isDocked(e)&&(this._isColumn?r-=o-this._splitterSize:s-=o-this._splitterSize);for(e=0;e<this.contentItems.length;e++)n=this._isColumn?t(r*(this.contentItems[e].config.height/100)):t(s*(this.contentItems[e].config.width/100)),this._isDocked(e)&&(n=o),a+=n,l.push(n);return{itemSizes:l,additionalPixel:t((this._isColumn?r:s)-a),totalWidth:s,totalHeight:r}}},{key:"_calculateRelativeSizes",value:function(){var e,t=0,n=[],i=this._isColumn?"height":"width";for(e=0;e<this.contentItems.length;e++)void 0===this.contentItems[e].config[i]?n.push(this.contentItems[e]):t+=this.contentItems[e].config[i];if(100!==s(t))if(100>s(t)&&0<n.length){for(e=0;e<n.length;e++)n[e].config[i]=(100-t)/n.length;this._respectMinItemWidth()}else{if(100<s(t))for(e=0;e<n.length;e++)n[e].config[i]=50,t+=50;for(e=0;e<this.contentItems.length;e++)this.contentItems[e].config[i]=this.contentItems[e].config[i]/t*100;this._respectMinItemWidth()}else this._respectMinItemWidth()}},{key:"_respectMinItemWidth",value:function(){var e,t,n,i=this.layoutManager.config.dimensions&&this.layoutManager.config.dimensions.minItemWidth||0,o=null,r=[],a=0,l=0,c=0,h=0,u=[];if(!(this._isColumn||!i||1>=this.contentItems.length)){o=this._calculateAbsoluteSizes();for(var d=0;d<this.contentItems.length;d++)this.contentItems[d],(h=o.itemSizes[d])<i?(l+=i-h,n={width:i}):(a+=h-i,n={width:h},r.push(n)),u.push(n);if(!(0==l||l>a)){for(e=l/a,c=l,d=0;d<r.length;d++)n=r[d],c-=t=s((n.width-i)*e),n.width-=t;for(0!==c&&(u[u.length-1].width-=c),d=0;d<this.contentItems.length;d++)this.contentItems[d].config.width=u[d].width/o.totalWidth*100}}}},{key:"_createSplitter",value:function(e){var t;return(t=new d.a(this._isColumn,this._splitterSize,this._splitterGrabSize)).on("drag",Object(f.c)(this._onSplitterDrag,this,[t]),this),t.on("dragStop",Object(f.c)(this._onSplitterDragStop,this,[t]),this),t.on("dragStart",Object(f.c)(this._onSplitterDragStart,this,[t]),this),this._splitter.splice(e,0,t),t}},{key:"_getItemsForSplitter",value:function(e){var t=Object(f.g)(e,this._splitter);return{before:this.contentItems[t],after:this.contentItems[t+1]}}},{key:"_isDocked",value:function(e){if(void 0===e){for(var t=0,n=0;n<this.contentItems.length;++n)this._isDocked(n)&&t++;return t}return e<this.contentItems.length?this.contentItems[e]._docker&&this.contentItems[e]._docker.docked:void 0}},{key:"_validateDocking",value:function(e){for(var t=1<(e=e||this).contentItems.length-e._isDocked(),n=0;n<e.contentItems.length;++n)e.contentItems[n]instanceof u.a&&(e.contentItems[n].header._setDockable(e._isDocked(n)||t),e.contentItems[n].header._$setClosable(t))}},{key:"_getMinimumDimensions",value:function(e){for(var t=0,i=0,o=0;o<e.length;++o)t=n(e[o].minWidth||0,t),i=n(e[o].minHeight||0,i);return{horizontal:t,vertical:i}}},{key:"_onSplitterDragStart",value:function(e){var t=this._getItemsForSplitter(e),n=this.layoutManager.config.dimensions[this._isColumn?"minItemHeight":"minItemWidth"],i=this._getMinimumDimensions(t.before.config.content),o=this._isColumn?i.vertical:i.horizontal,s=this._getMinimumDimensions(t.after.config.content),r=this._isColumn?s.vertical:s.horizontal;this._splitterPosition=0,this._splitterMinPosition=-1*(t.before.element[this._dimension]()-(o||n)),this._splitterMaxPosition=t.after.element[this._dimension]()-(r||n)}},{key:"_onSplitterDrag",value:function(e,t,n){var i=this._isColumn?n:t;i>this._splitterMinPosition&&i<this._splitterMaxPosition&&(this._splitterPosition=i,e.element.css(this._isColumn?"top":"left",i))}},{key:"_onSplitterDragStop",value:function(e){var t=this._getItemsForSplitter(e),n=t.before.element[this._dimension](),i=t.after.element[this._dimension](),o=(this._splitterPosition+n)/(n+i),s=t.before.config[this._dimension]+t.after.config[this._dimension];t.before.config[this._dimension]=o*s,t.after.config[this._dimension]=(1-o)*s,e.element.css({top:0,left:0}),Object(f.a)(Object(f.c)(this.callDownwards,this,["setSize"]))}}]),i}();i.a=m},function(e,t,n){var i=n(1),o=n(0),s=function(e){function t(e,n){var i;return h(this,t),(i=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)))._timeout=null,i._eElement=$(e),i._oDocument=$(document),i._eBody=$(document.body),i._nButtonCode=n||0,i._nDelay=200,i._nDistance=10,i._nX=0,i._nY=0,i._nOriginalX=0,i._nOriginalY=0,i._bDragging=!1,i._fMove=Object(o.c)(i.onMouseMove,i),i._fUp=Object(o.c)(i.onMouseUp,i),i._fDown=Object(o.c)(i.onMouseDown,i),i._eElement.on("mousedown touchstart",i._fDown),i}return c(t,i.b),r(t,[{key:"destroy",value:function(){this._eElement.unbind("mousedown touchstart",this._fDown),this._oDocument.unbind("mouseup touchend",this._fUp),this._eElement=null,this._oDocument=null,this._eBody=null}},{key:"onMouseDown",value:function(e){if(e.preventDefault(),0==e.button||"touchstart"===e.type){var t=this._getCoordinates(e);this._nOriginalX=t.x,this._nOriginalY=t.y,this._oDocument.on("mousemove touchmove",this._fMove),this._oDocument.one("mouseup touchend",this._fUp),this._timeout=setTimeout(Object(o.c)(this._startDrag,this),this._nDelay)}}},{key:"onMouseMove",value:function(e){var t=Math.abs;if(null!=this._timeout){e.preventDefault();var n=this._getCoordinates(e);this._nX=n.x-this._nOriginalX,this._nY=n.y-this._nOriginalY,!1===this._bDragging&&(t(this._nX)>this._nDistance||t(this._nY)>this._nDistance)&&(clearTimeout(this._timeout),this._startDrag()),this._bDragging&&this.emit("drag",this._nX,this._nY,e)}}},{key:"onMouseUp",value:function(e){null!=this._timeout&&(clearTimeout(this._timeout),this._eBody.removeClass("lm_dragging"),this._eElement.removeClass("lm_dragging"),this._oDocument.find("iframe").css("pointer-events",""),this._oDocument.unbind("mousemove touchmove",this._fMove),this._oDocument.unbind("mouseup touchend",this._fUp),!0===this._bDragging&&(this._bDragging=!1,this.emit("dragStop",e,this._nOriginalX+this._nX)))}},{key:"_startDrag",value:function(){this._bDragging=!0,this._eBody.addClass("lm_dragging"),this._eElement.addClass("lm_dragging"),this._oDocument.find("iframe").css("pointer-events","none"),this.emit("dragStart",this._nOriginalX,this._nOriginalY)}},{key:"_getCoordinates",value:function(e){return{x:(e=Object(o.e)(e)).pageX,y:e.pageY}}}]),t}();t.a=s},function(e,t,n){var i=n(9);e.exports=function(e){if(!i(e))throw TypeError(e+" is not an object!");return e}},function(e){e.exports=function(e){return"object"==(void 0===e?"undefined":a(e))?null!==e:"function"==typeof e}},function(e){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var i=n(0);t.a=function(){function e(){if(h(this,e),this._keys=["settings","hasHeaders","constrainDragToContainer","selectionEnabled","dimensions","borderWidth","minItemHeight","minItemWidth","headerHeight","dragProxyWidth","dragProxyHeight","labels","close","maximise","minimise","popout","content","componentName","componentState","id","width","type","height","isClosable","title","popoutWholeStack","openPopouts","parentId","activeItemIndex","reorderEnabled","borderGrabWidth"],36<this._keys.length)throw new Error("Too many keys in config minifier map");this._values=[!0,!1,"row","column","stack","component","close","maximise","minimise","open in new window"]}return r(e,[{key:"minifyConfig",value:function(e){var t={};return this._nextLevel(e,t,"_min"),t}},{key:"unminifyConfig",value:function(e){var t={};return this._nextLevel(e,t,"_max"),t}},{key:"_nextLevel",value:function(e,t,n){var i,o;for(i in e)e instanceof Array&&(i=parseInt(i,10)),e.hasOwnProperty(i)&&(o=this[n](i,this._keys),"object"==a(e[i])?(t[o]=e[i]instanceof Array?[]:{},this._nextLevel(e[i],t[o],n)):t[o]=this[n](e[i],this._values))}},{key:"_min",value:function(e,t){if("string"==typeof e&&1===e.length)return"___"+e;var n=Object(i.g)(e,t);return-1===n?e:n.toString(36)}},{key:"_max",value:function(e,t){return"string"==typeof e&&1===e.length?t[parseInt(e,36)]:"string"==typeof e&&"___"===e.substr(0,3)?e[3]:e}}]),e}()},function(e,t,n){var i=n(3),o=n(6),s=function(e){function t(e,n,i){var o;return h(this,t),(o=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,null))).isRoot=!0,o.type="root",o.element=$('<div class="lm_goldenlayout lm_item lm_root"></div>'),o.childElementContainer=o.element,o._containerElement=i,o._containerElement.append(o.element),o}return c(t,i.a),r(t,[{key:"addChild",value:function(e){if(0<this.contentItems.length)throw new Error("Root node can only have a single child");e=this.layoutManager._$normalizeContentItem(e,this),this.childElementContainer.append(e.element),i.a.prototype.addChild.call(this,e),this.callDownwards("setSize"),this.emitBubblingEvent("stateChanged")}},{key:"setSize",value:function(e,t){e=void 0===e?this._containerElement.width():e,t=void 0===t?this._containerElement.height():t,this.element.width(e),this.element.height(t),this.contentItems[0]&&(this.contentItems[0].element.width(e),this.contentItems[0].element.height(t))}},{key:"_$highlightDropZone",value:function(){this.layoutManager.tabDropPlaceholder.remove(),i.a.prototype._$highlightDropZone.apply(this,arguments)}},{key:"_$onDrop",value:function(e,t){var n;if(e.isComponent&&((n=this.layoutManager.createContentItem({type:"stack",header:e.config.header||{}},this))._$init(),n.addChild(e),e=n),this.contentItems.length){("row"===e.config.type||"column"===e.config.type)&&((n=this.layoutManager.createContentItem({type:"stack"},this)).addChild(e),e=n);var i="x"==t.side[0]?"row":"column",s="x"==t.side[0]?"width":"height",r="2"==t.side[1],a=this.contentItems[0];if(a instanceof o.a&&a.type==i){var l=a.contentItems[r?0:a.contentItems.length-1];a.addChild(e,r?0:void 0,!0),l.config[s]*=.5,e.config[s]=l.config[s],a.callDownwards("setSize")}else{var c=this.layoutManager.createContentItem({type:i},this);this.replaceChild(a,c),c.addChild(e,r?0:void 0,!0),c.addChild(a,r?void 0:0,!0),a.config[s]=50,e.config[s]=50,c.callDownwards("setSize")}}else this.addChild(e)}}]),t}();t.a=s},function(t,i,o){var s=o(3),a=o(6),u=o(28),d=o(0),f=function(t){function i(e,t,n){var o;h(this,i),(o=l(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,e,t,n))).element=$('<div class="lm_item lm_stack"></div>'),o._activeContentItem=null;var s=e.config;return o._header={show:!0===s.settings.hasHeaders&&!1!==t.hasHeaders,popout:s.settings.showPopoutIcon&&s.labels.popout,maximise:s.settings.showMaximiseIcon&&s.labels.maximise,close:s.settings.showCloseIcon&&s.labels.close,minimise:s.labels.minimise},s.header&&Object(d.b)(o._header,s.header),t.header&&Object(d.b)(o._header,t.header),t.content&&t.content[0]&&t.content[0].header&&Object(d.b)(o._header,t.content[0].header),o._dropZones={},o._dropSegment=null,o._contentAreaDimensions=null,o._dropIndex=null,o.isStack=!0,o.childElementContainer=$('<div class="lm_items"></div>'),o.header=new u.a(e,o),o.element.on("mouseleave mouseenter",Object(d.c)(function(e){this._docker&&this._docker.docked&&this.childElementContainer[this._docker.dimension]("mouseenter"==e.type?this._docker.realSize:0)},o)),o.element.append(o.header.element),o.element.append(o.childElementContainer),o._setupHeaderPosition(),o._$validateClosability(),o}return c(i,s.a),r(i,[{key:"dock",value:function(e){this._header.dock&&this.parent instanceof a.a&&this.parent.dock(this,e)}},{key:"setSize",value:function(){if("none"!==this.element.css("display")){var e=this._docker&&this._docker.docked,t={width:this.element.width(),height:this.element.height()};this._header.show&&(t[this._sided?"width":"height"]-=this.layoutManager.config.dimensions.headerHeight),e&&(t[this._docker.dimension]=this._docker.realSize),e&&"height"!=this._docker.dimension||this.childElementContainer.width(t.width),e&&"width"!=this._docker.dimension||this.childElementContainer.height(t.height);for(var n=0;n<this.contentItems.length;n++)this.contentItems[n].element.width(t.width),this.contentItems[n].element.height(t.height);this.emit("resize"),this.emitBubblingEvent("stateChanged")}}},{key:"_$init",value:function(){var e,t;if(!0!==this.isInitialised){for(s.a.prototype._$init.call(this),e=0;e<this.contentItems.length;e++)this.header.createTab(this.contentItems[e]),this.contentItems[e]._$hide();if(0<this.contentItems.length){if(!(t=this.contentItems[this.config.activeItemIndex||0]))throw new Error("Configured activeItemIndex out of bounds");this.setActiveContentItem(t)}}}},{key:"setActiveContentItem",value:function(e){if(-1===Object(d.g)(e,this.contentItems))throw new Error("contentItem is not a child of this stack");null!==this._activeContentItem&&this._activeContentItem._$hide(),this._activeContentItem=e,this.header.setActiveContentItem(e),e._$show(),this.emit("activeContentItemChanged",e),this.layoutManager.emit("activeContentItemChanged",e),this.emitBubblingEvent("stateChanged")}},{key:"getActiveContentItem",value:function(){return this.header.activeContentItem}},{key:"addChild",value:function(e,t){t>this.contentItems.length&&(t-=1),e=this.layoutManager._$normalizeContentItem(e,this),s.a.prototype.addChild.call(this,e,t),this.childElementContainer.append(e.element),this.header.createTab(e,t),this.setActiveContentItem(e),this.callDownwards("setSize"),this._$validateClosability(),this.parent instanceof a.a&&this.parent._validateDocking(),this.emitBubblingEvent("stateChanged")}},{key:"removeChild",value:function(e,t){var i=Object(d.g)(e,this.contentItems);s.a.prototype.removeChild.call(this,e,t),this.header.removeTab(e),this.header.activeContentItem===e&&(0<this.contentItems.length?this.setActiveContentItem(this.contentItems[n(i-1,0)]):this._activeContentItem=null),this._$validateClosability(),this.parent instanceof a.a&&this.parent._validateDocking(),this.emitBubblingEvent("stateChanged")}},{key:"undisplayChild",value:function(e){if(1<this.contentItems.length){var t=Object(d.g)(e,this.contentItems);e._$hide&&e._$hide(),this.setActiveContentItem(this.contentItems[0===t?t+1:t-1])}else this.header.hideTab(e),e._$hide&&e._$hide(),s.a.prototype.undisplayChild.call(this,e),this.parent instanceof a.a&&this.parent._validateDocking();this.emitBubblingEvent("stateChanged")}},{key:"_$validateClosability",value:function(){var e,t,n;for(e=this.header._isClosable(),n=0,t=this.contentItems.length;n<t&&e;n++)e=this.contentItems[n].config.isClosable;this.header._$setClosable(e)}},{key:"_$destroy",value:function(){s.a.prototype._$destroy.call(this),this.header._$destroy(),this.element.off("mouseenter mouseleave")}},{key:"_$onDrop",value:function(e){if("header"===this._dropSegment)return this._resetHeaderDropZone(),void this.addChild(e,this._dropIndex);if("body"!==this._dropSegment){var t,n,i,o="top"===this._dropSegment||"bottom"===this._dropSegment,s="left"===this._dropSegment||"right"===this._dropSegment,r="top"===this._dropSegment||"left"===this._dropSegment,a=o&&this.parent.isColumn||s&&this.parent.isRow,l=o?"column":"row",c=o?"height":"width";e.isComponent&&((n=this.layoutManager.createContentItem({type:"stack",header:e.config.header||{}},this))._$init(),n.addChild(e),e=n),("row"===e.config.type||"column"===e.config.type)&&((n=this.layoutManager.createContentItem({type:"stack"},this)).addChild(e),e=n),a?(t=Object(d.g)(this,this.parent.contentItems),this.parent.addChild(e,r?t:t+1,!0),this.config[c]*=.5,e.config[c]=this.config[c],this.parent.callDownwards("setSize")):(l=o?"column":"row",i=this.layoutManager.createContentItem({type:l},this),this.parent.replaceChild(this,i),i.addChild(e,r?0:void 0,!0),i.addChild(this,r?void 0:0,!0),this.config[c]=50,e.config[c]=50,i.callDownwards("setSize")),this.parent._validateDocking()}else this.addChild(e)}},{key:"_$highlightDropZone",value:function(e,t){var n,i;for(n in this._contentAreaDimensions)if((i=this._contentAreaDimensions[n].hoverArea).x1<e&&i.x2>e&&i.y1<t&&i.y2>t)return void("header"===n?(this._dropSegment="header",this._highlightHeaderDropZone(this._sided?t:e)):(this._resetHeaderDropZone(),this._highlightBodyDropZone(n)))}},{key:"_$getArea",value:function(){if("none"===this.element.css("display"))return null;var e=s.a.prototype._$getArea,t=e.call(this,this.header.element),n=e.call(this,this.childElementContainer),i=n.x2-n.x1,o=n.y2-n.y1;return this._contentAreaDimensions={header:{hoverArea:{x1:t.x1,y1:t.y1,x2:t.x2,y2:t.y2},highlightArea:{x1:t.x1,y1:t.y1,x2:t.x2,y2:t.y2}}},this._activeContentItem&&!1===this._activeContentItem.isComponent?t:0===this.contentItems.length?(this._contentAreaDimensions.body={hoverArea:{x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2},highlightArea:{x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2}},e.call(this,this.element)):(this._contentAreaDimensions.left={hoverArea:{x1:n.x1,y1:n.y1,x2:n.x1+.25*i,y2:n.y2},highlightArea:{x1:n.x1,y1:n.y1,x2:n.x1+.5*i,y2:n.y2}},this._contentAreaDimensions.top={hoverArea:{x1:n.x1+.25*i,y1:n.y1,x2:n.x1+.75*i,y2:n.y1+.5*o},highlightArea:{x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y1+.5*o}},this._contentAreaDimensions.right={hoverArea:{x1:n.x1+.75*i,y1:n.y1,x2:n.x2,y2:n.y2},highlightArea:{x1:n.x1+.5*i,y1:n.y1,x2:n.x2,y2:n.y2}},this._contentAreaDimensions.bottom={hoverArea:{x1:n.x1+.25*i,y1:n.y1+.5*o,x2:n.x1+.75*i,y2:n.y2},highlightArea:{x1:n.x1,y1:n.y1+.5*o,x2:n.x2,y2:n.y2}},e.call(this,this.element))}},{key:"_highlightHeaderDropZone",value:function(t){var n,i,o,s,r,a,l,c,h=this.header.tabs.length,u=!1;if(0===h)return l=this.header.element.offset(),void this.layoutManager.dropTargetIndicator.highlightArea({x1:l.left,x2:l.left+100,y1:l.top+this.header.element.height()-20,y2:l.top+this.header.element.height()});for(n=0;n<h;n++)if(r=(i=this.header.tabs[n].element).offset(),this._sided?(s=r.top,o=r.left,c=i.height()):(s=r.left,o=r.top,c=i.width()),t>s&&t<s+c){u=!0;break}if(!(0==u&&t<s)){if(t<s+c/2?(this._dropIndex=n,i.before(this.layoutManager.tabDropPlaceholder)):(this._dropIndex=e(n+1,h),i.after(this.layoutManager.tabDropPlaceholder)),this._sided){var d=this.layoutManager.tabDropPlaceholder.offset().top;return void this.layoutManager.dropTargetIndicator.highlightArea({x1:o,x2:o+i.innerHeight(),y1:d,y2:d+this.layoutManager.tabDropPlaceholder.width()})}a=this.layoutManager.tabDropPlaceholder.offset().left,this.layoutManager.dropTargetIndicator.highlightArea({x1:a,x2:a+this.layoutManager.tabDropPlaceholder.width(),y1:o,y2:o+i.innerHeight()})}}},{key:"_resetHeaderDropZone",value:function(){this.layoutManager.tabDropPlaceholder.remove()}},{key:"toggleMaximise",value:function(e){this.isMaximised||this.dock(!1),s.a.prototype.toggleMaximise.call(this,e)}},{key:"_setupHeaderPosition",value:function(){var e=0<=["right","left","bottom"].indexOf(this._header.show)&&this._header.show;if(this.header.element.toggle(!!this._header.show),this._side=e,this._sided=0<=["right","left"].indexOf(this._side),this.element.removeClass("lm_left lm_right lm_bottom"),this._side&&this.element.addClass("lm_"+this._side),this.element.find(".lm_header").length&&this.childElementContainer){var t=0<=["right","bottom"].indexOf(this._side)?"before":"after";this.header.element[t](this.childElementContainer),this.callDownwards("setSize")}}},{key:"_highlightBodyDropZone",value:function(e){var t=this._contentAreaDimensions[e].highlightArea;this.layoutManager.dropTargetIndicator.highlightArea(t),this._dropSegment=e}}]),i}();i.a=f},function(e){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){var i=n(44),o=n(20);e.exports=Object.keys||function(e){return i(e,o)}},function(e){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},function(e,t,n){var i=n(45),o=n(14);e.exports=function(e){return i(o(e))}},function(e){var n=Math.ceil;e.exports=function(e){return isNaN(e=+e)?0:(0<e?t:n)(e)}},function(e,t,n){var i=n(50)("keys"),o=n(52);e.exports=function(e){return i[e]||(i[e]=o(e))}},function(e){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(e,t,n){var i=n(4),o=n(2),s=n(54),r=n(56),a=n(16),l="prototype",c=function e(t,n,c){var h,u,d,f=t&e.F,m=t&e.G,p=t&e.S,g=t&e.P,y=t&e.B,v=t&e.W,_=m?o:o[n]||(o[n]={}),b=_[l],w=m?i:p?i[n]:(i[n]||{})[l];for(h in m&&(c=n),c)(u=!f&&w&&void 0!==w[h])&&a(_,h)||(d=u?w[h]:c[h],_[h]=m&&"function"!=typeof w[h]?c[h]:y&&u?s(d,i):v&&w[h]==d?function(e){var t=function(t,n,i){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,i)}return e.apply(this,arguments)};return t[l]=e[l],t}(d):g&&"function"==typeof d?s(Function.call,d):d,g&&((_.virtual||(_.virtual={}))[h]=d,t&e.R&&b&&!b[h]&&r(b,h,d)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,t,n){var i=n(8),o=n(57),s=n(58),r=Object.defineProperty;t.f=n(5)?Object.defineProperty:function(e,t,n){if(i(e),t=s(t,!0),i(n),o)try{return r(e,t,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var i=n(9),o=n(4).document,s=i(o)&&i(o.createElement);e.exports=function(e){return s?o.createElement(e):{}}},function(e,t){t.a=function(){function e(t,n){h(this,e),this._reactComponent=null,this._originalComponentWillUpdate=null,this._container=t,this._initialState=n,this._reactClass=this._getReactClass(),this._container.on("open",this._render,this),this._container.on("destroy",this._destroy,this)}return r(e,[{key:"_render",value:function(){this._reactComponent=ReactDOM.render(this._getReactComponent(),this._container.getElement()[0]),this._originalComponentWillUpdate=this._reactComponent.componentWillUpdate||function(){},this._reactComponent.componentWillUpdate=this._onUpdate.bind(this),this._container.getState()&&this._reactComponent.setState(this._container.getState())}},{key:"_destroy",value:function(){ReactDOM.unmountComponentAtNode(this._container.getElement()[0]),this._container.off("open",this._render,this),this._container.off("destroy",this._destroy,this)}},{key:"_onUpdate",value:function(e,t){this._container.setState(t),this._originalComponentWillUpdate.call(this._reactComponent,e,t)}},{key:"_getReactClass",value:function(){var e,t=this._container._config.component;if(!t)throw new Error("No react component name. type: react-component needs a field `component`");if(!(e=this._container.layoutManager.getComponent(t)))throw new Error('React component "'+t+'" not found. Please register all components with GoldenLayout using `registerComponent(name, component)`');return e}},{key:"_getReactComponent",value:function(){var e={glEventHub:this._container.layoutManager.eventHub,glContainer:this._container},t=$.extend(e,this._container._config.props);return React.createElement(this._reactClass,t)}}]),e}()},function(e,t,n){var i=n(1),o=n(0),s=function(e){function t(e){var n;return h(this,t),(n=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)))._layoutManager=e,n._dontPropagateToParent=null,n._childEventSource=null,n.on(i.a,Object(o.c)(n._onEventFromThis,n)),n._boundOnEventFromChild=Object(o.c)(n._onEventFromChild,n),$(window).on("gl_child_event",n._boundOnEventFromChild),n}return c(t,i.b),r(t,[{key:"_onEventFromThis",value:function(){var e=Array.prototype.slice.call(arguments);this._layoutManager.isSubWindow&&e[0]!==this._dontPropagateToParent&&this._propagateToParent(e),this._propagateToChildren(e),this._dontPropagateToParent=null,this._childEventSource=null}},{key:"_$onEventFromParent",value:function(e){this._dontPropagateToParent=e[0],this.emit.apply(this,e)}},{key:"_onEventFromChild",value:function(e){this._childEventSource=e.originalEvent.__gl,this.emit.apply(this,e.originalEvent.__glArgs)}},{key:"_propagateToParent",value:function(e){var t,n="gl_child_event";document.createEvent?(t=window.opener.document.createEvent("HTMLEvents")).initEvent(n,!0,!0):(t=window.opener.document.createEventObject()).eventType=n,t.eventName=n,t.__glArgs=e,t.__gl=this._layoutManager,document.createEvent?window.opener.dispatchEvent(t):window.opener.fireEvent("on"+t.eventType,t)}},{key:"_propagateToChildren",value:function(e){var t,n;for(n=0;n<this._layoutManager.openPopouts.length;n++)(t=this._layoutManager.openPopouts[n].getGlInstance())&&t!==this._childEventSource&&t.eventHub._$onEventFromParent(e)}},{key:"destroy",value:function(){$(window).off("gl_child_event",this._boundOnEventFromChild)}}]),t}();t.a=s},function(e,t){t.a=function(){function e(t,n){h(this,e),this.name=t,this.origin=n,this.isPropagationStopped=!1}return r(e,[{key:"stopPropagation",value:function(){this.isPropagationStopped=!0}}]),e}()},function(e,t){var n=function(e){function t(e,n){var i;return h(this,t),(i=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this))).name="Configuration Error",i.message=e,i.node=n,i}return c(t,Error),t}();t.a=n},function(e,t,n){var i=n(1),o=n(29),s=n(31),a=n(0),u=function(e){function t(e,n){var i;return h(this,t),(i=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this))).layoutManager=e,i.element=$('<div class="lm_header"><ul class="lm_tabs"></ul><ul class="lm_controls"></ul><ul class="lm_tabdropdown_list"></ul></div>'),!0===i.layoutManager.config.settings.selectionEnabled&&(i.element.addClass("lm_selectable"),i.element.on("click touchstart",Object(a.c)(i._onHeaderClick,i))),i.tabsContainer=i.element.find(".lm_tabs"),i.tabDropdownContainer=i.element.find(".lm_tabdropdown_list"),i.tabDropdownContainer.hide(),i.controlsContainer=i.element.find(".lm_controls"),i.parent=n,i.parent.on("resize",i._updateTabSizes,i),i.tabs=[],i.tabsMarkedForRemoval=[],i.activeContentItem=null,i.closeButton=null,i.dockButton=null,i.tabDropdownButton=null,i.hideAdditionalTabsDropdown=Object(a.c)(i._hideAdditionalTabsDropdown,i),$(document).mouseup(i.hideAdditionalTabsDropdown),i._lastVisibleTabIndex=-1,i._tabControlOffset=i.layoutManager.config.settings.tabControlOffset,i._createControls(),i}return c(t,i.b),r(t,[{key:"createTab",value:function(e,t){var n,i;for(i=0;i<this.tabs.length;i++)if(this.tabs[i].contentItem===e)return;return n=new o.a(this,e),0===this.tabs.length?(this.tabs.push(n),void this.tabsContainer.append(n.element)):(void 0===t&&(t=this.tabs.length),0<t?this.tabs[t-1].element.after(n.element):this.tabs[0].element.before(n.element),this.tabs.splice(t,0,n),void this._updateTabSizes())}},{key:"removeTab",value:function(e){for(var t=0;t<this.tabs.length;t++)if(this.tabs[t].contentItem===e)return this.tabs[t]._$destroy(),void this.tabs.splice(t,1);for(t=0;t<this.tabsMarkedForRemoval.length;t++)if(this.tabsMarkedForRemoval[t].contentItem===e)return this.tabsMarkedForRemoval[t]._$destroy(),void this.tabsMarkedForRemoval.splice(t,1);throw new Error("contentItem is not controlled by this header")}},{key:"hideTab",value:function(e){for(var t=0;t<this.tabs.length;t++)if(this.tabs[t].contentItem===e)return this.tabs[t].element.hide(),this.tabsMarkedForRemoval.push(this.tabs[t]),void this.tabs.splice(t,1);throw new Error("contentItem is not controlled by this header")}},{key:"setActiveContentItem",value:function(e){var t,n,i,o;for(t=0;t<this.tabs.length;t++)i=this.tabs[t].contentItem===e,this.tabs[t].setActive(i),!0===i&&(this.activeContentItem=e,this.parent.config.activeItemIndex=t);if(this.layoutManager.config.settings.reorderOnTabMenuClick&&-1!==this._lastVisibleTabIndex&&this.parent.config.activeItemIndex>this._lastVisibleTabIndex){for(o=this.tabs[this.parent.config.activeItemIndex],n=this.parent.config.activeItemIndex;0<n;n--)this.tabs[n]=this.tabs[n-1];this.tabs[0]=o,this.parent.config.activeItemIndex=0}this._updateTabSizes(),this.parent.emitBubblingEvent("stateChanged")}},{key:"position",value:function(e){var t=this.parent._header.show;if(this.parent._docker&&this.parent._docker.docked)throw new Error("Can't change header position in docked stack");return t&&!this.parent._side&&(t="top"),void 0!==e&&this.parent._header.show!=e&&(this.parent._header.show=e,this.parent._setupHeaderPosition()),t}},{key:"_$setClosable",value:function(e){return this._canDestroy=e||1<this.tabs.length,this.closeButton&&this._isClosable()&&(this.closeButton.element[e?"show":"hide"](),!0)}},{key:"_setDockable",value:function(e){return this.dockButton&&this.parent._header&&this.parent._header.dock&&(this.dockButton.element.toggle(!!e),!0)}},{key:"_$destroy",value:function(){this.emit("destroy",this);for(var e=0;e<this.tabs.length;e++)this.tabs[e]._$destroy();$(document).off("mouseup",this.hideAdditionalTabsDropdown),this.element.remove()}},{key:"_getHeaderSetting",value:function(e){if(e in this.parent._header)return this.parent._header[e]}},{key:"_createControls",value:function(){var e,t,n,i,o,r,l,c,h;if(h=Object(a.c)(this._showAdditionalTabsDropdown,this),c=this.layoutManager.config.labels.tabDropdown,this.tabDropdownButton=new s.a(this,c,"lm_tabdropdown",h),this.tabDropdownButton.element.hide(),this.parent._header&&this.parent._header.dock){var u=Object(a.c)(this.parent.dock,this.parent);n=this._getHeaderSetting("dock"),this.dockButton=new s.a(this,n,"lm_dock",u)}this._getHeaderSetting("popout")&&(t=Object(a.c)(this._onPopoutClick,this),n=this._getHeaderSetting("popout"),new s.a(this,n,"lm_popout",t)),this._getHeaderSetting("maximise")&&(r=Object(a.c)(this.parent.toggleMaximise,this.parent),i=this._getHeaderSetting("maximise"),o=this._getHeaderSetting("minimise"),l=new s.a(this,i,"lm_maximise",r),this.parent.on("maximised",function(){l.element.attr("title",o)}),this.parent.on("minimised",function(){l.element.attr("title",i)})),this._isClosable()&&(e=Object(a.c)(this.parent.remove,this.parent),n=this._getHeaderSetting("close"),this.closeButton=new s.a(this,n,"lm_close",e))}},{key:"_showAdditionalTabsDropdown",value:function(){this.tabDropdownContainer.show()}},{key:"_hideAdditionalTabsDropdown",value:function(){this.tabDropdownContainer.hide()}},{key:"_isClosable",value:function(){return this.parent.config.isClosable&&this.layoutManager.config.settings.showCloseIcon}},{key:"_onPopoutClick",value:function(){!0===this.layoutManager.config.settings.popoutWholeStack?this.parent.popout():this.activeContentItem.popout()}},{key:"_onHeaderClick",value:function(e){e.target===this.element[0]&&this.parent.select()}},{key:"_updateTabSizes",value:function(e){if(0!==this.tabs.length){this.tabDropdownButton.element.toggle(!0===e);var t=function(e){return e?"width":"height"};this.element.css(t(!this.parent._sided),""),this.element[t(this.parent._sided)](this.layoutManager.config.dimensions.headerHeight);var n,i,o,s,r=this.element.outerWidth()-this.controlsContainer.outerWidth()-this._tabControlOffset,a=0,l=0,c=0,h=this.layoutManager.config.settings.tabOverlapAllowance,u=!1,d=this.activeContentItem?this.tabs.indexOf(this.activeContentItem.tab):0,f=this.tabs[d];for(this.parent._sided&&(r=this.element.outerHeight()-this.controlsContainer.outerHeight()-this._tabControlOffset),this._lastVisibleTabIndex=-1,i=0;i<this.tabs.length;i++)if(n=this.tabs[i].element,this.tabsContainer.append(n),a+=n.outerWidth()+parseInt(n.css("margin-right"),10),(l=d<=i?a:a+f.element.outerWidth()+parseInt(f.element.css("margin-right"),10))>r){if(u)i===d&&(n.css({"z-index":"auto","margin-left":""}),this.tabsContainer.append(n));else if((c=0<d&&d<=i?(l-r)/(i-1):(l-r)/i)<h){for(o=0;o<=i;o++)s=o!==d&&0!==o?"-"+c+"px":"",this.tabs[o].element.css({"z-index":i-o,"margin-left":s});this._lastVisibleTabIndex=i,this.tabsContainer.append(n)}else u=!0;if(u&&i!==d){if(!e)return void this._updateTabSizes(!0);n.css({"z-index":"auto","margin-left":""}),this.tabDropdownContainer.append(n)}}else this._lastVisibleTabIndex=i,n.css({"z-index":"auto","margin-left":""}),this.tabsContainer.append(n)}}}]),t}();t.a=u},function(e,t,n){var i=n(7),o=n(30),s=n(0);t.a=function(){function e(t,n){h(this,e),this.header=t,this.contentItem=n,this.element=$('<li class="lm_tab"><i class="lm_left"></i><span class="lm_title"></span><div class="lm_close_tab"></div><i class="lm_right"></i></li>'),this.titleElement=this.element.find(".lm_title"),this.closeElement=this.element.find(".lm_close_tab"),this.closeElement[n.config.isClosable?"show":"hide"](),this.isActive=!1,this.setTitle(n.config.title),this.contentItem.on("titleChanged",this.setTitle,this),this._layoutManager=this.contentItem.layoutManager,!0===this._layoutManager.config.settings.reorderEnabled&&!0===n.config.reorderEnabled&&(this._dragListener=new i.a(this.element),this._dragListener.on("dragStart",this._onDragStart,this),this.contentItem.on("destroy",this._dragListener.destroy,this._dragListener)),this._onTabClickFn=Object(s.c)(this._onTabClick,this),this._onCloseClickFn=Object(s.c)(this._onCloseClick,this),this.element.on("mousedown touchstart",this._onTabClickFn),this.contentItem.config.isClosable?(this.closeElement.on("click touchstart",this._onCloseClickFn),this.closeElement.on("mousedown",this._onCloseMousedown)):this.closeElement.remove(),this.contentItem.tab=this,this.contentItem.emit("tab",this),this.contentItem.layoutManager.emit("tabCreated",this),this.contentItem.isComponent&&(this.contentItem.container.tab=this,this.contentItem.container.emit("tab",this))}return r(e,[{key:"setTitle",value:function(e){this.element.attr("title",Object(s.k)(e)),this.titleElement.html(e)}},{key:"setActive",value:function(e){e===this.isActive||(this.isActive=e,e?this.element.addClass("lm_active"):this.element.removeClass("lm_active"))}},{key:"_$destroy",value:function(){this.element.off("mousedown touchstart",this._onTabClickFn),this.closeElement.off("click touchstart",this._onCloseClickFn),this._dragListener&&(this.contentItem.off("destroy",this._dragListener.destroy,this._dragListener),this._dragListener.off("dragStart",this._onDragStart),this._dragListener=null),this.element.remove()}},{key:"_onDragStart",value:function(e,t){return this.header._canDestroy?(!0===this.contentItem.parent.isMaximised&&this.contentItem.parent.toggleMaximise(),void new o.a(e,t,this._dragListener,this._layoutManager,this.contentItem,this.header.parent)):null}},{key:"_onTabClick",value:function(e){if(0===e.button||"touchstart"===e.type){var t=this.header.parent.getActiveContentItem();this.contentItem!==t&&this.header.parent.setActiveContentItem(this.contentItem)}else 1===e.button&&this.contentItem.config.isClosable&&this._onCloseClick(e)}},{key:"_onCloseClick",value:function(e){e.stopPropagation(),this.header._canDestroy&&this.header.parent.removeChild(this.contentItem)}},{key:"_onCloseMousedown",value:function(e){e.stopPropagation()}}]),e}()},function(e,t,n){var i=n(1),o=n(0),s=function(e){function t(e,n,i,s,r,a){var c;h(this,t),(c=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)))._dragListener=i,c._layoutManager=s,c._contentItem=r,c._originalParent=a,c._area=null,c._lastValidArea=null,c._dragListener.on("drag",c._onDrag,c),c._dragListener.on("dragStop",c._onDrop,c),c.element=$('<div class="lm_dragProxy"><div class="lm_header"><ul class="lm_tabs"><li class="lm_tab lm_active"><i class="lm_left"></i><span class="lm_title"></span><i class="lm_right"></i></li></ul></div><div class="lm_content"></div></div>'),a&&a._side&&(c._sided=a._sided,c.element.addClass("lm_"+a._side),0<=["right","bottom"].indexOf(a._side)&&c.element.find(".lm_content").after(c.element.find(".lm_header"))),c.element.css({left:e,top:n}),c.element.find(".lm_tab").attr("title",Object(o.k)(c._contentItem.config.title)),c.element.find(".lm_title").html(c._contentItem.config.title),c.childElementContainer=c.element.find(".lm_content"),c.childElementContainer.append(r.element),c._undisplayTree(),c._layoutManager._$calculateItemAreas(),c._setDimensions(),$(document.body).append(c.element);var u=c._layoutManager.container.offset();return c._minX=u.left,c._minY=u.top,c._maxX=c._layoutManager.container.width()+c._minX,c._maxY=c._layoutManager.container.height()+c._minY,c._width=c.element.width(),c._height=c.element.height(),c._setDropPosition(e,n),c}return c(t,i.b),r(t,[{key:"_onDrag",value:function(e,t,n){var i=(n=Object(o.e)(n)).pageX,s=n.pageY;(i>this._minX&&i<this._maxX&&s>this._minY&&s<this._maxY||!0!==this._layoutManager.config.settings.constrainDragToContainer)&&this._setDropPosition(i,s)}},{key:"_setDropPosition",value:function(e,t){this.element.css({left:e,top:t}),this._area=this._layoutManager._$getArea(e,t),null!==this._area&&(this._lastValidArea=this._area,this._area.contentItem._$highlightDropZone(e,t,this._area))}},{key:"_onDrop",value:function(){this._updateTree(),this._layoutManager.dropTargetIndicator.hide(),null===this._area?null===this._lastValidArea?this._originalParent?this._originalParent.addChild(this._contentItem):this._contentItem._$destroy():this._lastValidArea.contentItem._$onDrop(this._contentItem,this._lastValidArea):this._area.contentItem._$onDrop(this._contentItem,this._area),this.element.remove(),this._layoutManager.emit("itemDropped",this._contentItem)}},{key:"_undisplayTree",value:function(){this._contentItem.parent&&this._contentItem.parent.undisplayChild(this._contentItem)}},{key:"_updateTree",value:function(){this._contentItem.parent&&this._contentItem.parent.removeChild(this._contentItem,!0),this._contentItem._$setParent(this)}},{key:"_setDimensions",value:function(){var e=this._layoutManager.config.dimensions,t=e.dragProxyWidth,n=e.dragProxyHeight;this.element.width(t),this.element.height(n),t-=this._sided?e.headerHeight:0,n-=this._sided?0:e.headerHeight,this.childElementContainer.width(t),this.childElementContainer.height(n),this._contentItem.element.width(t),this._contentItem.element.height(n),this._contentItem.callDownwards("_$show"),this._contentItem.callDownwards("setSize")}}]),t}();t.a=s},function(e,t){t.a=function(){function e(t,n,i,o){h(this,e),this._header=t,this.element=$('<li class="'+i+'" title="'+n+'"></li>'),this._header.on("destroy",this._$destroy,this),this._action=o,this.element.on("click touchstart",this._action),this._header.controlsContainer.append(this.element)}return r(e,[{key:"_$destroy",value:function(){this.element.off(),this.element.remove()}}]),e}()},function(e,t,n){var i=n(3),o=n(33),s=function(e){function t(e,n,i){h(this,t);var s=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,i)),r=e.getComponent(s.config.componentName),a=$.extend(!0,{},s.config.componentState||{});return a.componentName=s.config.componentName,s.componentName=s.config.componentName,""===s.config.title&&(s.config.title=s.config.componentName),s.isComponent=!0,s.container=new o.a(s.config,s,e),s.instance=new r(s.container,a),s.element=s.container._element,s}return c(t,i.a),r(t,[{key:"close",value:function(){this.parent.removeChild(this)}},{key:"setSize",value:function(){"none"!==this.element.css("display")&&this.container._$setSize(this.element.width(),this.element.height())}},{key:"_$init",value:function(){i.a.prototype._$init.call(this),this.container.emit("open")}},{key:"_$hide",value:function(){this.container.hide(),i.a.prototype._$hide.call(this)}},{key:"_$show",value:function(){this.container.show(),i.a.prototype._$show.call(this)}},{key:"_$shown",value:function(){this.container.shown(),i.a.prototype._$shown.call(this)}},{key:"_$destroy",value:function(){this.container.emit("destroy",this),i.a.prototype._$destroy.call(this)}},{key:"_$getArea",value:function(){return null}}]),t}();t.a=s},function(e,t,n){var i=n(1),o=function(e){function t(e,n,i){var o;return h(this,t),(o=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this))).width=null,o.height=null,o.title=e.componentName,o.parent=n,o.layoutManager=i,o.isHidden=!1,o._config=e,o._element=$('<div class="lm_item_container"><div class="lm_content"></div></div>'),o._contentElement=o._element.find(".lm_content"),o}return c(t,i.b),r(t,[{key:"getElement",value:function(){return this._contentElement}},{key:"hide",value:function(){this.emit("hide"),this.isHidden=!0,this._element.hide()}},{key:"show",value:function(){this.emit("show"),this.isHidden=!1,this._element.show(),(0!=this.height||0!=this.width)&&this.emit("shown")}},{key:"setSize",value:function(e,t){for(var n,i,o,s,r=this.parent,a=this;!r.isColumn&&!r.isRow;)if(a=r,(r=r.parent).isRoot)return!1;for(n=("height"===(i=r.isColumn?"height":"width")?t:e)/(this[i]*(1/(a.config[i]/100)))*100,o=(a.config[i]-n)/(r.contentItems.length-1),s=0;s<r.contentItems.length;s++)r.contentItems[s]===a?r.contentItems[s].config[i]=n:r.contentItems[s].config[i]+=o;return r.callDownwards("setSize"),!0}},{key:"close",value:function(){this._config.isClosable&&(this.emit("close"),this.parent.close())}},{key:"getState",value:function(){return this._config.componentState}},{key:"extendState",value:function(e){this.setState($.extend(!0,this.getState(),e))}},{key:"setState",value:function(e){this._config.componentState=e,this.parent.emitBubblingEvent("stateChanged")}},{key:"setTitle",value:function(e){this.parent.setTitle(e)}},{key:"_$setSize",value:function(e,t){(e!==this.width||t!==this.height)&&(this.width=e,this.height=t,$.zepto?this._contentElement.width(e):this._contentElement.outerWidth(e),$.zepto?this._contentElement.height(t):this._contentElement.outerHeight(t),this.emit("resize"))}}]),t}();t.a=o},function(e,n,i){var o=i(68),s=i.n(o),a=i(1),u=i(11),d=i(0),f=function(e){function n(e,t,i,o,s){var r;return h(this,n),(r=l(this,(n.__proto__||Object.getPrototypeOf(n)).call(this))).isInitialised=!1,r._config=e,r._dimensions=t,r._parentId=i,r._indexInParent=o,r._layoutManager=s,r._popoutWindow=null,r._id=null,r._createWindow(),r}return c(n,a.b),r(n,[{key:"toConfig",value:function(){if(!1===this.isInitialised)throw new Error("Can't create config, layout not yet initialised");return{dimensions:{width:this.getGlInstance().width,height:this.getGlInstance().height,left:this._popoutWindow.screenX||this._popoutWindow.screenLeft,top:this._popoutWindow.screenY||this._popoutWindow.screenTop},content:this.getGlInstance().toConfig().content,parentId:this._parentId,indexInParent:this._indexInParent}}},{key:"getGlInstance",value:function(){return this._popoutWindow.__glInstance}},{key:"getWindow",value:function(){return this._popoutWindow}},{key:"close",value:function(){if(this.getGlInstance())this.getGlInstance()._$closeWindow();else try{this.getWindow().close()}catch(e){}}},{key:"popIn",value:function(){var e,t;this._indexInParent;this._parentId&&(e=$.extend(!0,{},this.getGlInstance().toConfig()).content[0],!(t=this._layoutManager.root.getItemsById(this._parentId)[0])&&(t=0<this._layoutManager.root.contentItems.length?this._layoutManager.root.contentItems[0]:this._layoutManager.root)),t.addChild(e,this._indexInParent),this.close()}},{key:"_createWindow",value:function(){var e,n=this._createUrl(),i=t(1e6*Math.random()).toString(36),o=this._serializeWindowOptions({width:this._dimensions.width,height:this._dimensions.height,innerWidth:this._dimensions.width,innerHeight:this._dimensions.height,menubar:"no",toolbar:"no",location:"no",personalbar:"no",resizable:"yes",scrollbars:"no",status:"no"});if(this._popoutWindow=window.open(n,i,o),this._popoutWindow)$(this._popoutWindow).on("load",Object(d.c)(this._positionWindow,this)).on("unload beforeunload",Object(d.c)(this._onClose,this)),e=setInterval(Object(d.c)(function(){this._popoutWindow.__glInstance&&this._popoutWindow.__glInstance.isInitialised&&(this._onInitialised(),clearInterval(e))},this),10);else if(!0===this._layoutManager.config.settings.blockedPopoutsThrowError){var s=new Error("Popout blocked");throw s.type="popoutBlocked",s}}},{key:"_serializeWindowOptions",value:function(e){var t,n=[];for(t in e)n.push(t+"="+e[t]);return n.join(",")}},{key:"_createUrl",value:function(){var e,t={content:this._config},n="gl-window-config-"+Object(d.f)();t=(new u.a).minifyConfig(t);try{localStorage.setItem(n,s()(t))}catch(t){throw new Error("Error while writing to localStorage "+t.toString())}return 1===(e=document.location.href.split("?")).length?e[0]+"?gl-window="+n:document.location.href+"&gl-window="+n}},{key:"_positionWindow",value:function(){this._popoutWindow.moveTo(this._dimensions.left,this._dimensions.top),this._popoutWindow.focus()}},{key:"_onInitialised",value:function(){this.isInitialised=!0,this.getGlInstance().on("popIn",this.popIn,this),this.emit("initialised")}},{key:"_onClose",value:function(){setTimeout(Object(d.c)(this.emit,this,["closed"]),50)}}]),n}();n.a=f},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var i=n(36),o=(n.n(i),n(37)),s=(n.n(o),n(38)),r=(n.n(s),n(39));n.d(t,"default",function(){return r.a});var a=n(33);n.d(t,"ItemContainer",function(){return a.a});var l=n(34);n.d(t,"BrowserPopout",function(){return l.a});var c=n(28);n.d(t,"Header",function(){return c.a});var h=n(31);n.d(t,"HeaderButton",function(){return h.a});var u=n(29);n.d(t,"Tab",function(){return u.a});var d=n(32);n.d(t,"Component",function(){return d.a});var f=n(12);n.d(t,"Root",function(){return f.a});var m=n(6);n.d(t,"RowOrColumn",function(){return m.a});var p=n(13);n.d(t,"Stack",function(){return p.a});var g=n(26);n.d(t,"BubblingEvent",function(){return g.a});var y=n(11);n.d(t,"ConfigMinifier",function(){return y.a});var v=n(7);n.d(t,"DragListener",function(){return v.a});var _=n(1);n.d(t,"EventEmitter",function(){return _.b});var b=n(25);n.d(t,"EventHub",function(){return b.a});var w=n(24);n.d(t,"ReactComponentHandler",function(){return w.a}),{}.ES6&&(n(74),n(77))},function(){},function(){},function(){},function(e,i,o){var s=o(1),u=o(24),d=o(11),f=o(25),m=o(12),p=o(6),g=o(13),y=o(32),v=o(3),_=o(34),b=o(70),w=o(71),x=o(72),k=o(27),I=o(73),C=o(0),S=function(e){function i(e,t){var n;if(h(this,i),!$){var o="jQuery is missing as dependency for GoldenLayout. ";throw o+='Please either expose $ on GoldenLayout\'s scope (e.g. window) or add "jquery" to ',o+="your paths when using RequireJS/AMD",new Error(o)}return(n=l(this,(i.__proto__||Object.getPrototypeOf(i)).call(this))).isInitialised=!1,n._isFullPage=!1,n._resizeTimeoutId=null,n._components={"lm-react-component":u.a},n._itemAreas=[],n._resizeFunction=Object(C.c)(n._onResize,n),n._unloadFunction=Object(C.c)(n._onUnload,n),n._maximisedItem=null,n._maximisePlaceholder=$('<div class="lm_maximise_place"></div>'),n._creationTimeoutPassed=!1,n._subWindowsCreated=!1,n._dragSources=[],n._updatingColumnsResponsive=!1,n._firstLoad=!0,n.width=null,n.height=null,n.root=null,n.openPopouts=[],n.selectedItem=null,n.isSubWindow=!1,n.eventHub=new f.a(n),n.config=n._createConfig(e),n.container=t,n.dropTargetIndicator=null,n.transitionIndicator=null,n.tabDropPlaceholder=$('<div class="lm_drop_tab_placeholder"></div>'),!0===n.isSubWindow&&$("body").css("visibility","hidden"),n._typeToItem={column:Object(C.c)(p.a,n,[!0]),row:Object(C.c)(p.a,n,[!1]),stack:g.a,component:y.a},n}return c(i,s.b),r(i,[{key:"minifyConfig",value:function(e){return(new d.a).minifyConfig(e)}},{key:"unminifyConfig",value:function(e){return(new d.a).unminifyConfig(e)}},{key:"registerComponent",value:function(e,t){if("function"!=typeof t)throw new Error("Please register a constructor function");if(void 0!==this._components[e])throw new Error("Component "+e+" is already registered");this._components[e]=t}},{key:"toConfig",value:function(e){var t,n,i;if(!1===this.isInitialised)throw new Error("Can't create config, layout not yet initialised");if(e&&!(e instanceof v.a))throw new Error("Root must be a ContentItem");for((t={settings:Object(C.b)({},this.config.settings),dimensions:Object(C.b)({},this.config.dimensions),labels:Object(C.b)({},this.config.labels)}).content=[],(n=function(e,t){var i,o;for(i in t.config)"content"!==i&&(e[i]=t.config[i]);if(t.contentItems.length)for(e.content=[],o=0;o<t.contentItems.length;o++)e.content[o]={},n(e.content[o],t.contentItems[o])})(t,e?{contentItems:[e]}:this.root),this._$reconcilePopoutWindows(),t.openPopouts=[],i=0;i<this.openPopouts.length;i++)t.openPopouts.push(this.openPopouts[i].toConfig());return t.maximisedItemId=this._maximisedItem?"__glMaximised":null,t}},{key:"getComponent",value:function(e){if(void 0===this._components[e])throw new k.a('Unknown component "'+e+'"');return this._components[e]}},{key:"init",value:function(){return!1===this._subWindowsCreated&&(this._createSubWindows(),this._subWindowsCreated=!0),"loading"===document.readyState||null===document.body?void $(document).ready(Object(C.c)(this.init,this)):!0===this.isSubWindow&&!1===this._creationTimeoutPassed?(setTimeout(Object(C.c)(this.init,this),7),void(this._creationTimeoutPassed=!0)):(!0===this.isSubWindow&&this._adjustToWindowMode(),this._setContainer(),this.dropTargetIndicator=new w.a(this.container),this.transitionIndicator=new x.a,this.updateSize(),this._create(this.config),this._bindEvents(),this.isInitialised=!0,this._adjustColumnsResponsive(),void this.emit("initialised"))}},{key:"updateSize",value:function(e,t){2===arguments.length?(this.width=e,this.height=t):(this.width=this.container.width(),this.height=this.container.height()),!0===this.isInitialised&&(this.root.callDownwards("setSize",[this.width,this.height]),this._maximisedItem&&(this._maximisedItem.element.width(this.container.width()),this._maximisedItem.element.height(this.container.height()),this._maximisedItem.callDownwards("setSize")),this._adjustColumnsResponsive())}},{key:"destroy",value:function(){!1===this.isInitialised||(this._onUnload(),$(window).off("resize",this._resizeFunction),$(window).off("unload beforeunload",this._unloadFunction),this.root.callDownwards("_$destroy",[],!0),this.root.contentItems=[],this.tabDropPlaceholder.remove(),this.dropTargetIndicator.destroy(),this.transitionIndicator.destroy(),this.eventHub.destroy(),this._dragSources.forEach(function(e){e._dragListener.destroy(),e._element=null,e._itemConfig=null,e._dragListener=null}),this._dragSources=[])}},{key:"createContentItem",value:function(e,t){var n;if("string"!=typeof e.type)throw new k.a("Missing parameter 'type'",e);if("react-component"===e.type&&(e.type="component",e.componentName="lm-react-component"),!this._typeToItem[e.type])throw n="Unknown type '"+e.type+"'. Valid types are "+Object(C.j)(this._typeToItem).join(","),new k.a(n);return"component"!==e.type||t instanceof g.a||!t||!0===this.isSubWindow&&t instanceof m.a||(e={type:"stack",width:e.width,height:e.height,content:[e]}),new this._typeToItem[e.type](this,e,t)}},{key:"createPopout",value:function(e,t,n,i){var o,s,r,a,l,c,h=e,u=e instanceof v.a,d=this;if(n=n||null,u){for(h=this.toConfig(e).content,n=Object(C.f)(),a=e.parent,l=e;1===a.contentItems.length&&!a.isRoot;)a=a.parent,l=l.parent;a.addId(n),isNaN(i)&&(i=Object(C.g)(l,a.contentItems))}else h instanceof Array||(h=[h]);return!t&&u&&(o=window.screenX||window.screenLeft,s=window.screenY||window.screenTop,t={left:o+(r=e.element.offset()).left,top:s+r.top,width:e.element.width(),height:e.element.height()}),t||u||(t={left:window.screenX||window.screenLeft+20,top:window.screenY||window.screenTop+20,width:500,height:309}),u&&e.remove(),(c=new _.a(h,t,n,i,this)).on("initialised",function(){d.emit("windowOpened",c)}),c.on("closed",function(){d._$reconcilePopoutWindows()}),this.openPopouts.push(c),c}},{key:"createDragSource",value:function(e,t){this.config.settings.constrainDragToContainer=!1;var n=new b.a($(e),t,this);return this._dragSources.push(n),n}},{key:"selectItem",value:function(e,t){if(!0!==this.config.settings.selectionEnabled)throw new Error("Please set selectionEnabled to true to use this feature");e===this.selectedItem||(null!==this.selectedItem&&this.selectedItem.deselect(),e&&!0!==t&&e.select(),this.selectedItem=e,this.emit("selectionChanged",e))}},{key:"_$maximiseItem",value:function(e){null!==this._maximisedItem&&this._$minimiseItem(this._maximisedItem),this._maximisedItem=e,this._maximisedItem.addId("__glMaximised"),e.element.addClass("lm_maximised"),e.element.after(this._maximisePlaceholder),this.root.element.prepend(e.element),e.element.width(this.container.width()),e.element.height(this.container.height()),e.callDownwards("setSize"),this._maximisedItem.emit("maximised"),this.emit("stateChanged")}},{key:"_$minimiseItem",value:function(e){e.element.removeClass("lm_maximised"),e.removeId("__glMaximised"),this._maximisePlaceholder.after(e.element),this._maximisePlaceholder.remove(),e.parent.callDownwards("setSize"),this._maximisedItem=null,e.emit("minimised"),this.emit("stateChanged")}},{key:"_$closeWindow",value:function(){window.setTimeout(function(){window.close()},1)}},{key:"_$getArea",value:function(e,t){var n,i,o=1/0,s=null;for(n=0;n<this._itemAreas.length;n++)e>(i=this._itemAreas[n]).x1&&e<i.x2&&t>i.y1&&t<i.y2&&o>i.surface&&(o=i.surface,s=i);return s}},{key:"_$createRootItemAreas",value:function(){var e={y2:0,x2:0,y1:"y2",x1:"x2"};for(var t in e){var n=this.root._$getArea();n.side=t,n[t]=e[t]?n[e[t]]-50:50,n.surface=(n.x2-n.x1)*(n.y2-n.y1),this._itemAreas.push(n)}}},{key:"_$calculateItemAreas",value:function(){var e,t,n=this._getAllContentItems();if(this._itemAreas=[],1!==n.length){for(this._$createRootItemAreas(),e=0;e<n.length;e++)if(n[e].isStack){if(null===(t=n[e]._$getArea()))continue;if(t instanceof Array)this._itemAreas=this._itemAreas.concat(t);else{this._itemAreas.push(t);var i={};Object(C.b)(i,t),Object(C.b)(i,t.contentItem._contentAreaDimensions.header.highlightArea),i.surface=(i.x2-i.x1)*(i.y2-i.y1),this._itemAreas.push(i)}}}else this._itemAreas.push(this.root._$getArea())}},{key:"_$normalizeContentItem",value:function(e,t){if(!e)throw new Error("No content item defined");if(Object(C.h)(e)&&(e=e()),e instanceof v.a)return e;if($.isPlainObject(e)&&e.type){var n=this.createContentItem(e,t);return n.callDownwards("_$init"),n}throw new Error("Invalid contentItem")}},{key:"_$reconcilePopoutWindows",value:function(){var e,t=[];for(e=0;e<this.openPopouts.length;e++)!1===this.openPopouts[e].getWindow().closed?t.push(this.openPopouts[e]):this.emit("windowClosed",this.openPopouts[e]);this.openPopouts.length!==t.length&&(this.emit("stateChanged"),this.openPopouts=t)}},{key:"_getAllContentItems",value:function(){var e=[];return function t(n){if(e.push(n),n.contentItems instanceof Array)for(var i=0;i<n.contentItems.length;i++)t(n.contentItems[i])}(this.root),e}},{key:"_bindEvents",value:function(){this._isFullPage&&$(window).resize(this._resizeFunction),$(window).on("unload beforeunload",this._unloadFunction)}},{key:"_onResize",value:function(){clearTimeout(this._resizeTimeoutId),this._resizeTimeoutId=setTimeout(Object(C.c)(this.updateSize,this),100)}},{key:"_createConfig",value:function(e){var t=Object(C.d)("gl-window");t&&(this.isSubWindow=!0,e=localStorage.getItem(t),e=JSON.parse(e),e=(new d.a).unminifyConfig(e),localStorage.removeItem(t));return function e(t){for(var n in t)"props"!=n&&"object"==a(t[n])?e(t[n]):"type"==n&&"react-component"===t[n]&&(t.type="component",t.componentName="lm-react-component")}(e=$.extend(!0,{},I.a,e)),!1===e.settings.hasHeaders&&(e.dimensions.headerHeight=0),e}},{key:"_adjustToWindowMode",value:function(){var e=$('<div class="lm_popin" title="'+this.config.labels.popin+'"><div class="lm_icon"></div><div class="lm_bg"></div></div>');e.click(Object(C.c)(function(){this.emit("popIn")},this)),document.title=Object(C.k)(this.config.content[0].title),$("head").append($("body link, body style, template, .gl_keep")),this.container=$("body").html("").css("visibility","visible").append(e),document.body.offsetHeight,window.__glInstance=this}},{key:"_createSubWindows",value:function(){var e,t;for(e=0;e<this.config.openPopouts.length;e++)t=this.config.openPopouts[e],this.createPopout(t.content,t.dimensions,t.parentId,t.indexInParent)}},{key:"_setContainer",value:function(){var e=$(this.container||"body");if(0===e.length)throw new Error("GoldenLayout container not found");if(1<e.length)throw new Error("GoldenLayout more than one container element specified");e[0]===document.body&&(this._isFullPage=!0,$("html, body").css({height:"100%",margin:0,padding:0,overflow:"hidden"})),this.container=e}},{key:"_create",value:function(e){var t;if(!(e.content instanceof Array))throw t=void 0===e.content?"Missing setting 'content' on top level of configuration":"Configuration parameter 'content' must be an array",new k.a(t,e);if(1<e.content.length)throw t="Top level content can't contain more then one element.",new k.a(t,e);this.root=new m.a(this,{content:e.content},this.container),this.root.callDownwards("_$init"),"__glMaximised"===e.maximisedItemId&&this.root.getItemsById(e.maximisedItemId)[0].toggleMaximise()}},{key:"_onUnload",value:function(){if(!0===this.config.settings.closePopoutsOnUnload)for(var e=0;e<this.openPopouts.length;e++)this.openPopouts[e].close()}},{key:"_adjustColumnsResponsive",value:function(){if(this._useResponsiveLayout()&&!this._updatingColumnsResponsive&&this.config.dimensions&&this.config.dimensions.minItemWidth&&0!==this.root.contentItems.length&&this.root.contentItems[0].isRow){this._firstLoad=!1;var e=this.root.contentItems[0].contentItems.length;if(!(1>=e)){var i=this.config.dimensions.minItemWidth;if(!(e*i<=this.width)){this._updatingColumnsResponsive=!0;for(var o,s=n(t(this.width/i),1),r=this.root.contentItems[0],a=this._findAllStackContainers()[0],l=0;l<e-s;l++)o=r.contentItems[r.contentItems.length-1],this._addChildContentItemsToContainer(a,o);this._updatingColumnsResponsive=!1}}}else this._firstLoad=!1}},{key:"_useResponsiveLayout",value:function(){return this.config.settings&&("always"==this.config.settings.responsiveMode||"onload"==this.config.settings.responsiveMode&&this._firstLoad)}},{key:"_addChildContentItemsToContainer",value:function(e,t){"stack"===t.type?t.contentItems.forEach(function(n){e.addChild(n),t.removeChild(n,!0)}):t.contentItems.forEach(Object(C.c)(function(t){this._addChildContentItemsToContainer(e,t)},this))}},{key:"_findAllStackContainers",value:function(){var e=[];return this._findAllStackContainersRecursive(e,this.root),e}},{key:"_findAllStackContainersRecursive",value:function(e,t){t.contentItems.forEach(Object(C.c)(function(t){"stack"==t.type?e.push(t):!t.isComponent&&this._findAllStackContainersRecursive(e,t)},this))}}]),i}();i.a=S},function(e,t,n){e.exports={default:n(41),__esModule:!0}},function(e,t,n){n(42),e.exports=n(2).Object.keys},function(e,t,n){var i=n(43),o=n(15);n(53)("keys",function(){return function(e){return o(i(e))}})},function(e,t,n){var i=n(14);e.exports=function(e){return Object(i(e))}},function(e,t,n){var i=n(16),o=n(17),s=n(47)(!1),r=n(19)("IE_PROTO");e.exports=function(e,t){var n,a=o(e),l=0,c=[];for(n in a)n!=r&&i(a,n)&&c.push(n);for(;t.length>l;)i(a,n=t[l++])&&(~s(c,n)||c.push(n));return c}},function(e,t,n){var i=n(46);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==i(e)?e.split(""):Object(e)}},function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},function(e,t,n){var i=n(17),o=n(48),s=n(49);e.exports=function(e){return function(t,n,r){var a,l=i(t),c=o(l.length),h=s(r,c);if(e&&n!=n){for(;c>h;)if((a=l[h++])!=a)return!0}else for(;c>h;h++)if((e||h in l)&&l[h]===n)return e||h||0;return!e&&-1}}},function(t,n,i){var o=i(18);t.exports=function(t){return 0<t?e(o(t),9007199254740991):0}},function(t,i,o){var s=o(18);t.exports=function(t,i){return 0>(t=s(t))?n(t+i,0):e(t,i)}},function(e,t,n){var i=n(2),o=n(4),s="__core-js_shared__",r=o[s]||(o[s]={});(e.exports=function(e,t){return r[e]||(r[e]=void 0===t?{}:t)})("versions",[]).push({version:i.version,mode:n(51)?"pure":"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})},function(e){e.exports=!0},function(e){var t=0,n=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+n).toString(36))}},function(e,t,n){var i=n(21),o=n(2),s=n(10);e.exports=function(e,t){var n=(o.Object||{})[e]||Object[e],r={};r[e]=t(n),i(i.S+i.F*s(function(){n(1)}),"Object",r)}},function(e,t,n){var i=n(55);e.exports=function(e,t,n){return i(e),void 0===t?e:1===n?function(n){return e.call(t,n)}:2===n?function(n,i){return e.call(t,n,i)}:3===n?function(n,i,o){return e.call(t,n,i,o)}:function(){return e.apply(t,arguments)}}},function(e){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){var i=n(22),o=n(59);e.exports=n(5)?function(e,t,n){return i.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){e.exports=!n(5)&&!n(10)(function(){return 7!=Object.defineProperty(n(23)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){var i=n(9);e.exports=function(e,t){if(!i(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!i(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!i(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!i(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){e.exports={default:n(61),__esModule:!0}},function(e,t,n){n(62);var i=n(2).Object;e.exports=function(e,t){return i.create(e,t)}},function(e,t,n){var i=n(21);i(i.S,"Object",{create:n(63)})},function(e,t,n){var i=n(8),o=n(64),s=n(20),r=n(19)("IE_PROTO"),a=function(){},l="prototype",c=function(){var e,t=n(23)("iframe"),i=s.length;for(t.style.display="none",n(65).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),c=e.F;i--;)delete c[l][s[i]];return c()};e.exports=Object.create||function(e,t){var n;return null===e?n=c():(a[l]=i(e),n=new a,a[l]=null,n[r]=e),void 0===t?n:o(n,t)}},function(e,t,n){var i=n(22),o=n(8),s=n(15);e.exports=n(5)?Object.defineProperties:function(e,t){o(e);for(var n,r=s(t),a=r.length,l=0;a>l;)i.f(e,n=r[l++],t[n]);return e}},function(e,t,n){var i=n(4).document;e.exports=i&&i.documentElement},function(e,t){t.a={isClosable:!0,reorderEnabled:!0,title:""}},function(e,t,n){var i=n(7);t.a=function(){function e(t,n,o){h(this,e),this._isVertical=t,this._size=n,this._grabSize=o<n?n:o,this.element=this._createElement(),this._dragListener=new i.a(this.element)}return r(e,[{key:"on",value:function(e,t,n){this._dragListener.on(e,t,n)}},{key:"_$destroy",value:function(){this.element.remove()}},{key:"_createElement",value:function(){var e=$('<div class="lm_drag_handle"></div>'),t=$('<div class="lm_splitter"></div>');t.append(e);var n=this._grabSize-this._size,i=n/2;return this._isVertical?(e.css("top",-i),e.css("height",this._size+n),t.addClass("lm_vertical"),t.height(this._size)):(e.css("left",-i),e.css("width",this._size+n),t.addClass("lm_horizontal"),t.width(this._size)),t}}]),e}()},function(e,t,n){e.exports={default:n(69),__esModule:!0}},function(e,t,n){var i=n(2),o=i.JSON||(i.JSON={stringify:JSON.stringify});e.exports=function(){return o.stringify.apply(o,arguments)}},function(e,t,n){var i=n(7),o=n(30),s=n(0);t.a=function(){function e(t,n,i){h(this,e),this._element=t,this._itemConfig=n,this._layoutManager=i,this._dragListener=null,this._createDragListener()}return r(e,[{key:"_createDragListener",value:function(){null!==this._dragListener&&this._dragListener.destroy(),this._dragListener=new i.a(this._element),this._dragListener.on("dragStart",this._onDragStart,this),this._dragListener.on("dragStop",this._createDragListener,this)}},{key:"_onDragStart",value:function(e,t){var n=this._itemConfig;Object(s.h)(n)&&(n=n());var i=this._layoutManager._$normalizeContentItem($.extend(!0,{},n)),r=new o.a(e,t,this._dragListener,this._layoutManager,i,null);this._layoutManager.transitionIndicator.transitionElements(this._element,r.element)}}]),e}()},function(e,t){t.a=function(){function e(){h(this,e),this.element=$('<div class="lm_dropTargetIndicator"><div class="lm_inner"></div></div>'),$(document.body).append(this.element)}return r(e,[{key:"destroy",value:function(){this.element.remove()}},{key:"highlight",value:function(e,t,n,i){this.highlightArea({x1:e,y1:t,x2:n,y2:i})}},{key:"highlightArea",value:function(e){this.element.css({left:e.x1,top:e.y1,width:e.x2-e.x1,height:e.y2-e.y1}).show()}},{key:"hide",value:function(){this.element.hide()}}]),e}()},function(e,t,n){var i=n(0);t.a=function(){function e(){h(this,e),this._element=$('<div class="lm_transition_indicator"></div>'),$(document.body).append(this._element),this._toElement=null,this._fromDimensions=null,this._totalAnimationDuration=200,this._animationStartTime=null}return r(e,[{key:"destroy",value:function(){this._element.remove()}},{key:"transitionElements",value:function(){}},{key:"_nextAnimationFrame",value:function(){var e,t=this._measure(this._toElement),n=(Object(i.i)()-this._animationStartTime)/this._totalAnimationDuration,o={};if(1<=n)this._element.hide();else{for(e in t.opacity=0,this._fromDimensions)o[e]=this._fromDimensions[e]+(t[e]-this._fromDimensions[e])*n;this._element.css(o),Object(i.a)(Object(i.c)(this._nextAnimationFrame,this))}}},{key:"_measure",value:function(e){var t=e.offset();return{left:t.left,top:t.top,width:e.outerWidth(),height:e.outerHeight()}}}]),e}()},function(e,t){t.a={openPopouts:[],settings:{hasHeaders:!0,constrainDragToContainer:!0,reorderEnabled:!0,selectionEnabled:!1,popoutWholeStack:!1,blockedPopoutsThrowError:!0,closePopoutsOnUnload:!0,showPopoutIcon:!0,showMaximiseIcon:!0,showCloseIcon:!0,responsiveMode:"onload",tabOverlapAllowance:0,reorderOnTabMenuClick:!0,tabControlOffset:10},dimensions:{borderWidth:5,borderGrabWidth:15,minItemHeight:10,minItemWidth:10,headerHeight:20,dragProxyWidth:300,dragProxyHeight:200},labels:{close:"close",maximise:"maximise",minimise:"minimise",popout:"open in new window",popin:"pop in",tabDropdown:"additional tabs"}}},function(e,t,n){n(75)(n(76))},function(e){e.exports=function(e){function t(e){"undefined"!=typeof console&&(console.error||console.log)("[Script Loader]",e)}try{"undefined"!=typeof execScript&&"undefined"!=typeof attachEvent&&"undefined"==typeof addEventListener?execScript(e):"undefined"==typeof eval?t("EvalError: No eval function available"):eval.call(null,e)}catch(e){t(e)}}},function(e){e.exports="/* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */\n(function(global, factory) {\n if (typeof define === 'function' && define.amd)\n define(function() { return factory(global) })\n else\n factory(global)\n}(this, function(window) {\n var Zepto = (function() {\n var undefined, key, $, classList, emptyArray = [], concat = emptyArray.concat, filter = emptyArray.filter, slice = emptyArray.slice,\n document = window.document,\n elementDisplay = {}, classCache = {},\n cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 },\n fragmentRE = /^\\s*<(\\w+|!)[^>]*>/,\n singleTagRE = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,\n rootNodeRE = /^(?:body|html)$/i,\n capitalRE = /([A-Z])/g,\n\n // special attributes that should be get/set via method calls\n methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],\n\n adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ],\n table = document.createElement('table'),\n tableRow = document.createElement('tr'),\n containers = {\n 'tr': document.createElement('tbody'),\n 'tbody': table, 'thead': table, 'tfoot': table,\n 'td': tableRow, 'th': tableRow,\n '*': document.createElement('div')\n },\n readyRE = /complete|loaded|interactive/,\n simpleSelectorRE = /^[\\w-]*$/,\n class2type = {},\n toString = class2type.toString,\n zepto = {},\n camelize, uniq,\n tempParent = document.createElement('div'),\n propMap = {\n 'tabindex': 'tabIndex',\n 'readonly': 'readOnly',\n 'for': 'htmlFor',\n 'class': 'className',\n 'maxlength': 'maxLength',\n 'cellspacing': 'cellSpacing',\n 'cellpadding': 'cellPadding',\n 'rowspan': 'rowSpan',\n 'colspan': 'colSpan',\n 'usemap': 'useMap',\n 'frameborder': 'frameBorder',\n 'contenteditable': 'contentEditable'\n },\n isArray = Array.isArray ||\n function(object){ return object instanceof Array }\n\n zepto.matches = function(element, selector) {\n if (!selector || !element || element.nodeType !== 1) return false\n var matchesSelector = element.matches || element.webkitMatchesSelector ||\n element.mozMatchesSelector || element.oMatchesSelector ||\n element.matchesSelector\n if (matchesSelector) return matchesSelector.call(element, selector)\n // fall back to performing a selector:\n var match, parent = element.parentNode, temp = !parent\n if (temp) (parent = tempParent).appendChild(element)\n match = ~zepto.qsa(parent, selector).indexOf(element)\n temp && tempParent.removeChild(element)\n return match\n }\n\n function type(obj) {\n return obj == null ? String(obj) :\n class2type[toString.call(obj)] || \"object\"\n }\n\n function isFunction(value) { return type(value) == \"function\" }\n function isWindow(obj) { return obj != null && obj == obj.window }\n function isDocument(obj) { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }\n function isObject(obj) { return type(obj) == \"object\" }\n function isPlainObject(obj) {\n return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype\n }\n\n function likeArray(obj) {\n var length = !!obj && 'length' in obj && obj.length,\n type = $.type(obj)\n\n return 'function' != type && !isWindow(obj) && (\n 'array' == type || length === 0 ||\n (typeof length == 'number' && length > 0 && (length - 1) in obj)\n )\n }\n\n function compact(array) { return filter.call(array, function(item){ return item != null }) }\n function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }\n camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) }\n function dasherize(str) {\n return str.replace(/::/g, '/')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n .replace(/([a-z\\d])([A-Z])/g, '$1_$2')\n .replace(/_/g, '-')\n .toLowerCase()\n }\n uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }\n\n function classRE(name) {\n return name in classCache ?\n classCache[name] : (classCache[name] = new RegExp('(^|\\\\s)' + name + '(\\\\s|$)'))\n }\n\n function maybeAddPx(name, value) {\n return (typeof value == \"number\" && !cssNumber[dasherize(name)]) ? value + \"px\" : value\n }\n\n function defaultDisplay(nodeName) {\n var element, display\n if (!elementDisplay[nodeName]) {\n element = document.createElement(nodeName)\n document.body.appendChild(element)\n display = getComputedStyle(element, '').getPropertyValue(\"display\")\n element.parentNode.removeChild(element)\n display == \"none\" && (display = \"block\")\n elementDisplay[nodeName] = display\n }\n return elementDisplay[nodeName]\n }\n\n function children(element) {\n return 'children' in element ?\n slice.call(element.children) :\n $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })\n }\n\n function Z(dom, selector) {\n var i, len = dom ? dom.length : 0\n for (i = 0; i < len; i++) this[i] = dom[i]\n this.length = len\n this.selector = selector || ''\n }\n\n // `$.zepto.fragment` takes a html string and an optional tag name\n // to generate DOM nodes from the given html string.\n // The generated DOM nodes are returned as an array.\n // This function can be overridden in plugins for example to make\n // it compatible with browsers that don't support the DOM fully.\n zepto.fragment = function(html, name, properties) {\n var dom, nodes, container\n\n // A special case optimization for a single tag\n if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1))\n\n if (!dom) {\n if (html.replace) html = html.replace(tagExpanderRE, \"<$1></$2>\")\n if (name === undefined) name = fragmentRE.test(html) && RegExp.$1\n if (!(name in containers)) name = '*'\n\n container = containers[name]\n container.innerHTML = '' + html\n dom = $.each(slice.call(container.childNodes), function(){\n container.removeChild(this)\n })\n }\n\n if (isPlainObject(properties)) {\n nodes = $(dom)\n $.each(properties, function(key, value) {\n if (methodAttributes.indexOf(key) > -1) nodes[key](value)\n else nodes.attr(key, value)\n })\n }\n\n return dom\n }\n\n // `$.zepto.Z` swaps out the prototype of the given `dom` array\n // of nodes with `$.fn` and thus supplying all the Zepto functions\n // to the array. This method can be overridden in plugins.\n zepto.Z = function(dom, selector) {\n return new Z(dom, selector)\n }\n\n // `$.zepto.isZ` should return `true` if the given object is a Zepto\n // collection. This method can be overridden in plugins.\n zepto.isZ = function(object) {\n return object instanceof zepto.Z\n }\n\n // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and\n // takes a CSS selector and an optional context (and handles various\n // special cases).\n // This method can be overridden in plugins.\n zepto.init = function(selector, context) {\n var dom\n // If nothing given, return an empty Zepto collection\n if (!selector) return zepto.Z()\n // Optimize for string selectors\n else if (typeof selector == 'string') {\n selector = selector.trim()\n // If it's a html fragment, create nodes from it\n // Note: In both Chrome 21 and Firefox 15, DOM error 12\n // is thrown if the fragment doesn't begin with <\n if (selector[0] == '<' && fragmentRE.test(selector))\n dom = zepto.fragment(selector, RegExp.$1, context), selector = null\n // If there's a context, create a collection on that context first, and select\n // nodes from there\n else if (context !== undefined) return $(context).find(selector)\n // If it's a CSS selector, use it to select nodes.\n else dom = zepto.qsa(document, selector)\n }\n // If a function is given, call it when the DOM is ready\n else if (isFunction(selector)) return $(document).ready(selector)\n // If a Zepto collection is given, just return it\n else if (zepto.isZ(selector)) return selector\n else {\n // normalize array if an array of nodes is given\n if (isArray(selector)) dom = compact(selector)\n // Wrap DOM nodes.\n else if (isObject(selector))\n dom = [selector], selector = null\n // If it's a html fragment, create nodes from it\n else if (fragmentRE.test(selector))\n dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null\n // If there's a context, create a collection on that context first, and select\n // nodes from there\n else if (context !== undefined) return $(context).find(selector)\n // And last but no least, if it's a CSS selector, use it to select nodes.\n else dom = zepto.qsa(document, selector)\n }\n // create a new Zepto collection from the nodes found\n return zepto.Z(dom, selector)\n }\n\n // `$` will be the base `Zepto` object. When calling this\n // function just call `$.zepto.init, which makes the implementation\n // details of selecting nodes and creating Zepto collections\n // patchable in plugins.\n $ = function(selector, context){\n return zepto.init(selector, context)\n }\n\n function extend(target, source, deep) {\n for (key in source)\n if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\n if (isPlainObject(source[key]) && !isPlainObject(target[key]))\n target[key] = {}\n if (isArray(source[key]) && !isArray(target[key]))\n target[key] = []\n extend(target[key], source[key], deep)\n }\n else if (source[key] !== undefined) target[key] = source[key]\n }\n\n // Copy all but undefined properties from one or more\n // objects to the `target` object.\n $.extend = function(target){\n var deep, args = slice.call(arguments, 1)\n if (typeof target == 'boolean') {\n deep = target\n target = args.shift()\n }\n args.forEach(function(arg){ extend(target, arg, deep) })\n return target\n }\n\n // `$.zepto.qsa` is Zepto's CSS selector implementation which\n // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.\n // This method can be overridden in plugins.\n zepto.qsa = function(element, selector){\n var found,\n maybeID = selector[0] == '#',\n maybeClass = !maybeID && selector[0] == '.',\n nameOnly = maybeID || maybeClass ? selector.slice(1) : selector, // Ensure that a 1 char tag name still gets checked\n isSimple = simpleSelectorRE.test(nameOnly)\n return (element.getElementById && isSimple && maybeID) ? // Safari DocumentFragment doesn't have getElementById\n ( (found = element.getElementById(nameOnly)) ? [found] : [] ) :\n (element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11) ? [] :\n slice.call(\n isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn't have getElementsByClassName/TagName\n maybeClass ? element.getElementsByClassName(nameOnly) : // If it's simple, it could be a class\n element.getElementsByTagName(selector) : // Or a tag\n element.querySelectorAll(selector) // Or it's not simple, and we need to query all\n )\n }\n\n function filtered(nodes, selector) {\n return selector == null ? $(nodes) : $(nodes).filter(selector)\n }\n\n $.contains = document.documentElement.contains ?\n function(parent, node) {\n return parent !== node && parent.contains(node)\n } :\n function(parent, node) {\n while (node && (node = node.parentNode))\n if (node === parent) return true\n return false\n }\n\n function funcArg(context, arg, idx, payload) {\n return isFunction(arg) ? arg.call(context, idx, payload) : arg\n }\n\n function setAttribute(node, name, value) {\n value == null ? node.removeAttribute(name) : node.setAttribute(name, value)\n }\n\n // access className property while respecting SVGAnimatedString\n function className(node, value){\n var klass = node.className || '',\n svg = klass && klass.baseVal !== undefined\n\n if (value === undefined) return svg ? klass.baseVal : klass\n svg ? (klass.baseVal = value) : (node.className = value)\n }\n\n // \"true\" => true\n // \"false\" => false\n // \"null\" => null\n // \"42\" => 42\n // \"42.5\" => 42.5\n // \"08\" => \"08\"\n // JSON => parse if valid\n // String => self\n function deserializeValue(value) {\n try {\n return value ?\n value == \"true\" ||\n ( value == \"false\" ? false :\n value == \"null\" ? null :\n +value + \"\" == value ? +value :\n /^[\\[\\{]/.test(value) ? $.parseJSON(value) :\n value )\n : value\n } catch(e) {\n return value\n }\n }\n\n $.type = type\n $.isFunction = isFunction\n $.isWindow = isWindow\n $.isArray = isArray\n $.isPlainObject = isPlainObject\n\n $.isEmptyObject = function(obj) {\n var name\n for (name in obj) return false\n return true\n }\n\n $.isNumeric = function(val) {\n var num = Number(val), type = typeof val\n return val != null && type != 'boolean' &&\n (type != 'string' || val.length) &&\n !isNaN(num) && isFinite(num) || false\n }\n\n $.inArray = function(elem, array, i){\n return emptyArray.indexOf.call(array, elem, i)\n }\n\n $.camelCase = camelize\n $.trim = function(str) {\n return str == null ? \"\" : String.prototype.trim.call(str)\n }\n\n // plugin compatibility\n $.uuid = 0\n $.support = { }\n $.expr = { }\n $.noop = function() {}\n\n $.map = function(elements, callback){\n var value, values = [], i, key\n if (likeArray(elements))\n for (i = 0; i < elements.length; i++) {\n value = callback(elements[i], i)\n if (value != null) values.push(value)\n }\n else\n for (key in elements) {\n value = callback(elements[key], key)\n if (value != null) values.push(value)\n }\n return flatten(values)\n }\n\n $.each = function(elements, callback){\n var i, key\n if (likeArray(elements)) {\n for (i = 0; i < elements.length; i++)\n if (callback.call(elements[i], i, elements[i]) === false) return elements\n } else {\n for (key in elements)\n if (callback.call(elements[key], key, elements[key]) === false) return elements\n }\n\n return elements\n }\n\n $.grep = function(elements, callback){\n return filter.call(elements, callback)\n }\n\n if (window.JSON) $.parseJSON = JSON.parse\n\n // Populate the class2type map\n $.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n class2type[ \"[object \" + name + \"]\" ] = name.toLowerCase()\n })\n\n // Define methods that will be available on all\n // Zepto collections\n $.fn = {\n constructor: zepto.Z,\n length: 0,\n\n // Because a collection acts like an array\n // copy over these useful array functions.\n forEach: emptyArray.forEach,\n reduce: emptyArray.reduce,\n push: emptyArray.push,\n sort: emptyArray.sort,\n splice: emptyArray.splice,\n indexOf: emptyArray.indexOf,\n concat: function(){\n var i, value, args = []\n for (i = 0; i < arguments.length; i++) {\n value = arguments[i]\n args[i] = zepto.isZ(value) ? value.toArray() : value\n }\n return concat.apply(zepto.isZ(this) ? this.toArray() : this, args)\n },\n\n // `map` and `slice` in the jQuery API work differently\n // from their array counterparts\n map: function(fn){\n return $($.map(this, function(el, i){ return fn.call(el, i, el) }))\n },\n slice: function(){\n return $(slice.apply(this, arguments))\n },\n\n ready: function(callback){\n // need to check if document.body exists for IE as that browser reports\n // document ready when it hasn't yet created the body element\n if (readyRE.test(document.readyState) && document.body) callback($)\n else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)\n return this\n },\n get: function(idx){\n return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]\n },\n toArray: function(){ return this.get() },\n size: function(){\n return this.length\n },\n remove: function(){\n return this.each(function(){\n if (this.parentNode != null)\n this.parentNode.removeChild(this)\n })\n },\n each: function(callback){\n emptyArray.every.call(this, function(el, idx){\n return callback.call(el, idx, el) !== false\n })\n return this\n },\n filter: function(selector){\n if (isFunction(selector)) return this.not(this.not(selector))\n return $(filter.call(this, function(element){\n return zepto.matches(element, selector)\n }))\n },\n add: function(selector,context){\n return $(uniq(this.concat($(selector,context))))\n },\n is: function(selector){\n return this.length > 0 && zepto.matches(this[0], selector)\n },\n not: function(selector){\n var nodes=[]\n if (isFunction(selector) && selector.call !== undefined)\n this.each(function(idx){\n if (!selector.call(this,idx)) nodes.push(this)\n })\n else {\n var excludes = typeof selector == 'string' ? this.filter(selector) :\n (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)\n this.forEach(function(el){\n if (excludes.indexOf(el) < 0) nodes.push(el)\n })\n }\n return $(nodes)\n },\n has: function(selector){\n return this.filter(function(){\n return isObject(selector) ?\n $.contains(this, selector) :\n $(this).find(selector).size()\n })\n },\n eq: function(idx){\n return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)\n },\n first: function(){\n var el = this[0]\n return el && !isObject(el) ? el : $(el)\n },\n last: function(){\n var el = this[this.length - 1]\n return el && !isObject(el) ? el : $(el)\n },\n find: function(selector){\n var result, $this = this\n if (!selector) result = $()\n else if (typeof selector == 'object')\n result = $(selector).filter(function(){\n var node = this\n return emptyArray.some.call($this, function(parent){\n return $.contains(parent, node)\n })\n })\n else if (this.length == 1) result = $(zepto.qsa(this[0], selector))\n else result = this.map(function(){ return zepto.qsa(this, selector) })\n return result\n },\n closest: function(selector, context){\n var nodes = [], collection = typeof selector == 'object' && $(selector)\n this.each(function(_, node){\n while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))\n node = node !== context && !isDocument(node) && node.parentNode\n if (node && nodes.indexOf(node) < 0) nodes.push(node)\n })\n return $(nodes)\n },\n parents: function(selector){\n var ancestors = [], nodes = this\n while (nodes.length > 0)\n nodes = $.map(nodes, function(node){\n if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {\n ancestors.push(node)\n return node\n }\n })\n return filtered(ancestors, selector)\n },\n parent: function(selector){\n return filtered(uniq(this.pluck('parentNode')), selector)\n },\n children: function(selector){\n return filtered(this.map(function(){ return children(this) }), selector)\n },\n contents: function() {\n return this.map(function() { return this.contentDocument || slice.call(this.childNodes) })\n },\n siblings: function(selector){\n return filtered(this.map(function(i, el){\n return filter.call(children(el.parentNode), function(child){ return child!==el })\n }), selector)\n },\n empty: function(){\n return this.each(function(){ this.innerHTML = '' })\n },\n // `pluck` is borrowed from Prototype.js\n pluck: function(property){\n return $.map(this, function(el){ return el[property] })\n },\n show: function(){\n return this.each(function(){\n this.style.display == \"none\" && (this.style.display = '')\n if (getComputedStyle(this, '').getPropertyValue(\"display\") == \"none\")\n this.style.display = defaultDisplay(this.nodeName)\n })\n },\n replaceWith: function(newContent){\n return this.before(newContent).remove()\n },\n wrap: function(structure){\n var func = isFunction(structure)\n if (this[0] && !func)\n var dom = $(structure).get(0),\n clone = dom.parentNode || this.length > 1\n\n return this.each(function(index){\n $(this).wrapAll(\n func ? structure.call(this, index) :\n clone ? dom.cloneNode(true) : dom\n )\n })\n },\n wrapAll: function(structure){\n if (this[0]) {\n $(this[0]).before(structure = $(structure))\n var children\n // drill down to the inmost element\n while ((children = structure.children()).length) structure = children.first()\n $(structure).append(this)\n }\n return this\n },\n wrapInner: function(structure){\n var func = isFunction(structure)\n return this.each(function(index){\n var self = $(this), contents = self.contents(),\n dom = func ? structure.call(this, index) : structure\n contents.length ? contents.wrapAll(dom) : self.append(dom)\n })\n },\n unwrap: function(){\n this.parent().each(function(){\n $(this).replaceWith($(this).children())\n })\n return this\n },\n clone: function(){\n return this.map(function(){ return this.cloneNode(true) })\n },\n hide: function(){\n return this.css(\"display\", \"none\")\n },\n toggle: function(setting){\n return this.each(function(){\n var el = $(this)\n ;(setting === undefined ? el.css(\"display\") == \"none\" : setting) ? el.show() : el.hide()\n })\n },\n prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') },\n next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') },\n html: function(html){\n return 0 in arguments ?\n this.each(function(idx){\n var originHtml = this.innerHTML\n $(this).empty().append( funcArg(this, html, idx, originHtml) )\n }) :\n (0 in this ? this[0].innerHTML : null)\n },\n text: function(text){\n return 0 in arguments ?\n this.each(function(idx){\n var newText = funcArg(this, text, idx, this.textContent)\n this.textContent = newText == null ? '' : ''+newText\n }) :\n (0 in this ? this.pluck('textContent').join(\"\") : null)\n },\n attr: function(name, value){\n var result\n return (typeof name == 'string' && !(1 in arguments)) ?\n (0 in this && this[0].nodeType == 1 && (result = this[0].getAttribute(name)) != null ? result : undefined) :\n this.each(function(idx){\n if (this.nodeType !== 1) return\n if (isObject(name)) for (key in name) setAttribute(this, key, name[key])\n else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))\n })\n },\n removeAttr: function(name){\n return this.each(function(){ this.nodeType === 1 && name.split(' ').forEach(function(attribute){\n setAttribute(this, attribute)\n }, this)})\n },\n prop: function(name, value){\n name = propMap[name] || name\n return (1 in arguments) ?\n this.each(function(idx){\n this[name] = funcArg(this, value, idx, this[name])\n }) :\n (this[0] && this[0][name])\n },\n removeProp: function(name){\n name = propMap[name] || name\n return this.each(function(){ delete this[name] })\n },\n data: function(name, value){\n var attrName = 'data-' + name.replace(capitalRE, '-$1').toLowerCase()\n\n var data = (1 in arguments) ?\n this.attr(attrName, value) :\n this.attr(attrName)\n\n return data !== null ? deserializeValue(data) : undefined\n },\n val: function(value){\n if (0 in arguments) {\n if (value == null) value = \"\"\n return this.each(function(idx){\n this.value = funcArg(this, value, idx, this.value)\n })\n } else {\n return this[0] && (this[0].multiple ?\n $(this[0]).find('option').filter(function(){ return this.selected }).pluck('value') :\n this[0].value)\n }\n },\n offset: function(coordinates){\n if (coordinates) return this.each(function(index){\n var $this = $(this),\n coords = funcArg(this, coordinates, index, $this.offset()),\n parentOffset = $this.offsetParent().offset(),\n props = {\n top: coords.top - parentOffset.top,\n left: coords.left - parentOffset.left\n }\n\n if ($this.css('position') == 'static') props['position'] = 'relative'\n $this.css(props)\n })\n if (!this.length) return null\n if (document.documentElement !== this[0] && !$.contains(document.documentElement, this[0]))\n return {top: 0, left: 0}\n var obj = this[0].getBoundingClientRect()\n return {\n left: obj.left + window.pageXOffset,\n top: obj.top + window.pageYOffset,\n width: Math.round(obj.width),\n height: Math.round(obj.height)\n }\n },\n css: function(property, value){\n if (arguments.length < 2) {\n var element = this[0]\n if (typeof property == 'string') {\n if (!element) return\n return element.style[camelize(property)] || getComputedStyle(element, '').getPropertyValue(property)\n } else if (isArray(property)) {\n if (!element) return\n var props = {}\n var computedStyle = getComputedStyle(element, '')\n $.each(property, function(_, prop){\n props[prop] = (element.style[camelize(prop)] || computedStyle.getPropertyValue(prop))\n })\n return props\n }\n }\n\n var css = ''\n if (type(property) == 'string') {\n if (!value && value !== 0)\n this.each(function(){ this.style.removeProperty(dasherize(property)) })\n else\n css = dasherize(property) + \":\" + maybeAddPx(property, value)\n } else {\n for (key in property)\n if (!property[key] && property[key] !== 0)\n this.each(function(){ this.style.removeProperty(dasherize(key)) })\n else\n css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';'\n }\n\n return this.each(function(){ this.style.cssText += ';' + css })\n },\n index: function(element){\n return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])\n },\n hasClass: function(name){\n if (!name) return false\n return emptyArray.some.call(this, function(el){\n return this.test(className(el))\n }, classRE(name))\n },\n addClass: function(name){\n if (!name) return this\n return this.each(function(idx){\n if (!('className' in this)) return\n classList = []\n var cls = className(this), newName = funcArg(this, name, idx, cls)\n newName.split(/\\s+/g).forEach(function(klass){\n if (!$(this).hasClass(klass)) classList.push(klass)\n }, this)\n classList.length && className(this, cls + (cls ? \" \" : \"\") + classList.join(\" \"))\n })\n },\n removeClass: function(name){\n return this.each(function(idx){\n if (!('className' in this)) return\n if (name === undefined) return className(this, '')\n classList = className(this)\n funcArg(this, name, idx, classList).split(/\\s+/g).forEach(function(klass){\n classList = classList.replace(classRE(klass), \" \")\n })\n className(this, classList.trim())\n })\n },\n toggleClass: function(name, when){\n if (!name) return this\n return this.each(function(idx){\n var $this = $(this), names = funcArg(this, name, idx, className(this))\n names.split(/\\s+/g).forEach(function(klass){\n (when === undefined ? !$this.hasClass(klass) : when) ?\n $this.addClass(klass) : $this.removeClass(klass)\n })\n })\n },\n scrollTop: function(value){\n if (!this.length) return\n var hasScrollTop = 'scrollTop' in this[0]\n if (value === undefined) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset\n return this.each(hasScrollTop ?\n function(){ this.scrollTop = value } :\n function(){ this.scrollTo(this.scrollX, value) })\n },\n scrollLeft: function(value){\n if (!this.length) return\n var hasScrollLeft = 'scrollLeft' in this[0]\n if (value === undefined) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset\n return this.each(hasScrollLeft ?\n function(){ this.scrollLeft = value } :\n function(){ this.scrollTo(value, this.scrollY) })\n },\n position: function() {\n if (!this.length) return\n\n var elem = this[0],\n // Get *real* offsetParent\n offsetParent = this.offsetParent(),\n // Get correct offsets\n offset = this.offset(),\n parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()\n\n // Subtract element margins\n // note: when an element has margin: auto the offsetLeft and marginLeft\n // are the same in Safari causing offset.left to incorrectly be 0\n offset.top -= parseFloat( $(elem).css('margin-top') ) || 0\n offset.left -= parseFloat( $(elem).css('margin-left') ) || 0\n\n // Add offsetParent borders\n parentOffset.top += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0\n parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0\n\n // Subtract the two offsets\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n }\n },\n offsetParent: function() {\n return this.map(function(){\n var parent = this.offsetParent || document.body\n while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css(\"position\") == \"static\")\n parent = parent.offsetParent\n return parent\n })\n }\n }\n\n // for now\n $.fn.detach = $.fn.remove\n\n // Generate the `width` and `height` functions\n ;['width', 'height'].forEach(function(dimension){\n var dimensionProperty =\n dimension.replace(/./, function(m){ return m[0].toUpperCase() })\n\n $.fn[dimension] = function(value){\n var offset, el = this[0]\n if (value === undefined) return isWindow(el) ? el['inner' + dimensionProperty] :\n isDocument(el) ? el.documentElement['scroll' + dimensionProperty] :\n (offset = this.offset()) && offset[dimension]\n else return this.each(function(idx){\n el = $(this)\n el.css(dimension, funcArg(this, value, idx, el[dimension]()))\n })\n }\n })\n\n function traverseNode(node, fun) {\n fun(node)\n for (var i = 0, len = node.childNodes.length; i < len; i++)\n traverseNode(node.childNodes[i], fun)\n }\n\n // Generate the `after`, `prepend`, `before`, `append`,\n // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.\n adjacencyOperators.forEach(function(operator, operatorIndex) {\n var inside = operatorIndex % 2 //=> prepend, append\n\n $.fn[operator] = function(){\n // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings\n var argType, nodes = $.map(arguments, function(arg) {\n var arr = []\n argType = type(arg)\n if (argType == \"array\") {\n arg.forEach(function(el) {\n if (el.nodeType !== undefined) return arr.push(el)\n else if ($.zepto.isZ(el)) return arr = arr.concat(el.get())\n arr = arr.concat(zepto.fragment(el))\n })\n return arr\n }\n return argType == \"object\" || arg == null ?\n arg : zepto.fragment(arg)\n }),\n parent, copyByClone = this.length > 1\n if (nodes.length < 1) return this\n\n return this.each(function(_, target){\n parent = inside ? target : target.parentNode\n\n // convert all methods to a \"before\" operation\n target = operatorIndex == 0 ? target.nextSibling :\n operatorIndex == 1 ? target.firstChild :\n operatorIndex == 2 ? target :\n null\n\n var parentInDocument = $.contains(document.documentElement, parent)\n\n nodes.forEach(function(node){\n if (copyByClone) node = node.cloneNode(true)\n else if (!parent) return $(node).remove()\n\n parent.insertBefore(node, target)\n if (parentInDocument) traverseNode(node, function(el){\n if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' &&\n (!el.type || el.type === 'text/javascript') && !el.src){\n var target = el.ownerDocument ? el.ownerDocument.defaultView : window\n target['eval'].call(target, el.innerHTML)\n }\n })\n })\n })\n }\n\n // after => insertAfter\n // prepend => prependTo\n // before => insertBefore\n // append => appendTo\n $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){\n $(html)[operator](this)\n return this\n }\n })\n\n zepto.Z.prototype = Z.prototype = $.fn\n\n // Export internal API functions in the `$.zepto` namespace\n zepto.uniq = uniq\n zepto.deserializeValue = deserializeValue\n $.zepto = zepto\n\n return $\n})()\n\nwindow.Zepto = Zepto\nwindow.$ === undefined && (window.$ = Zepto)\n\n;(function($){\n var _zid = 1, undefined,\n slice = Array.prototype.slice,\n isFunction = $.isFunction,\n isString = function(obj){ return typeof obj == 'string' },\n handlers = {},\n specialEvents={},\n focusinSupported = 'onfocusin' in window,\n focus = { focus: 'focusin', blur: 'focusout' },\n hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' }\n\n specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents'\n\n function zid(element) {\n return element._zid || (element._zid = _zid++)\n }\n function findHandlers(element, event, fn, selector) {\n event = parse(event)\n if (event.ns) var matcher = matcherFor(event.ns)\n return (handlers[zid(element)] || []).filter(function(handler) {\n return handler\n && (!event.e || handler.e == event.e)\n && (!event.ns || matcher.test(handler.ns))\n && (!fn || zid(handler.fn) === zid(fn))\n && (!selector || handler.sel == selector)\n })\n }\n function parse(event) {\n var parts = ('' + event).split('.')\n return {e: parts[0], ns: parts.slice(1).sort().join(' ')}\n }\n function matcherFor(ns) {\n return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)')\n }\n\n function eventCapture(handler, captureSetting) {\n return handler.del &&\n (!focusinSupported && (handler.e in focus)) ||\n !!captureSetting\n }\n\n function realEvent(type) {\n return hover[type] || (focusinSupported && focus[type]) || type\n }\n\n function add(element, events, fn, data, selector, delegator, capture){\n var id = zid(element), set = (handlers[id] || (handlers[id] = []))\n events.split(/\\s/).forEach(function(event){\n if (event == 'ready') return $(document).ready(fn)\n var handler = parse(event)\n handler.fn = fn\n handler.sel = selector\n // emulate mouseenter, mouseleave\n if (handler.e in hover) fn = function(e){\n var related = e.relatedTarget\n if (!related || (related !== this && !$.contains(this, related)))\n return handler.fn.apply(this, arguments)\n }\n handler.del = delegator\n var callback = delegator || fn\n handler.proxy = function(e){\n e = compatible(e)\n if (e.isImmediatePropagationStopped()) return\n e.data = data\n var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args))\n if (result === false) e.preventDefault(), e.stopPropagation()\n return result\n }\n handler.i = set.length\n set.push(handler)\n if ('addEventListener' in element)\n element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\n })\n }\n function remove(element, events, fn, selector, capture){\n var id = zid(element)\n ;(events || '').split(/\\s/).forEach(function(event){\n findHandlers(element, event, fn, selector).forEach(function(handler){\n delete handlers[id][handler.i]\n if ('removeEventListener' in element)\n element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\n })\n })\n }\n\n $.event = { add: add, remove: remove }\n\n $.proxy = function(fn, context) {\n var args = (2 in arguments) && slice.call(arguments, 2)\n if (isFunction(fn)) {\n var proxyFn = function(){ return fn.apply(context, args ? args.concat(slice.call(arguments)) : arguments) }\n proxyFn._zid = zid(fn)\n return proxyFn\n } else if (isString(context)) {\n if (args) {\n args.unshift(fn[context], fn)\n return $.proxy.apply(null, args)\n } else {\n return $.proxy(fn[context], fn)\n }\n } else {\n throw new TypeError(\"expected function\")\n }\n }\n\n $.fn.bind = function(event, data, callback){\n return this.on(event, data, callback)\n }\n $.fn.unbind = function(event, callback){\n return this.off(event, callback)\n }\n $.fn.one = function(event, selector, data, callback){\n return this.on(event, selector, data, callback, 1)\n }\n\n var returnTrue = function(){return true},\n returnFalse = function(){return false},\n ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,\n eventMethods = {\n preventDefault: 'isDefaultPrevented',\n stopImmediatePropagation: 'isImmediatePropagationStopped',\n stopPropagation: 'isPropagationStopped'\n }\n\n function compatible(event, source) {\n if (source || !event.isDefaultPrevented) {\n source || (source = event)\n\n $.each(eventMethods, function(name, predicate) {\n var sourceMethod = source[name]\n event[name] = function(){\n this[predicate] = returnTrue\n return sourceMethod && sourceMethod.apply(source, arguments)\n }\n event[predicate] = returnFalse\n })\n\n event.timeStamp || (event.timeStamp = Date.now())\n\n if (source.defaultPrevented !== undefined ? source.defaultPrevented :\n 'returnValue' in source ? source.returnValue === false :\n source.getPreventDefault && source.getPreventDefault())\n event.isDefaultPrevented = returnTrue\n }\n return event\n }\n\n function createProxy(event) {\n var key, proxy = { originalEvent: event }\n for (key in event)\n if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]\n\n return compatible(proxy, event)\n }\n\n $.fn.delegate = function(selector, event, callback){\n return this.on(event, selector, callback)\n }\n $.fn.undelegate = function(selector, event, callback){\n return this.off(event, selector, callback)\n }\n\n $.fn.live = function(event, callback){\n $(document.body).delegate(this.selector, event, callback)\n return this\n }\n $.fn.die = function(event, callback){\n $(document.body).undelegate(this.selector, event, callback)\n return this\n }\n\n $.fn.on = function(event, selector, data, callback, one){\n var autoRemove, delegator, $this = this\n if (event && !isString(event)) {\n $.each(event, function(type, fn){\n $this.on(type, selector, data, fn, one)\n })\n return $this\n }\n\n if (!isString(selector) && !isFunction(callback) && callback !== false)\n callback = data, data = selector, selector = undefined\n if (callback === undefined || data === false)\n callback = data, data = undefined\n\n if (callback === false) callback = returnFalse\n\n return $this.each(function(_, element){\n if (one) autoRemove = function(e){\n remove(element, e.type, callback)\n return callback.apply(this, arguments)\n }\n\n if (selector) delegator = function(e){\n var evt, match = $(e.target).closest(selector, element).get(0)\n if (match && match !== element) {\n evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})\n return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1)))\n }\n }\n\n add(element, event, callback, data, selector, delegator || autoRemove)\n })\n }\n $.fn.off = function(event, selector, callback){\n var $this = this\n if (event && !isString(event)) {\n $.each(event, function(type, fn){\n $this.off(type, selector, fn)\n })\n return $this\n }\n\n if (!isString(selector) && !isFunction(callback) && callback !== false)\n callback = selector, selector = undefined\n\n if (callback === false) callback = returnFalse\n\n return $this.each(function(){\n remove(this, event, callback, selector)\n })\n }\n\n $.fn.trigger = function(event, args){\n event = (isString(event) || $.isPlainObject(event)) ? $.Event(event) : compatible(event)\n event._args = args\n return this.each(function(){\n // handle focus(), blur() by calling them directly\n if (event.type in focus && typeof this[event.type] == \"function\") this[event.type]()\n // items in the collection might not be DOM elements\n else if ('dispatchEvent' in this) this.dispatchEvent(event)\n else $(this).triggerHandler(event, args)\n })\n }\n\n // triggers event handlers on current element just as if an event occurred,\n // doesn't trigger an actual event, doesn't bubble\n $.fn.triggerHandler = function(event, args){\n var e, result\n this.each(function(i, element){\n e = createProxy(isString(event) ? $.Event(event) : event)\n e._args = args\n e.target = element\n $.each(findHandlers(element, event.type || event), function(i, handler){\n result = handler.proxy(e)\n if (e.isImmediatePropagationStopped()) return false\n })\n })\n return result\n }\n\n // shortcut methods for `.bind(event, fn)` for each event type\n ;('focusin focusout focus blur load resize scroll unload click dblclick '+\n 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+\n 'change select keydown keypress keyup error').split(' ').forEach(function(event) {\n $.fn[event] = function(callback) {\n return (0 in arguments) ?\n this.bind(event, callback) :\n this.trigger(event)\n }\n })\n\n $.Event = function(type, props) {\n if (!isString(type)) props = type, type = props.type\n var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true\n if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name])\n event.initEvent(type, bubbles, true)\n return compatible(event)\n }\n\n})(Zepto)\n\n;(function($){\n var jsonpID = +new Date(),\n document = window.document,\n key,\n name,\n rscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n scriptTypeRE = /^(?:text|application)\\/javascript/i,\n xmlTypeRE = /^(?:text|application)\\/xml/i,\n jsonType = 'application/json',\n htmlType = 'text/html',\n blankRE = /^\\s*$/,\n originAnchor = document.createElement('a')\n\n originAnchor.href = window.location.href\n\n // trigger a custom event and return false if it was cancelled\n function triggerAndReturn(context, eventName, data) {\n var event = $.Event(eventName)\n $(context).trigger(event, data)\n return !event.isDefaultPrevented()\n }\n\n // trigger an Ajax \"global\" event\n function triggerGlobal(settings, context, eventName, data) {\n if (settings.global) return triggerAndReturn(context || document, eventName, data)\n }\n\n // Number of active Ajax requests\n $.active = 0\n\n function ajaxStart(settings) {\n if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart')\n }\n function ajaxStop(settings) {\n if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop')\n }\n\n // triggers an extra global event \"ajaxBeforeSend\" that's like \"ajaxSend\" but cancelable\n function ajaxBeforeSend(xhr, settings) {\n var context = settings.context\n if (settings.beforeSend.call(context, xhr, settings) === false ||\n triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false)\n return false\n\n triggerGlobal(settings, context, 'ajaxSend', [xhr, settings])\n }\n function ajaxSuccess(data, xhr, settings, deferred) {\n var context = settings.context, status = 'success'\n settings.success.call(context, data, status, xhr)\n if (deferred) deferred.resolveWith(context, [data, status, xhr])\n triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data])\n ajaxComplete(status, xhr, settings)\n }\n // type: \"timeout\", \"error\", \"abort\", \"parsererror\"\n function ajaxError(error, type, xhr, settings, deferred) {\n var context = settings.context\n settings.error.call(context, xhr, type, error)\n if (deferred) deferred.rejectWith(context, [xhr, type, error])\n triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error || type])\n ajaxComplete(type, xhr, settings)\n }\n // status: \"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", \"parsererror\"\n function ajaxComplete(status, xhr, settings) {\n var context = settings.context\n settings.complete.call(context, xhr, status)\n triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings])\n ajaxStop(settings)\n }\n\n function ajaxDataFilter(data, type, settings) {\n if (settings.dataFilter == empty) return data\n var context = settings.context\n return settings.dataFilter.call(context, data, type)\n }\n\n // Empty function, used as default callback\n function empty() {}\n\n $.ajaxJSONP = function(options, deferred){\n if (!('type' in options)) return $.ajax(options)\n\n var _callbackName = options.jsonpCallback,\n callbackName = ($.isFunction(_callbackName) ?\n _callbackName() : _callbackName) || ('Zepto' + (jsonpID++)),\n script = document.createElement('script'),\n originalCallback = window[callbackName],\n responseData,\n abort = function(errorType) {\n $(script).triggerHandler('error', errorType || 'abort')\n },\n xhr = { abort: abort }, abortTimeout\n\n if (deferred) deferred.promise(xhr)\n\n $(script).on('load error', function(e, errorType){\n clearTimeout(abortTimeout)\n $(script).off().remove()\n\n if (e.type == 'error' || !responseData) {\n ajaxError(null, errorType || 'error', xhr, options, deferred)\n } else {\n ajaxSuccess(responseData[0], xhr, options, deferred)\n }\n\n window[callbackName] = originalCallback\n if (responseData && $.isFunction(originalCallback))\n originalCallback(responseData[0])\n\n originalCallback = responseData = undefined\n })\n\n if (ajaxBeforeSend(xhr, options) === false) {\n abort('abort')\n return xhr\n }\n\n window[callbackName] = function(){\n responseData = arguments\n }\n\n script.src = options.url.replace(/\\?(.+)=\\?/, '?$1=' + callbackName)\n document.head.appendChild(script)\n\n if (options.timeout > 0) abortTimeout = setTimeout(function(){\n abort('timeout')\n }, options.timeout)\n\n return xhr\n }\n\n $.ajaxSettings = {\n // Default type of request\n type: 'GET',\n // Callback that is executed before request\n beforeSend: empty,\n // Callback that is executed if the request succeeds\n success: empty,\n // Callback that is executed the the server drops error\n error: empty,\n // Callback that is executed on request complete (both: error and success)\n complete: empty,\n // The context for the callbacks\n context: null,\n // Whether to trigger \"global\" Ajax events\n global: true,\n // Transport\n xhr: function () {\n return new window.XMLHttpRequest()\n },\n // MIME types mapping\n // IIS returns Javascript as \"application/x-javascript\"\n accepts: {\n script: 'text/javascript, application/javascript, application/x-javascript',\n json: jsonType,\n xml: 'application/xml, text/xml',\n html: htmlType,\n text: 'text/plain'\n },\n // Whether the request is to another domain\n crossDomain: false,\n // Default timeout\n timeout: 0,\n // Whether data should be serialized to string\n processData: true,\n // Whether the browser should be allowed to cache GET responses\n cache: true,\n //Used to handle the raw response data of XMLHttpRequest.\n //This is a pre-filtering function to sanitize the response.\n //The sanitized response should be returned\n dataFilter: empty\n }\n\n function mimeToDataType(mime) {\n if (mime) mime = mime.split(';', 2)[0]\n return mime && ( mime == htmlType ? 'html' :\n mime == jsonType ? 'json' :\n scriptTypeRE.test(mime) ? 'script' :\n xmlTypeRE.test(mime) && 'xml' ) || 'text'\n }\n\n function appendQuery(url, query) {\n if (query == '') return url\n return (url + '&' + query).replace(/[&?]{1,2}/, '?')\n }\n\n // serialize payload and append it to the URL for GET requests\n function serializeData(options) {\n if (options.processData && options.data && $.type(options.data) != \"string\")\n options.data = $.param(options.data, options.traditional)\n if (options.data && (!options.type || options.type.toUpperCase() == 'GET' || 'jsonp' == options.dataType))\n options.url = appendQuery(options.url, options.data), options.data = undefined\n }\n\n $.ajax = function(options){\n var settings = $.extend({}, options || {}),\n deferred = $.Deferred && $.Deferred(),\n urlAnchor, hashIndex\n for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key]\n\n ajaxStart(settings)\n\n if (!settings.crossDomain) {\n urlAnchor = document.createElement('a')\n urlAnchor.href = settings.url\n // cleans up URL for .href (IE only), see https://github.com/madrobby/zepto/pull/1049\n urlAnchor.href = urlAnchor.href\n settings.crossDomain = (originAnchor.protocol + '//' + originAnchor.host) !== (urlAnchor.protocol + '//' + urlAnchor.host)\n }\n\n if (!settings.url) settings.url = window.location.toString()\n if ((hashIndex = settings.url.indexOf('#')) > -1) settings.url = settings.url.slice(0, hashIndex)\n serializeData(settings)\n\n var dataType = settings.dataType, hasPlaceholder = /\\?.+=\\?/.test(settings.url)\n if (hasPlaceholder) dataType = 'jsonp'\n\n if (settings.cache === false || (\n (!options || options.cache !== true) &&\n ('script' == dataType || 'jsonp' == dataType)\n ))\n settings.url = appendQuery(settings.url, '_=' + Date.now())\n\n if ('jsonp' == dataType) {\n if (!hasPlaceholder)\n settings.url = appendQuery(settings.url,\n settings.jsonp ? (settings.jsonp + '=?') : settings.jsonp === false ? '' : 'callback=?')\n return $.ajaxJSONP(settings, deferred)\n }\n\n var mime = settings.accepts[dataType],\n headers = { },\n setHeader = function(name, value) { headers[name.toLowerCase()] = [name, value] },\n protocol = /^([\\w-]+:)\\/\\//.test(settings.url) ? RegExp.$1 : window.location.protocol,\n xhr = settings.xhr(),\n nativeSetHeader = xhr.setRequestHeader,\n abortTimeout\n\n if (deferred) deferred.promise(xhr)\n\n if (!settings.crossDomain) setHeader('X-Requested-With', 'XMLHttpRequest')\n setHeader('Accept', mime || '*/*')\n if (mime = settings.mimeType || mime) {\n if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0]\n xhr.overrideMimeType && xhr.overrideMimeType(mime)\n }\n if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET'))\n setHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded')\n\n if (settings.headers) for (name in settings.headers) setHeader(name, settings.headers[name])\n xhr.setRequestHeader = setHeader\n\n xhr.onreadystatechange = function(){\n if (xhr.readyState == 4) {\n xhr.onreadystatechange = empty\n clearTimeout(abortTimeout)\n var result, error = false\n if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) {\n dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'))\n\n if (xhr.responseType == 'arraybuffer' || xhr.responseType == 'blob')\n result = xhr.response\n else {\n result = xhr.responseText\n\n try {\n // http://perfectionkills.com/global-eval-what-are-the-options/\n // sanitize response accordingly if data filter callback provided\n result = ajaxDataFilter(result, dataType, settings)\n if (dataType == 'script') (1,eval)(result)\n else if (dataType == 'xml') result = xhr.responseXML\n else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result)\n } catch (e) { error = e }\n\n if (error) return ajaxError(error, 'parsererror', xhr, settings, deferred)\n }\n\n ajaxSuccess(result, xhr, settings, deferred)\n } else {\n ajaxError(xhr.statusText || null, xhr.status ? 'error' : 'abort', xhr, settings, deferred)\n }\n }\n }\n\n if (ajaxBeforeSend(xhr, settings) === false) {\n xhr.abort()\n ajaxError(null, 'abort', xhr, settings, deferred)\n return xhr\n }\n\n var async = 'async' in settings ? settings.async : true\n xhr.open(settings.type, settings.url, async, settings.username, settings.password)\n\n if (settings.xhrFields) for (name in settings.xhrFields) xhr[name] = settings.xhrFields[name]\n\n for (name in headers) nativeSetHeader.apply(xhr, headers[name])\n\n if (settings.timeout > 0) abortTimeout = setTimeout(function(){\n xhr.onreadystatechange = empty\n xhr.abort()\n ajaxError(null, 'timeout', xhr, settings, deferred)\n }, settings.timeout)\n\n // avoid sending empty string (#319)\n xhr.send(settings.data ? settings.data : null)\n return xhr\n }\n\n // handle optional data/success arguments\n function parseArguments(url, data, success, dataType) {\n if ($.isFunction(data)) dataType = success, success = data, data = undefined\n if (!$.isFunction(success)) dataType = success, success = undefined\n return {\n url: url\n , data: data\n , success: success\n , dataType: dataType\n }\n }\n\n $.get = function(/* url, data, success, dataType */){\n return $.ajax(parseArguments.apply(null, arguments))\n }\n\n $.post = function(/* url, data, success, dataType */){\n var options = parseArguments.apply(null, arguments)\n options.type = 'POST'\n return $.ajax(options)\n }\n\n $.getJSON = function(/* url, data, success */){\n var options = parseArguments.apply(null, arguments)\n options.dataType = 'json'\n return $.ajax(options)\n }\n\n $.fn.load = function(url, data, success){\n if (!this.length) return this\n var self = this, parts = url.split(/\\s/), selector,\n options = parseArguments(url, data, success),\n callback = options.success\n if (parts.length > 1) options.url = parts[0], selector = parts[1]\n options.success = function(response){\n self.html(selector ?\n $('<div>').html(response.replace(rscript, \"\")).find(selector)\n : response)\n callback && callback.apply(self, arguments)\n }\n $.ajax(options)\n return this\n }\n\n var escape = encodeURIComponent\n\n function serialize(params, obj, traditional, scope){\n var type, array = $.isArray(obj), hash = $.isPlainObject(obj)\n $.each(obj, function(key, value) {\n type = $.type(value)\n if (scope) key = traditional ? scope :\n scope + '[' + (hash || type == 'object' || type == 'array' ? key : '') + ']'\n // handle data in serializeArray() format\n if (!scope && array) params.add(value.name, value.value)\n // recurse into nested objects\n else if (type == \"array\" || (!traditional && type == \"object\"))\n serialize(params, value, traditional, key)\n else params.add(key, value)\n })\n }\n\n $.param = function(obj, traditional){\n var params = []\n params.add = function(key, value) {\n if ($.isFunction(value)) value = value()\n if (value == null) value = \"\"\n this.push(escape(key) + '=' + escape(value))\n }\n serialize(params, obj, traditional)\n return params.join('&').replace(/%20/g, '+')\n }\n})(Zepto)\n\n;(function($){\n $.fn.serializeArray = function() {\n var name, type, result = [],\n add = function(value) {\n if (value.forEach) return value.forEach(add)\n result.push({ name: name, value: value })\n }\n if (this[0]) $.each(this[0].elements, function(_, field){\n type = field.type, name = field.name\n if (name && field.nodeName.toLowerCase() != 'fieldset' &&\n !field.disabled && type != 'submit' && type != 'reset' && type != 'button' && type != 'file' &&\n ((type != 'radio' && type != 'checkbox') || field.checked))\n add($(field).val())\n })\n return result\n }\n\n $.fn.serialize = function(){\n var result = []\n this.serializeArray().forEach(function(elm){\n result.push(encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value))\n })\n return result.join('&')\n }\n\n $.fn.submit = function(callback) {\n if (0 in arguments) this.bind('submit', callback)\n else if (this.length) {\n var event = $.Event('submit')\n this.eq(0).trigger(event)\n if (!event.isDefaultPrevented()) this.get(0).submit()\n }\n return this\n }\n\n})(Zepto)\n\n;(function(){\n // getComputedStyle shouldn't freak out when called\n // without a valid element as argument\n try {\n getComputedStyle(undefined)\n } catch(e) {\n var nativeGetComputedStyle = getComputedStyle\n window.getComputedStyle = function(element, pseudoElement){\n try {\n return nativeGetComputedStyle(element, pseudoElement)\n } catch(e) {\n return null\n }\n }\n }\n})()\n return Zepto\n}))\n"},function(){!function(e){e.expr={":":{}},e.support={},e.fn.clone=function(){var t=e();return this.each(function(){t.push(this.cloneNode(!0))}),t},["Left","Top"].forEach(function(t,n){function i(e){return function(e){return e&&"object"==(void 0===e?"undefined":a(e))&&"setInterval"in e}(e)?e:!(9!==e.nodeType)&&(e.defaultView||e.parentWindow)}var o="scroll"+t;e.fn[o]=function(t){var s,r;return void 0===t?(s=this[0])?(r=i(s))?"pageXOffset"in r?r[n?"pageYOffset":"pageXOffset"]:r.document.documentElement[o]||r.document.body[o]:s[o]:null:void this.each(function(){if(r=i(this)){var s=n?e(r).scrollLeft():t,a=n?t:e(r).scrollTop();r.scrollTo(s,a)}else this[o]=t})}}),["width","height"].forEach(function(t){var n=t.replace(/./,function(e){return e[0].toUpperCase()});e.fn["inner"+n]=function(e){var n=this;if(n){var i=n[t]();return{width:["left","right"],height:["top","bottom"]}[t].forEach(function(t){i+=parseInt(n.css("padding-"+t),10),e&&(i+=parseInt(n.css("margin-"+t),10))}),i}return null},e.fn["outer"+n]=function(e){var n=this;if(n){var i=n[t]();return{width:["left","right"],height:["top","bottom"]}[t].forEach(function(t){e&&(i+=parseInt(n.css("margin-"+t),10))}),i}return null}}),e.proxy=function(t,n){if("string"==typeof n){var i=t[n];n=t,t=i}if(e.isFunction(t)){var o=Array.prototype.slice.call(arguments,2),s=function(){return t.apply(n,o.concat(Array.prototype.slice.call(arguments)))};return s.guid=t.guid=t.guid||s.guid||e.guid++,s}};var t=String.prototype.trim;e.trim=function(e,n){return!n&&t?t.call(e):(n=defaultToWhiteSpace(n),e.replace(new RegExp("^["+n+"]+|["+n+"]+$","g"),""))};var n=/^(?:body|html)$/i;e.fn.position=function(){if(!this[0])return null;var t=this[0],i=this.offsetParent(),o=this.offset(),s=n.test(i[0].nodeName)?{top:0,left:0}:i.offset();return o.top-=parseFloat(e(t).css("margin-top"))||0,o.left-=parseFloat(e(t).css("margin-left"))||0,s.top+=parseFloat(e(i[0]).css("border-top-width"))||0,s.left+=parseFloat(e(i[0]).css("border-left-width"))||0,{top:o.top-s.top,left:o.left-s.left}},e.fn.offsetParent=function(){var t=e();return this.each(function(){for(var i=this.offsetParent||document.body;i&&!n.test(i.nodeName)&&"static"===e(i).css("position");)i=i.offsetParent;t.push(i)}),t}}(Zepto)}])},"object"==a(t)&&"object"==a(e)?e.exports=s():(i=[],void 0===(o="function"==typeof(n=s)?n.apply(t,i):n)||(e.exports=o))}).call(this,n(3)(e))},function(e,t,n){"use strict";var i,o=n(4);var s=new((i=o)&&i.__esModule?i:{default:i}).default({settings:{showPopoutIcon:!1,showCloseIcon:!1},dimensions:{minItemHeight:40},content:[{type:"row",content:[{type:"column",width:40,content:[{type:"component",componentName:"template",title:"Game",componentState:{id:"client_wrapper"}}]},{type:"column",content:[{type:"row",height:65,content:[{type:"stack",content:[{type:"component",title:"Main",componentName:"template",componentState:{id:"mainmenu"}},{type:"component",title:"Log",componentName:"template",componentState:{id:"log"}}]},{type:"component",title:"Music",width:30,componentName:"template",componentState:{id:"music"}}]},{type:"row",content:[{type:"component",title:"Server chat",componentName:"template",componentState:{id:"ooc"}}]}]}]}]});s.registerComponent("template",function(e,t){var n=document.querySelector("#"+t.id);e.getElement().html(n.content)}),s.init()}]);
+!function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([,function(e,t,n){"use strict";var i,o=n(2);var s=new((i=o)&&i.__esModule?i:{default:i}).default({settings:{showPopoutIcon:!1,showCloseIcon:!1},dimensions:{minItemHeight:40},content:[{type:"row",content:[{type:"column",width:40,content:[{type:"component",componentName:"template",title:"Game",componentState:{id:"client_wrapper"}}]},{type:"column",content:[{type:"row",height:65,content:[{type:"stack",content:[{type:"component",title:"Main",componentName:"template",componentState:{id:"mainmenu"}},{type:"component",title:"Log",componentName:"template",componentState:{id:"log"}}]},{type:"component",title:"Music",width:30,componentName:"template",componentState:{id:"music"}}]},{type:"row",content:[{type:"component",title:"Server chat",componentName:"template",componentState:{id:"ooc"}}]}]}]}]});s.registerComponent("template",function(e,t){var n=document.querySelector("#"+t.id);e.getElement().html(n.content)}),s.init()},function(e,t,n){"use strict";(function(e){var n,i,o,s,r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function l(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function h(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}"undefined"==typeof self||self,s=function(){var e=Math.min,t=Math.floor,n=Math.max;return function(e){function t(i){if(n[i])return n[i].exports;var o=n[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=35)}([function(e,t,n){t.e=function(e){return $.zepto?e.touches?e.targetTouches[0]:e:e.originalEvent&&e.originalEvent.touches?e.originalEvent.touches[0]:e},t.j=function(e){var t,n;if("function"==typeof o.a)return o()(e);for(n in t=[],e)t.push(n);return t},t.d=function(e){if(window.location.hash)return function(e){var t=location.hash.match(new RegExp(e+"=([^&]*)"));return t?t[1]:null}(e);if(!window.location.search)return null;var t,n,i=window.location.search.substr(1).split("&"),o={};for(n=0;n<i.length;n++)o[(t=i[n].split("="))[0]]=t[1];return o[e]||null},t.b=function(e,t){for(var n in t)e[n]=t[n];return e},t.a=function(e){return(window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)})(function(){e()})},t.g=function(e,t){if(!(t instanceof Array))throw new Error("Haystack is not an Array");if(t.indexOf)return t.indexOf(e);for(var n=0;n<t.length;n++)if(t[n]===e)return n;return-1},n.d(t,"h",function(){return r}),t.c=function(e,t,n){if(void 0!==Function.prototype.bind)return Function.prototype.bind.apply(e,[t].concat(n||[]));var i=function i(){var o=(n||[]).concat(Array.prototype.slice.call(arguments,0));return this instanceof i?void e.apply(this,o):e.apply(t,o)};return i.prototype=e.prototype,i},t.i=function(){return"function"==typeof Date.now?Date.now():(new Date).getTime()},t.f=function(){return(1e15*Math.random()).toString(36).replace(".","")},t.k=function(e){return $.trim(e.replace(/(<([^>]+)>)/gi,""))};var i=n(40),o=n.n(i),s=n(60),r=(n.n(s),"object"!=("undefined"==typeof Int8Array?"undefined":a(Int8Array))?function(e){return"function"==typeof e||!1}:function(e){return"[object Function]"===toString.call(e)})},function(e,t,n){var i=n(0),o="__all";t.a=o,t.b=function(){return function e(){h(this,e),this._mSubscriptions={},this._mSubscriptions[o]=[],this.on=function(e,t,n){if(!Object(i.h)(t))throw new Error("Tried to listen to event "+e+" with non-function callback "+t);this._mSubscriptions[e]||(this._mSubscriptions[e]=[]),this._mSubscriptions[e].push({fn:t,ctx:n})},this.emit=function(e){var t,n,i;i=Array.prototype.slice.call(arguments,1);var s=this._mSubscriptions[e];if(s)for(s=s.slice(),t=0;t<s.length;t++)n=s[t].ctx||{},s[t].fn.apply(n,i);i.unshift(e);var r=this._mSubscriptions[o].slice();for(t=0;t<r.length;t++)n=r[t].ctx||{},r[t].fn.apply(n,i)},this.unbind=function(e,t,n){if(!this._mSubscriptions[e])throw new Error("No subscribtions to unsubscribe for event "+e);var i,o=!1;for(i=0;i<this._mSubscriptions[e].length;i++)t&&this._mSubscriptions[e][i].fn!==t||n&&n!==this._mSubscriptions[e][i].ctx||(this._mSubscriptions[e].splice(i,1),o=!0);if(0==o)throw new Error("Nothing to unbind for "+e)},this.off=this.unbind,this.trigger=this.emit}}()},function(e){var t=e.exports={version:"2.5.6"};"number"==typeof __e&&(__e=t)},function(e,t,n){var i=n(1),o=n(26),s=n(12),a=n(27),u=n(66),d=n(0),f=function(e){function t(e,n,o){var s;return h(this,t),(s=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this))).config=s._extendItemNode(n),s.type=n.type,s.contentItems=[],s.parent=o,s.isInitialised=!1,s.isMaximised=!1,s.isRoot=!1,s.isRow=!1,s.isColumn=!1,s.isStack=!1,s.isComponent=!1,s.layoutManager=e,s._pendingEventPropagations={},s._throttledEvents=["stateChanged"],s.on(i.a,s._propagateEvent,s),n.content&&s._createContentItems(n),s}return c(t,i.b),r(t,[{key:"setSize",value:function(){throw new Error("Abstract Method")}},{key:"callDownwards",value:function(e,t,n,i){var o;for(!0!==n&&!0!==i&&this[e].apply(this,t||[]),o=0;o<this.contentItems.length;o++)this.contentItems[o].callDownwards(e,t,n);!0===n&&!0!==i&&this[e].apply(this,t||[])}},{key:"removeChild",value:function(e,t){var n=Object(d.g)(e,this.contentItems);if(-1===n)throw new Error("Can't remove child item. Unknown content item");!0!==t&&this.contentItems[n]._$destroy(),this.contentItems.splice(n,1),this.config.content.splice(n,1),0<this.contentItems.length?this.callDownwards("setSize"):!(this instanceof s.a)&&!0===this.config.isClosable&&this.parent.removeChild(this)}},{key:"undisplayChild",value:function(e){if(-1===Object(d.g)(e,this.contentItems))throw new Error("Can't remove child item. Unknown content item");this instanceof s.a||!0!==this.config.isClosable||this.parent.undisplayChild(this)}},{key:"addChild",value:function(e,t){void 0===t&&(t=this.contentItems.length),this.contentItems.splice(t,0,e),void 0===this.config.content&&(this.config.content=[]),this.config.content.splice(t,0,e.config),e.parent=this,!0===e.parent.isInitialised&&!1===e.isInitialised&&e._$init()}},{key:"replaceChild",value:function(e,t,n){t=this.layoutManager._$normalizeContentItem(t);var i=Object(d.g)(e,this.contentItems),o=e.element[0].parentNode;if(-1===i)throw new Error("Can't replace child. oldChild is not child of this");o.replaceChild(t.element[0],e.element[0]),!0===n&&(e.parent=null,e._$destroy()),this.contentItems[i]=t,t.parent=this,this.isStack&&(this.header.tabs[i].contentItem=t),!0===t.parent.isInitialised&&!1===t.isInitialised&&t._$init(),this.callDownwards("setSize")}},{key:"remove",value:function(){this.parent.removeChild(this)}},{key:"popout",value:function(){var e=this.layoutManager.createPopout(this);return this.emitBubblingEvent("stateChanged"),e}},{key:"toggleMaximise",value:function(e){e&&e.preventDefault(),!0===this.isMaximised?this.layoutManager._$minimiseItem(this):this.layoutManager._$maximiseItem(this),this.isMaximised=!this.isMaximised,this.emitBubblingEvent("stateChanged")}},{key:"select",value:function(){this.layoutManager.selectedItem!==this&&(this.layoutManager.selectItem(this,!0),this.element.addClass("lm_selected"))}},{key:"deselect",value:function(){this.layoutManager.selectedItem===this&&(this.layoutManager.selectedItem=null,this.element.removeClass("lm_selected"))}},{key:"setTitle",value:function(e){this.config.title=e,this.emit("titleChanged",e),this.emit("stateChanged")}},{key:"hasId",value:function(e){return!!this.config.id&&("string"==typeof this.config.id?this.config.id===e:this.config.id instanceof Array?-1!==Object(d.g)(e,this.config.id):void 0)}},{key:"addId",value:function(e){this.hasId(e)||(this.config.id?"string"==typeof this.config.id?this.config.id=[this.config.id,e]:this.config.id instanceof Array&&this.config.id.push(e):this.config.id=e)}},{key:"removeId",value:function(e){if(!this.hasId(e))throw new Error("Id not found");if("string"==typeof this.config.id)delete this.config.id;else if(this.config.id instanceof Array){var t=Object(d.g)(e,this.config.id);this.config.id.splice(t,1)}}},{key:"getItemsByFilter",value:function(e){var t=[];return function n(i){for(var o=0;o<i.contentItems.length;o++)!0===e(i.contentItems[o])&&t.push(i.contentItems[o]),n(i.contentItems[o])}(this),t}},{key:"getItemsById",value:function(e){return this.getItemsByFilter(function(t){return t.config.id instanceof Array?-1!==Object(d.g)(e,t.config.id):t.config.id===e})}},{key:"getItemsByType",value:function(e){return this._$getItemsByProperty("type",e)}},{key:"getComponentsByName",value:function(e){var t,n=this._$getItemsByProperty("componentName",e),i=[];for(t=0;t<n.length;t++)i.push(n[t].instance);return i}},{key:"_$getItemsByProperty",value:function(e,t){return this.getItemsByFilter(function(n){return n[e]===t})}},{key:"_$setParent",value:function(e){this.parent=e}},{key:"_$highlightDropZone",value:function(e,t,n){this.layoutManager.dropTargetIndicator.highlightArea(n)}},{key:"_$onDrop",value:function(e){this.addChild(e)}},{key:"_$hide",value:function(){this._callOnActiveComponents("hide"),this.element.hide(),this.layoutManager.updateSize()}},{key:"_$show",value:function(){this._callOnActiveComponents("show"),this.element.show(),this.layoutManager.updateSize()}},{key:"_callOnActiveComponents",value:function(e){var t,n,i=this.getItemsByType("stack");for(n=0;n<i.length;n++)(t=i[n].getActiveContentItem())&&t.isComponent&&t.container[e]()}},{key:"_$destroy",value:function(){this.emitBubblingEvent("beforeItemDestroyed"),this.callDownwards("_$destroy",[],!0,!0),this.element.remove(),this.emitBubblingEvent("itemDestroyed")}},{key:"_$getArea",value:function(e){var t=(e=e||this.element).offset(),n=e.width(),i=e.height();return{x1:t.left,y1:t.top,x2:t.left+n,y2:t.top+i,surface:n*i,contentItem:this}}},{key:"_$init",value:function(){var e;for(this.setSize(),e=0;e<this.contentItems.length;e++)this.childElementContainer.append(this.contentItems[e].element);this.isInitialised=!0,this.emitBubblingEvent("itemCreated"),this.emitBubblingEvent(this.type+"Created")}},{key:"emitBubblingEvent",value:function(e){var t=new o.a(e,this);this.emit(e,t)}},{key:"_createContentItems",value:function(e){var t,n;if(!(e.content instanceof Array))throw new a.a("content must be an Array",e);for(n=0;n<e.content.length;n++)t=this.layoutManager.createContentItem(e.content[n],this),this.contentItems.push(t)}},{key:"_extendItemNode",value:function(e){for(var t in u.a)void 0===e[t]&&(e[t]=u.a[t]);return e}},{key:"_propagateEvent",value:function(e,t){t instanceof o.a&&!1===t.isPropagationStopped&&!0===this.isInitialised&&(!1===this.isRoot&&this.parent?this.parent.emit.apply(this.parent,Array.prototype.slice.call(arguments,0)):this._scheduleEventPropagationToLayoutManager(e,t))}},{key:"_scheduleEventPropagationToLayoutManager",value:function(e,t){-1===Object(d.g)(e,this._throttledEvents)?this.layoutManager.emit(e,t.origin):!0!==this._pendingEventPropagations[e]&&(this._pendingEventPropagations[e]=!0,Object(d.a)(Object(d.c)(this._propagateEventToLayoutManager,this,[e,t])))}},{key:"_propagateEventToLayoutManager",value:function(e,t){this._pendingEventPropagations[e]=!1,this.layoutManager.emit(e,t)}}]),t}();t.a=f},function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},function(e,t,n){e.exports=!n(10)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,i,o){var s=Math.round,a=o(3),u=o(13),d=o(67),f=o(0),m=function(e){function i(e,t,n,o){var s;return h(this,i),(s=l(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,n,o))).isRow=!e,s.isColumn=e,s.element=$('<div class="lm_item lm_'+(e?"column":"row")+'"></div>'),s.childElementContainer=s.element,s._splitterSize=t.config.dimensions.borderWidth,s._splitterGrabSize=t.config.dimensions.borderGrabWidth,s._isColumn=e,s._dimension=e?"height":"width",s._splitter=[],s._splitterPosition=null,s._splitterMinPosition=null,s._splitterMaxPosition=null,s}return c(i,a.a),r(i,[{key:"addChild",value:function(e,t,i){var o,s,r,l;if(e=this.layoutManager._$normalizeContentItem(e,this),void 0===t&&(t=this.contentItems.length),0<this.contentItems.length?(l=this._createSplitter(n(0,t-1)).element,0<t?(this.contentItems[t-1].element.after(l),l.after(e.element),this._isDocked(t-1)&&(this._splitter[t-1].element.hide(),this._splitter[t].element.show())):(this.contentItems[0].element.before(l),l.before(e.element))):this.childElementContainer.append(e.element),a.a.prototype.addChild.call(this,e,t),o=1/this.contentItems.length*100,!0!==i){for(r=0;r<this.contentItems.length;r++)this.contentItems[r]===e?e.config[this._dimension]=o:(s=this.contentItems[r].config[this._dimension]*=(100-o)/100,this.contentItems[r].config[this._dimension]=s);this.callDownwards("setSize"),this.emitBubblingEvent("stateChanged"),this._validateDocking()}else this.emitBubblingEvent("stateChanged")}},{key:"undisplayChild",value:function(e){var t,i=e.config[this._dimension],o=Object(f.g)(e,this.contentItems),s=n(o-1,0);if(-1===o)throw new Error("Can't undisplay child. ContentItem is not child of this Row or Column");this._splitter[s]&&this._splitter[s].element.hide(),s<this._splitter.length&&this._isDocked(s)&&this._splitter[s].element.hide();var r=this._isDocked();for(t=0;t<this.contentItems.length;t++)this.contentItems[t]===e?this.contentItems[t].config[this._dimension]=0:this._isDocked(t)||(this.contentItems[t].config[this._dimension]+=i/(this.contentItems.length-1-r));1===this.contentItems.length&&a.a.prototype.undisplayChild.call(this,e),this.callDownwards("setSize"),this.emitBubblingEvent("stateChanged")}},{key:"removeChild",value:function(e,t){var i,o,s=e.config[this._dimension],r=Object(f.g)(e,this.contentItems),l=n(r-1,0);if(-1===r)throw new Error("Can't remove child. ContentItem is not child of this Row or Column");this._splitter[l]&&(this._splitter[l]._$destroy(),this._splitter.splice(l,1)),l<this._splitter.length&&this._isDocked(l)&&this._splitter[l].element.hide();var c=this._isDocked();for(i=0;i<this.contentItems.length;i++)this.contentItems[i]!==e&&(this._isDocked(i)||(this.contentItems[i].config[this._dimension]+=s/(this.contentItems.length-1-c)));a.a.prototype.removeChild.call(this,e,t),1===this.contentItems.length&&!0===this.config.isClosable?(o=this.contentItems[0],this.contentItems=[],this.parent.replaceChild(this,o,!0),this._validateDocking(this.parent)):(this.callDownwards("setSize"),this.emitBubblingEvent("stateChanged"),this._validateDocking())}},{key:"replaceChild",value:function(e,t){var n=e.config[this._dimension];a.a.prototype.replaceChild.call(this,e,t),t.config[this._dimension]=n,this.callDownwards("setSize"),this.emitBubblingEvent("stateChanged")}},{key:"setSize",value:function(){0<this.contentItems.length&&(this._calculateRelativeSizes(),this._setAbsoluteSizes()),this.emitBubblingEvent("stateChanged"),this.emit("resize")}},{key:"dock",value:function(e,t,i){if(1===this.contentItems.length)throw new Error("Can't dock child when it single");var o=e.config[this._dimension],s=this.layoutManager.config.dimensions.headerHeight,r=Object(f.g)(e,this.contentItems),a=n(r-1,0);if(-1===r)throw new Error("Can't dock child. ContentItem is not child of this Row or Column");var l,c=e._docker&&e._docker.docked;if(void 0===t||t!=c){if(c){for(this._splitter[a].element.show(),l=0;l<this.contentItems.length;l++){var h=e._docker.size;this.contentItems[l]===e?e.config[this._dimension]=h:(itemSize=this.contentItems[l].config[this._dimension]*=(100-h)/100,this.contentItems[l].config[this._dimension]=itemSize)}e._docker={docked:!1}}else{if(2>this.contentItems.length-this._isDocked())throw new Error("Can't dock child when it is last in "+this.config.type);var u={column:{first:"top",last:"bottom"},row:{first:"left",last:"right"}}[this.config.type][r?"last":"first"];e.header.position()!=u&&e.header.position(u),this._splitter[a]&&this._splitter[a].element.hide();var d=this._isDocked();for(l=0;l<this.contentItems.length;l++)this.contentItems[l]===e?this.contentItems[l].config[this._dimension]=0:this._isDocked(l)||(this.contentItems[l].config[this._dimension]+=o/(this.contentItems.length-1-d));e._docker={dimension:this._dimension,size:o,realSize:e.element[this._dimension]()-s,docked:!0},i&&e.childElementContainer[this._dimension](0)}e.element.toggleClass("lm_docked",e._docker.docked),this.callDownwards("setSize"),this.emitBubblingEvent("stateChanged"),this._validateDocking()}}},{key:"_$init",value:function(){if(!0!==this.isInitialised){var e;for(a.a.prototype._$init.call(this),e=0;e<this.contentItems.length-1;e++)this.contentItems[e].element.after(this._createSplitter(e).element);for(e=0;e<this.contentItems.length;e++)this.contentItems[e]._header&&this.contentItems[e]._header.docked&&this.dock(this.contentItems[e],!0,!0)}}},{key:"_setAbsoluteSizes",value:function(){var e,t=this._calculateAbsoluteSizes();for(e=0;e<this.contentItems.length;e++)0<t.additionalPixel-e&&t.itemSizes[e]++,this._isColumn?(this.contentItems[e].element.width(t.totalWidth),this.contentItems[e].element.height(t.itemSizes[e])):(this.contentItems[e].element.width(t.itemSizes[e]),this.contentItems[e].element.height(t.totalHeight))}},{key:"_calculateAbsoluteSizes",value:function(){var e,n,i=(this.contentItems.length-1)*this._splitterSize,o=this.layoutManager.config.dimensions.headerHeight,s=this.element.width(),r=this.element.height(),a=0,l=[];for(this._isColumn?r-=i:s-=i,e=0;e<this.contentItems.length;e++)this._isDocked(e)&&(this._isColumn?r-=o-this._splitterSize:s-=o-this._splitterSize);for(e=0;e<this.contentItems.length;e++)n=this._isColumn?t(r*(this.contentItems[e].config.height/100)):t(s*(this.contentItems[e].config.width/100)),this._isDocked(e)&&(n=o),a+=n,l.push(n);return{itemSizes:l,additionalPixel:t((this._isColumn?r:s)-a),totalWidth:s,totalHeight:r}}},{key:"_calculateRelativeSizes",value:function(){var e,t=0,n=[],i=this._isColumn?"height":"width";for(e=0;e<this.contentItems.length;e++)void 0===this.contentItems[e].config[i]?n.push(this.contentItems[e]):t+=this.contentItems[e].config[i];if(100!==s(t))if(100>s(t)&&0<n.length){for(e=0;e<n.length;e++)n[e].config[i]=(100-t)/n.length;this._respectMinItemWidth()}else{if(100<s(t))for(e=0;e<n.length;e++)n[e].config[i]=50,t+=50;for(e=0;e<this.contentItems.length;e++)this.contentItems[e].config[i]=this.contentItems[e].config[i]/t*100;this._respectMinItemWidth()}else this._respectMinItemWidth()}},{key:"_respectMinItemWidth",value:function(){var e,t,n,i=this.layoutManager.config.dimensions&&this.layoutManager.config.dimensions.minItemWidth||0,o=null,r=[],a=0,l=0,c=0,h=0,u=[];if(!(this._isColumn||!i||1>=this.contentItems.length)){o=this._calculateAbsoluteSizes();for(var d=0;d<this.contentItems.length;d++)this.contentItems[d],(h=o.itemSizes[d])<i?(l+=i-h,n={width:i}):(a+=h-i,n={width:h},r.push(n)),u.push(n);if(!(0==l||l>a)){for(e=l/a,c=l,d=0;d<r.length;d++)n=r[d],c-=t=s((n.width-i)*e),n.width-=t;for(0!==c&&(u[u.length-1].width-=c),d=0;d<this.contentItems.length;d++)this.contentItems[d].config.width=u[d].width/o.totalWidth*100}}}},{key:"_createSplitter",value:function(e){var t;return(t=new d.a(this._isColumn,this._splitterSize,this._splitterGrabSize)).on("drag",Object(f.c)(this._onSplitterDrag,this,[t]),this),t.on("dragStop",Object(f.c)(this._onSplitterDragStop,this,[t]),this),t.on("dragStart",Object(f.c)(this._onSplitterDragStart,this,[t]),this),this._splitter.splice(e,0,t),t}},{key:"_getItemsForSplitter",value:function(e){var t=Object(f.g)(e,this._splitter);return{before:this.contentItems[t],after:this.contentItems[t+1]}}},{key:"_isDocked",value:function(e){if(void 0===e){for(var t=0,n=0;n<this.contentItems.length;++n)this._isDocked(n)&&t++;return t}return e<this.contentItems.length?this.contentItems[e]._docker&&this.contentItems[e]._docker.docked:void 0}},{key:"_validateDocking",value:function(e){for(var t=1<(e=e||this).contentItems.length-e._isDocked(),n=0;n<e.contentItems.length;++n)e.contentItems[n]instanceof u.a&&(e.contentItems[n].header._setDockable(e._isDocked(n)||t),e.contentItems[n].header._$setClosable(t))}},{key:"_getMinimumDimensions",value:function(e){for(var t=0,i=0,o=0;o<e.length;++o)t=n(e[o].minWidth||0,t),i=n(e[o].minHeight||0,i);return{horizontal:t,vertical:i}}},{key:"_onSplitterDragStart",value:function(e){var t=this._getItemsForSplitter(e),n=this.layoutManager.config.dimensions[this._isColumn?"minItemHeight":"minItemWidth"],i=this._getMinimumDimensions(t.before.config.content),o=this._isColumn?i.vertical:i.horizontal,s=this._getMinimumDimensions(t.after.config.content),r=this._isColumn?s.vertical:s.horizontal;this._splitterPosition=0,this._splitterMinPosition=-1*(t.before.element[this._dimension]()-(o||n)),this._splitterMaxPosition=t.after.element[this._dimension]()-(r||n)}},{key:"_onSplitterDrag",value:function(e,t,n){var i=this._isColumn?n:t;i>this._splitterMinPosition&&i<this._splitterMaxPosition&&(this._splitterPosition=i,e.element.css(this._isColumn?"top":"left",i))}},{key:"_onSplitterDragStop",value:function(e){var t=this._getItemsForSplitter(e),n=t.before.element[this._dimension](),i=t.after.element[this._dimension](),o=(this._splitterPosition+n)/(n+i),s=t.before.config[this._dimension]+t.after.config[this._dimension];t.before.config[this._dimension]=o*s,t.after.config[this._dimension]=(1-o)*s,e.element.css({top:0,left:0}),Object(f.a)(Object(f.c)(this.callDownwards,this,["setSize"]))}}]),i}();i.a=m},function(e,t,n){var i=n(1),o=n(0),s=function(e){function t(e,n){var i;return h(this,t),(i=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)))._timeout=null,i._eElement=$(e),i._oDocument=$(document),i._eBody=$(document.body),i._nButtonCode=n||0,i._nDelay=200,i._nDistance=10,i._nX=0,i._nY=0,i._nOriginalX=0,i._nOriginalY=0,i._bDragging=!1,i._fMove=Object(o.c)(i.onMouseMove,i),i._fUp=Object(o.c)(i.onMouseUp,i),i._fDown=Object(o.c)(i.onMouseDown,i),i._eElement.on("mousedown touchstart",i._fDown),i}return c(t,i.b),r(t,[{key:"destroy",value:function(){this._eElement.unbind("mousedown touchstart",this._fDown),this._oDocument.unbind("mouseup touchend",this._fUp),this._eElement=null,this._oDocument=null,this._eBody=null}},{key:"onMouseDown",value:function(e){if(e.preventDefault(),0==e.button||"touchstart"===e.type){var t=this._getCoordinates(e);this._nOriginalX=t.x,this._nOriginalY=t.y,this._oDocument.on("mousemove touchmove",this._fMove),this._oDocument.one("mouseup touchend",this._fUp),this._timeout=setTimeout(Object(o.c)(this._startDrag,this),this._nDelay)}}},{key:"onMouseMove",value:function(e){var t=Math.abs;if(null!=this._timeout){e.preventDefault();var n=this._getCoordinates(e);this._nX=n.x-this._nOriginalX,this._nY=n.y-this._nOriginalY,!1===this._bDragging&&(t(this._nX)>this._nDistance||t(this._nY)>this._nDistance)&&(clearTimeout(this._timeout),this._startDrag()),this._bDragging&&this.emit("drag",this._nX,this._nY,e)}}},{key:"onMouseUp",value:function(e){null!=this._timeout&&(clearTimeout(this._timeout),this._eBody.removeClass("lm_dragging"),this._eElement.removeClass("lm_dragging"),this._oDocument.find("iframe").css("pointer-events",""),this._oDocument.unbind("mousemove touchmove",this._fMove),this._oDocument.unbind("mouseup touchend",this._fUp),!0===this._bDragging&&(this._bDragging=!1,this.emit("dragStop",e,this._nOriginalX+this._nX)))}},{key:"_startDrag",value:function(){this._bDragging=!0,this._eBody.addClass("lm_dragging"),this._eElement.addClass("lm_dragging"),this._oDocument.find("iframe").css("pointer-events","none"),this.emit("dragStart",this._nOriginalX,this._nOriginalY)}},{key:"_getCoordinates",value:function(e){return{x:(e=Object(o.e)(e)).pageX,y:e.pageY}}}]),t}();t.a=s},function(e,t,n){var i=n(9);e.exports=function(e){if(!i(e))throw TypeError(e+" is not an object!");return e}},function(e){e.exports=function(e){return"object"==(void 0===e?"undefined":a(e))?null!==e:"function"==typeof e}},function(e){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var i=n(0);t.a=function(){function e(){if(h(this,e),this._keys=["settings","hasHeaders","constrainDragToContainer","selectionEnabled","dimensions","borderWidth","minItemHeight","minItemWidth","headerHeight","dragProxyWidth","dragProxyHeight","labels","close","maximise","minimise","popout","content","componentName","componentState","id","width","type","height","isClosable","title","popoutWholeStack","openPopouts","parentId","activeItemIndex","reorderEnabled","borderGrabWidth"],36<this._keys.length)throw new Error("Too many keys in config minifier map");this._values=[!0,!1,"row","column","stack","component","close","maximise","minimise","open in new window"]}return r(e,[{key:"minifyConfig",value:function(e){var t={};return this._nextLevel(e,t,"_min"),t}},{key:"unminifyConfig",value:function(e){var t={};return this._nextLevel(e,t,"_max"),t}},{key:"_nextLevel",value:function(e,t,n){var i,o;for(i in e)e instanceof Array&&(i=parseInt(i,10)),e.hasOwnProperty(i)&&(o=this[n](i,this._keys),"object"==a(e[i])?(t[o]=e[i]instanceof Array?[]:{},this._nextLevel(e[i],t[o],n)):t[o]=this[n](e[i],this._values))}},{key:"_min",value:function(e,t){if("string"==typeof e&&1===e.length)return"___"+e;var n=Object(i.g)(e,t);return-1===n?e:n.toString(36)}},{key:"_max",value:function(e,t){return"string"==typeof e&&1===e.length?t[parseInt(e,36)]:"string"==typeof e&&"___"===e.substr(0,3)?e[3]:e}}]),e}()},function(e,t,n){var i=n(3),o=n(6),s=function(e){function t(e,n,i){var o;return h(this,t),(o=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,null))).isRoot=!0,o.type="root",o.element=$('<div class="lm_goldenlayout lm_item lm_root"></div>'),o.childElementContainer=o.element,o._containerElement=i,o._containerElement.append(o.element),o}return c(t,i.a),r(t,[{key:"addChild",value:function(e){if(0<this.contentItems.length)throw new Error("Root node can only have a single child");e=this.layoutManager._$normalizeContentItem(e,this),this.childElementContainer.append(e.element),i.a.prototype.addChild.call(this,e),this.callDownwards("setSize"),this.emitBubblingEvent("stateChanged")}},{key:"setSize",value:function(e,t){e=void 0===e?this._containerElement.width():e,t=void 0===t?this._containerElement.height():t,this.element.width(e),this.element.height(t),this.contentItems[0]&&(this.contentItems[0].element.width(e),this.contentItems[0].element.height(t))}},{key:"_$highlightDropZone",value:function(){this.layoutManager.tabDropPlaceholder.remove(),i.a.prototype._$highlightDropZone.apply(this,arguments)}},{key:"_$onDrop",value:function(e,t){var n;if(e.isComponent&&((n=this.layoutManager.createContentItem({type:"stack",header:e.config.header||{}},this))._$init(),n.addChild(e),e=n),this.contentItems.length){("row"===e.config.type||"column"===e.config.type)&&((n=this.layoutManager.createContentItem({type:"stack"},this)).addChild(e),e=n);var i="x"==t.side[0]?"row":"column",s="x"==t.side[0]?"width":"height",r="2"==t.side[1],a=this.contentItems[0];if(a instanceof o.a&&a.type==i){var l=a.contentItems[r?0:a.contentItems.length-1];a.addChild(e,r?0:void 0,!0),l.config[s]*=.5,e.config[s]=l.config[s],a.callDownwards("setSize")}else{var c=this.layoutManager.createContentItem({type:i},this);this.replaceChild(a,c),c.addChild(e,r?0:void 0,!0),c.addChild(a,r?void 0:0,!0),a.config[s]=50,e.config[s]=50,c.callDownwards("setSize")}}else this.addChild(e)}}]),t}();t.a=s},function(t,i,o){var s=o(3),a=o(6),u=o(28),d=o(0),f=function(t){function i(e,t,n){var o;h(this,i),(o=l(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,e,t,n))).element=$('<div class="lm_item lm_stack"></div>'),o._activeContentItem=null;var s=e.config;return o._header={show:!0===s.settings.hasHeaders&&!1!==t.hasHeaders,popout:s.settings.showPopoutIcon&&s.labels.popout,maximise:s.settings.showMaximiseIcon&&s.labels.maximise,close:s.settings.showCloseIcon&&s.labels.close,minimise:s.labels.minimise},s.header&&Object(d.b)(o._header,s.header),t.header&&Object(d.b)(o._header,t.header),t.content&&t.content[0]&&t.content[0].header&&Object(d.b)(o._header,t.content[0].header),o._dropZones={},o._dropSegment=null,o._contentAreaDimensions=null,o._dropIndex=null,o.isStack=!0,o.childElementContainer=$('<div class="lm_items"></div>'),o.header=new u.a(e,o),o.element.on("mouseleave mouseenter",Object(d.c)(function(e){this._docker&&this._docker.docked&&this.childElementContainer[this._docker.dimension]("mouseenter"==e.type?this._docker.realSize:0)},o)),o.element.append(o.header.element),o.element.append(o.childElementContainer),o._setupHeaderPosition(),o._$validateClosability(),o}return c(i,s.a),r(i,[{key:"dock",value:function(e){this._header.dock&&this.parent instanceof a.a&&this.parent.dock(this,e)}},{key:"setSize",value:function(){if("none"!==this.element.css("display")){var e=this._docker&&this._docker.docked,t={width:this.element.width(),height:this.element.height()};this._header.show&&(t[this._sided?"width":"height"]-=this.layoutManager.config.dimensions.headerHeight),e&&(t[this._docker.dimension]=this._docker.realSize),e&&"height"!=this._docker.dimension||this.childElementContainer.width(t.width),e&&"width"!=this._docker.dimension||this.childElementContainer.height(t.height);for(var n=0;n<this.contentItems.length;n++)this.contentItems[n].element.width(t.width),this.contentItems[n].element.height(t.height);this.emit("resize"),this.emitBubblingEvent("stateChanged")}}},{key:"_$init",value:function(){var e,t;if(!0!==this.isInitialised){for(s.a.prototype._$init.call(this),e=0;e<this.contentItems.length;e++)this.header.createTab(this.contentItems[e]),this.contentItems[e]._$hide();if(0<this.contentItems.length){if(!(t=this.contentItems[this.config.activeItemIndex||0]))throw new Error("Configured activeItemIndex out of bounds");this.setActiveContentItem(t)}}}},{key:"setActiveContentItem",value:function(e){if(-1===Object(d.g)(e,this.contentItems))throw new Error("contentItem is not a child of this stack");null!==this._activeContentItem&&this._activeContentItem._$hide(),this._activeContentItem=e,this.header.setActiveContentItem(e),e._$show(),this.emit("activeContentItemChanged",e),this.layoutManager.emit("activeContentItemChanged",e),this.emitBubblingEvent("stateChanged")}},{key:"getActiveContentItem",value:function(){return this.header.activeContentItem}},{key:"addChild",value:function(e,t){t>this.contentItems.length&&(t-=1),e=this.layoutManager._$normalizeContentItem(e,this),s.a.prototype.addChild.call(this,e,t),this.childElementContainer.append(e.element),this.header.createTab(e,t),this.setActiveContentItem(e),this.callDownwards("setSize"),this._$validateClosability(),this.parent instanceof a.a&&this.parent._validateDocking(),this.emitBubblingEvent("stateChanged")}},{key:"removeChild",value:function(e,t){var i=Object(d.g)(e,this.contentItems);s.a.prototype.removeChild.call(this,e,t),this.header.removeTab(e),this.header.activeContentItem===e&&(0<this.contentItems.length?this.setActiveContentItem(this.contentItems[n(i-1,0)]):this._activeContentItem=null),this._$validateClosability(),this.parent instanceof a.a&&this.parent._validateDocking(),this.emitBubblingEvent("stateChanged")}},{key:"undisplayChild",value:function(e){if(1<this.contentItems.length){var t=Object(d.g)(e,this.contentItems);e._$hide&&e._$hide(),this.setActiveContentItem(this.contentItems[0===t?t+1:t-1])}else this.header.hideTab(e),e._$hide&&e._$hide(),s.a.prototype.undisplayChild.call(this,e),this.parent instanceof a.a&&this.parent._validateDocking();this.emitBubblingEvent("stateChanged")}},{key:"_$validateClosability",value:function(){var e,t,n;for(e=this.header._isClosable(),n=0,t=this.contentItems.length;n<t&&e;n++)e=this.contentItems[n].config.isClosable;this.header._$setClosable(e)}},{key:"_$destroy",value:function(){s.a.prototype._$destroy.call(this),this.header._$destroy(),this.element.off("mouseenter mouseleave")}},{key:"_$onDrop",value:function(e){if("header"===this._dropSegment)return this._resetHeaderDropZone(),void this.addChild(e,this._dropIndex);if("body"!==this._dropSegment){var t,n,i,o="top"===this._dropSegment||"bottom"===this._dropSegment,s="left"===this._dropSegment||"right"===this._dropSegment,r="top"===this._dropSegment||"left"===this._dropSegment,a=o&&this.parent.isColumn||s&&this.parent.isRow,l=o?"column":"row",c=o?"height":"width";e.isComponent&&((n=this.layoutManager.createContentItem({type:"stack",header:e.config.header||{}},this))._$init(),n.addChild(e),e=n),("row"===e.config.type||"column"===e.config.type)&&((n=this.layoutManager.createContentItem({type:"stack"},this)).addChild(e),e=n),a?(t=Object(d.g)(this,this.parent.contentItems),this.parent.addChild(e,r?t:t+1,!0),this.config[c]*=.5,e.config[c]=this.config[c],this.parent.callDownwards("setSize")):(l=o?"column":"row",i=this.layoutManager.createContentItem({type:l},this),this.parent.replaceChild(this,i),i.addChild(e,r?0:void 0,!0),i.addChild(this,r?void 0:0,!0),this.config[c]=50,e.config[c]=50,i.callDownwards("setSize")),this.parent._validateDocking()}else this.addChild(e)}},{key:"_$highlightDropZone",value:function(e,t){var n,i;for(n in this._contentAreaDimensions)if((i=this._contentAreaDimensions[n].hoverArea).x1<e&&i.x2>e&&i.y1<t&&i.y2>t)return void("header"===n?(this._dropSegment="header",this._highlightHeaderDropZone(this._sided?t:e)):(this._resetHeaderDropZone(),this._highlightBodyDropZone(n)))}},{key:"_$getArea",value:function(){if("none"===this.element.css("display"))return null;var e=s.a.prototype._$getArea,t=e.call(this,this.header.element),n=e.call(this,this.childElementContainer),i=n.x2-n.x1,o=n.y2-n.y1;return this._contentAreaDimensions={header:{hoverArea:{x1:t.x1,y1:t.y1,x2:t.x2,y2:t.y2},highlightArea:{x1:t.x1,y1:t.y1,x2:t.x2,y2:t.y2}}},this._activeContentItem&&!1===this._activeContentItem.isComponent?t:0===this.contentItems.length?(this._contentAreaDimensions.body={hoverArea:{x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2},highlightArea:{x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2}},e.call(this,this.element)):(this._contentAreaDimensions.left={hoverArea:{x1:n.x1,y1:n.y1,x2:n.x1+.25*i,y2:n.y2},highlightArea:{x1:n.x1,y1:n.y1,x2:n.x1+.5*i,y2:n.y2}},this._contentAreaDimensions.top={hoverArea:{x1:n.x1+.25*i,y1:n.y1,x2:n.x1+.75*i,y2:n.y1+.5*o},highlightArea:{x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y1+.5*o}},this._contentAreaDimensions.right={hoverArea:{x1:n.x1+.75*i,y1:n.y1,x2:n.x2,y2:n.y2},highlightArea:{x1:n.x1+.5*i,y1:n.y1,x2:n.x2,y2:n.y2}},this._contentAreaDimensions.bottom={hoverArea:{x1:n.x1+.25*i,y1:n.y1+.5*o,x2:n.x1+.75*i,y2:n.y2},highlightArea:{x1:n.x1,y1:n.y1+.5*o,x2:n.x2,y2:n.y2}},e.call(this,this.element))}},{key:"_highlightHeaderDropZone",value:function(t){var n,i,o,s,r,a,l,c,h=this.header.tabs.length,u=!1;if(0===h)return l=this.header.element.offset(),void this.layoutManager.dropTargetIndicator.highlightArea({x1:l.left,x2:l.left+100,y1:l.top+this.header.element.height()-20,y2:l.top+this.header.element.height()});for(n=0;n<h;n++)if(r=(i=this.header.tabs[n].element).offset(),this._sided?(s=r.top,o=r.left,c=i.height()):(s=r.left,o=r.top,c=i.width()),t>s&&t<s+c){u=!0;break}if(!(0==u&&t<s)){if(t<s+c/2?(this._dropIndex=n,i.before(this.layoutManager.tabDropPlaceholder)):(this._dropIndex=e(n+1,h),i.after(this.layoutManager.tabDropPlaceholder)),this._sided){var d=this.layoutManager.tabDropPlaceholder.offset().top;return void this.layoutManager.dropTargetIndicator.highlightArea({x1:o,x2:o+i.innerHeight(),y1:d,y2:d+this.layoutManager.tabDropPlaceholder.width()})}a=this.layoutManager.tabDropPlaceholder.offset().left,this.layoutManager.dropTargetIndicator.highlightArea({x1:a,x2:a+this.layoutManager.tabDropPlaceholder.width(),y1:o,y2:o+i.innerHeight()})}}},{key:"_resetHeaderDropZone",value:function(){this.layoutManager.tabDropPlaceholder.remove()}},{key:"toggleMaximise",value:function(e){this.isMaximised||this.dock(!1),s.a.prototype.toggleMaximise.call(this,e)}},{key:"_setupHeaderPosition",value:function(){var e=0<=["right","left","bottom"].indexOf(this._header.show)&&this._header.show;if(this.header.element.toggle(!!this._header.show),this._side=e,this._sided=0<=["right","left"].indexOf(this._side),this.element.removeClass("lm_left lm_right lm_bottom"),this._side&&this.element.addClass("lm_"+this._side),this.element.find(".lm_header").length&&this.childElementContainer){var t=0<=["right","bottom"].indexOf(this._side)?"before":"after";this.header.element[t](this.childElementContainer),this.callDownwards("setSize")}}},{key:"_highlightBodyDropZone",value:function(e){var t=this._contentAreaDimensions[e].highlightArea;this.layoutManager.dropTargetIndicator.highlightArea(t),this._dropSegment=e}}]),i}();i.a=f},function(e){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){var i=n(44),o=n(20);e.exports=Object.keys||function(e){return i(e,o)}},function(e){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},function(e,t,n){var i=n(45),o=n(14);e.exports=function(e){return i(o(e))}},function(e){var n=Math.ceil;e.exports=function(e){return isNaN(e=+e)?0:(0<e?t:n)(e)}},function(e,t,n){var i=n(50)("keys"),o=n(52);e.exports=function(e){return i[e]||(i[e]=o(e))}},function(e){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(e,t,n){var i=n(4),o=n(2),s=n(54),r=n(56),a=n(16),l="prototype",c=function e(t,n,c){var h,u,d,f=t&e.F,m=t&e.G,p=t&e.S,g=t&e.P,y=t&e.B,v=t&e.W,_=m?o:o[n]||(o[n]={}),b=_[l],w=m?i:p?i[n]:(i[n]||{})[l];for(h in m&&(c=n),c)(u=!f&&w&&void 0!==w[h])&&a(_,h)||(d=u?w[h]:c[h],_[h]=m&&"function"!=typeof w[h]?c[h]:y&&u?s(d,i):v&&w[h]==d?function(e){var t=function(t,n,i){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,i)}return e.apply(this,arguments)};return t[l]=e[l],t}(d):g&&"function"==typeof d?s(Function.call,d):d,g&&((_.virtual||(_.virtual={}))[h]=d,t&e.R&&b&&!b[h]&&r(b,h,d)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,t,n){var i=n(8),o=n(57),s=n(58),r=Object.defineProperty;t.f=n(5)?Object.defineProperty:function(e,t,n){if(i(e),t=s(t,!0),i(n),o)try{return r(e,t,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var i=n(9),o=n(4).document,s=i(o)&&i(o.createElement);e.exports=function(e){return s?o.createElement(e):{}}},function(e,t){t.a=function(){function e(t,n){h(this,e),this._reactComponent=null,this._originalComponentWillUpdate=null,this._container=t,this._initialState=n,this._reactClass=this._getReactClass(),this._container.on("open",this._render,this),this._container.on("destroy",this._destroy,this)}return r(e,[{key:"_render",value:function(){this._reactComponent=ReactDOM.render(this._getReactComponent(),this._container.getElement()[0]),this._originalComponentWillUpdate=this._reactComponent.componentWillUpdate||function(){},this._reactComponent.componentWillUpdate=this._onUpdate.bind(this),this._container.getState()&&this._reactComponent.setState(this._container.getState())}},{key:"_destroy",value:function(){ReactDOM.unmountComponentAtNode(this._container.getElement()[0]),this._container.off("open",this._render,this),this._container.off("destroy",this._destroy,this)}},{key:"_onUpdate",value:function(e,t){this._container.setState(t),this._originalComponentWillUpdate.call(this._reactComponent,e,t)}},{key:"_getReactClass",value:function(){var e,t=this._container._config.component;if(!t)throw new Error("No react component name. type: react-component needs a field `component`");if(!(e=this._container.layoutManager.getComponent(t)))throw new Error('React component "'+t+'" not found. Please register all components with GoldenLayout using `registerComponent(name, component)`');return e}},{key:"_getReactComponent",value:function(){var e={glEventHub:this._container.layoutManager.eventHub,glContainer:this._container},t=$.extend(e,this._container._config.props);return React.createElement(this._reactClass,t)}}]),e}()},function(e,t,n){var i=n(1),o=n(0),s=function(e){function t(e){var n;return h(this,t),(n=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)))._layoutManager=e,n._dontPropagateToParent=null,n._childEventSource=null,n.on(i.a,Object(o.c)(n._onEventFromThis,n)),n._boundOnEventFromChild=Object(o.c)(n._onEventFromChild,n),$(window).on("gl_child_event",n._boundOnEventFromChild),n}return c(t,i.b),r(t,[{key:"_onEventFromThis",value:function(){var e=Array.prototype.slice.call(arguments);this._layoutManager.isSubWindow&&e[0]!==this._dontPropagateToParent&&this._propagateToParent(e),this._propagateToChildren(e),this._dontPropagateToParent=null,this._childEventSource=null}},{key:"_$onEventFromParent",value:function(e){this._dontPropagateToParent=e[0],this.emit.apply(this,e)}},{key:"_onEventFromChild",value:function(e){this._childEventSource=e.originalEvent.__gl,this.emit.apply(this,e.originalEvent.__glArgs)}},{key:"_propagateToParent",value:function(e){var t,n="gl_child_event";document.createEvent?(t=window.opener.document.createEvent("HTMLEvents")).initEvent(n,!0,!0):(t=window.opener.document.createEventObject()).eventType=n,t.eventName=n,t.__glArgs=e,t.__gl=this._layoutManager,document.createEvent?window.opener.dispatchEvent(t):window.opener.fireEvent("on"+t.eventType,t)}},{key:"_propagateToChildren",value:function(e){var t,n;for(n=0;n<this._layoutManager.openPopouts.length;n++)(t=this._layoutManager.openPopouts[n].getGlInstance())&&t!==this._childEventSource&&t.eventHub._$onEventFromParent(e)}},{key:"destroy",value:function(){$(window).off("gl_child_event",this._boundOnEventFromChild)}}]),t}();t.a=s},function(e,t){t.a=function(){function e(t,n){h(this,e),this.name=t,this.origin=n,this.isPropagationStopped=!1}return r(e,[{key:"stopPropagation",value:function(){this.isPropagationStopped=!0}}]),e}()},function(e,t){var n=function(e){function t(e,n){var i;return h(this,t),(i=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this))).name="Configuration Error",i.message=e,i.node=n,i}return c(t,Error),t}();t.a=n},function(e,t,n){var i=n(1),o=n(29),s=n(31),a=n(0),u=function(e){function t(e,n){var i;return h(this,t),(i=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this))).layoutManager=e,i.element=$('<div class="lm_header"><ul class="lm_tabs"></ul><ul class="lm_controls"></ul><ul class="lm_tabdropdown_list"></ul></div>'),!0===i.layoutManager.config.settings.selectionEnabled&&(i.element.addClass("lm_selectable"),i.element.on("click touchstart",Object(a.c)(i._onHeaderClick,i))),i.tabsContainer=i.element.find(".lm_tabs"),i.tabDropdownContainer=i.element.find(".lm_tabdropdown_list"),i.tabDropdownContainer.hide(),i.controlsContainer=i.element.find(".lm_controls"),i.parent=n,i.parent.on("resize",i._updateTabSizes,i),i.tabs=[],i.tabsMarkedForRemoval=[],i.activeContentItem=null,i.closeButton=null,i.dockButton=null,i.tabDropdownButton=null,i.hideAdditionalTabsDropdown=Object(a.c)(i._hideAdditionalTabsDropdown,i),$(document).mouseup(i.hideAdditionalTabsDropdown),i._lastVisibleTabIndex=-1,i._tabControlOffset=i.layoutManager.config.settings.tabControlOffset,i._createControls(),i}return c(t,i.b),r(t,[{key:"createTab",value:function(e,t){var n,i;for(i=0;i<this.tabs.length;i++)if(this.tabs[i].contentItem===e)return;return n=new o.a(this,e),0===this.tabs.length?(this.tabs.push(n),void this.tabsContainer.append(n.element)):(void 0===t&&(t=this.tabs.length),0<t?this.tabs[t-1].element.after(n.element):this.tabs[0].element.before(n.element),this.tabs.splice(t,0,n),void this._updateTabSizes())}},{key:"removeTab",value:function(e){for(var t=0;t<this.tabs.length;t++)if(this.tabs[t].contentItem===e)return this.tabs[t]._$destroy(),void this.tabs.splice(t,1);for(t=0;t<this.tabsMarkedForRemoval.length;t++)if(this.tabsMarkedForRemoval[t].contentItem===e)return this.tabsMarkedForRemoval[t]._$destroy(),void this.tabsMarkedForRemoval.splice(t,1);throw new Error("contentItem is not controlled by this header")}},{key:"hideTab",value:function(e){for(var t=0;t<this.tabs.length;t++)if(this.tabs[t].contentItem===e)return this.tabs[t].element.hide(),this.tabsMarkedForRemoval.push(this.tabs[t]),void this.tabs.splice(t,1);throw new Error("contentItem is not controlled by this header")}},{key:"setActiveContentItem",value:function(e){var t,n,i,o;for(t=0;t<this.tabs.length;t++)i=this.tabs[t].contentItem===e,this.tabs[t].setActive(i),!0===i&&(this.activeContentItem=e,this.parent.config.activeItemIndex=t);if(this.layoutManager.config.settings.reorderOnTabMenuClick&&-1!==this._lastVisibleTabIndex&&this.parent.config.activeItemIndex>this._lastVisibleTabIndex){for(o=this.tabs[this.parent.config.activeItemIndex],n=this.parent.config.activeItemIndex;0<n;n--)this.tabs[n]=this.tabs[n-1];this.tabs[0]=o,this.parent.config.activeItemIndex=0}this._updateTabSizes(),this.parent.emitBubblingEvent("stateChanged")}},{key:"position",value:function(e){var t=this.parent._header.show;if(this.parent._docker&&this.parent._docker.docked)throw new Error("Can't change header position in docked stack");return t&&!this.parent._side&&(t="top"),void 0!==e&&this.parent._header.show!=e&&(this.parent._header.show=e,this.parent._setupHeaderPosition()),t}},{key:"_$setClosable",value:function(e){return this._canDestroy=e||1<this.tabs.length,this.closeButton&&this._isClosable()&&(this.closeButton.element[e?"show":"hide"](),!0)}},{key:"_setDockable",value:function(e){return this.dockButton&&this.parent._header&&this.parent._header.dock&&(this.dockButton.element.toggle(!!e),!0)}},{key:"_$destroy",value:function(){this.emit("destroy",this);for(var e=0;e<this.tabs.length;e++)this.tabs[e]._$destroy();$(document).off("mouseup",this.hideAdditionalTabsDropdown),this.element.remove()}},{key:"_getHeaderSetting",value:function(e){if(e in this.parent._header)return this.parent._header[e]}},{key:"_createControls",value:function(){var e,t,n,i,o,r,l,c,h;if(h=Object(a.c)(this._showAdditionalTabsDropdown,this),c=this.layoutManager.config.labels.tabDropdown,this.tabDropdownButton=new s.a(this,c,"lm_tabdropdown",h),this.tabDropdownButton.element.hide(),this.parent._header&&this.parent._header.dock){var u=Object(a.c)(this.parent.dock,this.parent);n=this._getHeaderSetting("dock"),this.dockButton=new s.a(this,n,"lm_dock",u)}this._getHeaderSetting("popout")&&(t=Object(a.c)(this._onPopoutClick,this),n=this._getHeaderSetting("popout"),new s.a(this,n,"lm_popout",t)),this._getHeaderSetting("maximise")&&(r=Object(a.c)(this.parent.toggleMaximise,this.parent),i=this._getHeaderSetting("maximise"),o=this._getHeaderSetting("minimise"),l=new s.a(this,i,"lm_maximise",r),this.parent.on("maximised",function(){l.element.attr("title",o)}),this.parent.on("minimised",function(){l.element.attr("title",i)})),this._isClosable()&&(e=Object(a.c)(this.parent.remove,this.parent),n=this._getHeaderSetting("close"),this.closeButton=new s.a(this,n,"lm_close",e))}},{key:"_showAdditionalTabsDropdown",value:function(){this.tabDropdownContainer.show()}},{key:"_hideAdditionalTabsDropdown",value:function(){this.tabDropdownContainer.hide()}},{key:"_isClosable",value:function(){return this.parent.config.isClosable&&this.layoutManager.config.settings.showCloseIcon}},{key:"_onPopoutClick",value:function(){!0===this.layoutManager.config.settings.popoutWholeStack?this.parent.popout():this.activeContentItem.popout()}},{key:"_onHeaderClick",value:function(e){e.target===this.element[0]&&this.parent.select()}},{key:"_updateTabSizes",value:function(e){if(0!==this.tabs.length){this.tabDropdownButton.element.toggle(!0===e);var t=function(e){return e?"width":"height"};this.element.css(t(!this.parent._sided),""),this.element[t(this.parent._sided)](this.layoutManager.config.dimensions.headerHeight);var n,i,o,s,r=this.element.outerWidth()-this.controlsContainer.outerWidth()-this._tabControlOffset,a=0,l=0,c=0,h=this.layoutManager.config.settings.tabOverlapAllowance,u=!1,d=this.activeContentItem?this.tabs.indexOf(this.activeContentItem.tab):0,f=this.tabs[d];for(this.parent._sided&&(r=this.element.outerHeight()-this.controlsContainer.outerHeight()-this._tabControlOffset),this._lastVisibleTabIndex=-1,i=0;i<this.tabs.length;i++)if(n=this.tabs[i].element,this.tabsContainer.append(n),a+=n.outerWidth()+parseInt(n.css("margin-right"),10),(l=d<=i?a:a+f.element.outerWidth()+parseInt(f.element.css("margin-right"),10))>r){if(u)i===d&&(n.css({"z-index":"auto","margin-left":""}),this.tabsContainer.append(n));else if((c=0<d&&d<=i?(l-r)/(i-1):(l-r)/i)<h){for(o=0;o<=i;o++)s=o!==d&&0!==o?"-"+c+"px":"",this.tabs[o].element.css({"z-index":i-o,"margin-left":s});this._lastVisibleTabIndex=i,this.tabsContainer.append(n)}else u=!0;if(u&&i!==d){if(!e)return void this._updateTabSizes(!0);n.css({"z-index":"auto","margin-left":""}),this.tabDropdownContainer.append(n)}}else this._lastVisibleTabIndex=i,n.css({"z-index":"auto","margin-left":""}),this.tabsContainer.append(n)}}}]),t}();t.a=u},function(e,t,n){var i=n(7),o=n(30),s=n(0);t.a=function(){function e(t,n){h(this,e),this.header=t,this.contentItem=n,this.element=$('<li class="lm_tab"><i class="lm_left"></i><span class="lm_title"></span><div class="lm_close_tab"></div><i class="lm_right"></i></li>'),this.titleElement=this.element.find(".lm_title"),this.closeElement=this.element.find(".lm_close_tab"),this.closeElement[n.config.isClosable?"show":"hide"](),this.isActive=!1,this.setTitle(n.config.title),this.contentItem.on("titleChanged",this.setTitle,this),this._layoutManager=this.contentItem.layoutManager,!0===this._layoutManager.config.settings.reorderEnabled&&!0===n.config.reorderEnabled&&(this._dragListener=new i.a(this.element),this._dragListener.on("dragStart",this._onDragStart,this),this.contentItem.on("destroy",this._dragListener.destroy,this._dragListener)),this._onTabClickFn=Object(s.c)(this._onTabClick,this),this._onCloseClickFn=Object(s.c)(this._onCloseClick,this),this.element.on("mousedown touchstart",this._onTabClickFn),this.contentItem.config.isClosable?(this.closeElement.on("click touchstart",this._onCloseClickFn),this.closeElement.on("mousedown",this._onCloseMousedown)):this.closeElement.remove(),this.contentItem.tab=this,this.contentItem.emit("tab",this),this.contentItem.layoutManager.emit("tabCreated",this),this.contentItem.isComponent&&(this.contentItem.container.tab=this,this.contentItem.container.emit("tab",this))}return r(e,[{key:"setTitle",value:function(e){this.element.attr("title",Object(s.k)(e)),this.titleElement.html(e)}},{key:"setActive",value:function(e){e===this.isActive||(this.isActive=e,e?this.element.addClass("lm_active"):this.element.removeClass("lm_active"))}},{key:"_$destroy",value:function(){this.element.off("mousedown touchstart",this._onTabClickFn),this.closeElement.off("click touchstart",this._onCloseClickFn),this._dragListener&&(this.contentItem.off("destroy",this._dragListener.destroy,this._dragListener),this._dragListener.off("dragStart",this._onDragStart),this._dragListener=null),this.element.remove()}},{key:"_onDragStart",value:function(e,t){return this.header._canDestroy?(!0===this.contentItem.parent.isMaximised&&this.contentItem.parent.toggleMaximise(),void new o.a(e,t,this._dragListener,this._layoutManager,this.contentItem,this.header.parent)):null}},{key:"_onTabClick",value:function(e){if(0===e.button||"touchstart"===e.type){var t=this.header.parent.getActiveContentItem();this.contentItem!==t&&this.header.parent.setActiveContentItem(this.contentItem)}else 1===e.button&&this.contentItem.config.isClosable&&this._onCloseClick(e)}},{key:"_onCloseClick",value:function(e){e.stopPropagation(),this.header._canDestroy&&this.header.parent.removeChild(this.contentItem)}},{key:"_onCloseMousedown",value:function(e){e.stopPropagation()}}]),e}()},function(e,t,n){var i=n(1),o=n(0),s=function(e){function t(e,n,i,s,r,a){var c;h(this,t),(c=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this)))._dragListener=i,c._layoutManager=s,c._contentItem=r,c._originalParent=a,c._area=null,c._lastValidArea=null,c._dragListener.on("drag",c._onDrag,c),c._dragListener.on("dragStop",c._onDrop,c),c.element=$('<div class="lm_dragProxy"><div class="lm_header"><ul class="lm_tabs"><li class="lm_tab lm_active"><i class="lm_left"></i><span class="lm_title"></span><i class="lm_right"></i></li></ul></div><div class="lm_content"></div></div>'),a&&a._side&&(c._sided=a._sided,c.element.addClass("lm_"+a._side),0<=["right","bottom"].indexOf(a._side)&&c.element.find(".lm_content").after(c.element.find(".lm_header"))),c.element.css({left:e,top:n}),c.element.find(".lm_tab").attr("title",Object(o.k)(c._contentItem.config.title)),c.element.find(".lm_title").html(c._contentItem.config.title),c.childElementContainer=c.element.find(".lm_content"),c.childElementContainer.append(r.element),c._undisplayTree(),c._layoutManager._$calculateItemAreas(),c._setDimensions(),$(document.body).append(c.element);var u=c._layoutManager.container.offset();return c._minX=u.left,c._minY=u.top,c._maxX=c._layoutManager.container.width()+c._minX,c._maxY=c._layoutManager.container.height()+c._minY,c._width=c.element.width(),c._height=c.element.height(),c._setDropPosition(e,n),c}return c(t,i.b),r(t,[{key:"_onDrag",value:function(e,t,n){var i=(n=Object(o.e)(n)).pageX,s=n.pageY;(i>this._minX&&i<this._maxX&&s>this._minY&&s<this._maxY||!0!==this._layoutManager.config.settings.constrainDragToContainer)&&this._setDropPosition(i,s)}},{key:"_setDropPosition",value:function(e,t){this.element.css({left:e,top:t}),this._area=this._layoutManager._$getArea(e,t),null!==this._area&&(this._lastValidArea=this._area,this._area.contentItem._$highlightDropZone(e,t,this._area))}},{key:"_onDrop",value:function(){this._updateTree(),this._layoutManager.dropTargetIndicator.hide(),null===this._area?null===this._lastValidArea?this._originalParent?this._originalParent.addChild(this._contentItem):this._contentItem._$destroy():this._lastValidArea.contentItem._$onDrop(this._contentItem,this._lastValidArea):this._area.contentItem._$onDrop(this._contentItem,this._area),this.element.remove(),this._layoutManager.emit("itemDropped",this._contentItem)}},{key:"_undisplayTree",value:function(){this._contentItem.parent&&this._contentItem.parent.undisplayChild(this._contentItem)}},{key:"_updateTree",value:function(){this._contentItem.parent&&this._contentItem.parent.removeChild(this._contentItem,!0),this._contentItem._$setParent(this)}},{key:"_setDimensions",value:function(){var e=this._layoutManager.config.dimensions,t=e.dragProxyWidth,n=e.dragProxyHeight;this.element.width(t),this.element.height(n),t-=this._sided?e.headerHeight:0,n-=this._sided?0:e.headerHeight,this.childElementContainer.width(t),this.childElementContainer.height(n),this._contentItem.element.width(t),this._contentItem.element.height(n),this._contentItem.callDownwards("_$show"),this._contentItem.callDownwards("setSize")}}]),t}();t.a=s},function(e,t){t.a=function(){function e(t,n,i,o){h(this,e),this._header=t,this.element=$('<li class="'+i+'" title="'+n+'"></li>'),this._header.on("destroy",this._$destroy,this),this._action=o,this.element.on("click touchstart",this._action),this._header.controlsContainer.append(this.element)}return r(e,[{key:"_$destroy",value:function(){this.element.off(),this.element.remove()}}]),e}()},function(e,t,n){var i=n(3),o=n(33),s=function(e){function t(e,n,i){h(this,t);var s=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,i)),r=e.getComponent(s.config.componentName),a=$.extend(!0,{},s.config.componentState||{});return a.componentName=s.config.componentName,s.componentName=s.config.componentName,""===s.config.title&&(s.config.title=s.config.componentName),s.isComponent=!0,s.container=new o.a(s.config,s,e),s.instance=new r(s.container,a),s.element=s.container._element,s}return c(t,i.a),r(t,[{key:"close",value:function(){this.parent.removeChild(this)}},{key:"setSize",value:function(){"none"!==this.element.css("display")&&this.container._$setSize(this.element.width(),this.element.height())}},{key:"_$init",value:function(){i.a.prototype._$init.call(this),this.container.emit("open")}},{key:"_$hide",value:function(){this.container.hide(),i.a.prototype._$hide.call(this)}},{key:"_$show",value:function(){this.container.show(),i.a.prototype._$show.call(this)}},{key:"_$shown",value:function(){this.container.shown(),i.a.prototype._$shown.call(this)}},{key:"_$destroy",value:function(){this.container.emit("destroy",this),i.a.prototype._$destroy.call(this)}},{key:"_$getArea",value:function(){return null}}]),t}();t.a=s},function(e,t,n){var i=n(1),o=function(e){function t(e,n,i){var o;return h(this,t),(o=l(this,(t.__proto__||Object.getPrototypeOf(t)).call(this))).width=null,o.height=null,o.title=e.componentName,o.parent=n,o.layoutManager=i,o.isHidden=!1,o._config=e,o._element=$('<div class="lm_item_container"><div class="lm_content"></div></div>'),o._contentElement=o._element.find(".lm_content"),o}return c(t,i.b),r(t,[{key:"getElement",value:function(){return this._contentElement}},{key:"hide",value:function(){this.emit("hide"),this.isHidden=!0,this._element.hide()}},{key:"show",value:function(){this.emit("show"),this.isHidden=!1,this._element.show(),(0!=this.height||0!=this.width)&&this.emit("shown")}},{key:"setSize",value:function(e,t){for(var n,i,o,s,r=this.parent,a=this;!r.isColumn&&!r.isRow;)if(a=r,(r=r.parent).isRoot)return!1;for(n=("height"===(i=r.isColumn?"height":"width")?t:e)/(this[i]*(1/(a.config[i]/100)))*100,o=(a.config[i]-n)/(r.contentItems.length-1),s=0;s<r.contentItems.length;s++)r.contentItems[s]===a?r.contentItems[s].config[i]=n:r.contentItems[s].config[i]+=o;return r.callDownwards("setSize"),!0}},{key:"close",value:function(){this._config.isClosable&&(this.emit("close"),this.parent.close())}},{key:"getState",value:function(){return this._config.componentState}},{key:"extendState",value:function(e){this.setState($.extend(!0,this.getState(),e))}},{key:"setState",value:function(e){this._config.componentState=e,this.parent.emitBubblingEvent("stateChanged")}},{key:"setTitle",value:function(e){this.parent.setTitle(e)}},{key:"_$setSize",value:function(e,t){(e!==this.width||t!==this.height)&&(this.width=e,this.height=t,$.zepto?this._contentElement.width(e):this._contentElement.outerWidth(e),$.zepto?this._contentElement.height(t):this._contentElement.outerHeight(t),this.emit("resize"))}}]),t}();t.a=o},function(e,n,i){var o=i(68),s=i.n(o),a=i(1),u=i(11),d=i(0),f=function(e){function n(e,t,i,o,s){var r;return h(this,n),(r=l(this,(n.__proto__||Object.getPrototypeOf(n)).call(this))).isInitialised=!1,r._config=e,r._dimensions=t,r._parentId=i,r._indexInParent=o,r._layoutManager=s,r._popoutWindow=null,r._id=null,r._createWindow(),r}return c(n,a.b),r(n,[{key:"toConfig",value:function(){if(!1===this.isInitialised)throw new Error("Can't create config, layout not yet initialised");return{dimensions:{width:this.getGlInstance().width,height:this.getGlInstance().height,left:this._popoutWindow.screenX||this._popoutWindow.screenLeft,top:this._popoutWindow.screenY||this._popoutWindow.screenTop},content:this.getGlInstance().toConfig().content,parentId:this._parentId,indexInParent:this._indexInParent}}},{key:"getGlInstance",value:function(){return this._popoutWindow.__glInstance}},{key:"getWindow",value:function(){return this._popoutWindow}},{key:"close",value:function(){if(this.getGlInstance())this.getGlInstance()._$closeWindow();else try{this.getWindow().close()}catch(e){}}},{key:"popIn",value:function(){var e,t;this._indexInParent;this._parentId&&(e=$.extend(!0,{},this.getGlInstance().toConfig()).content[0],!(t=this._layoutManager.root.getItemsById(this._parentId)[0])&&(t=0<this._layoutManager.root.contentItems.length?this._layoutManager.root.contentItems[0]:this._layoutManager.root)),t.addChild(e,this._indexInParent),this.close()}},{key:"_createWindow",value:function(){var e,n=this._createUrl(),i=t(1e6*Math.random()).toString(36),o=this._serializeWindowOptions({width:this._dimensions.width,height:this._dimensions.height,innerWidth:this._dimensions.width,innerHeight:this._dimensions.height,menubar:"no",toolbar:"no",location:"no",personalbar:"no",resizable:"yes",scrollbars:"no",status:"no"});if(this._popoutWindow=window.open(n,i,o),this._popoutWindow)$(this._popoutWindow).on("load",Object(d.c)(this._positionWindow,this)).on("unload beforeunload",Object(d.c)(this._onClose,this)),e=setInterval(Object(d.c)(function(){this._popoutWindow.__glInstance&&this._popoutWindow.__glInstance.isInitialised&&(this._onInitialised(),clearInterval(e))},this),10);else if(!0===this._layoutManager.config.settings.blockedPopoutsThrowError){var s=new Error("Popout blocked");throw s.type="popoutBlocked",s}}},{key:"_serializeWindowOptions",value:function(e){var t,n=[];for(t in e)n.push(t+"="+e[t]);return n.join(",")}},{key:"_createUrl",value:function(){var e,t={content:this._config},n="gl-window-config-"+Object(d.f)();t=(new u.a).minifyConfig(t);try{localStorage.setItem(n,s()(t))}catch(t){throw new Error("Error while writing to localStorage "+t.toString())}return 1===(e=document.location.href.split("?")).length?e[0]+"?gl-window="+n:document.location.href+"&gl-window="+n}},{key:"_positionWindow",value:function(){this._popoutWindow.moveTo(this._dimensions.left,this._dimensions.top),this._popoutWindow.focus()}},{key:"_onInitialised",value:function(){this.isInitialised=!0,this.getGlInstance().on("popIn",this.popIn,this),this.emit("initialised")}},{key:"_onClose",value:function(){setTimeout(Object(d.c)(this.emit,this,["closed"]),50)}}]),n}();n.a=f},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var i=n(36),o=(n.n(i),n(37)),s=(n.n(o),n(38)),r=(n.n(s),n(39));n.d(t,"default",function(){return r.a});var a=n(33);n.d(t,"ItemContainer",function(){return a.a});var l=n(34);n.d(t,"BrowserPopout",function(){return l.a});var c=n(28);n.d(t,"Header",function(){return c.a});var h=n(31);n.d(t,"HeaderButton",function(){return h.a});var u=n(29);n.d(t,"Tab",function(){return u.a});var d=n(32);n.d(t,"Component",function(){return d.a});var f=n(12);n.d(t,"Root",function(){return f.a});var m=n(6);n.d(t,"RowOrColumn",function(){return m.a});var p=n(13);n.d(t,"Stack",function(){return p.a});var g=n(26);n.d(t,"BubblingEvent",function(){return g.a});var y=n(11);n.d(t,"ConfigMinifier",function(){return y.a});var v=n(7);n.d(t,"DragListener",function(){return v.a});var _=n(1);n.d(t,"EventEmitter",function(){return _.b});var b=n(25);n.d(t,"EventHub",function(){return b.a});var w=n(24);n.d(t,"ReactComponentHandler",function(){return w.a}),{}.ES6&&(n(74),n(77))},function(){},function(){},function(){},function(e,i,o){var s=o(1),u=o(24),d=o(11),f=o(25),m=o(12),p=o(6),g=o(13),y=o(32),v=o(3),_=o(34),b=o(70),w=o(71),x=o(72),k=o(27),I=o(73),C=o(0),S=function(e){function i(e,t){var n;if(h(this,i),!$){throw'Please either expose $ on GoldenLayout\'s scope (e.g. window) or add "jquery" to ',"your paths when using RequireJS/AMD",new Error('jQuery is missing as dependency for GoldenLayout. Please either expose $ on GoldenLayout\'s scope (e.g. window) or add "jquery" to your paths when using RequireJS/AMD')}return(n=l(this,(i.__proto__||Object.getPrototypeOf(i)).call(this))).isInitialised=!1,n._isFullPage=!1,n._resizeTimeoutId=null,n._components={"lm-react-component":u.a},n._itemAreas=[],n._resizeFunction=Object(C.c)(n._onResize,n),n._unloadFunction=Object(C.c)(n._onUnload,n),n._maximisedItem=null,n._maximisePlaceholder=$('<div class="lm_maximise_place"></div>'),n._creationTimeoutPassed=!1,n._subWindowsCreated=!1,n._dragSources=[],n._updatingColumnsResponsive=!1,n._firstLoad=!0,n.width=null,n.height=null,n.root=null,n.openPopouts=[],n.selectedItem=null,n.isSubWindow=!1,n.eventHub=new f.a(n),n.config=n._createConfig(e),n.container=t,n.dropTargetIndicator=null,n.transitionIndicator=null,n.tabDropPlaceholder=$('<div class="lm_drop_tab_placeholder"></div>'),!0===n.isSubWindow&&$("body").css("visibility","hidden"),n._typeToItem={column:Object(C.c)(p.a,n,[!0]),row:Object(C.c)(p.a,n,[!1]),stack:g.a,component:y.a},n}return c(i,s.b),r(i,[{key:"minifyConfig",value:function(e){return(new d.a).minifyConfig(e)}},{key:"unminifyConfig",value:function(e){return(new d.a).unminifyConfig(e)}},{key:"registerComponent",value:function(e,t){if("function"!=typeof t)throw new Error("Please register a constructor function");if(void 0!==this._components[e])throw new Error("Component "+e+" is already registered");this._components[e]=t}},{key:"toConfig",value:function(e){var t,n,i;if(!1===this.isInitialised)throw new Error("Can't create config, layout not yet initialised");if(e&&!(e instanceof v.a))throw new Error("Root must be a ContentItem");for((t={settings:Object(C.b)({},this.config.settings),dimensions:Object(C.b)({},this.config.dimensions),labels:Object(C.b)({},this.config.labels)}).content=[],(n=function(e,t){var i,o;for(i in t.config)"content"!==i&&(e[i]=t.config[i]);if(t.contentItems.length)for(e.content=[],o=0;o<t.contentItems.length;o++)e.content[o]={},n(e.content[o],t.contentItems[o])})(t,e?{contentItems:[e]}:this.root),this._$reconcilePopoutWindows(),t.openPopouts=[],i=0;i<this.openPopouts.length;i++)t.openPopouts.push(this.openPopouts[i].toConfig());return t.maximisedItemId=this._maximisedItem?"__glMaximised":null,t}},{key:"getComponent",value:function(e){if(void 0===this._components[e])throw new k.a('Unknown component "'+e+'"');return this._components[e]}},{key:"init",value:function(){return!1===this._subWindowsCreated&&(this._createSubWindows(),this._subWindowsCreated=!0),"loading"===document.readyState||null===document.body?void $(document).ready(Object(C.c)(this.init,this)):!0===this.isSubWindow&&!1===this._creationTimeoutPassed?(setTimeout(Object(C.c)(this.init,this),7),void(this._creationTimeoutPassed=!0)):(!0===this.isSubWindow&&this._adjustToWindowMode(),this._setContainer(),this.dropTargetIndicator=new w.a(this.container),this.transitionIndicator=new x.a,this.updateSize(),this._create(this.config),this._bindEvents(),this.isInitialised=!0,this._adjustColumnsResponsive(),void this.emit("initialised"))}},{key:"updateSize",value:function(e,t){2===arguments.length?(this.width=e,this.height=t):(this.width=this.container.width(),this.height=this.container.height()),!0===this.isInitialised&&(this.root.callDownwards("setSize",[this.width,this.height]),this._maximisedItem&&(this._maximisedItem.element.width(this.container.width()),this._maximisedItem.element.height(this.container.height()),this._maximisedItem.callDownwards("setSize")),this._adjustColumnsResponsive())}},{key:"destroy",value:function(){!1===this.isInitialised||(this._onUnload(),$(window).off("resize",this._resizeFunction),$(window).off("unload beforeunload",this._unloadFunction),this.root.callDownwards("_$destroy",[],!0),this.root.contentItems=[],this.tabDropPlaceholder.remove(),this.dropTargetIndicator.destroy(),this.transitionIndicator.destroy(),this.eventHub.destroy(),this._dragSources.forEach(function(e){e._dragListener.destroy(),e._element=null,e._itemConfig=null,e._dragListener=null}),this._dragSources=[])}},{key:"createContentItem",value:function(e,t){var n;if("string"!=typeof e.type)throw new k.a("Missing parameter 'type'",e);if("react-component"===e.type&&(e.type="component",e.componentName="lm-react-component"),!this._typeToItem[e.type])throw n="Unknown type '"+e.type+"'. Valid types are "+Object(C.j)(this._typeToItem).join(","),new k.a(n);return"component"!==e.type||t instanceof g.a||!t||!0===this.isSubWindow&&t instanceof m.a||(e={type:"stack",width:e.width,height:e.height,content:[e]}),new this._typeToItem[e.type](this,e,t)}},{key:"createPopout",value:function(e,t,n,i){var o,s,r,a,l,c,h=e,u=e instanceof v.a,d=this;if(n=n||null,u){for(h=this.toConfig(e).content,n=Object(C.f)(),a=e.parent,l=e;1===a.contentItems.length&&!a.isRoot;)a=a.parent,l=l.parent;a.addId(n),isNaN(i)&&(i=Object(C.g)(l,a.contentItems))}else h instanceof Array||(h=[h]);return!t&&u&&(o=window.screenX||window.screenLeft,s=window.screenY||window.screenTop,t={left:o+(r=e.element.offset()).left,top:s+r.top,width:e.element.width(),height:e.element.height()}),t||u||(t={left:window.screenX||window.screenLeft+20,top:window.screenY||window.screenTop+20,width:500,height:309}),u&&e.remove(),(c=new _.a(h,t,n,i,this)).on("initialised",function(){d.emit("windowOpened",c)}),c.on("closed",function(){d._$reconcilePopoutWindows()}),this.openPopouts.push(c),c}},{key:"createDragSource",value:function(e,t){this.config.settings.constrainDragToContainer=!1;var n=new b.a($(e),t,this);return this._dragSources.push(n),n}},{key:"selectItem",value:function(e,t){if(!0!==this.config.settings.selectionEnabled)throw new Error("Please set selectionEnabled to true to use this feature");e===this.selectedItem||(null!==this.selectedItem&&this.selectedItem.deselect(),e&&!0!==t&&e.select(),this.selectedItem=e,this.emit("selectionChanged",e))}},{key:"_$maximiseItem",value:function(e){null!==this._maximisedItem&&this._$minimiseItem(this._maximisedItem),this._maximisedItem=e,this._maximisedItem.addId("__glMaximised"),e.element.addClass("lm_maximised"),e.element.after(this._maximisePlaceholder),this.root.element.prepend(e.element),e.element.width(this.container.width()),e.element.height(this.container.height()),e.callDownwards("setSize"),this._maximisedItem.emit("maximised"),this.emit("stateChanged")}},{key:"_$minimiseItem",value:function(e){e.element.removeClass("lm_maximised"),e.removeId("__glMaximised"),this._maximisePlaceholder.after(e.element),this._maximisePlaceholder.remove(),e.parent.callDownwards("setSize"),this._maximisedItem=null,e.emit("minimised"),this.emit("stateChanged")}},{key:"_$closeWindow",value:function(){window.setTimeout(function(){window.close()},1)}},{key:"_$getArea",value:function(e,t){var n,i,o=1/0,s=null;for(n=0;n<this._itemAreas.length;n++)e>(i=this._itemAreas[n]).x1&&e<i.x2&&t>i.y1&&t<i.y2&&o>i.surface&&(o=i.surface,s=i);return s}},{key:"_$createRootItemAreas",value:function(){var e={y2:0,x2:0,y1:"y2",x1:"x2"};for(var t in e){var n=this.root._$getArea();n.side=t,n[t]=e[t]?n[e[t]]-50:50,n.surface=(n.x2-n.x1)*(n.y2-n.y1),this._itemAreas.push(n)}}},{key:"_$calculateItemAreas",value:function(){var e,t,n=this._getAllContentItems();if(this._itemAreas=[],1!==n.length){for(this._$createRootItemAreas(),e=0;e<n.length;e++)if(n[e].isStack){if(null===(t=n[e]._$getArea()))continue;if(t instanceof Array)this._itemAreas=this._itemAreas.concat(t);else{this._itemAreas.push(t);var i={};Object(C.b)(i,t),Object(C.b)(i,t.contentItem._contentAreaDimensions.header.highlightArea),i.surface=(i.x2-i.x1)*(i.y2-i.y1),this._itemAreas.push(i)}}}else this._itemAreas.push(this.root._$getArea())}},{key:"_$normalizeContentItem",value:function(e,t){if(!e)throw new Error("No content item defined");if(Object(C.h)(e)&&(e=e()),e instanceof v.a)return e;if($.isPlainObject(e)&&e.type){var n=this.createContentItem(e,t);return n.callDownwards("_$init"),n}throw new Error("Invalid contentItem")}},{key:"_$reconcilePopoutWindows",value:function(){var e,t=[];for(e=0;e<this.openPopouts.length;e++)!1===this.openPopouts[e].getWindow().closed?t.push(this.openPopouts[e]):this.emit("windowClosed",this.openPopouts[e]);this.openPopouts.length!==t.length&&(this.emit("stateChanged"),this.openPopouts=t)}},{key:"_getAllContentItems",value:function(){var e=[];return function t(n){if(e.push(n),n.contentItems instanceof Array)for(var i=0;i<n.contentItems.length;i++)t(n.contentItems[i])}(this.root),e}},{key:"_bindEvents",value:function(){this._isFullPage&&$(window).resize(this._resizeFunction),$(window).on("unload beforeunload",this._unloadFunction)}},{key:"_onResize",value:function(){clearTimeout(this._resizeTimeoutId),this._resizeTimeoutId=setTimeout(Object(C.c)(this.updateSize,this),100)}},{key:"_createConfig",value:function(e){var t=Object(C.d)("gl-window");t&&(this.isSubWindow=!0,e=localStorage.getItem(t),e=JSON.parse(e),e=(new d.a).unminifyConfig(e),localStorage.removeItem(t));return function e(t){for(var n in t)"props"!=n&&"object"==a(t[n])?e(t[n]):"type"==n&&"react-component"===t[n]&&(t.type="component",t.componentName="lm-react-component")}(e=$.extend(!0,{},I.a,e)),!1===e.settings.hasHeaders&&(e.dimensions.headerHeight=0),e}},{key:"_adjustToWindowMode",value:function(){var e=$('<div class="lm_popin" title="'+this.config.labels.popin+'"><div class="lm_icon"></div><div class="lm_bg"></div></div>');e.click(Object(C.c)(function(){this.emit("popIn")},this)),document.title=Object(C.k)(this.config.content[0].title),$("head").append($("body link, body style, template, .gl_keep")),this.container=$("body").html("").css("visibility","visible").append(e),document.body.offsetHeight,window.__glInstance=this}},{key:"_createSubWindows",value:function(){var e,t;for(e=0;e<this.config.openPopouts.length;e++)t=this.config.openPopouts[e],this.createPopout(t.content,t.dimensions,t.parentId,t.indexInParent)}},{key:"_setContainer",value:function(){var e=$(this.container||"body");if(0===e.length)throw new Error("GoldenLayout container not found");if(1<e.length)throw new Error("GoldenLayout more than one container element specified");e[0]===document.body&&(this._isFullPage=!0,$("html, body").css({height:"100%",margin:0,padding:0,overflow:"hidden"})),this.container=e}},{key:"_create",value:function(e){var t;if(!(e.content instanceof Array))throw t=void 0===e.content?"Missing setting 'content' on top level of configuration":"Configuration parameter 'content' must be an array",new k.a(t,e);if(1<e.content.length)throw t="Top level content can't contain more then one element.",new k.a(t,e);this.root=new m.a(this,{content:e.content},this.container),this.root.callDownwards("_$init"),"__glMaximised"===e.maximisedItemId&&this.root.getItemsById(e.maximisedItemId)[0].toggleMaximise()}},{key:"_onUnload",value:function(){if(!0===this.config.settings.closePopoutsOnUnload)for(var e=0;e<this.openPopouts.length;e++)this.openPopouts[e].close()}},{key:"_adjustColumnsResponsive",value:function(){if(this._useResponsiveLayout()&&!this._updatingColumnsResponsive&&this.config.dimensions&&this.config.dimensions.minItemWidth&&0!==this.root.contentItems.length&&this.root.contentItems[0].isRow){this._firstLoad=!1;var e=this.root.contentItems[0].contentItems.length;if(!(1>=e)){var i=this.config.dimensions.minItemWidth;if(!(e*i<=this.width)){this._updatingColumnsResponsive=!0;for(var o,s=n(t(this.width/i),1),r=this.root.contentItems[0],a=this._findAllStackContainers()[0],l=0;l<e-s;l++)o=r.contentItems[r.contentItems.length-1],this._addChildContentItemsToContainer(a,o);this._updatingColumnsResponsive=!1}}}else this._firstLoad=!1}},{key:"_useResponsiveLayout",value:function(){return this.config.settings&&("always"==this.config.settings.responsiveMode||"onload"==this.config.settings.responsiveMode&&this._firstLoad)}},{key:"_addChildContentItemsToContainer",value:function(e,t){"stack"===t.type?t.contentItems.forEach(function(n){e.addChild(n),t.removeChild(n,!0)}):t.contentItems.forEach(Object(C.c)(function(t){this._addChildContentItemsToContainer(e,t)},this))}},{key:"_findAllStackContainers",value:function(){var e=[];return this._findAllStackContainersRecursive(e,this.root),e}},{key:"_findAllStackContainersRecursive",value:function(e,t){t.contentItems.forEach(Object(C.c)(function(t){"stack"==t.type?e.push(t):!t.isComponent&&this._findAllStackContainersRecursive(e,t)},this))}}]),i}();i.a=S},function(e,t,n){e.exports={default:n(41),__esModule:!0}},function(e,t,n){n(42),e.exports=n(2).Object.keys},function(e,t,n){var i=n(43),o=n(15);n(53)("keys",function(){return function(e){return o(i(e))}})},function(e,t,n){var i=n(14);e.exports=function(e){return Object(i(e))}},function(e,t,n){var i=n(16),o=n(17),s=n(47)(!1),r=n(19)("IE_PROTO");e.exports=function(e,t){var n,a=o(e),l=0,c=[];for(n in a)n!=r&&i(a,n)&&c.push(n);for(;t.length>l;)i(a,n=t[l++])&&(~s(c,n)||c.push(n));return c}},function(e,t,n){var i=n(46);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==i(e)?e.split(""):Object(e)}},function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},function(e,t,n){var i=n(17),o=n(48),s=n(49);e.exports=function(e){return function(t,n,r){var a,l=i(t),c=o(l.length),h=s(r,c);if(e&&n!=n){for(;c>h;)if((a=l[h++])!=a)return!0}else for(;c>h;h++)if((e||h in l)&&l[h]===n)return e||h||0;return!e&&-1}}},function(t,n,i){var o=i(18);t.exports=function(t){return 0<t?e(o(t),9007199254740991):0}},function(t,i,o){var s=o(18);t.exports=function(t,i){return 0>(t=s(t))?n(t+i,0):e(t,i)}},function(e,t,n){var i=n(2),o=n(4),s="__core-js_shared__",r=o[s]||(o[s]={});(e.exports=function(e,t){return r[e]||(r[e]=void 0===t?{}:t)})("versions",[]).push({version:i.version,mode:n(51)?"pure":"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})},function(e){e.exports=!0},function(e){var t=0,n=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+n).toString(36))}},function(e,t,n){var i=n(21),o=n(2),s=n(10);e.exports=function(e,t){var n=(o.Object||{})[e]||Object[e],r={};r[e]=t(n),i(i.S+i.F*s(function(){n(1)}),"Object",r)}},function(e,t,n){var i=n(55);e.exports=function(e,t,n){return i(e),void 0===t?e:1===n?function(n){return e.call(t,n)}:2===n?function(n,i){return e.call(t,n,i)}:3===n?function(n,i,o){return e.call(t,n,i,o)}:function(){return e.apply(t,arguments)}}},function(e){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){var i=n(22),o=n(59);e.exports=n(5)?function(e,t,n){return i.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){e.exports=!n(5)&&!n(10)(function(){return 7!=Object.defineProperty(n(23)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){var i=n(9);e.exports=function(e,t){if(!i(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!i(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!i(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!i(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){e.exports={default:n(61),__esModule:!0}},function(e,t,n){n(62);var i=n(2).Object;e.exports=function(e,t){return i.create(e,t)}},function(e,t,n){var i=n(21);i(i.S,"Object",{create:n(63)})},function(e,t,n){var i=n(8),o=n(64),s=n(20),r=n(19)("IE_PROTO"),a=function(){},l="prototype",c=function(){var e,t=n(23)("iframe"),i=s.length;for(t.style.display="none",n(65).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),c=e.F;i--;)delete c[l][s[i]];return c()};e.exports=Object.create||function(e,t){var n;return null===e?n=c():(a[l]=i(e),n=new a,a[l]=null,n[r]=e),void 0===t?n:o(n,t)}},function(e,t,n){var i=n(22),o=n(8),s=n(15);e.exports=n(5)?Object.defineProperties:function(e,t){o(e);for(var n,r=s(t),a=r.length,l=0;a>l;)i.f(e,n=r[l++],t[n]);return e}},function(e,t,n){var i=n(4).document;e.exports=i&&i.documentElement},function(e,t){t.a={isClosable:!0,reorderEnabled:!0,title:""}},function(e,t,n){var i=n(7);t.a=function(){function e(t,n,o){h(this,e),this._isVertical=t,this._size=n,this._grabSize=o<n?n:o,this.element=this._createElement(),this._dragListener=new i.a(this.element)}return r(e,[{key:"on",value:function(e,t,n){this._dragListener.on(e,t,n)}},{key:"_$destroy",value:function(){this.element.remove()}},{key:"_createElement",value:function(){var e=$('<div class="lm_drag_handle"></div>'),t=$('<div class="lm_splitter"></div>');t.append(e);var n=this._grabSize-this._size,i=n/2;return this._isVertical?(e.css("top",-i),e.css("height",this._size+n),t.addClass("lm_vertical"),t.height(this._size)):(e.css("left",-i),e.css("width",this._size+n),t.addClass("lm_horizontal"),t.width(this._size)),t}}]),e}()},function(e,t,n){e.exports={default:n(69),__esModule:!0}},function(e,t,n){var i=n(2),o=i.JSON||(i.JSON={stringify:JSON.stringify});e.exports=function(){return o.stringify.apply(o,arguments)}},function(e,t,n){var i=n(7),o=n(30),s=n(0);t.a=function(){function e(t,n,i){h(this,e),this._element=t,this._itemConfig=n,this._layoutManager=i,this._dragListener=null,this._createDragListener()}return r(e,[{key:"_createDragListener",value:function(){null!==this._dragListener&&this._dragListener.destroy(),this._dragListener=new i.a(this._element),this._dragListener.on("dragStart",this._onDragStart,this),this._dragListener.on("dragStop",this._createDragListener,this)}},{key:"_onDragStart",value:function(e,t){var n=this._itemConfig;Object(s.h)(n)&&(n=n());var i=this._layoutManager._$normalizeContentItem($.extend(!0,{},n)),r=new o.a(e,t,this._dragListener,this._layoutManager,i,null);this._layoutManager.transitionIndicator.transitionElements(this._element,r.element)}}]),e}()},function(e,t){t.a=function(){function e(){h(this,e),this.element=$('<div class="lm_dropTargetIndicator"><div class="lm_inner"></div></div>'),$(document.body).append(this.element)}return r(e,[{key:"destroy",value:function(){this.element.remove()}},{key:"highlight",value:function(e,t,n,i){this.highlightArea({x1:e,y1:t,x2:n,y2:i})}},{key:"highlightArea",value:function(e){this.element.css({left:e.x1,top:e.y1,width:e.x2-e.x1,height:e.y2-e.y1}).show()}},{key:"hide",value:function(){this.element.hide()}}]),e}()},function(e,t,n){var i=n(0);t.a=function(){function e(){h(this,e),this._element=$('<div class="lm_transition_indicator"></div>'),$(document.body).append(this._element),this._toElement=null,this._fromDimensions=null,this._totalAnimationDuration=200,this._animationStartTime=null}return r(e,[{key:"destroy",value:function(){this._element.remove()}},{key:"transitionElements",value:function(){}},{key:"_nextAnimationFrame",value:function(){var e,t=this._measure(this._toElement),n=(Object(i.i)()-this._animationStartTime)/this._totalAnimationDuration,o={};if(1<=n)this._element.hide();else{for(e in t.opacity=0,this._fromDimensions)o[e]=this._fromDimensions[e]+(t[e]-this._fromDimensions[e])*n;this._element.css(o),Object(i.a)(Object(i.c)(this._nextAnimationFrame,this))}}},{key:"_measure",value:function(e){var t=e.offset();return{left:t.left,top:t.top,width:e.outerWidth(),height:e.outerHeight()}}}]),e}()},function(e,t){t.a={openPopouts:[],settings:{hasHeaders:!0,constrainDragToContainer:!0,reorderEnabled:!0,selectionEnabled:!1,popoutWholeStack:!1,blockedPopoutsThrowError:!0,closePopoutsOnUnload:!0,showPopoutIcon:!0,showMaximiseIcon:!0,showCloseIcon:!0,responsiveMode:"onload",tabOverlapAllowance:0,reorderOnTabMenuClick:!0,tabControlOffset:10},dimensions:{borderWidth:5,borderGrabWidth:15,minItemHeight:10,minItemWidth:10,headerHeight:20,dragProxyWidth:300,dragProxyHeight:200},labels:{close:"close",maximise:"maximise",minimise:"minimise",popout:"open in new window",popin:"pop in",tabDropdown:"additional tabs"}}},function(e,t,n){n(75)(n(76))},function(e){e.exports=function(e){function t(e){"undefined"!=typeof console&&(console.error||console.log)("[Script Loader]",e)}try{"undefined"!=typeof execScript&&"undefined"!=typeof attachEvent&&"undefined"==typeof addEventListener?execScript(e):"undefined"==typeof eval?t("EvalError: No eval function available"):eval.call(null,e)}catch(e){t(e)}}},function(e){e.exports="/* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */\n(function(global, factory) {\n if (typeof define === 'function' && define.amd)\n define(function() { return factory(global) })\n else\n factory(global)\n}(this, function(window) {\n var Zepto = (function() {\n var undefined, key, $, classList, emptyArray = [], concat = emptyArray.concat, filter = emptyArray.filter, slice = emptyArray.slice,\n document = window.document,\n elementDisplay = {}, classCache = {},\n cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 },\n fragmentRE = /^\\s*<(\\w+|!)[^>]*>/,\n singleTagRE = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,\n rootNodeRE = /^(?:body|html)$/i,\n capitalRE = /([A-Z])/g,\n\n // special attributes that should be get/set via method calls\n methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],\n\n adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ],\n table = document.createElement('table'),\n tableRow = document.createElement('tr'),\n containers = {\n 'tr': document.createElement('tbody'),\n 'tbody': table, 'thead': table, 'tfoot': table,\n 'td': tableRow, 'th': tableRow,\n '*': document.createElement('div')\n },\n readyRE = /complete|loaded|interactive/,\n simpleSelectorRE = /^[\\w-]*$/,\n class2type = {},\n toString = class2type.toString,\n zepto = {},\n camelize, uniq,\n tempParent = document.createElement('div'),\n propMap = {\n 'tabindex': 'tabIndex',\n 'readonly': 'readOnly',\n 'for': 'htmlFor',\n 'class': 'className',\n 'maxlength': 'maxLength',\n 'cellspacing': 'cellSpacing',\n 'cellpadding': 'cellPadding',\n 'rowspan': 'rowSpan',\n 'colspan': 'colSpan',\n 'usemap': 'useMap',\n 'frameborder': 'frameBorder',\n 'contenteditable': 'contentEditable'\n },\n isArray = Array.isArray ||\n function(object){ return object instanceof Array }\n\n zepto.matches = function(element, selector) {\n if (!selector || !element || element.nodeType !== 1) return false\n var matchesSelector = element.matches || element.webkitMatchesSelector ||\n element.mozMatchesSelector || element.oMatchesSelector ||\n element.matchesSelector\n if (matchesSelector) return matchesSelector.call(element, selector)\n // fall back to performing a selector:\n var match, parent = element.parentNode, temp = !parent\n if (temp) (parent = tempParent).appendChild(element)\n match = ~zepto.qsa(parent, selector).indexOf(element)\n temp && tempParent.removeChild(element)\n return match\n }\n\n function type(obj) {\n return obj == null ? String(obj) :\n class2type[toString.call(obj)] || \"object\"\n }\n\n function isFunction(value) { return type(value) == \"function\" }\n function isWindow(obj) { return obj != null && obj == obj.window }\n function isDocument(obj) { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }\n function isObject(obj) { return type(obj) == \"object\" }\n function isPlainObject(obj) {\n return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype\n }\n\n function likeArray(obj) {\n var length = !!obj && 'length' in obj && obj.length,\n type = $.type(obj)\n\n return 'function' != type && !isWindow(obj) && (\n 'array' == type || length === 0 ||\n (typeof length == 'number' && length > 0 && (length - 1) in obj)\n )\n }\n\n function compact(array) { return filter.call(array, function(item){ return item != null }) }\n function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }\n camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) }\n function dasherize(str) {\n return str.replace(/::/g, '/')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n .replace(/([a-z\\d])([A-Z])/g, '$1_$2')\n .replace(/_/g, '-')\n .toLowerCase()\n }\n uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }\n\n function classRE(name) {\n return name in classCache ?\n classCache[name] : (classCache[name] = new RegExp('(^|\\\\s)' + name + '(\\\\s|$)'))\n }\n\n function maybeAddPx(name, value) {\n return (typeof value == \"number\" && !cssNumber[dasherize(name)]) ? value + \"px\" : value\n }\n\n function defaultDisplay(nodeName) {\n var element, display\n if (!elementDisplay[nodeName]) {\n element = document.createElement(nodeName)\n document.body.appendChild(element)\n display = getComputedStyle(element, '').getPropertyValue(\"display\")\n element.parentNode.removeChild(element)\n display == \"none\" && (display = \"block\")\n elementDisplay[nodeName] = display\n }\n return elementDisplay[nodeName]\n }\n\n function children(element) {\n return 'children' in element ?\n slice.call(element.children) :\n $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })\n }\n\n function Z(dom, selector) {\n var i, len = dom ? dom.length : 0\n for (i = 0; i < len; i++) this[i] = dom[i]\n this.length = len\n this.selector = selector || ''\n }\n\n // `$.zepto.fragment` takes a html string and an optional tag name\n // to generate DOM nodes from the given html string.\n // The generated DOM nodes are returned as an array.\n // This function can be overridden in plugins for example to make\n // it compatible with browsers that don't support the DOM fully.\n zepto.fragment = function(html, name, properties) {\n var dom, nodes, container\n\n // A special case optimization for a single tag\n if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1))\n\n if (!dom) {\n if (html.replace) html = html.replace(tagExpanderRE, \"<$1></$2>\")\n if (name === undefined) name = fragmentRE.test(html) && RegExp.$1\n if (!(name in containers)) name = '*'\n\n container = containers[name]\n container.innerHTML = '' + html\n dom = $.each(slice.call(container.childNodes), function(){\n container.removeChild(this)\n })\n }\n\n if (isPlainObject(properties)) {\n nodes = $(dom)\n $.each(properties, function(key, value) {\n if (methodAttributes.indexOf(key) > -1) nodes[key](value)\n else nodes.attr(key, value)\n })\n }\n\n return dom\n }\n\n // `$.zepto.Z` swaps out the prototype of the given `dom` array\n // of nodes with `$.fn` and thus supplying all the Zepto functions\n // to the array. This method can be overridden in plugins.\n zepto.Z = function(dom, selector) {\n return new Z(dom, selector)\n }\n\n // `$.zepto.isZ` should return `true` if the given object is a Zepto\n // collection. This method can be overridden in plugins.\n zepto.isZ = function(object) {\n return object instanceof zepto.Z\n }\n\n // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and\n // takes a CSS selector and an optional context (and handles various\n // special cases).\n // This method can be overridden in plugins.\n zepto.init = function(selector, context) {\n var dom\n // If nothing given, return an empty Zepto collection\n if (!selector) return zepto.Z()\n // Optimize for string selectors\n else if (typeof selector == 'string') {\n selector = selector.trim()\n // If it's a html fragment, create nodes from it\n // Note: In both Chrome 21 and Firefox 15, DOM error 12\n // is thrown if the fragment doesn't begin with <\n if (selector[0] == '<' && fragmentRE.test(selector))\n dom = zepto.fragment(selector, RegExp.$1, context), selector = null\n // If there's a context, create a collection on that context first, and select\n // nodes from there\n else if (context !== undefined) return $(context).find(selector)\n // If it's a CSS selector, use it to select nodes.\n else dom = zepto.qsa(document, selector)\n }\n // If a function is given, call it when the DOM is ready\n else if (isFunction(selector)) return $(document).ready(selector)\n // If a Zepto collection is given, just return it\n else if (zepto.isZ(selector)) return selector\n else {\n // normalize array if an array of nodes is given\n if (isArray(selector)) dom = compact(selector)\n // Wrap DOM nodes.\n else if (isObject(selector))\n dom = [selector], selector = null\n // If it's a html fragment, create nodes from it\n else if (fragmentRE.test(selector))\n dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null\n // If there's a context, create a collection on that context first, and select\n // nodes from there\n else if (context !== undefined) return $(context).find(selector)\n // And last but no least, if it's a CSS selector, use it to select nodes.\n else dom = zepto.qsa(document, selector)\n }\n // create a new Zepto collection from the nodes found\n return zepto.Z(dom, selector)\n }\n\n // `$` will be the base `Zepto` object. When calling this\n // function just call `$.zepto.init, which makes the implementation\n // details of selecting nodes and creating Zepto collections\n // patchable in plugins.\n $ = function(selector, context){\n return zepto.init(selector, context)\n }\n\n function extend(target, source, deep) {\n for (key in source)\n if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\n if (isPlainObject(source[key]) && !isPlainObject(target[key]))\n target[key] = {}\n if (isArray(source[key]) && !isArray(target[key]))\n target[key] = []\n extend(target[key], source[key], deep)\n }\n else if (source[key] !== undefined) target[key] = source[key]\n }\n\n // Copy all but undefined properties from one or more\n // objects to the `target` object.\n $.extend = function(target){\n var deep, args = slice.call(arguments, 1)\n if (typeof target == 'boolean') {\n deep = target\n target = args.shift()\n }\n args.forEach(function(arg){ extend(target, arg, deep) })\n return target\n }\n\n // `$.zepto.qsa` is Zepto's CSS selector implementation which\n // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.\n // This method can be overridden in plugins.\n zepto.qsa = function(element, selector){\n var found,\n maybeID = selector[0] == '#',\n maybeClass = !maybeID && selector[0] == '.',\n nameOnly = maybeID || maybeClass ? selector.slice(1) : selector, // Ensure that a 1 char tag name still gets checked\n isSimple = simpleSelectorRE.test(nameOnly)\n return (element.getElementById && isSimple && maybeID) ? // Safari DocumentFragment doesn't have getElementById\n ( (found = element.getElementById(nameOnly)) ? [found] : [] ) :\n (element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11) ? [] :\n slice.call(\n isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn't have getElementsByClassName/TagName\n maybeClass ? element.getElementsByClassName(nameOnly) : // If it's simple, it could be a class\n element.getElementsByTagName(selector) : // Or a tag\n element.querySelectorAll(selector) // Or it's not simple, and we need to query all\n )\n }\n\n function filtered(nodes, selector) {\n return selector == null ? $(nodes) : $(nodes).filter(selector)\n }\n\n $.contains = document.documentElement.contains ?\n function(parent, node) {\n return parent !== node && parent.contains(node)\n } :\n function(parent, node) {\n while (node && (node = node.parentNode))\n if (node === parent) return true\n return false\n }\n\n function funcArg(context, arg, idx, payload) {\n return isFunction(arg) ? arg.call(context, idx, payload) : arg\n }\n\n function setAttribute(node, name, value) {\n value == null ? node.removeAttribute(name) : node.setAttribute(name, value)\n }\n\n // access className property while respecting SVGAnimatedString\n function className(node, value){\n var klass = node.className || '',\n svg = klass && klass.baseVal !== undefined\n\n if (value === undefined) return svg ? klass.baseVal : klass\n svg ? (klass.baseVal = value) : (node.className = value)\n }\n\n // \"true\" => true\n // \"false\" => false\n // \"null\" => null\n // \"42\" => 42\n // \"42.5\" => 42.5\n // \"08\" => \"08\"\n // JSON => parse if valid\n // String => self\n function deserializeValue(value) {\n try {\n return value ?\n value == \"true\" ||\n ( value == \"false\" ? false :\n value == \"null\" ? null :\n +value + \"\" == value ? +value :\n /^[\\[\\{]/.test(value) ? $.parseJSON(value) :\n value )\n : value\n } catch(e) {\n return value\n }\n }\n\n $.type = type\n $.isFunction = isFunction\n $.isWindow = isWindow\n $.isArray = isArray\n $.isPlainObject = isPlainObject\n\n $.isEmptyObject = function(obj) {\n var name\n for (name in obj) return false\n return true\n }\n\n $.isNumeric = function(val) {\n var num = Number(val), type = typeof val\n return val != null && type != 'boolean' &&\n (type != 'string' || val.length) &&\n !isNaN(num) && isFinite(num) || false\n }\n\n $.inArray = function(elem, array, i){\n return emptyArray.indexOf.call(array, elem, i)\n }\n\n $.camelCase = camelize\n $.trim = function(str) {\n return str == null ? \"\" : String.prototype.trim.call(str)\n }\n\n // plugin compatibility\n $.uuid = 0\n $.support = { }\n $.expr = { }\n $.noop = function() {}\n\n $.map = function(elements, callback){\n var value, values = [], i, key\n if (likeArray(elements))\n for (i = 0; i < elements.length; i++) {\n value = callback(elements[i], i)\n if (value != null) values.push(value)\n }\n else\n for (key in elements) {\n value = callback(elements[key], key)\n if (value != null) values.push(value)\n }\n return flatten(values)\n }\n\n $.each = function(elements, callback){\n var i, key\n if (likeArray(elements)) {\n for (i = 0; i < elements.length; i++)\n if (callback.call(elements[i], i, elements[i]) === false) return elements\n } else {\n for (key in elements)\n if (callback.call(elements[key], key, elements[key]) === false) return elements\n }\n\n return elements\n }\n\n $.grep = function(elements, callback){\n return filter.call(elements, callback)\n }\n\n if (window.JSON) $.parseJSON = JSON.parse\n\n // Populate the class2type map\n $.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n class2type[ \"[object \" + name + \"]\" ] = name.toLowerCase()\n })\n\n // Define methods that will be available on all\n // Zepto collections\n $.fn = {\n constructor: zepto.Z,\n length: 0,\n\n // Because a collection acts like an array\n // copy over these useful array functions.\n forEach: emptyArray.forEach,\n reduce: emptyArray.reduce,\n push: emptyArray.push,\n sort: emptyArray.sort,\n splice: emptyArray.splice,\n indexOf: emptyArray.indexOf,\n concat: function(){\n var i, value, args = []\n for (i = 0; i < arguments.length; i++) {\n value = arguments[i]\n args[i] = zepto.isZ(value) ? value.toArray() : value\n }\n return concat.apply(zepto.isZ(this) ? this.toArray() : this, args)\n },\n\n // `map` and `slice` in the jQuery API work differently\n // from their array counterparts\n map: function(fn){\n return $($.map(this, function(el, i){ return fn.call(el, i, el) }))\n },\n slice: function(){\n return $(slice.apply(this, arguments))\n },\n\n ready: function(callback){\n // need to check if document.body exists for IE as that browser reports\n // document ready when it hasn't yet created the body element\n if (readyRE.test(document.readyState) && document.body) callback($)\n else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)\n return this\n },\n get: function(idx){\n return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]\n },\n toArray: function(){ return this.get() },\n size: function(){\n return this.length\n },\n remove: function(){\n return this.each(function(){\n if (this.parentNode != null)\n this.parentNode.removeChild(this)\n })\n },\n each: function(callback){\n emptyArray.every.call(this, function(el, idx){\n return callback.call(el, idx, el) !== false\n })\n return this\n },\n filter: function(selector){\n if (isFunction(selector)) return this.not(this.not(selector))\n return $(filter.call(this, function(element){\n return zepto.matches(element, selector)\n }))\n },\n add: function(selector,context){\n return $(uniq(this.concat($(selector,context))))\n },\n is: function(selector){\n return this.length > 0 && zepto.matches(this[0], selector)\n },\n not: function(selector){\n var nodes=[]\n if (isFunction(selector) && selector.call !== undefined)\n this.each(function(idx){\n if (!selector.call(this,idx)) nodes.push(this)\n })\n else {\n var excludes = typeof selector == 'string' ? this.filter(selector) :\n (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)\n this.forEach(function(el){\n if (excludes.indexOf(el) < 0) nodes.push(el)\n })\n }\n return $(nodes)\n },\n has: function(selector){\n return this.filter(function(){\n return isObject(selector) ?\n $.contains(this, selector) :\n $(this).find(selector).size()\n })\n },\n eq: function(idx){\n return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)\n },\n first: function(){\n var el = this[0]\n return el && !isObject(el) ? el : $(el)\n },\n last: function(){\n var el = this[this.length - 1]\n return el && !isObject(el) ? el : $(el)\n },\n find: function(selector){\n var result, $this = this\n if (!selector) result = $()\n else if (typeof selector == 'object')\n result = $(selector).filter(function(){\n var node = this\n return emptyArray.some.call($this, function(parent){\n return $.contains(parent, node)\n })\n })\n else if (this.length == 1) result = $(zepto.qsa(this[0], selector))\n else result = this.map(function(){ return zepto.qsa(this, selector) })\n return result\n },\n closest: function(selector, context){\n var nodes = [], collection = typeof selector == 'object' && $(selector)\n this.each(function(_, node){\n while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))\n node = node !== context && !isDocument(node) && node.parentNode\n if (node && nodes.indexOf(node) < 0) nodes.push(node)\n })\n return $(nodes)\n },\n parents: function(selector){\n var ancestors = [], nodes = this\n while (nodes.length > 0)\n nodes = $.map(nodes, function(node){\n if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {\n ancestors.push(node)\n return node\n }\n })\n return filtered(ancestors, selector)\n },\n parent: function(selector){\n return filtered(uniq(this.pluck('parentNode')), selector)\n },\n children: function(selector){\n return filtered(this.map(function(){ return children(this) }), selector)\n },\n contents: function() {\n return this.map(function() { return this.contentDocument || slice.call(this.childNodes) })\n },\n siblings: function(selector){\n return filtered(this.map(function(i, el){\n return filter.call(children(el.parentNode), function(child){ return child!==el })\n }), selector)\n },\n empty: function(){\n return this.each(function(){ this.innerHTML = '' })\n },\n // `pluck` is borrowed from Prototype.js\n pluck: function(property){\n return $.map(this, function(el){ return el[property] })\n },\n show: function(){\n return this.each(function(){\n this.style.display == \"none\" && (this.style.display = '')\n if (getComputedStyle(this, '').getPropertyValue(\"display\") == \"none\")\n this.style.display = defaultDisplay(this.nodeName)\n })\n },\n replaceWith: function(newContent){\n return this.before(newContent).remove()\n },\n wrap: function(structure){\n var func = isFunction(structure)\n if (this[0] && !func)\n var dom = $(structure).get(0),\n clone = dom.parentNode || this.length > 1\n\n return this.each(function(index){\n $(this).wrapAll(\n func ? structure.call(this, index) :\n clone ? dom.cloneNode(true) : dom\n )\n })\n },\n wrapAll: function(structure){\n if (this[0]) {\n $(this[0]).before(structure = $(structure))\n var children\n // drill down to the inmost element\n while ((children = structure.children()).length) structure = children.first()\n $(structure).append(this)\n }\n return this\n },\n wrapInner: function(structure){\n var func = isFunction(structure)\n return this.each(function(index){\n var self = $(this), contents = self.contents(),\n dom = func ? structure.call(this, index) : structure\n contents.length ? contents.wrapAll(dom) : self.append(dom)\n })\n },\n unwrap: function(){\n this.parent().each(function(){\n $(this).replaceWith($(this).children())\n })\n return this\n },\n clone: function(){\n return this.map(function(){ return this.cloneNode(true) })\n },\n hide: function(){\n return this.css(\"display\", \"none\")\n },\n toggle: function(setting){\n return this.each(function(){\n var el = $(this)\n ;(setting === undefined ? el.css(\"display\") == \"none\" : setting) ? el.show() : el.hide()\n })\n },\n prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') },\n next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') },\n html: function(html){\n return 0 in arguments ?\n this.each(function(idx){\n var originHtml = this.innerHTML\n $(this).empty().append( funcArg(this, html, idx, originHtml) )\n }) :\n (0 in this ? this[0].innerHTML : null)\n },\n text: function(text){\n return 0 in arguments ?\n this.each(function(idx){\n var newText = funcArg(this, text, idx, this.textContent)\n this.textContent = newText == null ? '' : ''+newText\n }) :\n (0 in this ? this.pluck('textContent').join(\"\") : null)\n },\n attr: function(name, value){\n var result\n return (typeof name == 'string' && !(1 in arguments)) ?\n (0 in this && this[0].nodeType == 1 && (result = this[0].getAttribute(name)) != null ? result : undefined) :\n this.each(function(idx){\n if (this.nodeType !== 1) return\n if (isObject(name)) for (key in name) setAttribute(this, key, name[key])\n else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))\n })\n },\n removeAttr: function(name){\n return this.each(function(){ this.nodeType === 1 && name.split(' ').forEach(function(attribute){\n setAttribute(this, attribute)\n }, this)})\n },\n prop: function(name, value){\n name = propMap[name] || name\n return (1 in arguments) ?\n this.each(function(idx){\n this[name] = funcArg(this, value, idx, this[name])\n }) :\n (this[0] && this[0][name])\n },\n removeProp: function(name){\n name = propMap[name] || name\n return this.each(function(){ delete this[name] })\n },\n data: function(name, value){\n var attrName = 'data-' + name.replace(capitalRE, '-$1').toLowerCase()\n\n var data = (1 in arguments) ?\n this.attr(attrName, value) :\n this.attr(attrName)\n\n return data !== null ? deserializeValue(data) : undefined\n },\n val: function(value){\n if (0 in arguments) {\n if (value == null) value = \"\"\n return this.each(function(idx){\n this.value = funcArg(this, value, idx, this.value)\n })\n } else {\n return this[0] && (this[0].multiple ?\n $(this[0]).find('option').filter(function(){ return this.selected }).pluck('value') :\n this[0].value)\n }\n },\n offset: function(coordinates){\n if (coordinates) return this.each(function(index){\n var $this = $(this),\n coords = funcArg(this, coordinates, index, $this.offset()),\n parentOffset = $this.offsetParent().offset(),\n props = {\n top: coords.top - parentOffset.top,\n left: coords.left - parentOffset.left\n }\n\n if ($this.css('position') == 'static') props['position'] = 'relative'\n $this.css(props)\n })\n if (!this.length) return null\n if (document.documentElement !== this[0] && !$.contains(document.documentElement, this[0]))\n return {top: 0, left: 0}\n var obj = this[0].getBoundingClientRect()\n return {\n left: obj.left + window.pageXOffset,\n top: obj.top + window.pageYOffset,\n width: Math.round(obj.width),\n height: Math.round(obj.height)\n }\n },\n css: function(property, value){\n if (arguments.length < 2) {\n var element = this[0]\n if (typeof property == 'string') {\n if (!element) return\n return element.style[camelize(property)] || getComputedStyle(element, '').getPropertyValue(property)\n } else if (isArray(property)) {\n if (!element) return\n var props = {}\n var computedStyle = getComputedStyle(element, '')\n $.each(property, function(_, prop){\n props[prop] = (element.style[camelize(prop)] || computedStyle.getPropertyValue(prop))\n })\n return props\n }\n }\n\n var css = ''\n if (type(property) == 'string') {\n if (!value && value !== 0)\n this.each(function(){ this.style.removeProperty(dasherize(property)) })\n else\n css = dasherize(property) + \":\" + maybeAddPx(property, value)\n } else {\n for (key in property)\n if (!property[key] && property[key] !== 0)\n this.each(function(){ this.style.removeProperty(dasherize(key)) })\n else\n css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';'\n }\n\n return this.each(function(){ this.style.cssText += ';' + css })\n },\n index: function(element){\n return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])\n },\n hasClass: function(name){\n if (!name) return false\n return emptyArray.some.call(this, function(el){\n return this.test(className(el))\n }, classRE(name))\n },\n addClass: function(name){\n if (!name) return this\n return this.each(function(idx){\n if (!('className' in this)) return\n classList = []\n var cls = className(this), newName = funcArg(this, name, idx, cls)\n newName.split(/\\s+/g).forEach(function(klass){\n if (!$(this).hasClass(klass)) classList.push(klass)\n }, this)\n classList.length && className(this, cls + (cls ? \" \" : \"\") + classList.join(\" \"))\n })\n },\n removeClass: function(name){\n return this.each(function(idx){\n if (!('className' in this)) return\n if (name === undefined) return className(this, '')\n classList = className(this)\n funcArg(this, name, idx, classList).split(/\\s+/g).forEach(function(klass){\n classList = classList.replace(classRE(klass), \" \")\n })\n className(this, classList.trim())\n })\n },\n toggleClass: function(name, when){\n if (!name) return this\n return this.each(function(idx){\n var $this = $(this), names = funcArg(this, name, idx, className(this))\n names.split(/\\s+/g).forEach(function(klass){\n (when === undefined ? !$this.hasClass(klass) : when) ?\n $this.addClass(klass) : $this.removeClass(klass)\n })\n })\n },\n scrollTop: function(value){\n if (!this.length) return\n var hasScrollTop = 'scrollTop' in this[0]\n if (value === undefined) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset\n return this.each(hasScrollTop ?\n function(){ this.scrollTop = value } :\n function(){ this.scrollTo(this.scrollX, value) })\n },\n scrollLeft: function(value){\n if (!this.length) return\n var hasScrollLeft = 'scrollLeft' in this[0]\n if (value === undefined) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset\n return this.each(hasScrollLeft ?\n function(){ this.scrollLeft = value } :\n function(){ this.scrollTo(value, this.scrollY) })\n },\n position: function() {\n if (!this.length) return\n\n var elem = this[0],\n // Get *real* offsetParent\n offsetParent = this.offsetParent(),\n // Get correct offsets\n offset = this.offset(),\n parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()\n\n // Subtract element margins\n // note: when an element has margin: auto the offsetLeft and marginLeft\n // are the same in Safari causing offset.left to incorrectly be 0\n offset.top -= parseFloat( $(elem).css('margin-top') ) || 0\n offset.left -= parseFloat( $(elem).css('margin-left') ) || 0\n\n // Add offsetParent borders\n parentOffset.top += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0\n parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0\n\n // Subtract the two offsets\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n }\n },\n offsetParent: function() {\n return this.map(function(){\n var parent = this.offsetParent || document.body\n while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css(\"position\") == \"static\")\n parent = parent.offsetParent\n return parent\n })\n }\n }\n\n // for now\n $.fn.detach = $.fn.remove\n\n // Generate the `width` and `height` functions\n ;['width', 'height'].forEach(function(dimension){\n var dimensionProperty =\n dimension.replace(/./, function(m){ return m[0].toUpperCase() })\n\n $.fn[dimension] = function(value){\n var offset, el = this[0]\n if (value === undefined) return isWindow(el) ? el['inner' + dimensionProperty] :\n isDocument(el) ? el.documentElement['scroll' + dimensionProperty] :\n (offset = this.offset()) && offset[dimension]\n else return this.each(function(idx){\n el = $(this)\n el.css(dimension, funcArg(this, value, idx, el[dimension]()))\n })\n }\n })\n\n function traverseNode(node, fun) {\n fun(node)\n for (var i = 0, len = node.childNodes.length; i < len; i++)\n traverseNode(node.childNodes[i], fun)\n }\n\n // Generate the `after`, `prepend`, `before`, `append`,\n // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.\n adjacencyOperators.forEach(function(operator, operatorIndex) {\n var inside = operatorIndex % 2 //=> prepend, append\n\n $.fn[operator] = function(){\n // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings\n var argType, nodes = $.map(arguments, function(arg) {\n var arr = []\n argType = type(arg)\n if (argType == \"array\") {\n arg.forEach(function(el) {\n if (el.nodeType !== undefined) return arr.push(el)\n else if ($.zepto.isZ(el)) return arr = arr.concat(el.get())\n arr = arr.concat(zepto.fragment(el))\n })\n return arr\n }\n return argType == \"object\" || arg == null ?\n arg : zepto.fragment(arg)\n }),\n parent, copyByClone = this.length > 1\n if (nodes.length < 1) return this\n\n return this.each(function(_, target){\n parent = inside ? target : target.parentNode\n\n // convert all methods to a \"before\" operation\n target = operatorIndex == 0 ? target.nextSibling :\n operatorIndex == 1 ? target.firstChild :\n operatorIndex == 2 ? target :\n null\n\n var parentInDocument = $.contains(document.documentElement, parent)\n\n nodes.forEach(function(node){\n if (copyByClone) node = node.cloneNode(true)\n else if (!parent) return $(node).remove()\n\n parent.insertBefore(node, target)\n if (parentInDocument) traverseNode(node, function(el){\n if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' &&\n (!el.type || el.type === 'text/javascript') && !el.src){\n var target = el.ownerDocument ? el.ownerDocument.defaultView : window\n target['eval'].call(target, el.innerHTML)\n }\n })\n })\n })\n }\n\n // after => insertAfter\n // prepend => prependTo\n // before => insertBefore\n // append => appendTo\n $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){\n $(html)[operator](this)\n return this\n }\n })\n\n zepto.Z.prototype = Z.prototype = $.fn\n\n // Export internal API functions in the `$.zepto` namespace\n zepto.uniq = uniq\n zepto.deserializeValue = deserializeValue\n $.zepto = zepto\n\n return $\n})()\n\nwindow.Zepto = Zepto\nwindow.$ === undefined && (window.$ = Zepto)\n\n;(function($){\n var _zid = 1, undefined,\n slice = Array.prototype.slice,\n isFunction = $.isFunction,\n isString = function(obj){ return typeof obj == 'string' },\n handlers = {},\n specialEvents={},\n focusinSupported = 'onfocusin' in window,\n focus = { focus: 'focusin', blur: 'focusout' },\n hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' }\n\n specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents'\n\n function zid(element) {\n return element._zid || (element._zid = _zid++)\n }\n function findHandlers(element, event, fn, selector) {\n event = parse(event)\n if (event.ns) var matcher = matcherFor(event.ns)\n return (handlers[zid(element)] || []).filter(function(handler) {\n return handler\n && (!event.e || handler.e == event.e)\n && (!event.ns || matcher.test(handler.ns))\n && (!fn || zid(handler.fn) === zid(fn))\n && (!selector || handler.sel == selector)\n })\n }\n function parse(event) {\n var parts = ('' + event).split('.')\n return {e: parts[0], ns: parts.slice(1).sort().join(' ')}\n }\n function matcherFor(ns) {\n return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)')\n }\n\n function eventCapture(handler, captureSetting) {\n return handler.del &&\n (!focusinSupported && (handler.e in focus)) ||\n !!captureSetting\n }\n\n function realEvent(type) {\n return hover[type] || (focusinSupported && focus[type]) || type\n }\n\n function add(element, events, fn, data, selector, delegator, capture){\n var id = zid(element), set = (handlers[id] || (handlers[id] = []))\n events.split(/\\s/).forEach(function(event){\n if (event == 'ready') return $(document).ready(fn)\n var handler = parse(event)\n handler.fn = fn\n handler.sel = selector\n // emulate mouseenter, mouseleave\n if (handler.e in hover) fn = function(e){\n var related = e.relatedTarget\n if (!related || (related !== this && !$.contains(this, related)))\n return handler.fn.apply(this, arguments)\n }\n handler.del = delegator\n var callback = delegator || fn\n handler.proxy = function(e){\n e = compatible(e)\n if (e.isImmediatePropagationStopped()) return\n e.data = data\n var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args))\n if (result === false) e.preventDefault(), e.stopPropagation()\n return result\n }\n handler.i = set.length\n set.push(handler)\n if ('addEventListener' in element)\n element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\n })\n }\n function remove(element, events, fn, selector, capture){\n var id = zid(element)\n ;(events || '').split(/\\s/).forEach(function(event){\n findHandlers(element, event, fn, selector).forEach(function(handler){\n delete handlers[id][handler.i]\n if ('removeEventListener' in element)\n element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\n })\n })\n }\n\n $.event = { add: add, remove: remove }\n\n $.proxy = function(fn, context) {\n var args = (2 in arguments) && slice.call(arguments, 2)\n if (isFunction(fn)) {\n var proxyFn = function(){ return fn.apply(context, args ? args.concat(slice.call(arguments)) : arguments) }\n proxyFn._zid = zid(fn)\n return proxyFn\n } else if (isString(context)) {\n if (args) {\n args.unshift(fn[context], fn)\n return $.proxy.apply(null, args)\n } else {\n return $.proxy(fn[context], fn)\n }\n } else {\n throw new TypeError(\"expected function\")\n }\n }\n\n $.fn.bind = function(event, data, callback){\n return this.on(event, data, callback)\n }\n $.fn.unbind = function(event, callback){\n return this.off(event, callback)\n }\n $.fn.one = function(event, selector, data, callback){\n return this.on(event, selector, data, callback, 1)\n }\n\n var returnTrue = function(){return true},\n returnFalse = function(){return false},\n ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,\n eventMethods = {\n preventDefault: 'isDefaultPrevented',\n stopImmediatePropagation: 'isImmediatePropagationStopped',\n stopPropagation: 'isPropagationStopped'\n }\n\n function compatible(event, source) {\n if (source || !event.isDefaultPrevented) {\n source || (source = event)\n\n $.each(eventMethods, function(name, predicate) {\n var sourceMethod = source[name]\n event[name] = function(){\n this[predicate] = returnTrue\n return sourceMethod && sourceMethod.apply(source, arguments)\n }\n event[predicate] = returnFalse\n })\n\n event.timeStamp || (event.timeStamp = Date.now())\n\n if (source.defaultPrevented !== undefined ? source.defaultPrevented :\n 'returnValue' in source ? source.returnValue === false :\n source.getPreventDefault && source.getPreventDefault())\n event.isDefaultPrevented = returnTrue\n }\n return event\n }\n\n function createProxy(event) {\n var key, proxy = { originalEvent: event }\n for (key in event)\n if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]\n\n return compatible(proxy, event)\n }\n\n $.fn.delegate = function(selector, event, callback){\n return this.on(event, selector, callback)\n }\n $.fn.undelegate = function(selector, event, callback){\n return this.off(event, selector, callback)\n }\n\n $.fn.live = function(event, callback){\n $(document.body).delegate(this.selector, event, callback)\n return this\n }\n $.fn.die = function(event, callback){\n $(document.body).undelegate(this.selector, event, callback)\n return this\n }\n\n $.fn.on = function(event, selector, data, callback, one){\n var autoRemove, delegator, $this = this\n if (event && !isString(event)) {\n $.each(event, function(type, fn){\n $this.on(type, selector, data, fn, one)\n })\n return $this\n }\n\n if (!isString(selector) && !isFunction(callback) && callback !== false)\n callback = data, data = selector, selector = undefined\n if (callback === undefined || data === false)\n callback = data, data = undefined\n\n if (callback === false) callback = returnFalse\n\n return $this.each(function(_, element){\n if (one) autoRemove = function(e){\n remove(element, e.type, callback)\n return callback.apply(this, arguments)\n }\n\n if (selector) delegator = function(e){\n var evt, match = $(e.target).closest(selector, element).get(0)\n if (match && match !== element) {\n evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})\n return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1)))\n }\n }\n\n add(element, event, callback, data, selector, delegator || autoRemove)\n })\n }\n $.fn.off = function(event, selector, callback){\n var $this = this\n if (event && !isString(event)) {\n $.each(event, function(type, fn){\n $this.off(type, selector, fn)\n })\n return $this\n }\n\n if (!isString(selector) && !isFunction(callback) && callback !== false)\n callback = selector, selector = undefined\n\n if (callback === false) callback = returnFalse\n\n return $this.each(function(){\n remove(this, event, callback, selector)\n })\n }\n\n $.fn.trigger = function(event, args){\n event = (isString(event) || $.isPlainObject(event)) ? $.Event(event) : compatible(event)\n event._args = args\n return this.each(function(){\n // handle focus(), blur() by calling them directly\n if (event.type in focus && typeof this[event.type] == \"function\") this[event.type]()\n // items in the collection might not be DOM elements\n else if ('dispatchEvent' in this) this.dispatchEvent(event)\n else $(this).triggerHandler(event, args)\n })\n }\n\n // triggers event handlers on current element just as if an event occurred,\n // doesn't trigger an actual event, doesn't bubble\n $.fn.triggerHandler = function(event, args){\n var e, result\n this.each(function(i, element){\n e = createProxy(isString(event) ? $.Event(event) : event)\n e._args = args\n e.target = element\n $.each(findHandlers(element, event.type || event), function(i, handler){\n result = handler.proxy(e)\n if (e.isImmediatePropagationStopped()) return false\n })\n })\n return result\n }\n\n // shortcut methods for `.bind(event, fn)` for each event type\n ;('focusin focusout focus blur load resize scroll unload click dblclick '+\n 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+\n 'change select keydown keypress keyup error').split(' ').forEach(function(event) {\n $.fn[event] = function(callback) {\n return (0 in arguments) ?\n this.bind(event, callback) :\n this.trigger(event)\n }\n })\n\n $.Event = function(type, props) {\n if (!isString(type)) props = type, type = props.type\n var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true\n if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name])\n event.initEvent(type, bubbles, true)\n return compatible(event)\n }\n\n})(Zepto)\n\n;(function($){\n var jsonpID = +new Date(),\n document = window.document,\n key,\n name,\n rscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n scriptTypeRE = /^(?:text|application)\\/javascript/i,\n xmlTypeRE = /^(?:text|application)\\/xml/i,\n jsonType = 'application/json',\n htmlType = 'text/html',\n blankRE = /^\\s*$/,\n originAnchor = document.createElement('a')\n\n originAnchor.href = window.location.href\n\n // trigger a custom event and return false if it was cancelled\n function triggerAndReturn(context, eventName, data) {\n var event = $.Event(eventName)\n $(context).trigger(event, data)\n return !event.isDefaultPrevented()\n }\n\n // trigger an Ajax \"global\" event\n function triggerGlobal(settings, context, eventName, data) {\n if (settings.global) return triggerAndReturn(context || document, eventName, data)\n }\n\n // Number of active Ajax requests\n $.active = 0\n\n function ajaxStart(settings) {\n if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart')\n }\n function ajaxStop(settings) {\n if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop')\n }\n\n // triggers an extra global event \"ajaxBeforeSend\" that's like \"ajaxSend\" but cancelable\n function ajaxBeforeSend(xhr, settings) {\n var context = settings.context\n if (settings.beforeSend.call(context, xhr, settings) === false ||\n triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false)\n return false\n\n triggerGlobal(settings, context, 'ajaxSend', [xhr, settings])\n }\n function ajaxSuccess(data, xhr, settings, deferred) {\n var context = settings.context, status = 'success'\n settings.success.call(context, data, status, xhr)\n if (deferred) deferred.resolveWith(context, [data, status, xhr])\n triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data])\n ajaxComplete(status, xhr, settings)\n }\n // type: \"timeout\", \"error\", \"abort\", \"parsererror\"\n function ajaxError(error, type, xhr, settings, deferred) {\n var context = settings.context\n settings.error.call(context, xhr, type, error)\n if (deferred) deferred.rejectWith(context, [xhr, type, error])\n triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error || type])\n ajaxComplete(type, xhr, settings)\n }\n // status: \"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", \"parsererror\"\n function ajaxComplete(status, xhr, settings) {\n var context = settings.context\n settings.complete.call(context, xhr, status)\n triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings])\n ajaxStop(settings)\n }\n\n function ajaxDataFilter(data, type, settings) {\n if (settings.dataFilter == empty) return data\n var context = settings.context\n return settings.dataFilter.call(context, data, type)\n }\n\n // Empty function, used as default callback\n function empty() {}\n\n $.ajaxJSONP = function(options, deferred){\n if (!('type' in options)) return $.ajax(options)\n\n var _callbackName = options.jsonpCallback,\n callbackName = ($.isFunction(_callbackName) ?\n _callbackName() : _callbackName) || ('Zepto' + (jsonpID++)),\n script = document.createElement('script'),\n originalCallback = window[callbackName],\n responseData,\n abort = function(errorType) {\n $(script).triggerHandler('error', errorType || 'abort')\n },\n xhr = { abort: abort }, abortTimeout\n\n if (deferred) deferred.promise(xhr)\n\n $(script).on('load error', function(e, errorType){\n clearTimeout(abortTimeout)\n $(script).off().remove()\n\n if (e.type == 'error' || !responseData) {\n ajaxError(null, errorType || 'error', xhr, options, deferred)\n } else {\n ajaxSuccess(responseData[0], xhr, options, deferred)\n }\n\n window[callbackName] = originalCallback\n if (responseData && $.isFunction(originalCallback))\n originalCallback(responseData[0])\n\n originalCallback = responseData = undefined\n })\n\n if (ajaxBeforeSend(xhr, options) === false) {\n abort('abort')\n return xhr\n }\n\n window[callbackName] = function(){\n responseData = arguments\n }\n\n script.src = options.url.replace(/\\?(.+)=\\?/, '?$1=' + callbackName)\n document.head.appendChild(script)\n\n if (options.timeout > 0) abortTimeout = setTimeout(function(){\n abort('timeout')\n }, options.timeout)\n\n return xhr\n }\n\n $.ajaxSettings = {\n // Default type of request\n type: 'GET',\n // Callback that is executed before request\n beforeSend: empty,\n // Callback that is executed if the request succeeds\n success: empty,\n // Callback that is executed the the server drops error\n error: empty,\n // Callback that is executed on request complete (both: error and success)\n complete: empty,\n // The context for the callbacks\n context: null,\n // Whether to trigger \"global\" Ajax events\n global: true,\n // Transport\n xhr: function () {\n return new window.XMLHttpRequest()\n },\n // MIME types mapping\n // IIS returns Javascript as \"application/x-javascript\"\n accepts: {\n script: 'text/javascript, application/javascript, application/x-javascript',\n json: jsonType,\n xml: 'application/xml, text/xml',\n html: htmlType,\n text: 'text/plain'\n },\n // Whether the request is to another domain\n crossDomain: false,\n // Default timeout\n timeout: 0,\n // Whether data should be serialized to string\n processData: true,\n // Whether the browser should be allowed to cache GET responses\n cache: true,\n //Used to handle the raw response data of XMLHttpRequest.\n //This is a pre-filtering function to sanitize the response.\n //The sanitized response should be returned\n dataFilter: empty\n }\n\n function mimeToDataType(mime) {\n if (mime) mime = mime.split(';', 2)[0]\n return mime && ( mime == htmlType ? 'html' :\n mime == jsonType ? 'json' :\n scriptTypeRE.test(mime) ? 'script' :\n xmlTypeRE.test(mime) && 'xml' ) || 'text'\n }\n\n function appendQuery(url, query) {\n if (query == '') return url\n return (url + '&' + query).replace(/[&?]{1,2}/, '?')\n }\n\n // serialize payload and append it to the URL for GET requests\n function serializeData(options) {\n if (options.processData && options.data && $.type(options.data) != \"string\")\n options.data = $.param(options.data, options.traditional)\n if (options.data && (!options.type || options.type.toUpperCase() == 'GET' || 'jsonp' == options.dataType))\n options.url = appendQuery(options.url, options.data), options.data = undefined\n }\n\n $.ajax = function(options){\n var settings = $.extend({}, options || {}),\n deferred = $.Deferred && $.Deferred(),\n urlAnchor, hashIndex\n for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key]\n\n ajaxStart(settings)\n\n if (!settings.crossDomain) {\n urlAnchor = document.createElement('a')\n urlAnchor.href = settings.url\n // cleans up URL for .href (IE only), see https://github.com/madrobby/zepto/pull/1049\n urlAnchor.href = urlAnchor.href\n settings.crossDomain = (originAnchor.protocol + '//' + originAnchor.host) !== (urlAnchor.protocol + '//' + urlAnchor.host)\n }\n\n if (!settings.url) settings.url = window.location.toString()\n if ((hashIndex = settings.url.indexOf('#')) > -1) settings.url = settings.url.slice(0, hashIndex)\n serializeData(settings)\n\n var dataType = settings.dataType, hasPlaceholder = /\\?.+=\\?/.test(settings.url)\n if (hasPlaceholder) dataType = 'jsonp'\n\n if (settings.cache === false || (\n (!options || options.cache !== true) &&\n ('script' == dataType || 'jsonp' == dataType)\n ))\n settings.url = appendQuery(settings.url, '_=' + Date.now())\n\n if ('jsonp' == dataType) {\n if (!hasPlaceholder)\n settings.url = appendQuery(settings.url,\n settings.jsonp ? (settings.jsonp + '=?') : settings.jsonp === false ? '' : 'callback=?')\n return $.ajaxJSONP(settings, deferred)\n }\n\n var mime = settings.accepts[dataType],\n headers = { },\n setHeader = function(name, value) { headers[name.toLowerCase()] = [name, value] },\n protocol = /^([\\w-]+:)\\/\\//.test(settings.url) ? RegExp.$1 : window.location.protocol,\n xhr = settings.xhr(),\n nativeSetHeader = xhr.setRequestHeader,\n abortTimeout\n\n if (deferred) deferred.promise(xhr)\n\n if (!settings.crossDomain) setHeader('X-Requested-With', 'XMLHttpRequest')\n setHeader('Accept', mime || '*/*')\n if (mime = settings.mimeType || mime) {\n if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0]\n xhr.overrideMimeType && xhr.overrideMimeType(mime)\n }\n if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET'))\n setHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded')\n\n if (settings.headers) for (name in settings.headers) setHeader(name, settings.headers[name])\n xhr.setRequestHeader = setHeader\n\n xhr.onreadystatechange = function(){\n if (xhr.readyState == 4) {\n xhr.onreadystatechange = empty\n clearTimeout(abortTimeout)\n var result, error = false\n if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) {\n dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'))\n\n if (xhr.responseType == 'arraybuffer' || xhr.responseType == 'blob')\n result = xhr.response\n else {\n result = xhr.responseText\n\n try {\n // http://perfectionkills.com/global-eval-what-are-the-options/\n // sanitize response accordingly if data filter callback provided\n result = ajaxDataFilter(result, dataType, settings)\n if (dataType == 'script') (1,eval)(result)\n else if (dataType == 'xml') result = xhr.responseXML\n else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result)\n } catch (e) { error = e }\n\n if (error) return ajaxError(error, 'parsererror', xhr, settings, deferred)\n }\n\n ajaxSuccess(result, xhr, settings, deferred)\n } else {\n ajaxError(xhr.statusText || null, xhr.status ? 'error' : 'abort', xhr, settings, deferred)\n }\n }\n }\n\n if (ajaxBeforeSend(xhr, settings) === false) {\n xhr.abort()\n ajaxError(null, 'abort', xhr, settings, deferred)\n return xhr\n }\n\n var async = 'async' in settings ? settings.async : true\n xhr.open(settings.type, settings.url, async, settings.username, settings.password)\n\n if (settings.xhrFields) for (name in settings.xhrFields) xhr[name] = settings.xhrFields[name]\n\n for (name in headers) nativeSetHeader.apply(xhr, headers[name])\n\n if (settings.timeout > 0) abortTimeout = setTimeout(function(){\n xhr.onreadystatechange = empty\n xhr.abort()\n ajaxError(null, 'timeout', xhr, settings, deferred)\n }, settings.timeout)\n\n // avoid sending empty string (#319)\n xhr.send(settings.data ? settings.data : null)\n return xhr\n }\n\n // handle optional data/success arguments\n function parseArguments(url, data, success, dataType) {\n if ($.isFunction(data)) dataType = success, success = data, data = undefined\n if (!$.isFunction(success)) dataType = success, success = undefined\n return {\n url: url\n , data: data\n , success: success\n , dataType: dataType\n }\n }\n\n $.get = function(/* url, data, success, dataType */){\n return $.ajax(parseArguments.apply(null, arguments))\n }\n\n $.post = function(/* url, data, success, dataType */){\n var options = parseArguments.apply(null, arguments)\n options.type = 'POST'\n return $.ajax(options)\n }\n\n $.getJSON = function(/* url, data, success */){\n var options = parseArguments.apply(null, arguments)\n options.dataType = 'json'\n return $.ajax(options)\n }\n\n $.fn.load = function(url, data, success){\n if (!this.length) return this\n var self = this, parts = url.split(/\\s/), selector,\n options = parseArguments(url, data, success),\n callback = options.success\n if (parts.length > 1) options.url = parts[0], selector = parts[1]\n options.success = function(response){\n self.html(selector ?\n $('<div>').html(response.replace(rscript, \"\")).find(selector)\n : response)\n callback && callback.apply(self, arguments)\n }\n $.ajax(options)\n return this\n }\n\n var escape = encodeURIComponent\n\n function serialize(params, obj, traditional, scope){\n var type, array = $.isArray(obj), hash = $.isPlainObject(obj)\n $.each(obj, function(key, value) {\n type = $.type(value)\n if (scope) key = traditional ? scope :\n scope + '[' + (hash || type == 'object' || type == 'array' ? key : '') + ']'\n // handle data in serializeArray() format\n if (!scope && array) params.add(value.name, value.value)\n // recurse into nested objects\n else if (type == \"array\" || (!traditional && type == \"object\"))\n serialize(params, value, traditional, key)\n else params.add(key, value)\n })\n }\n\n $.param = function(obj, traditional){\n var params = []\n params.add = function(key, value) {\n if ($.isFunction(value)) value = value()\n if (value == null) value = \"\"\n this.push(escape(key) + '=' + escape(value))\n }\n serialize(params, obj, traditional)\n return params.join('&').replace(/%20/g, '+')\n }\n})(Zepto)\n\n;(function($){\n $.fn.serializeArray = function() {\n var name, type, result = [],\n add = function(value) {\n if (value.forEach) return value.forEach(add)\n result.push({ name: name, value: value })\n }\n if (this[0]) $.each(this[0].elements, function(_, field){\n type = field.type, name = field.name\n if (name && field.nodeName.toLowerCase() != 'fieldset' &&\n !field.disabled && type != 'submit' && type != 'reset' && type != 'button' && type != 'file' &&\n ((type != 'radio' && type != 'checkbox') || field.checked))\n add($(field).val())\n })\n return result\n }\n\n $.fn.serialize = function(){\n var result = []\n this.serializeArray().forEach(function(elm){\n result.push(encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value))\n })\n return result.join('&')\n }\n\n $.fn.submit = function(callback) {\n if (0 in arguments) this.bind('submit', callback)\n else if (this.length) {\n var event = $.Event('submit')\n this.eq(0).trigger(event)\n if (!event.isDefaultPrevented()) this.get(0).submit()\n }\n return this\n }\n\n})(Zepto)\n\n;(function(){\n // getComputedStyle shouldn't freak out when called\n // without a valid element as argument\n try {\n getComputedStyle(undefined)\n } catch(e) {\n var nativeGetComputedStyle = getComputedStyle\n window.getComputedStyle = function(element, pseudoElement){\n try {\n return nativeGetComputedStyle(element, pseudoElement)\n } catch(e) {\n return null\n }\n }\n }\n})()\n return Zepto\n}))\n"},function(){!function(e){e.expr={":":{}},e.support={},e.fn.clone=function(){var t=e();return this.each(function(){t.push(this.cloneNode(!0))}),t},["Left","Top"].forEach(function(t,n){function i(e){return function(e){return e&&"object"==(void 0===e?"undefined":a(e))&&"setInterval"in e}(e)?e:!(9!==e.nodeType)&&(e.defaultView||e.parentWindow)}var o="scroll"+t;e.fn[o]=function(t){var s,r;return void 0===t?(s=this[0])?(r=i(s))?"pageXOffset"in r?r[n?"pageYOffset":"pageXOffset"]:r.document.documentElement[o]||r.document.body[o]:s[o]:null:void this.each(function(){if(r=i(this)){var s=n?e(r).scrollLeft():t,a=n?t:e(r).scrollTop();r.scrollTo(s,a)}else this[o]=t})}}),["width","height"].forEach(function(t){var n=t.replace(/./,function(e){return e[0].toUpperCase()});e.fn["inner"+n]=function(e){var n=this;if(n){var i=n[t]();return{width:["left","right"],height:["top","bottom"]}[t].forEach(function(t){i+=parseInt(n.css("padding-"+t),10),e&&(i+=parseInt(n.css("margin-"+t),10))}),i}return null},e.fn["outer"+n]=function(e){var n=this;if(n){var i=n[t]();return{width:["left","right"],height:["top","bottom"]}[t].forEach(function(t){e&&(i+=parseInt(n.css("margin-"+t),10))}),i}return null}}),e.proxy=function(t,n){if("string"==typeof n){var i=t[n];n=t,t=i}if(e.isFunction(t)){var o=Array.prototype.slice.call(arguments,2),s=function(){return t.apply(n,o.concat(Array.prototype.slice.call(arguments)))};return s.guid=t.guid=t.guid||s.guid||e.guid++,s}};var t=String.prototype.trim;e.trim=function(e,n){return!n&&t?t.call(e):(n=defaultToWhiteSpace(n),e.replace(new RegExp("^["+n+"]+|["+n+"]+$","g"),""))};var n=/^(?:body|html)$/i;e.fn.position=function(){if(!this[0])return null;var t=this[0],i=this.offsetParent(),o=this.offset(),s=n.test(i[0].nodeName)?{top:0,left:0}:i.offset();return o.top-=parseFloat(e(t).css("margin-top"))||0,o.left-=parseFloat(e(t).css("margin-left"))||0,s.top+=parseFloat(e(i[0]).css("border-top-width"))||0,s.left+=parseFloat(e(i[0]).css("border-left-width"))||0,{top:o.top-s.top,left:o.left-s.left}},e.fn.offsetParent=function(){var t=e();return this.each(function(){for(var i=this.offsetParent||document.body;i&&!n.test(i.nodeName)&&"static"===e(i).css("position");)i=i.offsetParent;t.push(i)}),t}}(Zepto)}])},"object"==a(t)&&"object"==a(e)?e.exports=s():(i=[],void 0===(o="function"==typeof(n=s)?n.apply(t,i):n)||(e.exports=o))}).call(this,n(3)(e))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}}]);
//# sourceMappingURL=ui.b.js.map \ No newline at end of file
diff --git a/webAO/ui.b.js.map b/webAO/ui.b.js.map
index 0be0f00..2bb960c 100644
--- a/webAO/ui.b.js.map
+++ b/webAO/ui.b.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///(webpack)/buildin/module.js","webpack:///./webAO/golden/js/goldenlayout.js","webpack:///./webAO/ui.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","webpackPolyfill","deprecate","paths","children","t","self","e","Math","min","floor","max","$","zepto","touches","targetTouches","originalEvent","j","a","push","window","location","hash","match","RegExp","search","substr","split","length","b","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","setTimeout","g","Array","Error","indexOf","Function","bind","apply","concat","slice","arguments","this","Date","now","getTime","f","random","toString","replace","k","trim","Int8Array","_typeof","_class","_classCallCheck","_mSubscriptions","on","h","fn","ctx","emit","unshift","unbind","splice","off","trigger","version","__e","_o$b","_this","_possibleConstructorReturn","__proto__","getPrototypeOf","config","_extendItemNode","type","contentItems","parent","isInitialised","isMaximised","isRoot","isRow","isColumn","isStack","isComponent","layoutManager","_pendingEventPropagations","_throttledEvents","_propagateEvent","content","_createContentItems","_inherits","_createClass","key","callDownwards","_$destroy","isClosable","removeChild","undisplayChild","_$init","_$normalizeContentItem","element","parentNode","replaceChild","header","tabs","contentItem","createPopout","emitBubblingEvent","preventDefault","_$minimiseItem","_$maximiseItem","selectedItem","selectItem","addClass","removeClass","title","id","hasId","getItemsByFilter","_$getItemsByProperty","instance","dropTargetIndicator","highlightArea","addChild","_callOnActiveComponents","hide","updateSize","show","getItemsByType","getActiveContentItem","container","remove","offset","width","height","x1","left","y1","top","x2","y2","surface","setSize","childElementContainer","append","createContentItem","isPropagationStopped","_scheduleEventPropagationToLayoutManager","origin","_propagateEventToLayoutManager","__g","round","_s$a","_this2","_splitterSize","dimensions","borderWidth","_splitterGrabSize","borderGrabWidth","_isColumn","_dimension","_splitter","_splitterPosition","_splitterMinPosition","_splitterMaxPosition","_createSplitter","after","_isDocked","before","_validateDocking","_calculateRelativeSizes","_setAbsoluteSizes","headerHeight","_docker","docked","size","itemSize","column","first","last","row","position","_","dimension","realSize","toggleClass","_header","dock","_calculateAbsoluteSizes","additionalPixel","itemSizes","totalWidth","totalHeight","_respectMinItemWidth","minItemWidth","_onSplitterDrag","_onSplitterDragStop","_onSplitterDragStart","_setDockable","_$setClosable","minWidth","minHeight","horizontal","vertical","_getItemsForSplitter","_getMinimumDimensions","css","_o$b2","_this3","_timeout","_eElement","_oDocument","document","_eBody","body","_nButtonCode","_nDelay","_nDistance","_nX","_nY","_nOriginalX","_nOriginalY","_bDragging","_fMove","onMouseMove","_fUp","onMouseUp","_fDown","onMouseDown","button","_getCoordinates","x","y","one","_startDrag","abs","clearTimeout","find","pageX","pageY","TypeError","_class2","_keys","_values","_nextLevel","parseInt","_o$a","_this4","_containerElement","tabDropPlaceholder","_$highlightDropZone","side","_a$a","_this5","_activeContentItem","settings","hasHeaders","popout","showPopoutIcon","labels","maximise","showMaximiseIcon","close","showCloseIcon","minimise","_dropZones","_dropSegment","_contentAreaDimensions","_dropIndex","_setupHeaderPosition","_$validateClosability","_sided","createTab","_$hide","activeItemIndex","setActiveContentItem","_$show","activeContentItem","removeTab","hideTab","_isClosable","_resetHeaderDropZone","hoverArea","_highlightHeaderDropZone","_highlightBodyDropZone","_$getArea","right","bottom","innerHeight","toggleMaximise","toggle","_side","keys","ceil","isNaN","F","G","u","S","P","B","W","v","virtual","R","U","createElement","_class3","_reactComponent","_originalComponentWillUpdate","_container","_initialState","_reactClass","_getReactClass","_render","_destroy","ReactDOM","render","_getReactComponent","getElement","componentWillUpdate","_onUpdate","getState","setState","unmountComponentAtNode","_config","component","getComponent","glEventHub","eventHub","glContainer","extend","props","React","_o$b3","_this6","_layoutManager","_dontPropagateToParent","_childEventSource","_onEventFromThis","_boundOnEventFromChild","_onEventFromChild","isSubWindow","_propagateToParent","_propagateToChildren","__gl","__glArgs","createEvent","opener","initEvent","createEventObject","eventType","eventName","dispatchEvent","fireEvent","openPopouts","getGlInstance","_$onEventFromParent","_class4","_Error","_this7","message","node","_o$b4","_this8","selectionEnabled","_onHeaderClick","tabsContainer","tabDropdownContainer","controlsContainer","_updateTabSizes","tabsMarkedForRemoval","closeButton","dockButton","tabDropdownButton","hideAdditionalTabsDropdown","_hideAdditionalTabsDropdown","mouseup","_lastVisibleTabIndex","_tabControlOffset","tabControlOffset","_createControls","setActive","reorderOnTabMenuClick","_canDestroy","_showAdditionalTabsDropdown","tabDropdown","_getHeaderSetting","_onPopoutClick","attr","popoutWholeStack","target","select","outerWidth","tabOverlapAllowance","tab","outerHeight","z-index","margin-left","_class5","titleElement","closeElement","isActive","setTitle","reorderEnabled","_dragListener","_onDragStart","destroy","_onTabClickFn","_onTabClick","_onCloseClickFn","_onCloseClick","_onCloseMousedown","html","stopPropagation","_o$b5","_this9","_contentItem","_originalParent","_area","_lastValidArea","_onDrag","_onDrop","_undisplayTree","_$calculateItemAreas","_setDimensions","_minX","_minY","_maxX","_maxY","_width","_height","_setDropPosition","constrainDragToContainer","_updateTree","_$onDrop","_$setParent","dragProxyWidth","dragProxyHeight","_class6","_action","_o$a2","_this10","componentName","componentState","_element","_$setSize","shown","_$shown","_o$b6","_this11","isHidden","_contentElement","_s$b","_this12","_dimensions","_parentId","_indexInParent","_popoutWindow","_id","_createWindow","screenX","screenLeft","screenY","screenTop","toConfig","parentId","indexInParent","__glInstance","_$closeWindow","getWindow","root","getItemsById","_createUrl","_serializeWindowOptions","innerWidth","menubar","toolbar","personalbar","resizable","scrollbars","status","open","_positionWindow","_onClose","setInterval","_onInitialised","clearInterval","blockedPopoutsThrowError","join","minifyConfig","localStorage","setItem","href","moveTo","focus","popIn","D","w","ES6","_a$b","_this13","_isFullPage","_resizeTimeoutId","_components","lm-react-component","_itemAreas","_resizeFunction","_onResize","_unloadFunction","_onUnload","_maximisedItem","_maximisePlaceholder","_creationTimeoutPassed","_subWindowsCreated","_dragSources","_updatingColumnsResponsive","_firstLoad","_createConfig","transitionIndicator","_typeToItem","stack","unminifyConfig","_$reconcilePopoutWindows","maximisedItemId","_createSubWindows","readyState","ready","init","_adjustToWindowMode","_setContainer","_create","_bindEvents","_adjustColumnsResponsive","forEach","_itemConfig","addId","deselect","prepend","removeId","Infinity","_getAllContentItems","_$createRootItemAreas","isPlainObject","closed","resize","getItem","JSON","parse","removeItem","popin","click","offsetHeight","margin","padding","overflow","closePopoutsOnUnload","_useResponsiveLayout","_findAllStackContainers","_addChildContentItemsToContainer","responsiveMode","_findAllStackContainersRecursive","default","propertyIsEnumerable","mode","copyright","valueOf","writable","create","style","display","appendChild","src","contentWindow","write","defineProperties","documentElement","_class7","_isVertical","_size","_grabSize","_createElement","stringify","_class8","_createDragListener","transitionElements","_class9","_class10","_toElement","_fromDimensions","_totalAnimationDuration","_animationStartTime","_measure","opacity","_nextAnimationFrame","minItemHeight","console","error","log","execScript","attachEvent","addEventListener","eval","expr",":","support","clone","each","cloneNode","nodeType","defaultView","parentWindow","scrollLeft","scrollTop","scrollTo","toUpperCase","proxy","isFunction","guid","String","defaultToWhiteSpace","offsetParent","test","nodeName","parseFloat","Zepto","__WEBPACK_AMD_DEFINE_ARRAY__","undefined","__WEBPACK_AMD_DEFINE_RESULT__","__WEBPACK_AMD_DEFINE_FACTORY__","_goldenlayout","golden","GoldenLayout","registerComponent","template","querySelector"],"mappings":"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","file":"ui.b.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 5);\n","module.exports = function(module) {\r\n\tif (!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif (!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n","(function(e,t){'object'==typeof exports&&'object'==typeof module?module.exports=t():'function'==typeof define&&define.amd?define('GoldenLayout',[],t):'object'==typeof exports?exports.GoldenLayout=t():e.GoldenLayout=t()})('undefined'==typeof self?this:self,function(){var e=Math.min,t=Math.floor,n=Math.max;return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={i:o,l:!1,exports:{}};return e[o].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e['default']}:function(){return e};return t.d(n,'a',n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p='',t(t.s=35)}([function(e,t,n){'use strict';function o(e){var t=location.hash.match(new RegExp(e+'=([^&]*)'));return t?t[1]:null}t.e=function(e){return $.zepto?e.touches?e.targetTouches[0]:e:e.originalEvent&&e.originalEvent.touches?e.originalEvent.touches[0]:e},t.j=function(e){var t,n;if('function'==typeof a.a)return a()(e);for(n in t=[],e)t.push(n);return t},t.d=function(e){if(window.location.hash)return o(e);if(!window.location.search)return null;var t,n,i=window.location.search.substr(1).split('&'),a={};for(n=0;n<i.length;n++)t=i[n].split('='),a[t[0]]=t[1];return a[e]||null},t.b=function(e,t){for(var n in t)e[n]=t[n];return e},t.a=function(e){return(window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)})(function(){e()})},t.g=function(e,t){if(!(t instanceof Array))throw new Error('Haystack is not an Array');if(t.indexOf)return t.indexOf(e);for(var n=0;n<t.length;n++)if(t[n]===e)return n;return-1},n.d(t,'h',function(){return l}),t.c=function(e,t,n){if(void 0!==Function.prototype.bind)return Function.prototype.bind.apply(e,[t].concat(n||[]));var o=function(){var i=(n||[]).concat(Array.prototype.slice.call(arguments,0));return this instanceof o?void e.apply(this,i):e.apply(t,i)};return o.prototype=e.prototype,o},t.i=function(){return'function'==typeof Date.now?Date.now():new Date().getTime()},t.f=function(){return(1e15*Math.random()).toString(36).replace('.','')},t.k=function(e){return $.trim(e.replace(/(<([^>]+)>)/ig,''))};var i=n(40),a=n.n(i),s=n(60),r=n.n(s),l='function'!=typeof /./&&'object'!=typeof Int8Array?function(e){return'function'==typeof e||!1}:function(e){return'[object Function]'===toString.call(e)}},function(e,t,n){'use strict';var o=n(0);const a='__all';t.a=a;t.b=class{constructor(){this._mSubscriptions={},this._mSubscriptions[a]=[],this.on=function(e,t,n){if(!Object(o.h)(t))throw new Error('Tried to listen to event '+e+' with non-function callback '+t);this._mSubscriptions[e]||(this._mSubscriptions[e]=[]),this._mSubscriptions[e].push({fn:t,ctx:n})},this.emit=function(e){var t,n,o;o=Array.prototype.slice.call(arguments,1);var i=this._mSubscriptions[e];if(i)for(i=i.slice(),t=0;t<i.length;t++)n=i[t].ctx||{},i[t].fn.apply(n,o);o.unshift(e);var s=this._mSubscriptions[a].slice();for(t=0;t<s.length;t++)n=s[t].ctx||{},s[t].fn.apply(n,o)},this.unbind=function(e,t,n){if(!this._mSubscriptions[e])throw new Error('No subscribtions to unsubscribe for event '+e);var o,i=!1;for(o=0;o<this._mSubscriptions[e].length;o++)t&&this._mSubscriptions[e][o].fn!==t||n&&n!==this._mSubscriptions[e][o].ctx||(this._mSubscriptions[e].splice(o,1),i=!0);if(!1==i)throw new Error('Nothing to unbind for '+e)},this.off=this.unbind,this.trigger=this.emit}}},function(e){var t=e.exports={version:'2.5.6'};'number'==typeof __e&&(__e=t)},function(e,t,n){'use strict';var o=n(1),i=n(26),a=n(12),s=n(27),r=n(66),l=n(0);class c extends o.b{constructor(e,t,n){super(),this.config=this._extendItemNode(t),this.type=t.type,this.contentItems=[],this.parent=n,this.isInitialised=!1,this.isMaximised=!1,this.isRoot=!1,this.isRow=!1,this.isColumn=!1,this.isStack=!1,this.isComponent=!1,this.layoutManager=e,this._pendingEventPropagations={},this._throttledEvents=['stateChanged'],this.on(o.a,this._propagateEvent,this),t.content&&this._createContentItems(t)}setSize(){throw new Error('Abstract Method')}callDownwards(e,t,n,o){var a;for(!0!==n&&!0!==o&&this[e].apply(this,t||[]),a=0;a<this.contentItems.length;a++)this.contentItems[a].callDownwards(e,t,n);!0===n&&!0!==o&&this[e].apply(this,t||[])}removeChild(e,t){var n=Object(l.g)(e,this.contentItems);if(-1===n)throw new Error('Can\\'t remove child item. Unknown content item');!0!==t&&this.contentItems[n]._$destroy(),this.contentItems.splice(n,1),this.config.content.splice(n,1),0<this.contentItems.length?this.callDownwards('setSize'):!(this instanceof a.a)&&!0===this.config.isClosable&&this.parent.removeChild(this)}undisplayChild(e){var t=Object(l.g)(e,this.contentItems);if(-1===t)throw new Error('Can\\'t remove child item. Unknown content item');this instanceof a.a||!0!==this.config.isClosable||this.parent.undisplayChild(this)}addChild(e,t){t===void 0&&(t=this.contentItems.length),this.contentItems.splice(t,0,e),this.config.content===void 0&&(this.config.content=[]),this.config.content.splice(t,0,e.config),e.parent=this,!0===e.parent.isInitialised&&!1===e.isInitialised&&e._$init()}replaceChild(e,t,n){t=this.layoutManager._$normalizeContentItem(t);var o=Object(l.g)(e,this.contentItems),i=e.element[0].parentNode;if(-1===o)throw new Error('Can\\'t replace child. oldChild is not child of this');i.replaceChild(t.element[0],e.element[0]),!0===n&&(e.parent=null,e._$destroy()),this.contentItems[o]=t,t.parent=this,this.isStack&&(this.header.tabs[o].contentItem=t),!0===t.parent.isInitialised&&!1===t.isInitialised&&t._$init(),this.callDownwards('setSize')}remove(){this.parent.removeChild(this)}popout(){var e=this.layoutManager.createPopout(this);return this.emitBubblingEvent('stateChanged'),e}toggleMaximise(t){t&&t.preventDefault(),!0===this.isMaximised?this.layoutManager._$minimiseItem(this):this.layoutManager._$maximiseItem(this),this.isMaximised=!this.isMaximised,this.emitBubblingEvent('stateChanged')}select(){this.layoutManager.selectedItem!==this&&(this.layoutManager.selectItem(this,!0),this.element.addClass('lm_selected'))}deselect(){this.layoutManager.selectedItem===this&&(this.layoutManager.selectedItem=null,this.element.removeClass('lm_selected'))}setTitle(e){this.config.title=e,this.emit('titleChanged',e),this.emit('stateChanged')}hasId(e){if(!this.config.id)return!1;return'string'==typeof this.config.id?this.config.id===e:this.config.id instanceof Array?-1!==Object(l.g)(e,this.config.id):void 0}addId(e){this.hasId(e)||(this.config.id?'string'==typeof this.config.id?this.config.id=[this.config.id,e]:this.config.id instanceof Array&&this.config.id.push(e):this.config.id=e)}removeId(e){if(!this.hasId(e))throw new Error('Id not found');if('string'==typeof this.config.id)delete this.config.id;else if(this.config.id instanceof Array){var t=Object(l.g)(e,this.config.id);this.config.id.splice(t,1)}}getItemsByFilter(e){var t=[],n=function(o){for(var a=0;a<o.contentItems.length;a++)!0===e(o.contentItems[a])&&t.push(o.contentItems[a]),n(o.contentItems[a])};return n(this),t}getItemsById(e){return this.getItemsByFilter(function(t){return t.config.id instanceof Array?-1!==Object(l.g)(e,t.config.id):t.config.id===e})}getItemsByType(e){return this._$getItemsByProperty('type',e)}getComponentsByName(e){var t,n=this._$getItemsByProperty('componentName',e),o=[];for(t=0;t<n.length;t++)o.push(n[t].instance);return o}_$getItemsByProperty(e,t){return this.getItemsByFilter(function(n){return n[e]===t})}_$setParent(e){this.parent=e}_$highlightDropZone(e,t,n){this.layoutManager.dropTargetIndicator.highlightArea(n)}_$onDrop(e){this.addChild(e)}_$hide(){this._callOnActiveComponents('hide'),this.element.hide(),this.layoutManager.updateSize()}_$show(){this._callOnActiveComponents('show'),this.element.show(),this.layoutManager.updateSize()}_callOnActiveComponents(e){var t,n,o=this.getItemsByType('stack');for(n=0;n<o.length;n++)t=o[n].getActiveContentItem(),t&&t.isComponent&&t.container[e]()}_$destroy(){this.emitBubblingEvent('beforeItemDestroyed'),this.callDownwards('_$destroy',[],!0,!0),this.element.remove(),this.emitBubblingEvent('itemDestroyed')}_$getArea(e){e=e||this.element;var t=e.offset(),n=e.width(),o=e.height();return{x1:t.left,y1:t.top,x2:t.left+n,y2:t.top+o,surface:n*o,contentItem:this}}_$init(){var e;for(this.setSize(),e=0;e<this.contentItems.length;e++)this.childElementContainer.append(this.contentItems[e].element);this.isInitialised=!0,this.emitBubblingEvent('itemCreated'),this.emitBubblingEvent(this.type+'Created')}emitBubblingEvent(e){var t=new i.a(e,this);this.emit(e,t)}_createContentItems(e){var t,n;if(!(e.content instanceof Array))throw new s.a('content must be an Array',e);for(n=0;n<e.content.length;n++)t=this.layoutManager.createContentItem(e.content[n],this),this.contentItems.push(t)}_extendItemNode(e){for(var t in r.a)void 0===e[t]&&(e[t]=r.a[t]);return e}_propagateEvent(e,t){t instanceof i.a&&!1===t.isPropagationStopped&&!0===this.isInitialised&&(!1===this.isRoot&&this.parent?this.parent.emit.apply(this.parent,Array.prototype.slice.call(arguments,0)):this._scheduleEventPropagationToLayoutManager(e,t))}_scheduleEventPropagationToLayoutManager(e,t){-1===Object(l.g)(e,this._throttledEvents)?this.layoutManager.emit(e,t.origin):!0!==this._pendingEventPropagations[e]&&(this._pendingEventPropagations[e]=!0,Object(l.a)(Object(l.c)(this._propagateEventToLayoutManager,this,[e,t])))}_propagateEventToLayoutManager(e,t){this._pendingEventPropagations[e]=!1,this.layoutManager.emit(e,t)}}t.a=c},function(e){var t=e.exports='undefined'!=typeof window&&window.Math==Math?window:'undefined'!=typeof self&&self.Math==Math?self:Function('return this')();'number'==typeof __g&&(__g=t)},function(e,t,n){e.exports=!n(10)(function(){return 7!=Object.defineProperty({},'a',{get:function(){return 7}}).a})},function(e,o,i){'use strict';var a=Math.round,s=i(3),r=i(13),l=i(67),c=i(0);class p extends s.a{constructor(e,t,n,o){super(t,n,o),this.isRow=!e,this.isColumn=e,this.element=$('<div class=\"lm_item lm_'+(e?'column':'row')+'\"></div>'),this.childElementContainer=this.element,this._splitterSize=t.config.dimensions.borderWidth,this._splitterGrabSize=t.config.dimensions.borderGrabWidth,this._isColumn=e,this._dimension=e?'height':'width',this._splitter=[],this._splitterPosition=null,this._splitterMinPosition=null,this._splitterMaxPosition=null}addChild(e,t,o){var a,r,l,i;if(e=this.layoutManager._$normalizeContentItem(e,this),void 0===t&&(t=this.contentItems.length),0<this.contentItems.length?(i=this._createSplitter(n(0,t-1)).element,0<t?(this.contentItems[t-1].element.after(i),i.after(e.element),this._isDocked(t-1)&&(this._splitter[t-1].element.hide(),this._splitter[t].element.show())):(this.contentItems[0].element.before(i),i.before(e.element))):this.childElementContainer.append(e.element),s.a.prototype.addChild.call(this,e,t),a=100*(1/this.contentItems.length),!0===o)return void this.emitBubblingEvent('stateChanged');for(l=0;l<this.contentItems.length;l++)this.contentItems[l]===e?e.config[this._dimension]=a:(r=this.contentItems[l].config[this._dimension]*=(100-a)/100,this.contentItems[l].config[this._dimension]=r);this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged'),this._validateDocking()}undisplayChild(e){var t,o=e.config[this._dimension],i=Object(c.g)(e,this.contentItems),a=n(i-1,0);if(-1===i)throw new Error('Can\\'t undisplay child. ContentItem is not child of this Row or Column');this._splitter[a]&&this._splitter[a].element.hide(),a<this._splitter.length&&this._isDocked(a)&&this._splitter[a].element.hide();var r=this._isDocked();for(t=0;t<this.contentItems.length;t++)this.contentItems[t]===e?this.contentItems[t].config[this._dimension]=0:this._isDocked(t)||(this.contentItems[t].config[this._dimension]+=o/(this.contentItems.length-1-r));1===this.contentItems.length&&s.a.prototype.undisplayChild.call(this,e),this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged')}removeChild(e,t){var o,i,a=e.config[this._dimension],r=Object(c.g)(e,this.contentItems),l=n(r-1,0);if(-1===r)throw new Error('Can\\'t remove child. ContentItem is not child of this Row or Column');this._splitter[l]&&(this._splitter[l]._$destroy(),this._splitter.splice(l,1)),l<this._splitter.length&&this._isDocked(l)&&this._splitter[l].element.hide();var p=this._isDocked();for(o=0;o<this.contentItems.length;o++)this.contentItems[o]!==e&&(this._isDocked(o)||(this.contentItems[o].config[this._dimension]+=a/(this.contentItems.length-1-p)));s.a.prototype.removeChild.call(this,e,t),1===this.contentItems.length&&!0===this.config.isClosable?(i=this.contentItems[0],this.contentItems=[],this.parent.replaceChild(this,i,!0),this._validateDocking(this.parent)):(this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged'),this._validateDocking())}replaceChild(e,t){var n=e.config[this._dimension];s.a.prototype.replaceChild.call(this,e,t),t.config[this._dimension]=n,this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged')}setSize(){0<this.contentItems.length&&(this._calculateRelativeSizes(),this._setAbsoluteSizes()),this.emitBubblingEvent('stateChanged'),this.emit('resize')}dock(e,t,o){if(1===this.contentItems.length)throw new Error('Can\\'t dock child when it single');var a=e.config[this._dimension],s=this.layoutManager.config.dimensions.headerHeight,r=Object(c.g)(e,this.contentItems),l=n(r-1,0);if(-1===r)throw new Error('Can\\'t dock child. ContentItem is not child of this Row or Column');var p,i=e._docker&&e._docker.docked;if('undefined'==typeof t||t!=i){if(i){for(this._splitter[l].element.show(),p=0;p<this.contentItems.length;p++){var d=e._docker.size;this.contentItems[p]===e?e.config[this._dimension]=d:(itemSize=this.contentItems[p].config[this._dimension]*=(100-d)/100,this.contentItems[p].config[this._dimension]=itemSize)}e._docker={docked:!1}}else{if(2>this.contentItems.length-this._isDocked())throw new Error('Can\\'t dock child when it is last in '+this.config.type);var m={column:{first:'top',last:'bottom'},row:{first:'left',last:'right'}}[this.config.type][r?'last':'first'];e.header.position()!=m&&e.header.position(m),this._splitter[l]&&this._splitter[l].element.hide();var _=this._isDocked();for(p=0;p<this.contentItems.length;p++)this.contentItems[p]===e?this.contentItems[p].config[this._dimension]=0:this._isDocked(p)||(this.contentItems[p].config[this._dimension]+=a/(this.contentItems.length-1-_));e._docker={dimension:this._dimension,size:a,realSize:e.element[this._dimension]()-s,docked:!0},o&&e.childElementContainer[this._dimension](0)}e.element.toggleClass('lm_docked',e._docker.docked),this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged'),this._validateDocking()}}_$init(){if(!0!==this.isInitialised){var e;for(s.a.prototype._$init.call(this),e=0;e<this.contentItems.length-1;e++)this.contentItems[e].element.after(this._createSplitter(e).element);for(e=0;e<this.contentItems.length;e++)this.contentItems[e]._header&&this.contentItems[e]._header.docked&&this.dock(this.contentItems[e],!0,!0)}}_setAbsoluteSizes(){var e,t=this._calculateAbsoluteSizes();for(e=0;e<this.contentItems.length;e++)0<t.additionalPixel-e&&t.itemSizes[e]++,this._isColumn?(this.contentItems[e].element.width(t.totalWidth),this.contentItems[e].element.height(t.itemSizes[e])):(this.contentItems[e].element.width(t.itemSizes[e]),this.contentItems[e].element.height(t.totalHeight))}_calculateAbsoluteSizes(){var e,n,o,i=(this.contentItems.length-1)*this._splitterSize,a=this.layoutManager.config.dimensions.headerHeight,s=this.element.width(),r=this.element.height(),l=0,c=[];for(this._isColumn?r-=i:s-=i,e=0;e<this.contentItems.length;e++)this._isDocked(e)&&(this._isColumn?r-=a-this._splitterSize:s-=a-this._splitterSize);for(e=0;e<this.contentItems.length;e++)o=this._isColumn?t(r*(this.contentItems[e].config.height/100)):t(s*(this.contentItems[e].config.width/100)),this._isDocked(e)&&(o=a),l+=o,c.push(o);return n=t((this._isColumn?r:s)-l),{itemSizes:c,additionalPixel:n,totalWidth:s,totalHeight:r}}_calculateRelativeSizes(){var e,t=0,n=[],o=this._isColumn?'height':'width';for(e=0;e<this.contentItems.length;e++)void 0===this.contentItems[e].config[o]?n.push(this.contentItems[e]):t+=this.contentItems[e].config[o];if(100===a(t))return void this._respectMinItemWidth();if(100>a(t)&&0<n.length){for(e=0;e<n.length;e++)n[e].config[o]=(100-t)/n.length;return void this._respectMinItemWidth()}if(100<a(t))for(e=0;e<n.length;e++)n[e].config[o]=50,t+=50;for(e=0;e<this.contentItems.length;e++)this.contentItems[e].config[o]=100*(this.contentItems[e].config[o]/t);this._respectMinItemWidth()}_respectMinItemWidth(){var e,t,n,o=this.layoutManager.config.dimensions?this.layoutManager.config.dimensions.minItemWidth||0:0,s=null,r=[],l=0,c=0,p=0,d=0,m=null,_=[];if(!(this._isColumn||!o||1>=this.contentItems.length)){s=this._calculateAbsoluteSizes();for(var g=0;g<this.contentItems.length;g++)m=this.contentItems[g],d=s.itemSizes[g],d<o?(c+=o-d,n={width:o}):(l+=d-o,n={width:d},r.push(n)),_.push(n);if(!(0==c||c>l)){for(e=c/l,p=c,g=0;g<r.length;g++)n=r[g],t=a((n.width-o)*e),p-=t,n.width-=t;for(0!==p&&(_[_.length-1].width-=p),g=0;g<this.contentItems.length;g++)this.contentItems[g].config.width=100*(_[g].width/s.totalWidth)}}}_createSplitter(e){var t;return t=new l.a(this._isColumn,this._splitterSize,this._splitterGrabSize),t.on('drag',Object(c.c)(this._onSplitterDrag,this,[t]),this),t.on('dragStop',Object(c.c)(this._onSplitterDragStop,this,[t]),this),t.on('dragStart',Object(c.c)(this._onSplitterDragStart,this,[t]),this),this._splitter.splice(e,0,t),t}_getItemsForSplitter(e){var t=Object(c.g)(e,this._splitter);return{before:this.contentItems[t],after:this.contentItems[t+1]}}_isDocked(e){if('undefined'==typeof e){for(var t=0,n=0;n<this.contentItems.length;++n)this._isDocked(n)&&t++;return t}return e<this.contentItems.length?this.contentItems[e]._docker&&this.contentItems[e]._docker.docked:void 0}_validateDocking(e){e=e||this;for(var t=1<e.contentItems.length-e._isDocked(),n=0;n<e.contentItems.length;++n)e.contentItems[n]instanceof r.a&&(e.contentItems[n].header._setDockable(e._isDocked(n)||t),e.contentItems[n].header._$setClosable(t))}_getMinimumDimensions(e){for(var t=0,o=0,a=0;a<e.length;++a)t=n(e[a].minWidth||0,t),o=n(e[a].minHeight||0,o);return{horizontal:t,vertical:o}}_onSplitterDragStart(e){var t=this._getItemsForSplitter(e),n=this.layoutManager.config.dimensions[this._isColumn?'minItemHeight':'minItemWidth'],o=this._getMinimumDimensions(t.before.config.content),i=this._isColumn?o.vertical:o.horizontal,a=this._getMinimumDimensions(t.after.config.content),s=this._isColumn?a.vertical:a.horizontal;this._splitterPosition=0,this._splitterMinPosition=-1*(t.before.element[this._dimension]()-(i||n)),this._splitterMaxPosition=t.after.element[this._dimension]()-(s||n)}_onSplitterDrag(e,t,n){var o=this._isColumn?n:t;o>this._splitterMinPosition&&o<this._splitterMaxPosition&&(this._splitterPosition=o,e.element.css(this._isColumn?'top':'left',o))}_onSplitterDragStop(e){var t=this._getItemsForSplitter(e),n=t.before.element[this._dimension](),o=t.after.element[this._dimension](),i=(this._splitterPosition+n)/(n+o),a=t.before.config[this._dimension]+t.after.config[this._dimension];t.before.config[this._dimension]=i*a,t.after.config[this._dimension]=(1-i)*a,e.element.css({top:0,left:0}),Object(c.a)(Object(c.c)(this.callDownwards,this,['setSize']))}}o.a=p},function(e,t,n){'use strict';var o=n(1),i=n(0);class a extends o.b{constructor(e,t){super(),this._timeout=null,this._eElement=$(e),this._oDocument=$(document),this._eBody=$(document.body),this._nButtonCode=t||0,this._nDelay=200,this._nDistance=10,this._nX=0,this._nY=0,this._nOriginalX=0,this._nOriginalY=0,this._bDragging=!1,this._fMove=Object(i.c)(this.onMouseMove,this),this._fUp=Object(i.c)(this.onMouseUp,this),this._fDown=Object(i.c)(this.onMouseDown,this),this._eElement.on('mousedown touchstart',this._fDown)}destroy(){this._eElement.unbind('mousedown touchstart',this._fDown),this._oDocument.unbind('mouseup touchend',this._fUp),this._eElement=null,this._oDocument=null,this._eBody=null}onMouseDown(e){if(e.preventDefault(),0==e.button||'touchstart'===e.type){var t=this._getCoordinates(e);this._nOriginalX=t.x,this._nOriginalY=t.y,this._oDocument.on('mousemove touchmove',this._fMove),this._oDocument.one('mouseup touchend',this._fUp),this._timeout=setTimeout(Object(i.c)(this._startDrag,this),this._nDelay)}}onMouseMove(e){var t=Math.abs;if(null!=this._timeout){e.preventDefault();var n=this._getCoordinates(e);this._nX=n.x-this._nOriginalX,this._nY=n.y-this._nOriginalY,!1===this._bDragging&&(t(this._nX)>this._nDistance||t(this._nY)>this._nDistance)&&(clearTimeout(this._timeout),this._startDrag()),this._bDragging&&this.emit('drag',this._nX,this._nY,e)}}onMouseUp(e){null!=this._timeout&&(clearTimeout(this._timeout),this._eBody.removeClass('lm_dragging'),this._eElement.removeClass('lm_dragging'),this._oDocument.find('iframe').css('pointer-events',''),this._oDocument.unbind('mousemove touchmove',this._fMove),this._oDocument.unbind('mouseup touchend',this._fUp),!0===this._bDragging&&(this._bDragging=!1,this.emit('dragStop',e,this._nOriginalX+this._nX)))}_startDrag(){this._bDragging=!0,this._eBody.addClass('lm_dragging'),this._eElement.addClass('lm_dragging'),this._oDocument.find('iframe').css('pointer-events','none'),this.emit('dragStart',this._nOriginalX,this._nOriginalY)}_getCoordinates(e){return e=Object(i.e)(e),{x:e.pageX,y:e.pageY}}}t.a=a},function(e,t,n){var o=n(9);e.exports=function(e){if(!o(e))throw TypeError(e+' is not an object!');return e}},function(e){e.exports=function(e){return'object'==typeof e?null!==e:'function'==typeof e}},function(e){e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t,n){'use strict';var o=n(0);t.a=class{constructor(){if(this._keys=['settings','hasHeaders','constrainDragToContainer','selectionEnabled','dimensions','borderWidth','minItemHeight','minItemWidth','headerHeight','dragProxyWidth','dragProxyHeight','labels','close','maximise','minimise','popout','content','componentName','componentState','id','width','type','height','isClosable','title','popoutWholeStack','openPopouts','parentId','activeItemIndex','reorderEnabled','borderGrabWidth'],36<this._keys.length)throw new Error('Too many keys in config minifier map');this._values=[!0,!1,'row','column','stack','component','close','maximise','minimise','open in new window']}minifyConfig(e){var t={};return this._nextLevel(e,t,'_min'),t}unminifyConfig(e){var t={};return this._nextLevel(e,t,'_max'),t}_nextLevel(e,t,n){var o,i;for(o in e)e instanceof Array&&(o=parseInt(o,10)),e.hasOwnProperty(o)&&(i=this[n](o,this._keys),'object'==typeof e[o]?(t[i]=e[o]instanceof Array?[]:{},this._nextLevel(e[o],t[i],n)):t[i]=this[n](e[o],this._values))}_min(e,t){if('string'==typeof e&&1===e.length)return'___'+e;var n=Object(o.g)(e,t);return-1===n?e:n.toString(36)}_max(e,t){return'string'==typeof e&&1===e.length?t[parseInt(e,36)]:'string'==typeof e&&'___'===e.substr(0,3)?e[3]:e}}},function(e,t,n){'use strict';var o=n(3),i=n(6);class a extends o.a{constructor(e,t,n){super(e,t,null),this.isRoot=!0,this.type='root',this.element=$('<div class=\"lm_goldenlayout lm_item lm_root\"></div>'),this.childElementContainer=this.element,this._containerElement=n,this._containerElement.append(this.element)}addChild(e){if(0<this.contentItems.length)throw new Error('Root node can only have a single child');e=this.layoutManager._$normalizeContentItem(e,this),this.childElementContainer.append(e.element),o.a.prototype.addChild.call(this,e),this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged')}setSize(e,t){e='undefined'==typeof e?this._containerElement.width():e,t='undefined'==typeof t?this._containerElement.height():t,this.element.width(e),this.element.height(t),this.contentItems[0]&&(this.contentItems[0].element.width(e),this.contentItems[0].element.height(t))}_$highlightDropZone(){this.layoutManager.tabDropPlaceholder.remove(),o.a.prototype._$highlightDropZone.apply(this,arguments)}_$onDrop(e,t){var n;if(e.isComponent&&(n=this.layoutManager.createContentItem({type:'stack',header:e.config.header||{}},this),n._$init(),n.addChild(e),e=n),!this.contentItems.length)this.addChild(e);else{('row'===e.config.type||'column'===e.config.type)&&(n=this.layoutManager.createContentItem({type:'stack'},this),n.addChild(e),e=n);var o='x'==t.side[0]?'row':'column',a='x'==t.side[0]?'width':'height',s='2'==t.side[1],r=this.contentItems[0];if(!(r instanceof i.a)||r.type!=o){var l=this.layoutManager.createContentItem({type:o},this);this.replaceChild(r,l),l.addChild(e,s?0:void 0,!0),l.addChild(r,s?void 0:0,!0),r.config[a]=50,e.config[a]=50,l.callDownwards('setSize')}else{var c=r.contentItems[s?0:r.contentItems.length-1];r.addChild(e,s?0:void 0,!0),c.config[a]*=0.5,e.config[a]=c.config[a],r.callDownwards('setSize')}}}}t.a=a},function(t,o,i){'use strict';var a=i(3),s=i(6),r=i(28),l=i(0);class c extends a.a{constructor(e,t,n){super(e,t,n),this.element=$('<div class=\"lm_item lm_stack\"></div>'),this._activeContentItem=null;var o=e.config;this._header={show:!0===o.settings.hasHeaders&&!1!==t.hasHeaders,popout:o.settings.showPopoutIcon&&o.labels.popout,maximise:o.settings.showMaximiseIcon&&o.labels.maximise,close:o.settings.showCloseIcon&&o.labels.close,minimise:o.labels.minimise},o.header&&Object(l.b)(this._header,o.header),t.header&&Object(l.b)(this._header,t.header),t.content&&t.content[0]&&t.content[0].header&&Object(l.b)(this._header,t.content[0].header),this._dropZones={},this._dropSegment=null,this._contentAreaDimensions=null,this._dropIndex=null,this.isStack=!0,this.childElementContainer=$('<div class=\"lm_items\"></div>'),this.header=new r.a(e,this),this.element.on('mouseleave mouseenter',Object(l.c)(function(e){this._docker&&this._docker.docked&&this.childElementContainer[this._docker.dimension]('mouseenter'==e.type?this._docker.realSize:0)},this)),this.element.append(this.header.element),this.element.append(this.childElementContainer),this._setupHeaderPosition(),this._$validateClosability()}dock(e){this._header.dock&&this.parent instanceof s.a&&this.parent.dock(this,e)}setSize(){if('none'!==this.element.css('display')){var e=this._docker&&this._docker.docked,t={width:this.element.width(),height:this.element.height()};this._header.show&&(t[this._sided?'width':'height']-=this.layoutManager.config.dimensions.headerHeight),e&&(t[this._docker.dimension]=this._docker.realSize),e&&'height'!=this._docker.dimension||this.childElementContainer.width(t.width),e&&'width'!=this._docker.dimension||this.childElementContainer.height(t.height);for(var n=0;n<this.contentItems.length;n++)this.contentItems[n].element.width(t.width),this.contentItems[n].element.height(t.height);this.emit('resize'),this.emitBubblingEvent('stateChanged')}}_$init(){var e,t;if(!0!==this.isInitialised){for(a.a.prototype._$init.call(this),e=0;e<this.contentItems.length;e++)this.header.createTab(this.contentItems[e]),this.contentItems[e]._$hide();if(0<this.contentItems.length){if(t=this.contentItems[this.config.activeItemIndex||0],!t)throw new Error('Configured activeItemIndex out of bounds');this.setActiveContentItem(t)}}}setActiveContentItem(e){if(-1===Object(l.g)(e,this.contentItems))throw new Error('contentItem is not a child of this stack');null!==this._activeContentItem&&this._activeContentItem._$hide(),this._activeContentItem=e,this.header.setActiveContentItem(e),e._$show(),this.emit('activeContentItemChanged',e),this.layoutManager.emit('activeContentItemChanged',e),this.emitBubblingEvent('stateChanged')}getActiveContentItem(){return this.header.activeContentItem}addChild(e,t){t>this.contentItems.length&&(t-=1),e=this.layoutManager._$normalizeContentItem(e,this),a.a.prototype.addChild.call(this,e,t),this.childElementContainer.append(e.element),this.header.createTab(e,t),this.setActiveContentItem(e),this.callDownwards('setSize'),this._$validateClosability(),this.parent instanceof s.a&&this.parent._validateDocking(),this.emitBubblingEvent('stateChanged')}removeChild(e,t){var o=Object(l.g)(e,this.contentItems);a.a.prototype.removeChild.call(this,e,t),this.header.removeTab(e),this.header.activeContentItem===e&&(0<this.contentItems.length?this.setActiveContentItem(this.contentItems[n(o-1,0)]):this._activeContentItem=null),this._$validateClosability(),this.parent instanceof s.a&&this.parent._validateDocking(),this.emitBubblingEvent('stateChanged')}undisplayChild(e){if(1<this.contentItems.length){var t=Object(l.g)(e,this.contentItems);e._$hide&&e._$hide(),this.setActiveContentItem(this.contentItems[0===t?t+1:t-1])}else this.header.hideTab(e),e._$hide&&e._$hide(),a.a.prototype.undisplayChild.call(this,e),this.parent instanceof s.a&&this.parent._validateDocking();this.emitBubblingEvent('stateChanged')}_$validateClosability(){var e,t,n;for(e=this.header._isClosable(),n=0,t=this.contentItems.length;n<t&&!!e;n++)e=this.contentItems[n].config.isClosable;this.header._$setClosable(e)}_$destroy(){a.a.prototype._$destroy.call(this),this.header._$destroy(),this.element.off('mouseenter mouseleave')}_$onDrop(e){if('header'===this._dropSegment)return this._resetHeaderDropZone(),void this.addChild(e,this._dropIndex);if('body'===this._dropSegment)return void this.addChild(e);var t,n,o,i='top'===this._dropSegment||'bottom'===this._dropSegment,a='left'===this._dropSegment||'right'===this._dropSegment,s='top'===this._dropSegment||'left'===this._dropSegment,r=i&&this.parent.isColumn||a&&this.parent.isRow,c=i?'column':'row',p=i?'height':'width';e.isComponent&&(n=this.layoutManager.createContentItem({type:'stack',header:e.config.header||{}},this),n._$init(),n.addChild(e),e=n),('row'===e.config.type||'column'===e.config.type)&&(n=this.layoutManager.createContentItem({type:'stack'},this),n.addChild(e),e=n),r?(t=Object(l.g)(this,this.parent.contentItems),this.parent.addChild(e,s?t:t+1,!0),this.config[p]*=0.5,e.config[p]=this.config[p],this.parent.callDownwards('setSize')):(c=i?'column':'row',o=this.layoutManager.createContentItem({type:c},this),this.parent.replaceChild(this,o),o.addChild(e,s?0:void 0,!0),o.addChild(this,s?void 0:0,!0),this.config[p]=50,e.config[p]=50,o.callDownwards('setSize')),this.parent._validateDocking()}_$highlightDropZone(e,t){var n,o;for(n in this._contentAreaDimensions)if(o=this._contentAreaDimensions[n].hoverArea,o.x1<e&&o.x2>e&&o.y1<t&&o.y2>t)return void('header'===n?(this._dropSegment='header',this._highlightHeaderDropZone(this._sided?t:e)):(this._resetHeaderDropZone(),this._highlightBodyDropZone(n)))}_$getArea(){if('none'===this.element.css('display'))return null;var e=a.a.prototype._$getArea,t=e.call(this,this.header.element),n=e.call(this,this.childElementContainer),o=n.x2-n.x1,i=n.y2-n.y1;return(this._contentAreaDimensions={header:{hoverArea:{x1:t.x1,y1:t.y1,x2:t.x2,y2:t.y2},highlightArea:{x1:t.x1,y1:t.y1,x2:t.x2,y2:t.y2}}},this._activeContentItem&&!1===this._activeContentItem.isComponent)?t:0===this.contentItems.length?(this._contentAreaDimensions.body={hoverArea:{x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2},highlightArea:{x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2}},e.call(this,this.element)):(this._contentAreaDimensions.left={hoverArea:{x1:n.x1,y1:n.y1,x2:n.x1+0.25*o,y2:n.y2},highlightArea:{x1:n.x1,y1:n.y1,x2:n.x1+0.5*o,y2:n.y2}},this._contentAreaDimensions.top={hoverArea:{x1:n.x1+0.25*o,y1:n.y1,x2:n.x1+0.75*o,y2:n.y1+0.5*i},highlightArea:{x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y1+0.5*i}},this._contentAreaDimensions.right={hoverArea:{x1:n.x1+0.75*o,y1:n.y1,x2:n.x2,y2:n.y2},highlightArea:{x1:n.x1+0.5*o,y1:n.y1,x2:n.x2,y2:n.y2}},this._contentAreaDimensions.bottom={hoverArea:{x1:n.x1+0.25*o,y1:n.y1+0.5*i,x2:n.x1+0.75*o,y2:n.y2},highlightArea:{x1:n.x1,y1:n.y1+0.5*i,x2:n.x2,y2:n.y2}},e.call(this,this.element))}_highlightHeaderDropZone(t){var n,o,i,a,s,r,l,c,p,d=this.header.tabs.length,m=!1;if(0===d)return l=this.header.element.offset(),void this.layoutManager.dropTargetIndicator.highlightArea({x1:l.left,x2:l.left+100,y1:l.top+this.header.element.height()-20,y2:l.top+this.header.element.height()});for(n=0;n<d;n++)if(o=this.header.tabs[n].element,s=o.offset(),this._sided?(a=s.top,i=s.left,c=o.height()):(a=s.left,i=s.top,c=o.width()),t>a&&t<a+c){m=!0;break}if(!(!1==m&&t<a)){if(p=a+c/2,t<p?(this._dropIndex=n,o.before(this.layoutManager.tabDropPlaceholder)):(this._dropIndex=e(n+1,d),o.after(this.layoutManager.tabDropPlaceholder)),this._sided){var _=this.layoutManager.tabDropPlaceholder.offset().top;return void this.layoutManager.dropTargetIndicator.highlightArea({x1:i,x2:i+o.innerHeight(),y1:_,y2:_+this.layoutManager.tabDropPlaceholder.width()})}r=this.layoutManager.tabDropPlaceholder.offset().left,this.layoutManager.dropTargetIndicator.highlightArea({x1:r,x2:r+this.layoutManager.tabDropPlaceholder.width(),y1:i,y2:i+o.innerHeight()})}}_resetHeaderDropZone(){this.layoutManager.tabDropPlaceholder.remove()}toggleMaximise(t){this.isMaximised||this.dock(!1),a.a.prototype.toggleMaximise.call(this,t)}_setupHeaderPosition(){var e=0<=['right','left','bottom'].indexOf(this._header.show)&&this._header.show;if(this.header.element.toggle(!!this._header.show),this._side=e,this._sided=0<=['right','left'].indexOf(this._side),this.element.removeClass('lm_left lm_right lm_bottom'),this._side&&this.element.addClass('lm_'+this._side),this.element.find('.lm_header').length&&this.childElementContainer){var t=0<=['right','bottom'].indexOf(this._side)?'before':'after';this.header.element[t](this.childElementContainer),this.callDownwards('setSize')}}_highlightBodyDropZone(e){var t=this._contentAreaDimensions[e].highlightArea;this.layoutManager.dropTargetIndicator.highlightArea(t),this._dropSegment=e}}o.a=c},function(e){e.exports=function(e){if(e==void 0)throw TypeError('Can\\'t call method on '+e);return e}},function(e,t,n){var o=n(44),i=n(20);e.exports=Object.keys||function(e){return o(e,i)}},function(e){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},function(e,t,n){var o=n(45),i=n(14);e.exports=function(e){return o(i(e))}},function(e){var n=Math.ceil;e.exports=function(e){return isNaN(e=+e)?0:(0<e?t:n)(e)}},function(e,t,n){var o=n(50)('keys'),i=n(52);e.exports=function(e){return o[e]||(o[e]=i(e))}},function(e){e.exports=['constructor','hasOwnProperty','isPrototypeOf','propertyIsEnumerable','toLocaleString','toString','valueOf']},function(e,t,n){var o=n(4),i=n(2),a=n(54),s=n(56),r=n(16),l='prototype',c=function(e,t,n){var p,d,m,_=e&c.F,g=e&c.G,u=e&c.S,f=e&c.P,h=e&c.B,y=e&c.W,v=g?i:i[t]||(i[t]={}),b=v[l],k=g?o:u?o[t]:(o[t]||{})[l];for(p in g&&(n=t),n)d=!_&&k&&void 0!==k[p],d&&r(v,p)||(m=d?k[p]:n[p],v[p]=g&&'function'!=typeof k[p]?n[p]:h&&d?a(m,o):y&&k[p]==m?function(e){var t=function(t,n,o){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n);}return new e(t,n,o)}return e.apply(this,arguments)};return t[l]=e[l],t}(m):f&&'function'==typeof m?a(Function.call,m):m,f&&((v.virtual||(v.virtual={}))[p]=m,e&c.R&&b&&!b[p]&&s(b,p,m)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,t,n){var o=n(8),i=n(57),a=n(58),s=Object.defineProperty;t.f=n(5)?Object.defineProperty:function(e,t,n){if(o(e),t=a(t,!0),o(n),i)try{return s(e,t,n)}catch(t){}if('get'in n||'set'in n)throw TypeError('Accessors not supported!');return'value'in n&&(e[t]=n.value),e}},function(e,t,n){var o=n(9),i=n(4).document,a=o(i)&&o(i.createElement);e.exports=function(e){return a?i.createElement(e):{}}},function(e,t){'use strict';t.a=class{constructor(e,t){this._reactComponent=null,this._originalComponentWillUpdate=null,this._container=e,this._initialState=t,this._reactClass=this._getReactClass(),this._container.on('open',this._render,this),this._container.on('destroy',this._destroy,this)}_render(){this._reactComponent=ReactDOM.render(this._getReactComponent(),this._container.getElement()[0]),this._originalComponentWillUpdate=this._reactComponent.componentWillUpdate||function(){},this._reactComponent.componentWillUpdate=this._onUpdate.bind(this),this._container.getState()&&this._reactComponent.setState(this._container.getState())}_destroy(){ReactDOM.unmountComponentAtNode(this._container.getElement()[0]),this._container.off('open',this._render,this),this._container.off('destroy',this._destroy,this)}_onUpdate(e,t){this._container.setState(t),this._originalComponentWillUpdate.call(this._reactComponent,e,t)}_getReactClass(){var e,t=this._container._config.component;if(!t)throw new Error('No react component name. type: react-component needs a field `component`');if(e=this._container.layoutManager.getComponent(t),!e)throw new Error('React component \"'+t+'\" not found. Please register all components with GoldenLayout using `registerComponent(name, component)`');return e}_getReactComponent(){var e={glEventHub:this._container.layoutManager.eventHub,glContainer:this._container},t=$.extend(e,this._container._config.props);return React.createElement(this._reactClass,t)}}},function(e,t,n){'use strict';var o=n(1),i=n(0);class a extends o.b{constructor(e){super(),this._layoutManager=e,this._dontPropagateToParent=null,this._childEventSource=null,this.on(o.a,Object(i.c)(this._onEventFromThis,this)),this._boundOnEventFromChild=Object(i.c)(this._onEventFromChild,this),$(window).on('gl_child_event',this._boundOnEventFromChild)}_onEventFromThis(){var e=Array.prototype.slice.call(arguments);this._layoutManager.isSubWindow&&e[0]!==this._dontPropagateToParent&&this._propagateToParent(e),this._propagateToChildren(e),this._dontPropagateToParent=null,this._childEventSource=null}_$onEventFromParent(e){this._dontPropagateToParent=e[0],this.emit.apply(this,e)}_onEventFromChild(e){this._childEventSource=e.originalEvent.__gl,this.emit.apply(this,e.originalEvent.__glArgs)}_propagateToParent(e){var t,n='gl_child_event';document.createEvent?(t=window.opener.document.createEvent('HTMLEvents'),t.initEvent(n,!0,!0)):(t=window.opener.document.createEventObject(),t.eventType=n),t.eventName=n,t.__glArgs=e,t.__gl=this._layoutManager,document.createEvent?window.opener.dispatchEvent(t):window.opener.fireEvent('on'+t.eventType,t)}_propagateToChildren(e){var t,n;for(n=0;n<this._layoutManager.openPopouts.length;n++)t=this._layoutManager.openPopouts[n].getGlInstance(),t&&t!==this._childEventSource&&t.eventHub._$onEventFromParent(e)}destroy(){$(window).off('gl_child_event',this._boundOnEventFromChild)}}t.a=a},function(e,t){'use strict';t.a=class{constructor(e,t){this.name=e,this.origin=t,this.isPropagationStopped=!1}stopPropagation(){this.isPropagationStopped=!0}}},function(e,t){'use strict';class n extends Error{constructor(e,t){super(),this.name='Configuration Error',this.message=e,this.node=t}}t.a=n},function(e,t,n){'use strict';var o=n(1),a=n(29),i=n(31),s=n(0);class r extends o.b{constructor(e,t){super(),this.layoutManager=e,this.element=$('<div class=\"lm_header\"><ul class=\"lm_tabs\"></ul><ul class=\"lm_controls\"></ul><ul class=\"lm_tabdropdown_list\"></ul></div>'),!0===this.layoutManager.config.settings.selectionEnabled&&(this.element.addClass('lm_selectable'),this.element.on('click touchstart',Object(s.c)(this._onHeaderClick,this))),this.tabsContainer=this.element.find('.lm_tabs'),this.tabDropdownContainer=this.element.find('.lm_tabdropdown_list'),this.tabDropdownContainer.hide(),this.controlsContainer=this.element.find('.lm_controls'),this.parent=t,this.parent.on('resize',this._updateTabSizes,this),this.tabs=[],this.tabsMarkedForRemoval=[],this.activeContentItem=null,this.closeButton=null,this.dockButton=null,this.tabDropdownButton=null,this.hideAdditionalTabsDropdown=Object(s.c)(this._hideAdditionalTabsDropdown,this),$(document).mouseup(this.hideAdditionalTabsDropdown),this._lastVisibleTabIndex=-1,this._tabControlOffset=this.layoutManager.config.settings.tabControlOffset,this._createControls()}createTab(e,t){var n,o;for(o=0;o<this.tabs.length;o++)if(this.tabs[o].contentItem===e)return;return n=new a.a(this,e),0===this.tabs.length?(this.tabs.push(n),void this.tabsContainer.append(n.element)):void(void 0===t&&(t=this.tabs.length),0<t?this.tabs[t-1].element.after(n.element):this.tabs[0].element.before(n.element),this.tabs.splice(t,0,n),this._updateTabSizes())}removeTab(e){for(var t=0;t<this.tabs.length;t++)if(this.tabs[t].contentItem===e)return this.tabs[t]._$destroy(),void this.tabs.splice(t,1);for(t=0;t<this.tabsMarkedForRemoval.length;t++)if(this.tabsMarkedForRemoval[t].contentItem===e)return this.tabsMarkedForRemoval[t]._$destroy(),void this.tabsMarkedForRemoval.splice(t,1);throw new Error('contentItem is not controlled by this header')}hideTab(e){for(var t=0;t<this.tabs.length;t++)if(this.tabs[t].contentItem===e)return this.tabs[t].element.hide(),this.tabsMarkedForRemoval.push(this.tabs[t]),void this.tabs.splice(t,1);throw new Error('contentItem is not controlled by this header')}setActiveContentItem(e){var t,n,o,i;for(t=0;t<this.tabs.length;t++)o=this.tabs[t].contentItem===e,this.tabs[t].setActive(o),!0===o&&(this.activeContentItem=e,this.parent.config.activeItemIndex=t);if(this.layoutManager.config.settings.reorderOnTabMenuClick&&-1!==this._lastVisibleTabIndex&&this.parent.config.activeItemIndex>this._lastVisibleTabIndex){for(i=this.tabs[this.parent.config.activeItemIndex],n=this.parent.config.activeItemIndex;0<n;n--)this.tabs[n]=this.tabs[n-1];this.tabs[0]=i,this.parent.config.activeItemIndex=0}this._updateTabSizes(),this.parent.emitBubblingEvent('stateChanged')}position(e){var t=this.parent._header.show;if(this.parent._docker&&this.parent._docker.docked)throw new Error('Can\\'t change header position in docked stack');return t&&!this.parent._side&&(t='top'),void 0!==e&&this.parent._header.show!=e&&(this.parent._header.show=e,this.parent._setupHeaderPosition()),t}_$setClosable(e){return this._canDestroy=e||1<this.tabs.length,this.closeButton&&this._isClosable()&&(this.closeButton.element[e?'show':'hide'](),!0)}_setDockable(e){return this.dockButton&&this.parent._header&&this.parent._header.dock&&(this.dockButton.element.toggle(!!e),!0)}_$destroy(){this.emit('destroy',this);for(var e=0;e<this.tabs.length;e++)this.tabs[e]._$destroy();$(document).off('mouseup',this.hideAdditionalTabsDropdown),this.element.remove()}_getHeaderSetting(e){if(e in this.parent._header)return this.parent._header[e]}_createControls(){var e,t,n,o,a,r,l,c,p;if(p=Object(s.c)(this._showAdditionalTabsDropdown,this),c=this.layoutManager.config.labels.tabDropdown,this.tabDropdownButton=new i.a(this,c,'lm_tabdropdown',p),this.tabDropdownButton.element.hide(),this.parent._header&&this.parent._header.dock){var d=Object(s.c)(this.parent.dock,this.parent);n=this._getHeaderSetting('dock'),this.dockButton=new i.a(this,n,'lm_dock',d)}this._getHeaderSetting('popout')&&(t=Object(s.c)(this._onPopoutClick,this),n=this._getHeaderSetting('popout'),new i.a(this,n,'lm_popout',t)),this._getHeaderSetting('maximise')&&(r=Object(s.c)(this.parent.toggleMaximise,this.parent),o=this._getHeaderSetting('maximise'),a=this._getHeaderSetting('minimise'),l=new i.a(this,o,'lm_maximise',r),this.parent.on('maximised',function(){l.element.attr('title',a)}),this.parent.on('minimised',function(){l.element.attr('title',o)})),this._isClosable()&&(e=Object(s.c)(this.parent.remove,this.parent),n=this._getHeaderSetting('close'),this.closeButton=new i.a(this,n,'lm_close',e))}_showAdditionalTabsDropdown(){this.tabDropdownContainer.show()}_hideAdditionalTabsDropdown(){this.tabDropdownContainer.hide()}_isClosable(){return this.parent.config.isClosable&&this.layoutManager.config.settings.showCloseIcon}_onPopoutClick(){!0===this.layoutManager.config.settings.popoutWholeStack?this.parent.popout():this.activeContentItem.popout()}_onHeaderClick(e){e.target===this.element[0]&&this.parent.select()}_updateTabSizes(e){if(0!==this.tabs.length){this.tabDropdownButton.element.toggle(!0===e);var t=function(e){return e?'width':'height'};this.element.css(t(!this.parent._sided),''),this.element[t(this.parent._sided)](this.layoutManager.config.dimensions.headerHeight);var n,o,i,a,s,r=this.element.outerWidth()-this.controlsContainer.outerWidth()-this._tabControlOffset,l=0,c=0,p=0,d=this.layoutManager.config.settings.tabOverlapAllowance,m=!1,_=this.activeContentItem?this.tabs.indexOf(this.activeContentItem.tab):0,g=this.tabs[_];for(this.parent._sided&&(r=this.element.outerHeight()-this.controlsContainer.outerHeight()-this._tabControlOffset),this._lastVisibleTabIndex=-1,o=0;o<this.tabs.length;o++)if(n=this.tabs[o].element,this.tabsContainer.append(n),s=n.outerWidth()+parseInt(n.css('margin-right'),10),l+=s,c=_<=o?l:l+g.element.outerWidth()+parseInt(g.element.css('margin-right'),10),c>r){if(!!m)o===_&&(n.css({\"z-index\":'auto',\"margin-left\":''}),this.tabsContainer.append(n));else if(p=0<_&&_<=o?(c-r)/(o-1):(c-r)/o,p<d){for(i=0;i<=o;i++)a=i!==_&&0!==i?'-'+p+'px':'',this.tabs[i].element.css({\"z-index\":o-i,\"margin-left\":a});this._lastVisibleTabIndex=o,this.tabsContainer.append(n)}else m=!0;if(m&&o!==_)if(e)n.css({\"z-index\":'auto',\"margin-left\":''}),this.tabDropdownContainer.append(n);else return void this._updateTabSizes(!0)}else this._lastVisibleTabIndex=o,n.css({\"z-index\":'auto',\"margin-left\":''}),this.tabsContainer.append(n)}}}t.a=r},function(e,t,n){'use strict';var o=n(7),i=n(30),a=n(0);t.a=class{constructor(e,t){this.header=e,this.contentItem=t,this.element=$('<li class=\"lm_tab\"><i class=\"lm_left\"></i><span class=\"lm_title\"></span><div class=\"lm_close_tab\"></div><i class=\"lm_right\"></i></li>'),this.titleElement=this.element.find('.lm_title'),this.closeElement=this.element.find('.lm_close_tab'),this.closeElement[t.config.isClosable?'show':'hide'](),this.isActive=!1,this.setTitle(t.config.title),this.contentItem.on('titleChanged',this.setTitle,this),this._layoutManager=this.contentItem.layoutManager,!0===this._layoutManager.config.settings.reorderEnabled&&!0===t.config.reorderEnabled&&(this._dragListener=new o.a(this.element),this._dragListener.on('dragStart',this._onDragStart,this),this.contentItem.on('destroy',this._dragListener.destroy,this._dragListener)),this._onTabClickFn=Object(a.c)(this._onTabClick,this),this._onCloseClickFn=Object(a.c)(this._onCloseClick,this),this.element.on('mousedown touchstart',this._onTabClickFn),this.contentItem.config.isClosable?(this.closeElement.on('click touchstart',this._onCloseClickFn),this.closeElement.on('mousedown',this._onCloseMousedown)):this.closeElement.remove(),this.contentItem.tab=this,this.contentItem.emit('tab',this),this.contentItem.layoutManager.emit('tabCreated',this),this.contentItem.isComponent&&(this.contentItem.container.tab=this,this.contentItem.container.emit('tab',this))}setTitle(e){this.element.attr('title',Object(a.k)(e)),this.titleElement.html(e)}setActive(e){e===this.isActive||(this.isActive=e,e?this.element.addClass('lm_active'):this.element.removeClass('lm_active'))}_$destroy(){this.element.off('mousedown touchstart',this._onTabClickFn),this.closeElement.off('click touchstart',this._onCloseClickFn),this._dragListener&&(this.contentItem.off('destroy',this._dragListener.destroy,this._dragListener),this._dragListener.off('dragStart',this._onDragStart),this._dragListener=null),this.element.remove()}_onDragStart(e,t){return this.header._canDestroy?void(!0===this.contentItem.parent.isMaximised&&this.contentItem.parent.toggleMaximise(),new i.a(e,t,this._dragListener,this._layoutManager,this.contentItem,this.header.parent)):null}_onTabClick(e){if(0===e.button||'touchstart'===e.type){var t=this.header.parent.getActiveContentItem();this.contentItem!==t&&this.header.parent.setActiveContentItem(this.contentItem)}else 1===e.button&&this.contentItem.config.isClosable&&this._onCloseClick(e)}_onCloseClick(e){e.stopPropagation();this.header._canDestroy&&this.header.parent.removeChild(this.contentItem)}_onCloseMousedown(e){e.stopPropagation()}}},function(e,t,n){'use strict';var o=n(1),i=n(0);class a extends o.b{constructor(e,t,n,o,a,s){super(),this._dragListener=n,this._layoutManager=o,this._contentItem=a,this._originalParent=s,this._area=null,this._lastValidArea=null,this._dragListener.on('drag',this._onDrag,this),this._dragListener.on('dragStop',this._onDrop,this),this.element=$('<div class=\"lm_dragProxy\"><div class=\"lm_header\"><ul class=\"lm_tabs\"><li class=\"lm_tab lm_active\"><i class=\"lm_left\"></i><span class=\"lm_title\"></span><i class=\"lm_right\"></i></li></ul></div><div class=\"lm_content\"></div></div>'),s&&s._side&&(this._sided=s._sided,this.element.addClass('lm_'+s._side),0<=['right','bottom'].indexOf(s._side)&&this.element.find('.lm_content').after(this.element.find('.lm_header'))),this.element.css({left:e,top:t}),this.element.find('.lm_tab').attr('title',Object(i.k)(this._contentItem.config.title)),this.element.find('.lm_title').html(this._contentItem.config.title),this.childElementContainer=this.element.find('.lm_content'),this.childElementContainer.append(a.element),this._undisplayTree(),this._layoutManager._$calculateItemAreas(),this._setDimensions(),$(document.body).append(this.element);var r=this._layoutManager.container.offset();this._minX=r.left,this._minY=r.top,this._maxX=this._layoutManager.container.width()+this._minX,this._maxY=this._layoutManager.container.height()+this._minY,this._width=this.element.width(),this._height=this.element.height(),this._setDropPosition(e,t)}_onDrag(e,t,n){n=Object(i.e)(n);var o=n.pageX,a=n.pageY,s=o>this._minX&&o<this._maxX&&a>this._minY&&a<this._maxY;(s||!0!==this._layoutManager.config.settings.constrainDragToContainer)&&this._setDropPosition(o,a)}_setDropPosition(e,t){this.element.css({left:e,top:t}),this._area=this._layoutManager._$getArea(e,t),null!==this._area&&(this._lastValidArea=this._area,this._area.contentItem._$highlightDropZone(e,t,this._area))}_onDrop(){this._updateTree(),this._layoutManager.dropTargetIndicator.hide(),null===this._area?null===this._lastValidArea?this._originalParent?this._originalParent.addChild(this._contentItem):this._contentItem._$destroy():this._lastValidArea.contentItem._$onDrop(this._contentItem,this._lastValidArea):this._area.contentItem._$onDrop(this._contentItem,this._area),this.element.remove(),this._layoutManager.emit('itemDropped',this._contentItem)}_undisplayTree(){this._contentItem.parent&&this._contentItem.parent.undisplayChild(this._contentItem)}_updateTree(){this._contentItem.parent&&this._contentItem.parent.removeChild(this._contentItem,!0),this._contentItem._$setParent(this)}_setDimensions(){var e=this._layoutManager.config.dimensions,t=e.dragProxyWidth,n=e.dragProxyHeight;this.element.width(t),this.element.height(n),t-=this._sided?e.headerHeight:0,n-=this._sided?0:e.headerHeight,this.childElementContainer.width(t),this.childElementContainer.height(n),this._contentItem.element.width(t),this._contentItem.element.height(n),this._contentItem.callDownwards('_$show'),this._contentItem.callDownwards('setSize')}}t.a=a},function(e,t){'use strict';t.a=class{constructor(e,t,n,o){this._header=e,this.element=$('<li class=\"'+n+'\" title=\"'+t+'\"></li>'),this._header.on('destroy',this._$destroy,this),this._action=o,this.element.on('click touchstart',this._action),this._header.controlsContainer.append(this.element)}_$destroy(){this.element.off(),this.element.remove()}}},function(e,t,n){'use strict';var o=n(3),i=n(33);class a extends o.a{constructor(e,t,n){super(e,t,n);var o=e.getComponent(this.config.componentName),a=$.extend(!0,{},this.config.componentState||{});a.componentName=this.config.componentName,this.componentName=this.config.componentName,''===this.config.title&&(this.config.title=this.config.componentName),this.isComponent=!0,this.container=new i.a(this.config,this,e),this.instance=new o(this.container,a),this.element=this.container._element}close(){this.parent.removeChild(this)}setSize(){'none'!==this.element.css('display')&&this.container._$setSize(this.element.width(),this.element.height())}_$init(){o.a.prototype._$init.call(this),this.container.emit('open')}_$hide(){this.container.hide(),o.a.prototype._$hide.call(this)}_$show(){this.container.show(),o.a.prototype._$show.call(this)}_$shown(){this.container.shown(),o.a.prototype._$shown.call(this)}_$destroy(){this.container.emit('destroy',this),o.a.prototype._$destroy.call(this)}_$getArea(){return null}}t.a=a},function(e,t,n){'use strict';var o=n(1);class i extends o.b{constructor(e,t,n){super(),this.width=null,this.height=null,this.title=e.componentName,this.parent=t,this.layoutManager=n,this.isHidden=!1,this._config=e,this._element=$('<div class=\"lm_item_container\"><div class=\"lm_content\"></div></div>'),this._contentElement=this._element.find('.lm_content')}getElement(){return this._contentElement}hide(){this.emit('hide'),this.isHidden=!0,this._element.hide()}show(){this.emit('show'),this.isHidden=!1,this._element.show(),(0!=this.height||0!=this.width)&&this.emit('shown')}setSize(e,t){for(var n,o,a,s,r,l,i=this.parent,c=this;!i.isColumn&&!i.isRow;)if(c=i,i=i.parent,i.isRoot)return!1;for(a=i.isColumn?'height':'width',s='height'===a?t:e,n=this[a]*(1/(c.config[a]/100)),o=100*(s/n),r=(c.config[a]-o)/(i.contentItems.length-1),l=0;l<i.contentItems.length;l++)i.contentItems[l]===c?i.contentItems[l].config[a]=o:i.contentItems[l].config[a]+=r;return i.callDownwards('setSize'),!0}close(){this._config.isClosable&&(this.emit('close'),this.parent.close())}getState(){return this._config.componentState}extendState(e){this.setState($.extend(!0,this.getState(),e))}setState(e){this._config.componentState=e,this.parent.emitBubblingEvent('stateChanged')}setTitle(e){this.parent.setTitle(e)}_$setSize(e,t){(e!==this.width||t!==this.height)&&(this.width=e,this.height=t,$.zepto?this._contentElement.width(e):this._contentElement.outerWidth(e),$.zepto?this._contentElement.height(t):this._contentElement.outerHeight(t),this.emit('resize'))}}t.a=i},function(e,n,o){'use strict';var i=o(68),a=o.n(i),s=o(1),r=o(11),l=o(0);class c extends s.b{constructor(e,t,n,o,i){super(),this.isInitialised=!1,this._config=e,this._dimensions=t,this._parentId=n,this._indexInParent=o,this._layoutManager=i,this._popoutWindow=null,this._id=null,this._createWindow()}toConfig(){if(!1===this.isInitialised)throw new Error('Can\\'t create config, layout not yet initialised');return{dimensions:{width:this.getGlInstance().width,height:this.getGlInstance().height,left:this._popoutWindow.screenX||this._popoutWindow.screenLeft,top:this._popoutWindow.screenY||this._popoutWindow.screenTop},content:this.getGlInstance().toConfig().content,parentId:this._parentId,indexInParent:this._indexInParent}}getGlInstance(){return this._popoutWindow.__glInstance}getWindow(){return this._popoutWindow}close(){if(this.getGlInstance())this.getGlInstance()._$closeWindow();else try{this.getWindow().close()}catch(t){}}popIn(){var e,t,n=this._indexInParent;this._parentId&&(e=$.extend(!0,{},this.getGlInstance().toConfig()).content[0],t=this._layoutManager.root.getItemsById(this._parentId)[0],!t&&(t=0<this._layoutManager.root.contentItems.length?this._layoutManager.root.contentItems[0]:this._layoutManager.root,n=0)),t.addChild(e,this._indexInParent),this.close()}_createWindow(){var e,n=this._createUrl(),o=t(1e6*Math.random()).toString(36),i=this._serializeWindowOptions({width:this._dimensions.width,height:this._dimensions.height,innerWidth:this._dimensions.width,innerHeight:this._dimensions.height,menubar:'no',toolbar:'no',location:'no',personalbar:'no',resizable:'yes',scrollbars:'no',status:'no'});if(this._popoutWindow=window.open(n,o,i),!this._popoutWindow)if(!0===this._layoutManager.config.settings.blockedPopoutsThrowError){var a=new Error('Popout blocked');throw a.type='popoutBlocked',a}else return;$(this._popoutWindow).on('load',Object(l.c)(this._positionWindow,this)).on('unload beforeunload',Object(l.c)(this._onClose,this)),e=setInterval(Object(l.c)(function(){this._popoutWindow.__glInstance&&this._popoutWindow.__glInstance.isInitialised&&(this._onInitialised(),clearInterval(e))},this),10)}_serializeWindowOptions(e){var t,n=[];for(t in e)n.push(t+'='+e[t]);return n.join(',')}_createUrl(){var e,t={content:this._config},n='gl-window-config-'+Object(l.f)();t=new r.a().minifyConfig(t);try{localStorage.setItem(n,a()(t))}catch(t){throw new Error('Error while writing to localStorage '+t.toString())}return e=document.location.href.split('?'),1===e.length?e[0]+'?gl-window='+n:document.location.href+'&gl-window='+n}_positionWindow(){this._popoutWindow.moveTo(this._dimensions.left,this._dimensions.top),this._popoutWindow.focus()}_onInitialised(){this.isInitialised=!0,this.getGlInstance().on('popIn',this.popIn,this),this.emit('initialised')}_onClose(){setTimeout(Object(l.c)(this.emit,this,['closed']),50)}}n.a=c},function(e,t,n){'use strict';Object.defineProperty(t,'__esModule',{value:!0});var o=n(36),i=n.n(o),a=n(37),s=n.n(a),r=n(38),l=n.n(r),c=n(39);n.d(t,'default',function(){return c.a});var p=n(33);n.d(t,'ItemContainer',function(){return p.a});var d=n(34);n.d(t,'BrowserPopout',function(){return d.a});var m=n(28);n.d(t,'Header',function(){return m.a});var _=n(31);n.d(t,'HeaderButton',function(){return _.a});var g=n(29);n.d(t,'Tab',function(){return g.a});var u=n(32);n.d(t,'Component',function(){return u.a});var f=n(12);n.d(t,'Root',function(){return f.a});var h=n(6);n.d(t,'RowOrColumn',function(){return h.a});var y=n(13);n.d(t,'Stack',function(){return y.a});var v=n(26);n.d(t,'BubblingEvent',function(){return v.a});var b=n(11);n.d(t,'ConfigMinifier',function(){return b.a});var k=n(7);n.d(t,'DragListener',function(){return k.a});var x=n(1);n.d(t,'EventEmitter',function(){return x.b});var D=n(25);n.d(t,'EventHub',function(){return D.a});var w=n(24);n.d(t,'ReactComponentHandler',function(){return w.a}),{}.ES6&&(n(74),n(77))},function(){},function(){},function(){},function(e,o,i){'use strict';var a=i(1),s=i(24),r=i(11),l=i(25),c=i(12),p=i(6),d=i(13),m=i(32),_=i(3),g=i(34),u=i(70),f=i(71),h=i(72),y=i(27),v=i(73),b=i(0);class k extends a.b{constructor(e,t){if(!$){var n='jQuery is missing as dependency for GoldenLayout. ';throw n+='Please either expose $ on GoldenLayout\\'s scope (e.g. window) or add \"jquery\" to ',n+='your paths when using RequireJS/AMD',new Error(n)}super(),this.isInitialised=!1,this._isFullPage=!1,this._resizeTimeoutId=null,this._components={\"lm-react-component\":s.a},this._itemAreas=[],this._resizeFunction=Object(b.c)(this._onResize,this),this._unloadFunction=Object(b.c)(this._onUnload,this),this._maximisedItem=null,this._maximisePlaceholder=$('<div class=\"lm_maximise_place\"></div>'),this._creationTimeoutPassed=!1,this._subWindowsCreated=!1,this._dragSources=[],this._updatingColumnsResponsive=!1,this._firstLoad=!0,this.width=null,this.height=null,this.root=null,this.openPopouts=[],this.selectedItem=null,this.isSubWindow=!1,this.eventHub=new l.a(this),this.config=this._createConfig(e),this.container=t,this.dropTargetIndicator=null,this.transitionIndicator=null,this.tabDropPlaceholder=$('<div class=\"lm_drop_tab_placeholder\"></div>'),!0===this.isSubWindow&&$('body').css('visibility','hidden'),this._typeToItem={column:Object(b.c)(p.a,this,[!0]),row:Object(b.c)(p.a,this,[!1]),stack:d.a,component:m.a}}minifyConfig(e){return new r.a().minifyConfig(e)}unminifyConfig(e){return new r.a().unminifyConfig(e)}registerComponent(e,t){if('function'!=typeof t)throw new Error('Please register a constructor function');if(void 0!==this._components[e])throw new Error('Component '+e+' is already registered');this._components[e]=t}toConfig(e){var t,n,o;if(!1===this.isInitialised)throw new Error('Can\\'t create config, layout not yet initialised');if(e&&!(e instanceof _.a))throw new Error('Root must be a ContentItem');for(t={settings:Object(b.b)({},this.config.settings),dimensions:Object(b.b)({},this.config.dimensions),labels:Object(b.b)({},this.config.labels)},t.content=[],n=function(e,t){var o,a;for(o in t.config)'content'!==o&&(e[o]=t.config[o]);if(t.contentItems.length)for(e.content=[],a=0;a<t.contentItems.length;a++)e.content[a]={},n(e.content[a],t.contentItems[a])},e?n(t,{contentItems:[e]}):n(t,this.root),this._$reconcilePopoutWindows(),t.openPopouts=[],o=0;o<this.openPopouts.length;o++)t.openPopouts.push(this.openPopouts[o].toConfig());return t.maximisedItemId=this._maximisedItem?'__glMaximised':null,t}getComponent(e){if(this._components[e]===void 0)throw new y.a('Unknown component \"'+e+'\"');return this._components[e]}init(){return!1===this._subWindowsCreated&&(this._createSubWindows(),this._subWindowsCreated=!0),'loading'===document.readyState||null===document.body?void $(document).ready(Object(b.c)(this.init,this)):!0===this.isSubWindow&&!1===this._creationTimeoutPassed?(setTimeout(Object(b.c)(this.init,this),7),void(this._creationTimeoutPassed=!0)):void(!0===this.isSubWindow&&this._adjustToWindowMode(),this._setContainer(),this.dropTargetIndicator=new f.a(this.container),this.transitionIndicator=new h.a,this.updateSize(),this._create(this.config),this._bindEvents(),this.isInitialised=!0,this._adjustColumnsResponsive(),this.emit('initialised'))}updateSize(e,t){2===arguments.length?(this.width=e,this.height=t):(this.width=this.container.width(),this.height=this.container.height()),!0===this.isInitialised&&(this.root.callDownwards('setSize',[this.width,this.height]),this._maximisedItem&&(this._maximisedItem.element.width(this.container.width()),this._maximisedItem.element.height(this.container.height()),this._maximisedItem.callDownwards('setSize')),this._adjustColumnsResponsive())}destroy(){!1===this.isInitialised||(this._onUnload(),$(window).off('resize',this._resizeFunction),$(window).off('unload beforeunload',this._unloadFunction),this.root.callDownwards('_$destroy',[],!0),this.root.contentItems=[],this.tabDropPlaceholder.remove(),this.dropTargetIndicator.destroy(),this.transitionIndicator.destroy(),this.eventHub.destroy(),this._dragSources.forEach(function(e){e._dragListener.destroy(),e._element=null,e._itemConfig=null,e._dragListener=null}),this._dragSources=[])}createContentItem(e,t){var n,o;if('string'!=typeof e.type)throw new y.a('Missing parameter \\'type\\'',e);if('react-component'===e.type&&(e.type='component',e.componentName='lm-react-component'),!this._typeToItem[e.type])throw n='Unknown type \\''+e.type+'\\'. Valid types are '+Object(b.j)(this._typeToItem).join(','),new y.a(n);return'component'!==e.type||t instanceof d.a||!t||!0===this.isSubWindow&&t instanceof c.a||(e={type:'stack',width:e.width,height:e.height,content:[e]}),o=new this._typeToItem[e.type](this,e,t),o}createPopout(e,t,n,o){var i,a,s,r,l,c,p=e,d=e instanceof _.a,m=this;if(n=n||null,d){for(p=this.toConfig(e).content,n=Object(b.f)(),r=e.parent,l=e;1===r.contentItems.length&&!r.isRoot;)r=r.parent,l=l.parent;r.addId(n),isNaN(o)&&(o=Object(b.g)(l,r.contentItems))}else p instanceof Array||(p=[p]);return!t&&d&&(i=window.screenX||window.screenLeft,a=window.screenY||window.screenTop,s=e.element.offset(),t={left:i+s.left,top:a+s.top,width:e.element.width(),height:e.element.height()}),t||d||(t={left:window.screenX||window.screenLeft+20,top:window.screenY||window.screenTop+20,width:500,height:309}),d&&e.remove(),c=new g.a(p,t,n,o,this),c.on('initialised',function(){m.emit('windowOpened',c)}),c.on('closed',function(){m._$reconcilePopoutWindows()}),this.openPopouts.push(c),c}createDragSource(e,t){this.config.settings.constrainDragToContainer=!1;var n=new u.a($(e),t,this);return this._dragSources.push(n),n}selectItem(e,t){if(!0!==this.config.settings.selectionEnabled)throw new Error('Please set selectionEnabled to true to use this feature');e===this.selectedItem||(null!==this.selectedItem&&this.selectedItem.deselect(),e&&!0!==t&&e.select(),this.selectedItem=e,this.emit('selectionChanged',e))}_$maximiseItem(e){null!==this._maximisedItem&&this._$minimiseItem(this._maximisedItem),this._maximisedItem=e,this._maximisedItem.addId('__glMaximised'),e.element.addClass('lm_maximised'),e.element.after(this._maximisePlaceholder),this.root.element.prepend(e.element),e.element.width(this.container.width()),e.element.height(this.container.height()),e.callDownwards('setSize'),this._maximisedItem.emit('maximised'),this.emit('stateChanged')}_$minimiseItem(e){e.element.removeClass('lm_maximised'),e.removeId('__glMaximised'),this._maximisePlaceholder.after(e.element),this._maximisePlaceholder.remove(),e.parent.callDownwards('setSize'),this._maximisedItem=null,e.emit('minimised'),this.emit('stateChanged')}_$closeWindow(){window.setTimeout(function(){window.close()},1)}_$getArea(e,t){var n,o,i=Infinity,a=null;for(n=0;n<this._itemAreas.length;n++)o=this._itemAreas[n],e>o.x1&&e<o.x2&&t>o.y1&&t<o.y2&&i>o.surface&&(i=o.surface,a=o);return a}_$createRootItemAreas(){var e=50,t={y2:0,x2:0,y1:'y2',x1:'x2'};for(var n in t){var o=this.root._$getArea();o.side=n,o[n]=t[n]?o[t[n]]-e:e,o.surface=(o.x2-o.x1)*(o.y2-o.y1),this._itemAreas.push(o)}}_$calculateItemAreas(){var e,t,n=this._getAllContentItems();if(this._itemAreas=[],1===n.length)return void this._itemAreas.push(this.root._$getArea());for(this._$createRootItemAreas(),e=0;e<n.length;e++)if(n[e].isStack)if(t=n[e]._$getArea(),null===t)continue;else if(t instanceof Array)this._itemAreas=this._itemAreas.concat(t);else{this._itemAreas.push(t);var o={};Object(b.b)(o,t),Object(b.b)(o,t.contentItem._contentAreaDimensions.header.highlightArea),o.surface=(o.x2-o.x1)*(o.y2-o.y1),this._itemAreas.push(o)}}_$normalizeContentItem(e,t){if(!e)throw new Error('No content item defined');if(Object(b.h)(e)&&(e=e()),e instanceof _.a)return e;if($.isPlainObject(e)&&e.type){var n=this.createContentItem(e,t);return n.callDownwards('_$init'),n}throw new Error('Invalid contentItem')}_$reconcilePopoutWindows(){var e,t=[];for(e=0;e<this.openPopouts.length;e++)!1===this.openPopouts[e].getWindow().closed?t.push(this.openPopouts[e]):this.emit('windowClosed',this.openPopouts[e]);this.openPopouts.length!==t.length&&(this.emit('stateChanged'),this.openPopouts=t)}_getAllContentItems(){var e=[],t=function(n){if(e.push(n),n.contentItems instanceof Array)for(var o=0;o<n.contentItems.length;o++)t(n.contentItems[o])};return t(this.root),e}_bindEvents(){this._isFullPage&&$(window).resize(this._resizeFunction),$(window).on('unload beforeunload',this._unloadFunction)}_onResize(){clearTimeout(this._resizeTimeoutId),this._resizeTimeoutId=setTimeout(Object(b.c)(this.updateSize,this),100)}_createConfig(e){var t=Object(b.d)('gl-window');t&&(this.isSubWindow=!0,e=localStorage.getItem(t),e=JSON.parse(e),e=new r.a().unminifyConfig(e),localStorage.removeItem(t)),e=$.extend(!0,{},v.a,e);var n=function(e){for(var t in e)'props'!=t&&'object'==typeof e[t]?n(e[t]):'type'==t&&'react-component'===e[t]&&(e.type='component',e.componentName='lm-react-component')};return n(e),!1===e.settings.hasHeaders&&(e.dimensions.headerHeight=0),e}_adjustToWindowMode(){var e=$('<div class=\"lm_popin\" title=\"'+this.config.labels.popin+'\"><div class=\"lm_icon\"></div><div class=\"lm_bg\"></div></div>');e.click(Object(b.c)(function(){this.emit('popIn')},this)),document.title=Object(b.k)(this.config.content[0].title),$('head').append($('body link, body style, template, .gl_keep')),this.container=$('body').html('').css('visibility','visible').append(e);document.body.offsetHeight;window.__glInstance=this}_createSubWindows(){var e,t;for(e=0;e<this.config.openPopouts.length;e++)t=this.config.openPopouts[e],this.createPopout(t.content,t.dimensions,t.parentId,t.indexInParent)}_setContainer(){var e=$(this.container||'body');if(0===e.length)throw new Error('GoldenLayout container not found');if(1<e.length)throw new Error('GoldenLayout more than one container element specified');e[0]===document.body&&(this._isFullPage=!0,$('html, body').css({height:'100%',margin:0,padding:0,overflow:'hidden'})),this.container=e}_create(e){var t;if(!(e.content instanceof Array))throw t=void 0===e.content?'Missing setting \\'content\\' on top level of configuration':'Configuration parameter \\'content\\' must be an array',new y.a(t,e);if(1<e.content.length)throw t='Top level content can\\'t contain more then one element.',new y.a(t,e);this.root=new c.a(this,{content:e.content},this.container),this.root.callDownwards('_$init'),'__glMaximised'===e.maximisedItemId&&this.root.getItemsById(e.maximisedItemId)[0].toggleMaximise()}_onUnload(){if(!0===this.config.settings.closePopoutsOnUnload)for(var e=0;e<this.openPopouts.length;e++)this.openPopouts[e].close()}_adjustColumnsResponsive(){if(!this._useResponsiveLayout()||this._updatingColumnsResponsive||!this.config.dimensions||!this.config.dimensions.minItemWidth||0===this.root.contentItems.length||!this.root.contentItems[0].isRow)return void(this._firstLoad=!1);this._firstLoad=!1;var e=this.root.contentItems[0].contentItems.length;if(!(1>=e)){var o=this.config.dimensions.minItemWidth;if(!(e*o<=this.width)){this._updatingColumnsResponsive=!0;for(var a,s=n(t(this.width/o),1),r=this.root.contentItems[0],l=this._findAllStackContainers()[0],c=0;c<e-s;c++)a=r.contentItems[r.contentItems.length-1],this._addChildContentItemsToContainer(l,a);this._updatingColumnsResponsive=!1}}}_useResponsiveLayout(){return this.config.settings&&('always'==this.config.settings.responsiveMode||'onload'==this.config.settings.responsiveMode&&this._firstLoad)}_addChildContentItemsToContainer(e,t){'stack'===t.type?t.contentItems.forEach(function(n){e.addChild(n),t.removeChild(n,!0)}):t.contentItems.forEach(Object(b.c)(function(t){this._addChildContentItemsToContainer(e,t)},this))}_findAllStackContainers(){var e=[];return this._findAllStackContainersRecursive(e,this.root),e}_findAllStackContainersRecursive(e,t){t.contentItems.forEach(Object(b.c)(function(t){'stack'==t.type?e.push(t):!t.isComponent&&this._findAllStackContainersRecursive(e,t)},this))}}o.a=k},function(e,t,n){e.exports={default:n(41),__esModule:!0}},function(e,t,n){n(42),e.exports=n(2).Object.keys},function(e,t,n){var o=n(43),i=n(15);n(53)('keys',function(){return function(e){return i(o(e))}})},function(e,t,n){var o=n(14);e.exports=function(e){return Object(o(e))}},function(e,t,n){var o=n(16),a=n(17),s=n(47)(!1),i=n(19)('IE_PROTO');e.exports=function(e,t){var n,r=a(e),l=0,c=[];for(n in r)n!=i&&o(r,n)&&c.push(n);for(;t.length>l;)o(r,n=t[l++])&&(~s(c,n)||c.push(n));return c}},function(e,t,n){var o=n(46);e.exports=Object('z').propertyIsEnumerable(0)?Object:function(e){return'String'==o(e)?e.split(''):Object(e)}},function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},function(e,t,n){var o=n(17),i=n(48),a=n(49);e.exports=function(e){return function(t,n,s){var r,l=o(t),c=i(l.length),p=a(s,c);if(e&&n!=n){for(;c>p;)if(r=l[p++],r!=r)return!0;}else for(;c>p;p++)if((e||p in l)&&l[p]===n)return e||p||0;return!e&&-1}}},function(t,n,o){var i=o(18);t.exports=function(t){return 0<t?e(i(t),9007199254740991):0}},function(t,o,i){var a=i(18);t.exports=function(t,o){return t=a(t),0>t?n(t+o,0):e(t,o)}},function(e,t,n){var o=n(2),i=n(4),a='__core-js_shared__',s=i[a]||(i[a]={});(e.exports=function(e,t){return s[e]||(s[e]=t===void 0?{}:t)})('versions',[]).push({version:o.version,mode:n(51)?'pure':'global',copyright:'\\xA9 2018 Denis Pushkarev (zloirock.ru)'})},function(e){e.exports=!0},function(e){var t=0,n=Math.random();e.exports=function(e){return'Symbol('.concat(e===void 0?'':e,')_',(++t+n).toString(36))}},function(e,t,n){var o=n(21),i=n(2),a=n(10);e.exports=function(e,t){var n=(i.Object||{})[e]||Object[e],s={};s[e]=t(n),o(o.S+o.F*a(function(){n(1)}),'Object',s)}},function(e,t,n){var o=n(55);e.exports=function(e,t,n){return(o(e),void 0===t)?e:1===n?function(n){return e.call(t,n)}:2===n?function(n,o){return e.call(t,n,o)}:3===n?function(n,o,i){return e.call(t,n,o,i)}:function(){return e.apply(t,arguments)}}},function(e){e.exports=function(e){if('function'!=typeof e)throw TypeError(e+' is not a function!');return e}},function(e,t,n){var o=n(22),i=n(59);e.exports=n(5)?function(e,t,n){return o.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){e.exports=!n(5)&&!n(10)(function(){return 7!=Object.defineProperty(n(23)('div'),'a',{get:function(){return 7}}).a})},function(e,t,n){var o=n(9);e.exports=function(e,t){if(!o(e))return e;var n,i;if(t&&'function'==typeof(n=e.toString)&&!o(i=n.call(e)))return i;if('function'==typeof(n=e.valueOf)&&!o(i=n.call(e)))return i;if(!t&&'function'==typeof(n=e.toString)&&!o(i=n.call(e)))return i;throw TypeError('Can\\'t convert object to primitive value')}},function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){e.exports={default:n(61),__esModule:!0}},function(e,t,n){n(62);var o=n(2).Object;e.exports=function(e,t){return o.create(e,t)}},function(e,t,n){var o=n(21);o(o.S,'Object',{create:n(63)})},function(e,t,n){var o=n(8),i=n(64),a=n(20),s=n(19)('IE_PROTO'),r=function(){},l='prototype',c=function(){var e,t=n(23)('iframe'),o=a.length,i='<',s='>';for(t.style.display='none',n(65).appendChild(t),t.src='javascript:',e=t.contentWindow.document,e.open(),e.write(i+'script'+s+'document.F=Object'+i+'/script'+s),e.close(),c=e.F;o--;)delete c[l][a[o]];return c()};e.exports=Object.create||function(e,t){var n;return null===e?n=c():(r[l]=o(e),n=new r,r[l]=null,n[s]=e),void 0===t?n:i(n,t)}},function(e,t,n){var o=n(22),a=n(8),s=n(15);e.exports=n(5)?Object.defineProperties:function(e,t){a(e);for(var n,r=s(t),l=r.length,c=0;l>c;)o.f(e,n=r[c++],t[n]);return e}},function(e,t,n){var o=n(4).document;e.exports=o&&o.documentElement},function(e,t){'use strict';t.a={isClosable:!0,reorderEnabled:!0,title:''}},function(e,t,n){'use strict';var o=n(7);t.a=class{constructor(e,t,n){this._isVertical=e,this._size=t,this._grabSize=n<t?t:n,this.element=this._createElement(),this._dragListener=new o.a(this.element)}on(e,t,n){this._dragListener.on(e,t,n)}_$destroy(){this.element.remove()}_createElement(){var e=$('<div class=\"lm_drag_handle\"></div>'),t=$('<div class=\"lm_splitter\"></div>');t.append(e);var n=this._grabSize-this._size,o=n/2;return this._isVertical?(e.css('top',-o),e.css('height',this._size+n),t.addClass('lm_vertical'),t.height(this._size)):(e.css('left',-o),e.css('width',this._size+n),t.addClass('lm_horizontal'),t.width(this._size)),t}}},function(e,t,n){e.exports={default:n(69),__esModule:!0}},function(e,t,n){var o=n(2),i=o.JSON||(o.JSON={stringify:JSON.stringify});e.exports=function(){return i.stringify.apply(i,arguments)}},function(e,t,n){'use strict';var o=n(7),i=n(30),a=n(0);t.a=class{constructor(e,t,n){this._element=e,this._itemConfig=t,this._layoutManager=n,this._dragListener=null,this._createDragListener()}_createDragListener(){null!==this._dragListener&&this._dragListener.destroy(),this._dragListener=new o.a(this._element),this._dragListener.on('dragStart',this._onDragStart,this),this._dragListener.on('dragStop',this._createDragListener,this)}_onDragStart(e,t){var n=this._itemConfig;Object(a.h)(n)&&(n=n());var o=this._layoutManager._$normalizeContentItem($.extend(!0,{},n)),s=new i.a(e,t,this._dragListener,this._layoutManager,o,null);this._layoutManager.transitionIndicator.transitionElements(this._element,s.element)}}},function(e,t){'use strict';t.a=class{constructor(){this.element=$('<div class=\"lm_dropTargetIndicator\"><div class=\"lm_inner\"></div></div>'),$(document.body).append(this.element)}destroy(){this.element.remove()}highlight(e,t,n,o){this.highlightArea({x1:e,y1:t,x2:n,y2:o})}highlightArea(e){this.element.css({left:e.x1,top:e.y1,width:e.x2-e.x1,height:e.y2-e.y1}).show()}hide(){this.element.hide()}}},function(e,t,n){'use strict';var o=n(0);t.a=class{constructor(){this._element=$('<div class=\"lm_transition_indicator\"></div>'),$(document.body).append(this._element),this._toElement=null,this._fromDimensions=null,this._totalAnimationDuration=200,this._animationStartTime=null}destroy(){this._element.remove()}transitionElements(){}_nextAnimationFrame(){var e,t=this._measure(this._toElement),n=(Object(o.i)()-this._animationStartTime)/this._totalAnimationDuration,i={};if(1<=n)return void this._element.hide();for(e in t.opacity=0,this._fromDimensions)i[e]=this._fromDimensions[e]+(t[e]-this._fromDimensions[e])*n;this._element.css(i),Object(o.a)(Object(o.c)(this._nextAnimationFrame,this))}_measure(e){var t=e.offset();return{left:t.left,top:t.top,width:e.outerWidth(),height:e.outerHeight()}}}},function(e,t){'use strict';t.a={openPopouts:[],settings:{hasHeaders:!0,constrainDragToContainer:!0,reorderEnabled:!0,selectionEnabled:!1,popoutWholeStack:!1,blockedPopoutsThrowError:!0,closePopoutsOnUnload:!0,showPopoutIcon:!0,showMaximiseIcon:!0,showCloseIcon:!0,responsiveMode:'onload',tabOverlapAllowance:0,reorderOnTabMenuClick:!0,tabControlOffset:10},dimensions:{borderWidth:5,borderGrabWidth:15,minItemHeight:10,minItemWidth:10,headerHeight:20,dragProxyWidth:300,dragProxyHeight:200},labels:{close:'close',maximise:'maximise',minimise:'minimise',popout:'open in new window',popin:'pop in',tabDropdown:'additional tabs'}}},function(e,t,n){n(75)(n(76))},function(e){e.exports=function(e){function t(e){'undefined'!=typeof console&&(console.error||console.log)('[Script Loader]',e)}function n(){return'undefined'!=typeof attachEvent&&'undefined'==typeof addEventListener}try{'undefined'!=typeof execScript&&n()?execScript(e):'undefined'==typeof eval?t('EvalError: No eval function available'):eval.call(null,e)}catch(e){t(e)}}},function(e){e.exports='/* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */\\n(function(global, factory) {\\n if (typeof define === \\'function\\' && define.amd)\\n define(function() { return factory(global) })\\n else\\n factory(global)\\n}(this, function(window) {\\n var Zepto = (function() {\\n var undefined, key, $, classList, emptyArray = [], concat = emptyArray.concat, filter = emptyArray.filter, slice = emptyArray.slice,\\n document = window.document,\\n elementDisplay = {}, classCache = {},\\n cssNumber = { \\'column-count\\': 1, \\'columns\\': 1, \\'font-weight\\': 1, \\'line-height\\': 1,\\'opacity\\': 1, \\'z-index\\': 1, \\'zoom\\': 1 },\\n fragmentRE = /^\\\\s*<(\\\\w+|!)[^>]*>/,\\n singleTagRE = /^<(\\\\w+)\\\\s*\\\\/?>(?:<\\\\/\\\\1>|)$/,\\n tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\\\w:]+)[^>]*)\\\\/>/ig,\\n rootNodeRE = /^(?:body|html)$/i,\\n capitalRE = /([A-Z])/g,\\n\\n // special attributes that should be get/set via method calls\\n methodAttributes = [\\'val\\', \\'css\\', \\'html\\', \\'text\\', \\'data\\', \\'width\\', \\'height\\', \\'offset\\'],\\n\\n adjacencyOperators = [ \\'after\\', \\'prepend\\', \\'before\\', \\'append\\' ],\\n table = document.createElement(\\'table\\'),\\n tableRow = document.createElement(\\'tr\\'),\\n containers = {\\n \\'tr\\': document.createElement(\\'tbody\\'),\\n \\'tbody\\': table, \\'thead\\': table, \\'tfoot\\': table,\\n \\'td\\': tableRow, \\'th\\': tableRow,\\n \\'*\\': document.createElement(\\'div\\')\\n },\\n readyRE = /complete|loaded|interactive/,\\n simpleSelectorRE = /^[\\\\w-]*$/,\\n class2type = {},\\n toString = class2type.toString,\\n zepto = {},\\n camelize, uniq,\\n tempParent = document.createElement(\\'div\\'),\\n propMap = {\\n \\'tabindex\\': \\'tabIndex\\',\\n \\'readonly\\': \\'readOnly\\',\\n \\'for\\': \\'htmlFor\\',\\n \\'class\\': \\'className\\',\\n \\'maxlength\\': \\'maxLength\\',\\n \\'cellspacing\\': \\'cellSpacing\\',\\n \\'cellpadding\\': \\'cellPadding\\',\\n \\'rowspan\\': \\'rowSpan\\',\\n \\'colspan\\': \\'colSpan\\',\\n \\'usemap\\': \\'useMap\\',\\n \\'frameborder\\': \\'frameBorder\\',\\n \\'contenteditable\\': \\'contentEditable\\'\\n },\\n isArray = Array.isArray ||\\n function(object){ return object instanceof Array }\\n\\n zepto.matches = function(element, selector) {\\n if (!selector || !element || element.nodeType !== 1) return false\\n var matchesSelector = element.matches || element.webkitMatchesSelector ||\\n element.mozMatchesSelector || element.oMatchesSelector ||\\n element.matchesSelector\\n if (matchesSelector) return matchesSelector.call(element, selector)\\n // fall back to performing a selector:\\n var match, parent = element.parentNode, temp = !parent\\n if (temp) (parent = tempParent).appendChild(element)\\n match = ~zepto.qsa(parent, selector).indexOf(element)\\n temp && tempParent.removeChild(element)\\n return match\\n }\\n\\n function type(obj) {\\n return obj == null ? String(obj) :\\n class2type[toString.call(obj)] || \"object\"\\n }\\n\\n function isFunction(value) { return type(value) == \"function\" }\\n function isWindow(obj) { return obj != null && obj == obj.window }\\n function isDocument(obj) { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }\\n function isObject(obj) { return type(obj) == \"object\" }\\n function isPlainObject(obj) {\\n return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype\\n }\\n\\n function likeArray(obj) {\\n var length = !!obj && \\'length\\' in obj && obj.length,\\n type = $.type(obj)\\n\\n return \\'function\\' != type && !isWindow(obj) && (\\n \\'array\\' == type || length === 0 ||\\n (typeof length == \\'number\\' && length > 0 && (length - 1) in obj)\\n )\\n }\\n\\n function compact(array) { return filter.call(array, function(item){ return item != null }) }\\n function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }\\n camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : \\'\\' }) }\\n function dasherize(str) {\\n return str.replace(/::/g, \\'/\\')\\n .replace(/([A-Z]+)([A-Z][a-z])/g, \\'$1_$2\\')\\n .replace(/([a-z\\\\d])([A-Z])/g, \\'$1_$2\\')\\n .replace(/_/g, \\'-\\')\\n .toLowerCase()\\n }\\n uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }\\n\\n function classRE(name) {\\n return name in classCache ?\\n classCache[name] : (classCache[name] = new RegExp(\\'(^|\\\\\\\\s)\\' + name + \\'(\\\\\\\\s|$)\\'))\\n }\\n\\n function maybeAddPx(name, value) {\\n return (typeof value == \"number\" && !cssNumber[dasherize(name)]) ? value + \"px\" : value\\n }\\n\\n function defaultDisplay(nodeName) {\\n var element, display\\n if (!elementDisplay[nodeName]) {\\n element = document.createElement(nodeName)\\n document.body.appendChild(element)\\n display = getComputedStyle(element, \\'\\').getPropertyValue(\"display\")\\n element.parentNode.removeChild(element)\\n display == \"none\" && (display = \"block\")\\n elementDisplay[nodeName] = display\\n }\\n return elementDisplay[nodeName]\\n }\\n\\n function children(element) {\\n return \\'children\\' in element ?\\n slice.call(element.children) :\\n $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })\\n }\\n\\n function Z(dom, selector) {\\n var i, len = dom ? dom.length : 0\\n for (i = 0; i < len; i++) this[i] = dom[i]\\n this.length = len\\n this.selector = selector || \\'\\'\\n }\\n\\n // `$.zepto.fragment` takes a html string and an optional tag name\\n // to generate DOM nodes from the given html string.\\n // The generated DOM nodes are returned as an array.\\n // This function can be overridden in plugins for example to make\\n // it compatible with browsers that don\\'t support the DOM fully.\\n zepto.fragment = function(html, name, properties) {\\n var dom, nodes, container\\n\\n // A special case optimization for a single tag\\n if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1))\\n\\n if (!dom) {\\n if (html.replace) html = html.replace(tagExpanderRE, \"<$1></$2>\")\\n if (name === undefined) name = fragmentRE.test(html) && RegExp.$1\\n if (!(name in containers)) name = \\'*\\'\\n\\n container = containers[name]\\n container.innerHTML = \\'\\' + html\\n dom = $.each(slice.call(container.childNodes), function(){\\n container.removeChild(this)\\n })\\n }\\n\\n if (isPlainObject(properties)) {\\n nodes = $(dom)\\n $.each(properties, function(key, value) {\\n if (methodAttributes.indexOf(key) > -1) nodes[key](value)\\n else nodes.attr(key, value)\\n })\\n }\\n\\n return dom\\n }\\n\\n // `$.zepto.Z` swaps out the prototype of the given `dom` array\\n // of nodes with `$.fn` and thus supplying all the Zepto functions\\n // to the array. This method can be overridden in plugins.\\n zepto.Z = function(dom, selector) {\\n return new Z(dom, selector)\\n }\\n\\n // `$.zepto.isZ` should return `true` if the given object is a Zepto\\n // collection. This method can be overridden in plugins.\\n zepto.isZ = function(object) {\\n return object instanceof zepto.Z\\n }\\n\\n // `$.zepto.init` is Zepto\\'s counterpart to jQuery\\'s `$.fn.init` and\\n // takes a CSS selector and an optional context (and handles various\\n // special cases).\\n // This method can be overridden in plugins.\\n zepto.init = function(selector, context) {\\n var dom\\n // If nothing given, return an empty Zepto collection\\n if (!selector) return zepto.Z()\\n // Optimize for string selectors\\n else if (typeof selector == \\'string\\') {\\n selector = selector.trim()\\n // If it\\'s a html fragment, create nodes from it\\n // Note: In both Chrome 21 and Firefox 15, DOM error 12\\n // is thrown if the fragment doesn\\'t begin with <\\n if (selector[0] == \\'<\\' && fragmentRE.test(selector))\\n dom = zepto.fragment(selector, RegExp.$1, context), selector = null\\n // If there\\'s a context, create a collection on that context first, and select\\n // nodes from there\\n else if (context !== undefined) return $(context).find(selector)\\n // If it\\'s a CSS selector, use it to select nodes.\\n else dom = zepto.qsa(document, selector)\\n }\\n // If a function is given, call it when the DOM is ready\\n else if (isFunction(selector)) return $(document).ready(selector)\\n // If a Zepto collection is given, just return it\\n else if (zepto.isZ(selector)) return selector\\n else {\\n // normalize array if an array of nodes is given\\n if (isArray(selector)) dom = compact(selector)\\n // Wrap DOM nodes.\\n else if (isObject(selector))\\n dom = [selector], selector = null\\n // If it\\'s a html fragment, create nodes from it\\n else if (fragmentRE.test(selector))\\n dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null\\n // If there\\'s a context, create a collection on that context first, and select\\n // nodes from there\\n else if (context !== undefined) return $(context).find(selector)\\n // And last but no least, if it\\'s a CSS selector, use it to select nodes.\\n else dom = zepto.qsa(document, selector)\\n }\\n // create a new Zepto collection from the nodes found\\n return zepto.Z(dom, selector)\\n }\\n\\n // `$` will be the base `Zepto` object. When calling this\\n // function just call `$.zepto.init, which makes the implementation\\n // details of selecting nodes and creating Zepto collections\\n // patchable in plugins.\\n $ = function(selector, context){\\n return zepto.init(selector, context)\\n }\\n\\n function extend(target, source, deep) {\\n for (key in source)\\n if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\\n if (isPlainObject(source[key]) && !isPlainObject(target[key]))\\n target[key] = {}\\n if (isArray(source[key]) && !isArray(target[key]))\\n target[key] = []\\n extend(target[key], source[key], deep)\\n }\\n else if (source[key] !== undefined) target[key] = source[key]\\n }\\n\\n // Copy all but undefined properties from one or more\\n // objects to the `target` object.\\n $.extend = function(target){\\n var deep, args = slice.call(arguments, 1)\\n if (typeof target == \\'boolean\\') {\\n deep = target\\n target = args.shift()\\n }\\n args.forEach(function(arg){ extend(target, arg, deep) })\\n return target\\n }\\n\\n // `$.zepto.qsa` is Zepto\\'s CSS selector implementation which\\n // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.\\n // This method can be overridden in plugins.\\n zepto.qsa = function(element, selector){\\n var found,\\n maybeID = selector[0] == \\'#\\',\\n maybeClass = !maybeID && selector[0] == \\'.\\',\\n nameOnly = maybeID || maybeClass ? selector.slice(1) : selector, // Ensure that a 1 char tag name still gets checked\\n isSimple = simpleSelectorRE.test(nameOnly)\\n return (element.getElementById && isSimple && maybeID) ? // Safari DocumentFragment doesn\\'t have getElementById\\n ( (found = element.getElementById(nameOnly)) ? [found] : [] ) :\\n (element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11) ? [] :\\n slice.call(\\n isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn\\'t have getElementsByClassName/TagName\\n maybeClass ? element.getElementsByClassName(nameOnly) : // If it\\'s simple, it could be a class\\n element.getElementsByTagName(selector) : // Or a tag\\n element.querySelectorAll(selector) // Or it\\'s not simple, and we need to query all\\n )\\n }\\n\\n function filtered(nodes, selector) {\\n return selector == null ? $(nodes) : $(nodes).filter(selector)\\n }\\n\\n $.contains = document.documentElement.contains ?\\n function(parent, node) {\\n return parent !== node && parent.contains(node)\\n } :\\n function(parent, node) {\\n while (node && (node = node.parentNode))\\n if (node === parent) return true\\n return false\\n }\\n\\n function funcArg(context, arg, idx, payload) {\\n return isFunction(arg) ? arg.call(context, idx, payload) : arg\\n }\\n\\n function setAttribute(node, name, value) {\\n value == null ? node.removeAttribute(name) : node.setAttribute(name, value)\\n }\\n\\n // access className property while respecting SVGAnimatedString\\n function className(node, value){\\n var klass = node.className || \\'\\',\\n svg = klass && klass.baseVal !== undefined\\n\\n if (value === undefined) return svg ? klass.baseVal : klass\\n svg ? (klass.baseVal = value) : (node.className = value)\\n }\\n\\n // \"true\" => true\\n // \"false\" => false\\n // \"null\" => null\\n // \"42\" => 42\\n // \"42.5\" => 42.5\\n // \"08\" => \"08\"\\n // JSON => parse if valid\\n // String => self\\n function deserializeValue(value) {\\n try {\\n return value ?\\n value == \"true\" ||\\n ( value == \"false\" ? false :\\n value == \"null\" ? null :\\n +value + \"\" == value ? +value :\\n /^[\\\\[\\\\{]/.test(value) ? $.parseJSON(value) :\\n value )\\n : value\\n } catch(e) {\\n return value\\n }\\n }\\n\\n $.type = type\\n $.isFunction = isFunction\\n $.isWindow = isWindow\\n $.isArray = isArray\\n $.isPlainObject = isPlainObject\\n\\n $.isEmptyObject = function(obj) {\\n var name\\n for (name in obj) return false\\n return true\\n }\\n\\n $.isNumeric = function(val) {\\n var num = Number(val), type = typeof val\\n return val != null && type != \\'boolean\\' &&\\n (type != \\'string\\' || val.length) &&\\n !isNaN(num) && isFinite(num) || false\\n }\\n\\n $.inArray = function(elem, array, i){\\n return emptyArray.indexOf.call(array, elem, i)\\n }\\n\\n $.camelCase = camelize\\n $.trim = function(str) {\\n return str == null ? \"\" : String.prototype.trim.call(str)\\n }\\n\\n // plugin compatibility\\n $.uuid = 0\\n $.support = { }\\n $.expr = { }\\n $.noop = function() {}\\n\\n $.map = function(elements, callback){\\n var value, values = [], i, key\\n if (likeArray(elements))\\n for (i = 0; i < elements.length; i++) {\\n value = callback(elements[i], i)\\n if (value != null) values.push(value)\\n }\\n else\\n for (key in elements) {\\n value = callback(elements[key], key)\\n if (value != null) values.push(value)\\n }\\n return flatten(values)\\n }\\n\\n $.each = function(elements, callback){\\n var i, key\\n if (likeArray(elements)) {\\n for (i = 0; i < elements.length; i++)\\n if (callback.call(elements[i], i, elements[i]) === false) return elements\\n } else {\\n for (key in elements)\\n if (callback.call(elements[key], key, elements[key]) === false) return elements\\n }\\n\\n return elements\\n }\\n\\n $.grep = function(elements, callback){\\n return filter.call(elements, callback)\\n }\\n\\n if (window.JSON) $.parseJSON = JSON.parse\\n\\n // Populate the class2type map\\n $.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\\n class2type[ \"[object \" + name + \"]\" ] = name.toLowerCase()\\n })\\n\\n // Define methods that will be available on all\\n // Zepto collections\\n $.fn = {\\n constructor: zepto.Z,\\n length: 0,\\n\\n // Because a collection acts like an array\\n // copy over these useful array functions.\\n forEach: emptyArray.forEach,\\n reduce: emptyArray.reduce,\\n push: emptyArray.push,\\n sort: emptyArray.sort,\\n splice: emptyArray.splice,\\n indexOf: emptyArray.indexOf,\\n concat: function(){\\n var i, value, args = []\\n for (i = 0; i < arguments.length; i++) {\\n value = arguments[i]\\n args[i] = zepto.isZ(value) ? value.toArray() : value\\n }\\n return concat.apply(zepto.isZ(this) ? this.toArray() : this, args)\\n },\\n\\n // `map` and `slice` in the jQuery API work differently\\n // from their array counterparts\\n map: function(fn){\\n return $($.map(this, function(el, i){ return fn.call(el, i, el) }))\\n },\\n slice: function(){\\n return $(slice.apply(this, arguments))\\n },\\n\\n ready: function(callback){\\n // need to check if document.body exists for IE as that browser reports\\n // document ready when it hasn\\'t yet created the body element\\n if (readyRE.test(document.readyState) && document.body) callback($)\\n else document.addEventListener(\\'DOMContentLoaded\\', function(){ callback($) }, false)\\n return this\\n },\\n get: function(idx){\\n return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]\\n },\\n toArray: function(){ return this.get() },\\n size: function(){\\n return this.length\\n },\\n remove: function(){\\n return this.each(function(){\\n if (this.parentNode != null)\\n this.parentNode.removeChild(this)\\n })\\n },\\n each: function(callback){\\n emptyArray.every.call(this, function(el, idx){\\n return callback.call(el, idx, el) !== false\\n })\\n return this\\n },\\n filter: function(selector){\\n if (isFunction(selector)) return this.not(this.not(selector))\\n return $(filter.call(this, function(element){\\n return zepto.matches(element, selector)\\n }))\\n },\\n add: function(selector,context){\\n return $(uniq(this.concat($(selector,context))))\\n },\\n is: function(selector){\\n return this.length > 0 && zepto.matches(this[0], selector)\\n },\\n not: function(selector){\\n var nodes=[]\\n if (isFunction(selector) && selector.call !== undefined)\\n this.each(function(idx){\\n if (!selector.call(this,idx)) nodes.push(this)\\n })\\n else {\\n var excludes = typeof selector == \\'string\\' ? this.filter(selector) :\\n (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)\\n this.forEach(function(el){\\n if (excludes.indexOf(el) < 0) nodes.push(el)\\n })\\n }\\n return $(nodes)\\n },\\n has: function(selector){\\n return this.filter(function(){\\n return isObject(selector) ?\\n $.contains(this, selector) :\\n $(this).find(selector).size()\\n })\\n },\\n eq: function(idx){\\n return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)\\n },\\n first: function(){\\n var el = this[0]\\n return el && !isObject(el) ? el : $(el)\\n },\\n last: function(){\\n var el = this[this.length - 1]\\n return el && !isObject(el) ? el : $(el)\\n },\\n find: function(selector){\\n var result, $this = this\\n if (!selector) result = $()\\n else if (typeof selector == \\'object\\')\\n result = $(selector).filter(function(){\\n var node = this\\n return emptyArray.some.call($this, function(parent){\\n return $.contains(parent, node)\\n })\\n })\\n else if (this.length == 1) result = $(zepto.qsa(this[0], selector))\\n else result = this.map(function(){ return zepto.qsa(this, selector) })\\n return result\\n },\\n closest: function(selector, context){\\n var nodes = [], collection = typeof selector == \\'object\\' && $(selector)\\n this.each(function(_, node){\\n while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))\\n node = node !== context && !isDocument(node) && node.parentNode\\n if (node && nodes.indexOf(node) < 0) nodes.push(node)\\n })\\n return $(nodes)\\n },\\n parents: function(selector){\\n var ancestors = [], nodes = this\\n while (nodes.length > 0)\\n nodes = $.map(nodes, function(node){\\n if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {\\n ancestors.push(node)\\n return node\\n }\\n })\\n return filtered(ancestors, selector)\\n },\\n parent: function(selector){\\n return filtered(uniq(this.pluck(\\'parentNode\\')), selector)\\n },\\n children: function(selector){\\n return filtered(this.map(function(){ return children(this) }), selector)\\n },\\n contents: function() {\\n return this.map(function() { return this.contentDocument || slice.call(this.childNodes) })\\n },\\n siblings: function(selector){\\n return filtered(this.map(function(i, el){\\n return filter.call(children(el.parentNode), function(child){ return child!==el })\\n }), selector)\\n },\\n empty: function(){\\n return this.each(function(){ this.innerHTML = \\'\\' })\\n },\\n // `pluck` is borrowed from Prototype.js\\n pluck: function(property){\\n return $.map(this, function(el){ return el[property] })\\n },\\n show: function(){\\n return this.each(function(){\\n this.style.display == \"none\" && (this.style.display = \\'\\')\\n if (getComputedStyle(this, \\'\\').getPropertyValue(\"display\") == \"none\")\\n this.style.display = defaultDisplay(this.nodeName)\\n })\\n },\\n replaceWith: function(newContent){\\n return this.before(newContent).remove()\\n },\\n wrap: function(structure){\\n var func = isFunction(structure)\\n if (this[0] && !func)\\n var dom = $(structure).get(0),\\n clone = dom.parentNode || this.length > 1\\n\\n return this.each(function(index){\\n $(this).wrapAll(\\n func ? structure.call(this, index) :\\n clone ? dom.cloneNode(true) : dom\\n )\\n })\\n },\\n wrapAll: function(structure){\\n if (this[0]) {\\n $(this[0]).before(structure = $(structure))\\n var children\\n // drill down to the inmost element\\n while ((children = structure.children()).length) structure = children.first()\\n $(structure).append(this)\\n }\\n return this\\n },\\n wrapInner: function(structure){\\n var func = isFunction(structure)\\n return this.each(function(index){\\n var self = $(this), contents = self.contents(),\\n dom = func ? structure.call(this, index) : structure\\n contents.length ? contents.wrapAll(dom) : self.append(dom)\\n })\\n },\\n unwrap: function(){\\n this.parent().each(function(){\\n $(this).replaceWith($(this).children())\\n })\\n return this\\n },\\n clone: function(){\\n return this.map(function(){ return this.cloneNode(true) })\\n },\\n hide: function(){\\n return this.css(\"display\", \"none\")\\n },\\n toggle: function(setting){\\n return this.each(function(){\\n var el = $(this)\\n ;(setting === undefined ? el.css(\"display\") == \"none\" : setting) ? el.show() : el.hide()\\n })\\n },\\n prev: function(selector){ return $(this.pluck(\\'previousElementSibling\\')).filter(selector || \\'*\\') },\\n next: function(selector){ return $(this.pluck(\\'nextElementSibling\\')).filter(selector || \\'*\\') },\\n html: function(html){\\n return 0 in arguments ?\\n this.each(function(idx){\\n var originHtml = this.innerHTML\\n $(this).empty().append( funcArg(this, html, idx, originHtml) )\\n }) :\\n (0 in this ? this[0].innerHTML : null)\\n },\\n text: function(text){\\n return 0 in arguments ?\\n this.each(function(idx){\\n var newText = funcArg(this, text, idx, this.textContent)\\n this.textContent = newText == null ? \\'\\' : \\'\\'+newText\\n }) :\\n (0 in this ? this.pluck(\\'textContent\\').join(\"\") : null)\\n },\\n attr: function(name, value){\\n var result\\n return (typeof name == \\'string\\' && !(1 in arguments)) ?\\n (0 in this && this[0].nodeType == 1 && (result = this[0].getAttribute(name)) != null ? result : undefined) :\\n this.each(function(idx){\\n if (this.nodeType !== 1) return\\n if (isObject(name)) for (key in name) setAttribute(this, key, name[key])\\n else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))\\n })\\n },\\n removeAttr: function(name){\\n return this.each(function(){ this.nodeType === 1 && name.split(\\' \\').forEach(function(attribute){\\n setAttribute(this, attribute)\\n }, this)})\\n },\\n prop: function(name, value){\\n name = propMap[name] || name\\n return (1 in arguments) ?\\n this.each(function(idx){\\n this[name] = funcArg(this, value, idx, this[name])\\n }) :\\n (this[0] && this[0][name])\\n },\\n removeProp: function(name){\\n name = propMap[name] || name\\n return this.each(function(){ delete this[name] })\\n },\\n data: function(name, value){\\n var attrName = \\'data-\\' + name.replace(capitalRE, \\'-$1\\').toLowerCase()\\n\\n var data = (1 in arguments) ?\\n this.attr(attrName, value) :\\n this.attr(attrName)\\n\\n return data !== null ? deserializeValue(data) : undefined\\n },\\n val: function(value){\\n if (0 in arguments) {\\n if (value == null) value = \"\"\\n return this.each(function(idx){\\n this.value = funcArg(this, value, idx, this.value)\\n })\\n } else {\\n return this[0] && (this[0].multiple ?\\n $(this[0]).find(\\'option\\').filter(function(){ return this.selected }).pluck(\\'value\\') :\\n this[0].value)\\n }\\n },\\n offset: function(coordinates){\\n if (coordinates) return this.each(function(index){\\n var $this = $(this),\\n coords = funcArg(this, coordinates, index, $this.offset()),\\n parentOffset = $this.offsetParent().offset(),\\n props = {\\n top: coords.top - parentOffset.top,\\n left: coords.left - parentOffset.left\\n }\\n\\n if ($this.css(\\'position\\') == \\'static\\') props[\\'position\\'] = \\'relative\\'\\n $this.css(props)\\n })\\n if (!this.length) return null\\n if (document.documentElement !== this[0] && !$.contains(document.documentElement, this[0]))\\n return {top: 0, left: 0}\\n var obj = this[0].getBoundingClientRect()\\n return {\\n left: obj.left + window.pageXOffset,\\n top: obj.top + window.pageYOffset,\\n width: Math.round(obj.width),\\n height: Math.round(obj.height)\\n }\\n },\\n css: function(property, value){\\n if (arguments.length < 2) {\\n var element = this[0]\\n if (typeof property == \\'string\\') {\\n if (!element) return\\n return element.style[camelize(property)] || getComputedStyle(element, \\'\\').getPropertyValue(property)\\n } else if (isArray(property)) {\\n if (!element) return\\n var props = {}\\n var computedStyle = getComputedStyle(element, \\'\\')\\n $.each(property, function(_, prop){\\n props[prop] = (element.style[camelize(prop)] || computedStyle.getPropertyValue(prop))\\n })\\n return props\\n }\\n }\\n\\n var css = \\'\\'\\n if (type(property) == \\'string\\') {\\n if (!value && value !== 0)\\n this.each(function(){ this.style.removeProperty(dasherize(property)) })\\n else\\n css = dasherize(property) + \":\" + maybeAddPx(property, value)\\n } else {\\n for (key in property)\\n if (!property[key] && property[key] !== 0)\\n this.each(function(){ this.style.removeProperty(dasherize(key)) })\\n else\\n css += dasherize(key) + \\':\\' + maybeAddPx(key, property[key]) + \\';\\'\\n }\\n\\n return this.each(function(){ this.style.cssText += \\';\\' + css })\\n },\\n index: function(element){\\n return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])\\n },\\n hasClass: function(name){\\n if (!name) return false\\n return emptyArray.some.call(this, function(el){\\n return this.test(className(el))\\n }, classRE(name))\\n },\\n addClass: function(name){\\n if (!name) return this\\n return this.each(function(idx){\\n if (!(\\'className\\' in this)) return\\n classList = []\\n var cls = className(this), newName = funcArg(this, name, idx, cls)\\n newName.split(/\\\\s+/g).forEach(function(klass){\\n if (!$(this).hasClass(klass)) classList.push(klass)\\n }, this)\\n classList.length && className(this, cls + (cls ? \" \" : \"\") + classList.join(\" \"))\\n })\\n },\\n removeClass: function(name){\\n return this.each(function(idx){\\n if (!(\\'className\\' in this)) return\\n if (name === undefined) return className(this, \\'\\')\\n classList = className(this)\\n funcArg(this, name, idx, classList).split(/\\\\s+/g).forEach(function(klass){\\n classList = classList.replace(classRE(klass), \" \")\\n })\\n className(this, classList.trim())\\n })\\n },\\n toggleClass: function(name, when){\\n if (!name) return this\\n return this.each(function(idx){\\n var $this = $(this), names = funcArg(this, name, idx, className(this))\\n names.split(/\\\\s+/g).forEach(function(klass){\\n (when === undefined ? !$this.hasClass(klass) : when) ?\\n $this.addClass(klass) : $this.removeClass(klass)\\n })\\n })\\n },\\n scrollTop: function(value){\\n if (!this.length) return\\n var hasScrollTop = \\'scrollTop\\' in this[0]\\n if (value === undefined) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset\\n return this.each(hasScrollTop ?\\n function(){ this.scrollTop = value } :\\n function(){ this.scrollTo(this.scrollX, value) })\\n },\\n scrollLeft: function(value){\\n if (!this.length) return\\n var hasScrollLeft = \\'scrollLeft\\' in this[0]\\n if (value === undefined) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset\\n return this.each(hasScrollLeft ?\\n function(){ this.scrollLeft = value } :\\n function(){ this.scrollTo(value, this.scrollY) })\\n },\\n position: function() {\\n if (!this.length) return\\n\\n var elem = this[0],\\n // Get *real* offsetParent\\n offsetParent = this.offsetParent(),\\n // Get correct offsets\\n offset = this.offset(),\\n parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()\\n\\n // Subtract element margins\\n // note: when an element has margin: auto the offsetLeft and marginLeft\\n // are the same in Safari causing offset.left to incorrectly be 0\\n offset.top -= parseFloat( $(elem).css(\\'margin-top\\') ) || 0\\n offset.left -= parseFloat( $(elem).css(\\'margin-left\\') ) || 0\\n\\n // Add offsetParent borders\\n parentOffset.top += parseFloat( $(offsetParent[0]).css(\\'border-top-width\\') ) || 0\\n parentOffset.left += parseFloat( $(offsetParent[0]).css(\\'border-left-width\\') ) || 0\\n\\n // Subtract the two offsets\\n return {\\n top: offset.top - parentOffset.top,\\n left: offset.left - parentOffset.left\\n }\\n },\\n offsetParent: function() {\\n return this.map(function(){\\n var parent = this.offsetParent || document.body\\n while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css(\"position\") == \"static\")\\n parent = parent.offsetParent\\n return parent\\n })\\n }\\n }\\n\\n // for now\\n $.fn.detach = $.fn.remove\\n\\n // Generate the `width` and `height` functions\\n ;[\\'width\\', \\'height\\'].forEach(function(dimension){\\n var dimensionProperty =\\n dimension.replace(/./, function(m){ return m[0].toUpperCase() })\\n\\n $.fn[dimension] = function(value){\\n var offset, el = this[0]\\n if (value === undefined) return isWindow(el) ? el[\\'inner\\' + dimensionProperty] :\\n isDocument(el) ? el.documentElement[\\'scroll\\' + dimensionProperty] :\\n (offset = this.offset()) && offset[dimension]\\n else return this.each(function(idx){\\n el = $(this)\\n el.css(dimension, funcArg(this, value, idx, el[dimension]()))\\n })\\n }\\n })\\n\\n function traverseNode(node, fun) {\\n fun(node)\\n for (var i = 0, len = node.childNodes.length; i < len; i++)\\n traverseNode(node.childNodes[i], fun)\\n }\\n\\n // Generate the `after`, `prepend`, `before`, `append`,\\n // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.\\n adjacencyOperators.forEach(function(operator, operatorIndex) {\\n var inside = operatorIndex % 2 //=> prepend, append\\n\\n $.fn[operator] = function(){\\n // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings\\n var argType, nodes = $.map(arguments, function(arg) {\\n var arr = []\\n argType = type(arg)\\n if (argType == \"array\") {\\n arg.forEach(function(el) {\\n if (el.nodeType !== undefined) return arr.push(el)\\n else if ($.zepto.isZ(el)) return arr = arr.concat(el.get())\\n arr = arr.concat(zepto.fragment(el))\\n })\\n return arr\\n }\\n return argType == \"object\" || arg == null ?\\n arg : zepto.fragment(arg)\\n }),\\n parent, copyByClone = this.length > 1\\n if (nodes.length < 1) return this\\n\\n return this.each(function(_, target){\\n parent = inside ? target : target.parentNode\\n\\n // convert all methods to a \"before\" operation\\n target = operatorIndex == 0 ? target.nextSibling :\\n operatorIndex == 1 ? target.firstChild :\\n operatorIndex == 2 ? target :\\n null\\n\\n var parentInDocument = $.contains(document.documentElement, parent)\\n\\n nodes.forEach(function(node){\\n if (copyByClone) node = node.cloneNode(true)\\n else if (!parent) return $(node).remove()\\n\\n parent.insertBefore(node, target)\\n if (parentInDocument) traverseNode(node, function(el){\\n if (el.nodeName != null && el.nodeName.toUpperCase() === \\'SCRIPT\\' &&\\n (!el.type || el.type === \\'text/javascript\\') && !el.src){\\n var target = el.ownerDocument ? el.ownerDocument.defaultView : window\\n target[\\'eval\\'].call(target, el.innerHTML)\\n }\\n })\\n })\\n })\\n }\\n\\n // after => insertAfter\\n // prepend => prependTo\\n // before => insertBefore\\n // append => appendTo\\n $.fn[inside ? operator+\\'To\\' : \\'insert\\'+(operatorIndex ? \\'Before\\' : \\'After\\')] = function(html){\\n $(html)[operator](this)\\n return this\\n }\\n })\\n\\n zepto.Z.prototype = Z.prototype = $.fn\\n\\n // Export internal API functions in the `$.zepto` namespace\\n zepto.uniq = uniq\\n zepto.deserializeValue = deserializeValue\\n $.zepto = zepto\\n\\n return $\\n})()\\n\\nwindow.Zepto = Zepto\\nwindow.$ === undefined && (window.$ = Zepto)\\n\\n;(function($){\\n var _zid = 1, undefined,\\n slice = Array.prototype.slice,\\n isFunction = $.isFunction,\\n isString = function(obj){ return typeof obj == \\'string\\' },\\n handlers = {},\\n specialEvents={},\\n focusinSupported = \\'onfocusin\\' in window,\\n focus = { focus: \\'focusin\\', blur: \\'focusout\\' },\\n hover = { mouseenter: \\'mouseover\\', mouseleave: \\'mouseout\\' }\\n\\n specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = \\'MouseEvents\\'\\n\\n function zid(element) {\\n return element._zid || (element._zid = _zid++)\\n }\\n function findHandlers(element, event, fn, selector) {\\n event = parse(event)\\n if (event.ns) var matcher = matcherFor(event.ns)\\n return (handlers[zid(element)] || []).filter(function(handler) {\\n return handler\\n && (!event.e || handler.e == event.e)\\n && (!event.ns || matcher.test(handler.ns))\\n && (!fn || zid(handler.fn) === zid(fn))\\n && (!selector || handler.sel == selector)\\n })\\n }\\n function parse(event) {\\n var parts = (\\'\\' + event).split(\\'.\\')\\n return {e: parts[0], ns: parts.slice(1).sort().join(\\' \\')}\\n }\\n function matcherFor(ns) {\\n return new RegExp(\\'(?:^| )\\' + ns.replace(\\' \\', \\' .* ?\\') + \\'(?: |$)\\')\\n }\\n\\n function eventCapture(handler, captureSetting) {\\n return handler.del &&\\n (!focusinSupported && (handler.e in focus)) ||\\n !!captureSetting\\n }\\n\\n function realEvent(type) {\\n return hover[type] || (focusinSupported && focus[type]) || type\\n }\\n\\n function add(element, events, fn, data, selector, delegator, capture){\\n var id = zid(element), set = (handlers[id] || (handlers[id] = []))\\n events.split(/\\\\s/).forEach(function(event){\\n if (event == \\'ready\\') return $(document).ready(fn)\\n var handler = parse(event)\\n handler.fn = fn\\n handler.sel = selector\\n // emulate mouseenter, mouseleave\\n if (handler.e in hover) fn = function(e){\\n var related = e.relatedTarget\\n if (!related || (related !== this && !$.contains(this, related)))\\n return handler.fn.apply(this, arguments)\\n }\\n handler.del = delegator\\n var callback = delegator || fn\\n handler.proxy = function(e){\\n e = compatible(e)\\n if (e.isImmediatePropagationStopped()) return\\n e.data = data\\n var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args))\\n if (result === false) e.preventDefault(), e.stopPropagation()\\n return result\\n }\\n handler.i = set.length\\n set.push(handler)\\n if (\\'addEventListener\\' in element)\\n element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\\n })\\n }\\n function remove(element, events, fn, selector, capture){\\n var id = zid(element)\\n ;(events || \\'\\').split(/\\\\s/).forEach(function(event){\\n findHandlers(element, event, fn, selector).forEach(function(handler){\\n delete handlers[id][handler.i]\\n if (\\'removeEventListener\\' in element)\\n element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\\n })\\n })\\n }\\n\\n $.event = { add: add, remove: remove }\\n\\n $.proxy = function(fn, context) {\\n var args = (2 in arguments) && slice.call(arguments, 2)\\n if (isFunction(fn)) {\\n var proxyFn = function(){ return fn.apply(context, args ? args.concat(slice.call(arguments)) : arguments) }\\n proxyFn._zid = zid(fn)\\n return proxyFn\\n } else if (isString(context)) {\\n if (args) {\\n args.unshift(fn[context], fn)\\n return $.proxy.apply(null, args)\\n } else {\\n return $.proxy(fn[context], fn)\\n }\\n } else {\\n throw new TypeError(\"expected function\")\\n }\\n }\\n\\n $.fn.bind = function(event, data, callback){\\n return this.on(event, data, callback)\\n }\\n $.fn.unbind = function(event, callback){\\n return this.off(event, callback)\\n }\\n $.fn.one = function(event, selector, data, callback){\\n return this.on(event, selector, data, callback, 1)\\n }\\n\\n var returnTrue = function(){return true},\\n returnFalse = function(){return false},\\n ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,\\n eventMethods = {\\n preventDefault: \\'isDefaultPrevented\\',\\n stopImmediatePropagation: \\'isImmediatePropagationStopped\\',\\n stopPropagation: \\'isPropagationStopped\\'\\n }\\n\\n function compatible(event, source) {\\n if (source || !event.isDefaultPrevented) {\\n source || (source = event)\\n\\n $.each(eventMethods, function(name, predicate) {\\n var sourceMethod = source[name]\\n event[name] = function(){\\n this[predicate] = returnTrue\\n return sourceMethod && sourceMethod.apply(source, arguments)\\n }\\n event[predicate] = returnFalse\\n })\\n\\n event.timeStamp || (event.timeStamp = Date.now())\\n\\n if (source.defaultPrevented !== undefined ? source.defaultPrevented :\\n \\'returnValue\\' in source ? source.returnValue === false :\\n source.getPreventDefault && source.getPreventDefault())\\n event.isDefaultPrevented = returnTrue\\n }\\n return event\\n }\\n\\n function createProxy(event) {\\n var key, proxy = { originalEvent: event }\\n for (key in event)\\n if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]\\n\\n return compatible(proxy, event)\\n }\\n\\n $.fn.delegate = function(selector, event, callback){\\n return this.on(event, selector, callback)\\n }\\n $.fn.undelegate = function(selector, event, callback){\\n return this.off(event, selector, callback)\\n }\\n\\n $.fn.live = function(event, callback){\\n $(document.body).delegate(this.selector, event, callback)\\n return this\\n }\\n $.fn.die = function(event, callback){\\n $(document.body).undelegate(this.selector, event, callback)\\n return this\\n }\\n\\n $.fn.on = function(event, selector, data, callback, one){\\n var autoRemove, delegator, $this = this\\n if (event && !isString(event)) {\\n $.each(event, function(type, fn){\\n $this.on(type, selector, data, fn, one)\\n })\\n return $this\\n }\\n\\n if (!isString(selector) && !isFunction(callback) && callback !== false)\\n callback = data, data = selector, selector = undefined\\n if (callback === undefined || data === false)\\n callback = data, data = undefined\\n\\n if (callback === false) callback = returnFalse\\n\\n return $this.each(function(_, element){\\n if (one) autoRemove = function(e){\\n remove(element, e.type, callback)\\n return callback.apply(this, arguments)\\n }\\n\\n if (selector) delegator = function(e){\\n var evt, match = $(e.target).closest(selector, element).get(0)\\n if (match && match !== element) {\\n evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})\\n return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1)))\\n }\\n }\\n\\n add(element, event, callback, data, selector, delegator || autoRemove)\\n })\\n }\\n $.fn.off = function(event, selector, callback){\\n var $this = this\\n if (event && !isString(event)) {\\n $.each(event, function(type, fn){\\n $this.off(type, selector, fn)\\n })\\n return $this\\n }\\n\\n if (!isString(selector) && !isFunction(callback) && callback !== false)\\n callback = selector, selector = undefined\\n\\n if (callback === false) callback = returnFalse\\n\\n return $this.each(function(){\\n remove(this, event, callback, selector)\\n })\\n }\\n\\n $.fn.trigger = function(event, args){\\n event = (isString(event) || $.isPlainObject(event)) ? $.Event(event) : compatible(event)\\n event._args = args\\n return this.each(function(){\\n // handle focus(), blur() by calling them directly\\n if (event.type in focus && typeof this[event.type] == \"function\") this[event.type]()\\n // items in the collection might not be DOM elements\\n else if (\\'dispatchEvent\\' in this) this.dispatchEvent(event)\\n else $(this).triggerHandler(event, args)\\n })\\n }\\n\\n // triggers event handlers on current element just as if an event occurred,\\n // doesn\\'t trigger an actual event, doesn\\'t bubble\\n $.fn.triggerHandler = function(event, args){\\n var e, result\\n this.each(function(i, element){\\n e = createProxy(isString(event) ? $.Event(event) : event)\\n e._args = args\\n e.target = element\\n $.each(findHandlers(element, event.type || event), function(i, handler){\\n result = handler.proxy(e)\\n if (e.isImmediatePropagationStopped()) return false\\n })\\n })\\n return result\\n }\\n\\n // shortcut methods for `.bind(event, fn)` for each event type\\n ;(\\'focusin focusout focus blur load resize scroll unload click dblclick \\'+\\n \\'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \\'+\\n \\'change select keydown keypress keyup error\\').split(\\' \\').forEach(function(event) {\\n $.fn[event] = function(callback) {\\n return (0 in arguments) ?\\n this.bind(event, callback) :\\n this.trigger(event)\\n }\\n })\\n\\n $.Event = function(type, props) {\\n if (!isString(type)) props = type, type = props.type\\n var event = document.createEvent(specialEvents[type] || \\'Events\\'), bubbles = true\\n if (props) for (var name in props) (name == \\'bubbles\\') ? (bubbles = !!props[name]) : (event[name] = props[name])\\n event.initEvent(type, bubbles, true)\\n return compatible(event)\\n }\\n\\n})(Zepto)\\n\\n;(function($){\\n var jsonpID = +new Date(),\\n document = window.document,\\n key,\\n name,\\n rscript = /<script\\\\b[^<]*(?:(?!<\\\\/script>)<[^<]*)*<\\\\/script>/gi,\\n scriptTypeRE = /^(?:text|application)\\\\/javascript/i,\\n xmlTypeRE = /^(?:text|application)\\\\/xml/i,\\n jsonType = \\'application/json\\',\\n htmlType = \\'text/html\\',\\n blankRE = /^\\\\s*$/,\\n originAnchor = document.createElement(\\'a\\')\\n\\n originAnchor.href = window.location.href\\n\\n // trigger a custom event and return false if it was cancelled\\n function triggerAndReturn(context, eventName, data) {\\n var event = $.Event(eventName)\\n $(context).trigger(event, data)\\n return !event.isDefaultPrevented()\\n }\\n\\n // trigger an Ajax \"global\" event\\n function triggerGlobal(settings, context, eventName, data) {\\n if (settings.global) return triggerAndReturn(context || document, eventName, data)\\n }\\n\\n // Number of active Ajax requests\\n $.active = 0\\n\\n function ajaxStart(settings) {\\n if (settings.global && $.active++ === 0) triggerGlobal(settings, null, \\'ajaxStart\\')\\n }\\n function ajaxStop(settings) {\\n if (settings.global && !(--$.active)) triggerGlobal(settings, null, \\'ajaxStop\\')\\n }\\n\\n // triggers an extra global event \"ajaxBeforeSend\" that\\'s like \"ajaxSend\" but cancelable\\n function ajaxBeforeSend(xhr, settings) {\\n var context = settings.context\\n if (settings.beforeSend.call(context, xhr, settings) === false ||\\n triggerGlobal(settings, context, \\'ajaxBeforeSend\\', [xhr, settings]) === false)\\n return false\\n\\n triggerGlobal(settings, context, \\'ajaxSend\\', [xhr, settings])\\n }\\n function ajaxSuccess(data, xhr, settings, deferred) {\\n var context = settings.context, status = \\'success\\'\\n settings.success.call(context, data, status, xhr)\\n if (deferred) deferred.resolveWith(context, [data, status, xhr])\\n triggerGlobal(settings, context, \\'ajaxSuccess\\', [xhr, settings, data])\\n ajaxComplete(status, xhr, settings)\\n }\\n // type: \"timeout\", \"error\", \"abort\", \"parsererror\"\\n function ajaxError(error, type, xhr, settings, deferred) {\\n var context = settings.context\\n settings.error.call(context, xhr, type, error)\\n if (deferred) deferred.rejectWith(context, [xhr, type, error])\\n triggerGlobal(settings, context, \\'ajaxError\\', [xhr, settings, error || type])\\n ajaxComplete(type, xhr, settings)\\n }\\n // status: \"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", \"parsererror\"\\n function ajaxComplete(status, xhr, settings) {\\n var context = settings.context\\n settings.complete.call(context, xhr, status)\\n triggerGlobal(settings, context, \\'ajaxComplete\\', [xhr, settings])\\n ajaxStop(settings)\\n }\\n\\n function ajaxDataFilter(data, type, settings) {\\n if (settings.dataFilter == empty) return data\\n var context = settings.context\\n return settings.dataFilter.call(context, data, type)\\n }\\n\\n // Empty function, used as default callback\\n function empty() {}\\n\\n $.ajaxJSONP = function(options, deferred){\\n if (!(\\'type\\' in options)) return $.ajax(options)\\n\\n var _callbackName = options.jsonpCallback,\\n callbackName = ($.isFunction(_callbackName) ?\\n _callbackName() : _callbackName) || (\\'Zepto\\' + (jsonpID++)),\\n script = document.createElement(\\'script\\'),\\n originalCallback = window[callbackName],\\n responseData,\\n abort = function(errorType) {\\n $(script).triggerHandler(\\'error\\', errorType || \\'abort\\')\\n },\\n xhr = { abort: abort }, abortTimeout\\n\\n if (deferred) deferred.promise(xhr)\\n\\n $(script).on(\\'load error\\', function(e, errorType){\\n clearTimeout(abortTimeout)\\n $(script).off().remove()\\n\\n if (e.type == \\'error\\' || !responseData) {\\n ajaxError(null, errorType || \\'error\\', xhr, options, deferred)\\n } else {\\n ajaxSuccess(responseData[0], xhr, options, deferred)\\n }\\n\\n window[callbackName] = originalCallback\\n if (responseData && $.isFunction(originalCallback))\\n originalCallback(responseData[0])\\n\\n originalCallback = responseData = undefined\\n })\\n\\n if (ajaxBeforeSend(xhr, options) === false) {\\n abort(\\'abort\\')\\n return xhr\\n }\\n\\n window[callbackName] = function(){\\n responseData = arguments\\n }\\n\\n script.src = options.url.replace(/\\\\?(.+)=\\\\?/, \\'?$1=\\' + callbackName)\\n document.head.appendChild(script)\\n\\n if (options.timeout > 0) abortTimeout = setTimeout(function(){\\n abort(\\'timeout\\')\\n }, options.timeout)\\n\\n return xhr\\n }\\n\\n $.ajaxSettings = {\\n // Default type of request\\n type: \\'GET\\',\\n // Callback that is executed before request\\n beforeSend: empty,\\n // Callback that is executed if the request succeeds\\n success: empty,\\n // Callback that is executed the the server drops error\\n error: empty,\\n // Callback that is executed on request complete (both: error and success)\\n complete: empty,\\n // The context for the callbacks\\n context: null,\\n // Whether to trigger \"global\" Ajax events\\n global: true,\\n // Transport\\n xhr: function () {\\n return new window.XMLHttpRequest()\\n },\\n // MIME types mapping\\n // IIS returns Javascript as \"application/x-javascript\"\\n accepts: {\\n script: \\'text/javascript, application/javascript, application/x-javascript\\',\\n json: jsonType,\\n xml: \\'application/xml, text/xml\\',\\n html: htmlType,\\n text: \\'text/plain\\'\\n },\\n // Whether the request is to another domain\\n crossDomain: false,\\n // Default timeout\\n timeout: 0,\\n // Whether data should be serialized to string\\n processData: true,\\n // Whether the browser should be allowed to cache GET responses\\n cache: true,\\n //Used to handle the raw response data of XMLHttpRequest.\\n //This is a pre-filtering function to sanitize the response.\\n //The sanitized response should be returned\\n dataFilter: empty\\n }\\n\\n function mimeToDataType(mime) {\\n if (mime) mime = mime.split(\\';\\', 2)[0]\\n return mime && ( mime == htmlType ? \\'html\\' :\\n mime == jsonType ? \\'json\\' :\\n scriptTypeRE.test(mime) ? \\'script\\' :\\n xmlTypeRE.test(mime) && \\'xml\\' ) || \\'text\\'\\n }\\n\\n function appendQuery(url, query) {\\n if (query == \\'\\') return url\\n return (url + \\'&\\' + query).replace(/[&?]{1,2}/, \\'?\\')\\n }\\n\\n // serialize payload and append it to the URL for GET requests\\n function serializeData(options) {\\n if (options.processData && options.data && $.type(options.data) != \"string\")\\n options.data = $.param(options.data, options.traditional)\\n if (options.data && (!options.type || options.type.toUpperCase() == \\'GET\\' || \\'jsonp\\' == options.dataType))\\n options.url = appendQuery(options.url, options.data), options.data = undefined\\n }\\n\\n $.ajax = function(options){\\n var settings = $.extend({}, options || {}),\\n deferred = $.Deferred && $.Deferred(),\\n urlAnchor, hashIndex\\n for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key]\\n\\n ajaxStart(settings)\\n\\n if (!settings.crossDomain) {\\n urlAnchor = document.createElement(\\'a\\')\\n urlAnchor.href = settings.url\\n // cleans up URL for .href (IE only), see https://github.com/madrobby/zepto/pull/1049\\n urlAnchor.href = urlAnchor.href\\n settings.crossDomain = (originAnchor.protocol + \\'//\\' + originAnchor.host) !== (urlAnchor.protocol + \\'//\\' + urlAnchor.host)\\n }\\n\\n if (!settings.url) settings.url = window.location.toString()\\n if ((hashIndex = settings.url.indexOf(\\'#\\')) > -1) settings.url = settings.url.slice(0, hashIndex)\\n serializeData(settings)\\n\\n var dataType = settings.dataType, hasPlaceholder = /\\\\?.+=\\\\?/.test(settings.url)\\n if (hasPlaceholder) dataType = \\'jsonp\\'\\n\\n if (settings.cache === false || (\\n (!options || options.cache !== true) &&\\n (\\'script\\' == dataType || \\'jsonp\\' == dataType)\\n ))\\n settings.url = appendQuery(settings.url, \\'_=\\' + Date.now())\\n\\n if (\\'jsonp\\' == dataType) {\\n if (!hasPlaceholder)\\n settings.url = appendQuery(settings.url,\\n settings.jsonp ? (settings.jsonp + \\'=?\\') : settings.jsonp === false ? \\'\\' : \\'callback=?\\')\\n return $.ajaxJSONP(settings, deferred)\\n }\\n\\n var mime = settings.accepts[dataType],\\n headers = { },\\n setHeader = function(name, value) { headers[name.toLowerCase()] = [name, value] },\\n protocol = /^([\\\\w-]+:)\\\\/\\\\//.test(settings.url) ? RegExp.$1 : window.location.protocol,\\n xhr = settings.xhr(),\\n nativeSetHeader = xhr.setRequestHeader,\\n abortTimeout\\n\\n if (deferred) deferred.promise(xhr)\\n\\n if (!settings.crossDomain) setHeader(\\'X-Requested-With\\', \\'XMLHttpRequest\\')\\n setHeader(\\'Accept\\', mime || \\'*/*\\')\\n if (mime = settings.mimeType || mime) {\\n if (mime.indexOf(\\',\\') > -1) mime = mime.split(\\',\\', 2)[0]\\n xhr.overrideMimeType && xhr.overrideMimeType(mime)\\n }\\n if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != \\'GET\\'))\\n setHeader(\\'Content-Type\\', settings.contentType || \\'application/x-www-form-urlencoded\\')\\n\\n if (settings.headers) for (name in settings.headers) setHeader(name, settings.headers[name])\\n xhr.setRequestHeader = setHeader\\n\\n xhr.onreadystatechange = function(){\\n if (xhr.readyState == 4) {\\n xhr.onreadystatechange = empty\\n clearTimeout(abortTimeout)\\n var result, error = false\\n if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == \\'file:\\')) {\\n dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader(\\'content-type\\'))\\n\\n if (xhr.responseType == \\'arraybuffer\\' || xhr.responseType == \\'blob\\')\\n result = xhr.response\\n else {\\n result = xhr.responseText\\n\\n try {\\n // http://perfectionkills.com/global-eval-what-are-the-options/\\n // sanitize response accordingly if data filter callback provided\\n result = ajaxDataFilter(result, dataType, settings)\\n if (dataType == \\'script\\') (1,eval)(result)\\n else if (dataType == \\'xml\\') result = xhr.responseXML\\n else if (dataType == \\'json\\') result = blankRE.test(result) ? null : $.parseJSON(result)\\n } catch (e) { error = e }\\n\\n if (error) return ajaxError(error, \\'parsererror\\', xhr, settings, deferred)\\n }\\n\\n ajaxSuccess(result, xhr, settings, deferred)\\n } else {\\n ajaxError(xhr.statusText || null, xhr.status ? \\'error\\' : \\'abort\\', xhr, settings, deferred)\\n }\\n }\\n }\\n\\n if (ajaxBeforeSend(xhr, settings) === false) {\\n xhr.abort()\\n ajaxError(null, \\'abort\\', xhr, settings, deferred)\\n return xhr\\n }\\n\\n var async = \\'async\\' in settings ? settings.async : true\\n xhr.open(settings.type, settings.url, async, settings.username, settings.password)\\n\\n if (settings.xhrFields) for (name in settings.xhrFields) xhr[name] = settings.xhrFields[name]\\n\\n for (name in headers) nativeSetHeader.apply(xhr, headers[name])\\n\\n if (settings.timeout > 0) abortTimeout = setTimeout(function(){\\n xhr.onreadystatechange = empty\\n xhr.abort()\\n ajaxError(null, \\'timeout\\', xhr, settings, deferred)\\n }, settings.timeout)\\n\\n // avoid sending empty string (#319)\\n xhr.send(settings.data ? settings.data : null)\\n return xhr\\n }\\n\\n // handle optional data/success arguments\\n function parseArguments(url, data, success, dataType) {\\n if ($.isFunction(data)) dataType = success, success = data, data = undefined\\n if (!$.isFunction(success)) dataType = success, success = undefined\\n return {\\n url: url\\n , data: data\\n , success: success\\n , dataType: dataType\\n }\\n }\\n\\n $.get = function(/* url, data, success, dataType */){\\n return $.ajax(parseArguments.apply(null, arguments))\\n }\\n\\n $.post = function(/* url, data, success, dataType */){\\n var options = parseArguments.apply(null, arguments)\\n options.type = \\'POST\\'\\n return $.ajax(options)\\n }\\n\\n $.getJSON = function(/* url, data, success */){\\n var options = parseArguments.apply(null, arguments)\\n options.dataType = \\'json\\'\\n return $.ajax(options)\\n }\\n\\n $.fn.load = function(url, data, success){\\n if (!this.length) return this\\n var self = this, parts = url.split(/\\\\s/), selector,\\n options = parseArguments(url, data, success),\\n callback = options.success\\n if (parts.length > 1) options.url = parts[0], selector = parts[1]\\n options.success = function(response){\\n self.html(selector ?\\n $(\\'<div>\\').html(response.replace(rscript, \"\")).find(selector)\\n : response)\\n callback && callback.apply(self, arguments)\\n }\\n $.ajax(options)\\n return this\\n }\\n\\n var escape = encodeURIComponent\\n\\n function serialize(params, obj, traditional, scope){\\n var type, array = $.isArray(obj), hash = $.isPlainObject(obj)\\n $.each(obj, function(key, value) {\\n type = $.type(value)\\n if (scope) key = traditional ? scope :\\n scope + \\'[\\' + (hash || type == \\'object\\' || type == \\'array\\' ? key : \\'\\') + \\']\\'\\n // handle data in serializeArray() format\\n if (!scope && array) params.add(value.name, value.value)\\n // recurse into nested objects\\n else if (type == \"array\" || (!traditional && type == \"object\"))\\n serialize(params, value, traditional, key)\\n else params.add(key, value)\\n })\\n }\\n\\n $.param = function(obj, traditional){\\n var params = []\\n params.add = function(key, value) {\\n if ($.isFunction(value)) value = value()\\n if (value == null) value = \"\"\\n this.push(escape(key) + \\'=\\' + escape(value))\\n }\\n serialize(params, obj, traditional)\\n return params.join(\\'&\\').replace(/%20/g, \\'+\\')\\n }\\n})(Zepto)\\n\\n;(function($){\\n $.fn.serializeArray = function() {\\n var name, type, result = [],\\n add = function(value) {\\n if (value.forEach) return value.forEach(add)\\n result.push({ name: name, value: value })\\n }\\n if (this[0]) $.each(this[0].elements, function(_, field){\\n type = field.type, name = field.name\\n if (name && field.nodeName.toLowerCase() != \\'fieldset\\' &&\\n !field.disabled && type != \\'submit\\' && type != \\'reset\\' && type != \\'button\\' && type != \\'file\\' &&\\n ((type != \\'radio\\' && type != \\'checkbox\\') || field.checked))\\n add($(field).val())\\n })\\n return result\\n }\\n\\n $.fn.serialize = function(){\\n var result = []\\n this.serializeArray().forEach(function(elm){\\n result.push(encodeURIComponent(elm.name) + \\'=\\' + encodeURIComponent(elm.value))\\n })\\n return result.join(\\'&\\')\\n }\\n\\n $.fn.submit = function(callback) {\\n if (0 in arguments) this.bind(\\'submit\\', callback)\\n else if (this.length) {\\n var event = $.Event(\\'submit\\')\\n this.eq(0).trigger(event)\\n if (!event.isDefaultPrevented()) this.get(0).submit()\\n }\\n return this\\n }\\n\\n})(Zepto)\\n\\n;(function(){\\n // getComputedStyle shouldn\\'t freak out when called\\n // without a valid element as argument\\n try {\\n getComputedStyle(undefined)\\n } catch(e) {\\n var nativeGetComputedStyle = getComputedStyle\\n window.getComputedStyle = function(element, pseudoElement){\\n try {\\n return nativeGetComputedStyle(element, pseudoElement)\\n } catch(e) {\\n return null\\n }\\n }\\n }\\n})()\\n return Zepto\\n}))\\n'},function(){(function(e){e.expr={\":\":{}},e.support={},e.fn.clone=function(){var t=e();return this.each(function(){t.push(this.cloneNode(!0))}),t},['Left','Top'].forEach(function(t,n){function o(e){return e&&'object'==typeof e&&'setInterval'in e}function i(e){return o(e)?e:!(9!==e.nodeType)&&(e.defaultView||e.parentWindow)}var a='scroll'+t;e.fn[a]=function(t){var o,s;return void 0===t?(o=this[0],!o)?null:(s=i(o),s?'pageXOffset'in s?s[n?'pageYOffset':'pageXOffset']:s.document.documentElement[a]||s.document.body[a]:o[a]):void this.each(function(){if(s=i(this),s){var o=n?e(s).scrollLeft():t,r=n?t:e(s).scrollTop();s.scrollTo(o,r)}else this[a]=t})}}),['width','height'].forEach(function(t){var n=t.replace(/./,function(e){return e[0].toUpperCase()});e.fn['inner'+n]=function(e){var n=this;if(n){var o=n[t]();return{width:['left','right'],height:['top','bottom']}[t].forEach(function(t){o+=parseInt(n.css('padding-'+t),10),e&&(o+=parseInt(n.css('margin-'+t),10))}),o}return null},e.fn['outer'+n]=function(e){var n=this;if(n){var o=n[t]();return{width:['left','right'],height:['top','bottom']}[t].forEach(function(t){e&&(o+=parseInt(n.css('margin-'+t),10))}),o}return null}}),e.proxy=function(t,n){if('string'==typeof n){var o=t[n];n=t,t=o}if(e.isFunction(t)){var i=Array.prototype.slice.call(arguments,2),a=function(){return t.apply(n,i.concat(Array.prototype.slice.call(arguments)))};return a.guid=t.guid=t.guid||a.guid||e.guid++,a}};var t=String.prototype.trim;e.trim=function(e,n){return!n&&t?t.call(e):(n=defaultToWhiteSpace(n),e.replace(new RegExp('^['+n+']+|['+n+']+$','g'),''))};var n=/^t(?:able|d|h)$/i,o=/^(?:body|html)$/i;e.fn.position=function(){if(!this[0])return null;var t=this[0],n=this.offsetParent(),i=this.offset(),a=o.test(n[0].nodeName)?{top:0,left:0}:n.offset();return i.top-=parseFloat(e(t).css('margin-top'))||0,i.left-=parseFloat(e(t).css('margin-left'))||0,a.top+=parseFloat(e(n[0]).css('border-top-width'))||0,a.left+=parseFloat(e(n[0]).css('border-left-width'))||0,{top:i.top-a.top,left:i.left-a.left}},e.fn.offsetParent=function(){var t=e();return this.each(function(){for(var n=this.offsetParent||document.body;n&&!o.test(n.nodeName)&&'static'===e(n).css('position');)n=n.offsetParent;t.push(n)}),t}})(Zepto)}])});\r\n//# sourceMappingURL=goldenlayout.js.map","/* eslint indent: [\"error\", 2] */\r\n\r\nimport GoldenLayout from \"./golden/js/goldenlayout.js\";\r\n\r\nvar config = {\r\n settings: {\r\n showPopoutIcon: false,\r\n showCloseIcon: false\r\n },\r\n dimensions: {\r\n minItemHeight: 40\r\n },\r\n content: [{\r\n type: \"row\",\r\n content: [{\r\n type: \"column\",\r\n width: 40,\r\n content: [{\r\n type: \"component\",\r\n componentName: \"template\",\r\n title: \"Game\",\r\n componentState: { id: \"client_wrapper\" }\r\n }]\r\n },\r\n {\r\n type: \"column\",\r\n content: [{\r\n type: \"row\",\r\n height: 65,\r\n content: [{\r\n type: \"stack\",\r\n content: [{\r\n type: \"component\",\r\n title: \"Main\",\r\n componentName: \"template\",\r\n componentState: { id: \"mainmenu\" }\r\n },\r\n {\r\n type: \"component\",\r\n title: \"Log\",\r\n componentName: \"template\",\r\n componentState: { id: \"log\" }\r\n }]\r\n },\r\n {\r\n type: \"component\",\r\n title: \"Music\",\r\n width: 30,\r\n componentName: \"template\",\r\n componentState: { id: \"music\" }\r\n }]\r\n },\r\n {\r\n type: \"row\",\r\n content: [{\r\n type: \"component\",\r\n title: \"Server chat\",\r\n componentName: \"template\",\r\n componentState: { id: \"ooc\" }\r\n }]\r\n }]\r\n }]\r\n }]\r\n};\r\n\r\nvar golden = new GoldenLayout(config);\r\ngolden.registerComponent(\"template\", function (container, componentState) {\r\n let template = document.querySelector(`#${componentState.id}`);\r\n container.getElement().html(template.content);\r\n // TODO: support multiple locales\r\n // container.setTitle(document.querySelector(`#${componentState.id} meta[name='frame-title']`).getAttribute(\"content\"));\r\n});\r\n\r\ngolden.init();"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./webAO/ui.js","webpack:///./webAO/golden/js/goldenlayout.js","webpack:///(webpack)/buildin/module.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_goldenlayout","golden","GoldenLayout","settings","showPopoutIcon","showCloseIcon","dimensions","minItemHeight","content","type","width","componentName","title","componentState","id","height","registerComponent","container","template","document","querySelector","getElement","html","init","self","e","Math","min","floor","max","configurable","$","zepto","touches","targetTouches","originalEvent","j","a","push","window","location","hash","match","RegExp","search","substr","split","length","b","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","setTimeout","g","Array","Error","indexOf","Function","apply","concat","slice","arguments","this","Date","now","getTime","f","random","toString","replace","k","trim","Int8Array","_typeof","_class","_classCallCheck","_mSubscriptions","on","h","fn","ctx","emit","unshift","unbind","splice","off","trigger","version","__e","_o$b","_this","_possibleConstructorReturn","__proto__","getPrototypeOf","config","_extendItemNode","contentItems","parent","isInitialised","isMaximised","isRoot","isRow","isColumn","isStack","isComponent","layoutManager","_pendingEventPropagations","_throttledEvents","_propagateEvent","_createContentItems","_inherits","_createClass","callDownwards","_$destroy","isClosable","removeChild","undisplayChild","_$init","_$normalizeContentItem","element","parentNode","replaceChild","header","tabs","contentItem","createPopout","emitBubblingEvent","preventDefault","_$minimiseItem","_$maximiseItem","selectedItem","selectItem","addClass","removeClass","hasId","getItemsByFilter","_$getItemsByProperty","instance","dropTargetIndicator","highlightArea","addChild","_callOnActiveComponents","hide","updateSize","show","getItemsByType","getActiveContentItem","remove","offset","x1","left","y1","top","x2","y2","surface","setSize","childElementContainer","append","createContentItem","isPropagationStopped","_scheduleEventPropagationToLayoutManager","origin","_propagateEventToLayoutManager","__g","round","_s$a","_this2","_splitterSize","borderWidth","_splitterGrabSize","borderGrabWidth","_isColumn","_dimension","_splitter","_splitterPosition","_splitterMinPosition","_splitterMaxPosition","_createSplitter","after","_isDocked","before","_validateDocking","_calculateRelativeSizes","_setAbsoluteSizes","headerHeight","_docker","docked","size","itemSize","column","first","last","row","position","_","dimension","realSize","toggleClass","_header","dock","_calculateAbsoluteSizes","additionalPixel","itemSizes","totalWidth","totalHeight","_respectMinItemWidth","minItemWidth","_onSplitterDrag","_onSplitterDragStop","_onSplitterDragStart","_setDockable","_$setClosable","minWidth","minHeight","horizontal","vertical","_getItemsForSplitter","_getMinimumDimensions","css","_o$b2","_this3","_timeout","_eElement","_oDocument","_eBody","body","_nButtonCode","_nDelay","_nDistance","_nX","_nY","_nOriginalX","_nOriginalY","_bDragging","_fMove","onMouseMove","_fUp","onMouseUp","_fDown","onMouseDown","button","_getCoordinates","x","y","one","_startDrag","abs","clearTimeout","find","pageX","pageY","TypeError","_class2","_keys","_values","_nextLevel","parseInt","_o$a","_this4","_containerElement","tabDropPlaceholder","_$highlightDropZone","side","_a$a","_this5","_activeContentItem","hasHeaders","popout","labels","maximise","showMaximiseIcon","close","minimise","_dropZones","_dropSegment","_contentAreaDimensions","_dropIndex","_setupHeaderPosition","_$validateClosability","_sided","createTab","_$hide","activeItemIndex","setActiveContentItem","_$show","activeContentItem","removeTab","hideTab","_isClosable","_resetHeaderDropZone","hoverArea","_highlightHeaderDropZone","_highlightBodyDropZone","_$getArea","right","bottom","innerHeight","toggleMaximise","toggle","_side","keys","ceil","isNaN","F","G","u","S","P","B","W","v","virtual","R","U","createElement","_class3","_reactComponent","_originalComponentWillUpdate","_container","_initialState","_reactClass","_getReactClass","_render","_destroy","ReactDOM","render","_getReactComponent","componentWillUpdate","_onUpdate","getState","setState","unmountComponentAtNode","_config","component","getComponent","glEventHub","eventHub","glContainer","extend","props","React","_o$b3","_this6","_layoutManager","_dontPropagateToParent","_childEventSource","_onEventFromThis","_boundOnEventFromChild","_onEventFromChild","isSubWindow","_propagateToParent","_propagateToChildren","__gl","__glArgs","createEvent","opener","initEvent","createEventObject","eventType","eventName","dispatchEvent","fireEvent","openPopouts","getGlInstance","_$onEventFromParent","_class4","_Error","_this7","message","node","_o$b4","_this8","selectionEnabled","_onHeaderClick","tabsContainer","tabDropdownContainer","controlsContainer","_updateTabSizes","tabsMarkedForRemoval","closeButton","dockButton","tabDropdownButton","hideAdditionalTabsDropdown","_hideAdditionalTabsDropdown","mouseup","_lastVisibleTabIndex","_tabControlOffset","tabControlOffset","_createControls","setActive","reorderOnTabMenuClick","_canDestroy","_showAdditionalTabsDropdown","tabDropdown","_getHeaderSetting","_onPopoutClick","attr","popoutWholeStack","target","select","outerWidth","tabOverlapAllowance","tab","outerHeight","z-index","margin-left","_class5","titleElement","closeElement","isActive","setTitle","reorderEnabled","_dragListener","_onDragStart","destroy","_onTabClickFn","_onTabClick","_onCloseClickFn","_onCloseClick","_onCloseMousedown","stopPropagation","_o$b5","_this9","_contentItem","_originalParent","_area","_lastValidArea","_onDrag","_onDrop","_undisplayTree","_$calculateItemAreas","_setDimensions","_minX","_minY","_maxX","_maxY","_width","_height","_setDropPosition","constrainDragToContainer","_updateTree","_$onDrop","_$setParent","dragProxyWidth","dragProxyHeight","_class6","_action","_o$a2","_this10","_element","_$setSize","shown","_$shown","_o$b6","_this11","isHidden","_contentElement","_s$b","_this12","_dimensions","_parentId","_indexInParent","_popoutWindow","_id","_createWindow","screenX","screenLeft","screenY","screenTop","toConfig","parentId","indexInParent","__glInstance","_$closeWindow","getWindow","root","getItemsById","_createUrl","_serializeWindowOptions","innerWidth","menubar","toolbar","personalbar","resizable","scrollbars","status","open","_positionWindow","_onClose","setInterval","_onInitialised","clearInterval","blockedPopoutsThrowError","join","minifyConfig","localStorage","setItem","href","moveTo","focus","popIn","D","w","ES6","_a$b","_this13","_isFullPage","_resizeTimeoutId","_components","lm-react-component","_itemAreas","_resizeFunction","_onResize","_unloadFunction","_onUnload","_maximisedItem","_maximisePlaceholder","_creationTimeoutPassed","_subWindowsCreated","_dragSources","_updatingColumnsResponsive","_firstLoad","_createConfig","transitionIndicator","_typeToItem","stack","unminifyConfig","_$reconcilePopoutWindows","maximisedItemId","_createSubWindows","readyState","ready","_adjustToWindowMode","_setContainer","_create","_bindEvents","_adjustColumnsResponsive","forEach","_itemConfig","addId","deselect","prepend","removeId","Infinity","_getAllContentItems","_$createRootItemAreas","isPlainObject","closed","resize","getItem","JSON","parse","removeItem","popin","click","offsetHeight","margin","padding","overflow","closePopoutsOnUnload","_useResponsiveLayout","_findAllStackContainers","_addChildContentItemsToContainer","responsiveMode","_findAllStackContainersRecursive","default","propertyIsEnumerable","copyright","valueOf","writable","style","display","appendChild","src","contentWindow","write","defineProperties","documentElement","_class7","_isVertical","_size","_grabSize","_createElement","stringify","_class8","_createDragListener","transitionElements","_class9","_class10","_toElement","_fromDimensions","_totalAnimationDuration","_animationStartTime","_measure","opacity","_nextAnimationFrame","console","error","log","execScript","attachEvent","addEventListener","eval","expr",":","support","clone","each","cloneNode","nodeType","defaultView","parentWindow","scrollLeft","scrollTop","scrollTo","toUpperCase","proxy","isFunction","guid","String","defaultToWhiteSpace","offsetParent","test","nodeName","parseFloat","Zepto","define","undefined","__WEBPACK_AMD_DEFINE_RESULT__","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","webpackPolyfill","deprecate","paths","children"],"mappings":"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","file":"ui.b.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","/* eslint indent: [\"error\", 2] */\r\n\r\nimport GoldenLayout from \"./golden/js/goldenlayout.js\";\r\n\r\nvar config = {\r\n settings: {\r\n showPopoutIcon: false,\r\n showCloseIcon: false\r\n },\r\n dimensions: {\r\n minItemHeight: 40\r\n },\r\n content: [{\r\n type: \"row\",\r\n content: [{\r\n type: \"column\",\r\n width: 40,\r\n content: [{\r\n type: \"component\",\r\n componentName: \"template\",\r\n title: \"Game\",\r\n componentState: { id: \"client_wrapper\" }\r\n }]\r\n },\r\n {\r\n type: \"column\",\r\n content: [{\r\n type: \"row\",\r\n height: 65,\r\n content: [{\r\n type: \"stack\",\r\n content: [{\r\n type: \"component\",\r\n title: \"Main\",\r\n componentName: \"template\",\r\n componentState: { id: \"mainmenu\" }\r\n },\r\n {\r\n type: \"component\",\r\n title: \"Log\",\r\n componentName: \"template\",\r\n componentState: { id: \"log\" }\r\n }]\r\n },\r\n {\r\n type: \"component\",\r\n title: \"Music\",\r\n width: 30,\r\n componentName: \"template\",\r\n componentState: { id: \"music\" }\r\n }]\r\n },\r\n {\r\n type: \"row\",\r\n content: [{\r\n type: \"component\",\r\n title: \"Server chat\",\r\n componentName: \"template\",\r\n componentState: { id: \"ooc\" }\r\n }]\r\n }]\r\n }]\r\n }]\r\n};\r\n\r\nvar golden = new GoldenLayout(config);\r\ngolden.registerComponent(\"template\", function (container, componentState) {\r\n let template = document.querySelector(`#${componentState.id}`);\r\n container.getElement().html(template.content);\r\n // TODO: support multiple locales\r\n // container.setTitle(document.querySelector(`#${componentState.id} meta[name='frame-title']`).getAttribute(\"content\"));\r\n});\r\n\r\ngolden.init();","(function(e,t){'object'==typeof exports&&'object'==typeof module?module.exports=t():'function'==typeof define&&define.amd?define('GoldenLayout',[],t):'object'==typeof exports?exports.GoldenLayout=t():e.GoldenLayout=t()})('undefined'==typeof self?this:self,function(){var e=Math.min,t=Math.floor,n=Math.max;return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={i:o,l:!1,exports:{}};return e[o].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e['default']}:function(){return e};return t.d(n,'a',n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p='',t(t.s=35)}([function(e,t,n){'use strict';function o(e){var t=location.hash.match(new RegExp(e+'=([^&]*)'));return t?t[1]:null}t.e=function(e){return $.zepto?e.touches?e.targetTouches[0]:e:e.originalEvent&&e.originalEvent.touches?e.originalEvent.touches[0]:e},t.j=function(e){var t,n;if('function'==typeof a.a)return a()(e);for(n in t=[],e)t.push(n);return t},t.d=function(e){if(window.location.hash)return o(e);if(!window.location.search)return null;var t,n,i=window.location.search.substr(1).split('&'),a={};for(n=0;n<i.length;n++)t=i[n].split('='),a[t[0]]=t[1];return a[e]||null},t.b=function(e,t){for(var n in t)e[n]=t[n];return e},t.a=function(e){return(window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)})(function(){e()})},t.g=function(e,t){if(!(t instanceof Array))throw new Error('Haystack is not an Array');if(t.indexOf)return t.indexOf(e);for(var n=0;n<t.length;n++)if(t[n]===e)return n;return-1},n.d(t,'h',function(){return l}),t.c=function(e,t,n){if(void 0!==Function.prototype.bind)return Function.prototype.bind.apply(e,[t].concat(n||[]));var o=function(){var i=(n||[]).concat(Array.prototype.slice.call(arguments,0));return this instanceof o?void e.apply(this,i):e.apply(t,i)};return o.prototype=e.prototype,o},t.i=function(){return'function'==typeof Date.now?Date.now():new Date().getTime()},t.f=function(){return(1e15*Math.random()).toString(36).replace('.','')},t.k=function(e){return $.trim(e.replace(/(<([^>]+)>)/ig,''))};var i=n(40),a=n.n(i),s=n(60),r=n.n(s),l='function'!=typeof /./&&'object'!=typeof Int8Array?function(e){return'function'==typeof e||!1}:function(e){return'[object Function]'===toString.call(e)}},function(e,t,n){'use strict';var o=n(0);const a='__all';t.a=a;t.b=class{constructor(){this._mSubscriptions={},this._mSubscriptions[a]=[],this.on=function(e,t,n){if(!Object(o.h)(t))throw new Error('Tried to listen to event '+e+' with non-function callback '+t);this._mSubscriptions[e]||(this._mSubscriptions[e]=[]),this._mSubscriptions[e].push({fn:t,ctx:n})},this.emit=function(e){var t,n,o;o=Array.prototype.slice.call(arguments,1);var i=this._mSubscriptions[e];if(i)for(i=i.slice(),t=0;t<i.length;t++)n=i[t].ctx||{},i[t].fn.apply(n,o);o.unshift(e);var s=this._mSubscriptions[a].slice();for(t=0;t<s.length;t++)n=s[t].ctx||{},s[t].fn.apply(n,o)},this.unbind=function(e,t,n){if(!this._mSubscriptions[e])throw new Error('No subscribtions to unsubscribe for event '+e);var o,i=!1;for(o=0;o<this._mSubscriptions[e].length;o++)t&&this._mSubscriptions[e][o].fn!==t||n&&n!==this._mSubscriptions[e][o].ctx||(this._mSubscriptions[e].splice(o,1),i=!0);if(!1==i)throw new Error('Nothing to unbind for '+e)},this.off=this.unbind,this.trigger=this.emit}}},function(e){var t=e.exports={version:'2.5.6'};'number'==typeof __e&&(__e=t)},function(e,t,n){'use strict';var o=n(1),i=n(26),a=n(12),s=n(27),r=n(66),l=n(0);class c extends o.b{constructor(e,t,n){super(),this.config=this._extendItemNode(t),this.type=t.type,this.contentItems=[],this.parent=n,this.isInitialised=!1,this.isMaximised=!1,this.isRoot=!1,this.isRow=!1,this.isColumn=!1,this.isStack=!1,this.isComponent=!1,this.layoutManager=e,this._pendingEventPropagations={},this._throttledEvents=['stateChanged'],this.on(o.a,this._propagateEvent,this),t.content&&this._createContentItems(t)}setSize(){throw new Error('Abstract Method')}callDownwards(e,t,n,o){var a;for(!0!==n&&!0!==o&&this[e].apply(this,t||[]),a=0;a<this.contentItems.length;a++)this.contentItems[a].callDownwards(e,t,n);!0===n&&!0!==o&&this[e].apply(this,t||[])}removeChild(e,t){var n=Object(l.g)(e,this.contentItems);if(-1===n)throw new Error('Can\\'t remove child item. Unknown content item');!0!==t&&this.contentItems[n]._$destroy(),this.contentItems.splice(n,1),this.config.content.splice(n,1),0<this.contentItems.length?this.callDownwards('setSize'):!(this instanceof a.a)&&!0===this.config.isClosable&&this.parent.removeChild(this)}undisplayChild(e){var t=Object(l.g)(e,this.contentItems);if(-1===t)throw new Error('Can\\'t remove child item. Unknown content item');this instanceof a.a||!0!==this.config.isClosable||this.parent.undisplayChild(this)}addChild(e,t){t===void 0&&(t=this.contentItems.length),this.contentItems.splice(t,0,e),this.config.content===void 0&&(this.config.content=[]),this.config.content.splice(t,0,e.config),e.parent=this,!0===e.parent.isInitialised&&!1===e.isInitialised&&e._$init()}replaceChild(e,t,n){t=this.layoutManager._$normalizeContentItem(t);var o=Object(l.g)(e,this.contentItems),i=e.element[0].parentNode;if(-1===o)throw new Error('Can\\'t replace child. oldChild is not child of this');i.replaceChild(t.element[0],e.element[0]),!0===n&&(e.parent=null,e._$destroy()),this.contentItems[o]=t,t.parent=this,this.isStack&&(this.header.tabs[o].contentItem=t),!0===t.parent.isInitialised&&!1===t.isInitialised&&t._$init(),this.callDownwards('setSize')}remove(){this.parent.removeChild(this)}popout(){var e=this.layoutManager.createPopout(this);return this.emitBubblingEvent('stateChanged'),e}toggleMaximise(t){t&&t.preventDefault(),!0===this.isMaximised?this.layoutManager._$minimiseItem(this):this.layoutManager._$maximiseItem(this),this.isMaximised=!this.isMaximised,this.emitBubblingEvent('stateChanged')}select(){this.layoutManager.selectedItem!==this&&(this.layoutManager.selectItem(this,!0),this.element.addClass('lm_selected'))}deselect(){this.layoutManager.selectedItem===this&&(this.layoutManager.selectedItem=null,this.element.removeClass('lm_selected'))}setTitle(e){this.config.title=e,this.emit('titleChanged',e),this.emit('stateChanged')}hasId(e){if(!this.config.id)return!1;return'string'==typeof this.config.id?this.config.id===e:this.config.id instanceof Array?-1!==Object(l.g)(e,this.config.id):void 0}addId(e){this.hasId(e)||(this.config.id?'string'==typeof this.config.id?this.config.id=[this.config.id,e]:this.config.id instanceof Array&&this.config.id.push(e):this.config.id=e)}removeId(e){if(!this.hasId(e))throw new Error('Id not found');if('string'==typeof this.config.id)delete this.config.id;else if(this.config.id instanceof Array){var t=Object(l.g)(e,this.config.id);this.config.id.splice(t,1)}}getItemsByFilter(e){var t=[],n=function(o){for(var a=0;a<o.contentItems.length;a++)!0===e(o.contentItems[a])&&t.push(o.contentItems[a]),n(o.contentItems[a])};return n(this),t}getItemsById(e){return this.getItemsByFilter(function(t){return t.config.id instanceof Array?-1!==Object(l.g)(e,t.config.id):t.config.id===e})}getItemsByType(e){return this._$getItemsByProperty('type',e)}getComponentsByName(e){var t,n=this._$getItemsByProperty('componentName',e),o=[];for(t=0;t<n.length;t++)o.push(n[t].instance);return o}_$getItemsByProperty(e,t){return this.getItemsByFilter(function(n){return n[e]===t})}_$setParent(e){this.parent=e}_$highlightDropZone(e,t,n){this.layoutManager.dropTargetIndicator.highlightArea(n)}_$onDrop(e){this.addChild(e)}_$hide(){this._callOnActiveComponents('hide'),this.element.hide(),this.layoutManager.updateSize()}_$show(){this._callOnActiveComponents('show'),this.element.show(),this.layoutManager.updateSize()}_callOnActiveComponents(e){var t,n,o=this.getItemsByType('stack');for(n=0;n<o.length;n++)t=o[n].getActiveContentItem(),t&&t.isComponent&&t.container[e]()}_$destroy(){this.emitBubblingEvent('beforeItemDestroyed'),this.callDownwards('_$destroy',[],!0,!0),this.element.remove(),this.emitBubblingEvent('itemDestroyed')}_$getArea(e){e=e||this.element;var t=e.offset(),n=e.width(),o=e.height();return{x1:t.left,y1:t.top,x2:t.left+n,y2:t.top+o,surface:n*o,contentItem:this}}_$init(){var e;for(this.setSize(),e=0;e<this.contentItems.length;e++)this.childElementContainer.append(this.contentItems[e].element);this.isInitialised=!0,this.emitBubblingEvent('itemCreated'),this.emitBubblingEvent(this.type+'Created')}emitBubblingEvent(e){var t=new i.a(e,this);this.emit(e,t)}_createContentItems(e){var t,n;if(!(e.content instanceof Array))throw new s.a('content must be an Array',e);for(n=0;n<e.content.length;n++)t=this.layoutManager.createContentItem(e.content[n],this),this.contentItems.push(t)}_extendItemNode(e){for(var t in r.a)void 0===e[t]&&(e[t]=r.a[t]);return e}_propagateEvent(e,t){t instanceof i.a&&!1===t.isPropagationStopped&&!0===this.isInitialised&&(!1===this.isRoot&&this.parent?this.parent.emit.apply(this.parent,Array.prototype.slice.call(arguments,0)):this._scheduleEventPropagationToLayoutManager(e,t))}_scheduleEventPropagationToLayoutManager(e,t){-1===Object(l.g)(e,this._throttledEvents)?this.layoutManager.emit(e,t.origin):!0!==this._pendingEventPropagations[e]&&(this._pendingEventPropagations[e]=!0,Object(l.a)(Object(l.c)(this._propagateEventToLayoutManager,this,[e,t])))}_propagateEventToLayoutManager(e,t){this._pendingEventPropagations[e]=!1,this.layoutManager.emit(e,t)}}t.a=c},function(e){var t=e.exports='undefined'!=typeof window&&window.Math==Math?window:'undefined'!=typeof self&&self.Math==Math?self:Function('return this')();'number'==typeof __g&&(__g=t)},function(e,t,n){e.exports=!n(10)(function(){return 7!=Object.defineProperty({},'a',{get:function(){return 7}}).a})},function(e,o,i){'use strict';var a=Math.round,s=i(3),r=i(13),l=i(67),c=i(0);class p extends s.a{constructor(e,t,n,o){super(t,n,o),this.isRow=!e,this.isColumn=e,this.element=$('<div class=\"lm_item lm_'+(e?'column':'row')+'\"></div>'),this.childElementContainer=this.element,this._splitterSize=t.config.dimensions.borderWidth,this._splitterGrabSize=t.config.dimensions.borderGrabWidth,this._isColumn=e,this._dimension=e?'height':'width',this._splitter=[],this._splitterPosition=null,this._splitterMinPosition=null,this._splitterMaxPosition=null}addChild(e,t,o){var a,r,l,i;if(e=this.layoutManager._$normalizeContentItem(e,this),void 0===t&&(t=this.contentItems.length),0<this.contentItems.length?(i=this._createSplitter(n(0,t-1)).element,0<t?(this.contentItems[t-1].element.after(i),i.after(e.element),this._isDocked(t-1)&&(this._splitter[t-1].element.hide(),this._splitter[t].element.show())):(this.contentItems[0].element.before(i),i.before(e.element))):this.childElementContainer.append(e.element),s.a.prototype.addChild.call(this,e,t),a=100*(1/this.contentItems.length),!0===o)return void this.emitBubblingEvent('stateChanged');for(l=0;l<this.contentItems.length;l++)this.contentItems[l]===e?e.config[this._dimension]=a:(r=this.contentItems[l].config[this._dimension]*=(100-a)/100,this.contentItems[l].config[this._dimension]=r);this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged'),this._validateDocking()}undisplayChild(e){var t,o=e.config[this._dimension],i=Object(c.g)(e,this.contentItems),a=n(i-1,0);if(-1===i)throw new Error('Can\\'t undisplay child. ContentItem is not child of this Row or Column');this._splitter[a]&&this._splitter[a].element.hide(),a<this._splitter.length&&this._isDocked(a)&&this._splitter[a].element.hide();var r=this._isDocked();for(t=0;t<this.contentItems.length;t++)this.contentItems[t]===e?this.contentItems[t].config[this._dimension]=0:this._isDocked(t)||(this.contentItems[t].config[this._dimension]+=o/(this.contentItems.length-1-r));1===this.contentItems.length&&s.a.prototype.undisplayChild.call(this,e),this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged')}removeChild(e,t){var o,i,a=e.config[this._dimension],r=Object(c.g)(e,this.contentItems),l=n(r-1,0);if(-1===r)throw new Error('Can\\'t remove child. ContentItem is not child of this Row or Column');this._splitter[l]&&(this._splitter[l]._$destroy(),this._splitter.splice(l,1)),l<this._splitter.length&&this._isDocked(l)&&this._splitter[l].element.hide();var p=this._isDocked();for(o=0;o<this.contentItems.length;o++)this.contentItems[o]!==e&&(this._isDocked(o)||(this.contentItems[o].config[this._dimension]+=a/(this.contentItems.length-1-p)));s.a.prototype.removeChild.call(this,e,t),1===this.contentItems.length&&!0===this.config.isClosable?(i=this.contentItems[0],this.contentItems=[],this.parent.replaceChild(this,i,!0),this._validateDocking(this.parent)):(this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged'),this._validateDocking())}replaceChild(e,t){var n=e.config[this._dimension];s.a.prototype.replaceChild.call(this,e,t),t.config[this._dimension]=n,this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged')}setSize(){0<this.contentItems.length&&(this._calculateRelativeSizes(),this._setAbsoluteSizes()),this.emitBubblingEvent('stateChanged'),this.emit('resize')}dock(e,t,o){if(1===this.contentItems.length)throw new Error('Can\\'t dock child when it single');var a=e.config[this._dimension],s=this.layoutManager.config.dimensions.headerHeight,r=Object(c.g)(e,this.contentItems),l=n(r-1,0);if(-1===r)throw new Error('Can\\'t dock child. ContentItem is not child of this Row or Column');var p,i=e._docker&&e._docker.docked;if('undefined'==typeof t||t!=i){if(i){for(this._splitter[l].element.show(),p=0;p<this.contentItems.length;p++){var d=e._docker.size;this.contentItems[p]===e?e.config[this._dimension]=d:(itemSize=this.contentItems[p].config[this._dimension]*=(100-d)/100,this.contentItems[p].config[this._dimension]=itemSize)}e._docker={docked:!1}}else{if(2>this.contentItems.length-this._isDocked())throw new Error('Can\\'t dock child when it is last in '+this.config.type);var m={column:{first:'top',last:'bottom'},row:{first:'left',last:'right'}}[this.config.type][r?'last':'first'];e.header.position()!=m&&e.header.position(m),this._splitter[l]&&this._splitter[l].element.hide();var _=this._isDocked();for(p=0;p<this.contentItems.length;p++)this.contentItems[p]===e?this.contentItems[p].config[this._dimension]=0:this._isDocked(p)||(this.contentItems[p].config[this._dimension]+=a/(this.contentItems.length-1-_));e._docker={dimension:this._dimension,size:a,realSize:e.element[this._dimension]()-s,docked:!0},o&&e.childElementContainer[this._dimension](0)}e.element.toggleClass('lm_docked',e._docker.docked),this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged'),this._validateDocking()}}_$init(){if(!0!==this.isInitialised){var e;for(s.a.prototype._$init.call(this),e=0;e<this.contentItems.length-1;e++)this.contentItems[e].element.after(this._createSplitter(e).element);for(e=0;e<this.contentItems.length;e++)this.contentItems[e]._header&&this.contentItems[e]._header.docked&&this.dock(this.contentItems[e],!0,!0)}}_setAbsoluteSizes(){var e,t=this._calculateAbsoluteSizes();for(e=0;e<this.contentItems.length;e++)0<t.additionalPixel-e&&t.itemSizes[e]++,this._isColumn?(this.contentItems[e].element.width(t.totalWidth),this.contentItems[e].element.height(t.itemSizes[e])):(this.contentItems[e].element.width(t.itemSizes[e]),this.contentItems[e].element.height(t.totalHeight))}_calculateAbsoluteSizes(){var e,n,o,i=(this.contentItems.length-1)*this._splitterSize,a=this.layoutManager.config.dimensions.headerHeight,s=this.element.width(),r=this.element.height(),l=0,c=[];for(this._isColumn?r-=i:s-=i,e=0;e<this.contentItems.length;e++)this._isDocked(e)&&(this._isColumn?r-=a-this._splitterSize:s-=a-this._splitterSize);for(e=0;e<this.contentItems.length;e++)o=this._isColumn?t(r*(this.contentItems[e].config.height/100)):t(s*(this.contentItems[e].config.width/100)),this._isDocked(e)&&(o=a),l+=o,c.push(o);return n=t((this._isColumn?r:s)-l),{itemSizes:c,additionalPixel:n,totalWidth:s,totalHeight:r}}_calculateRelativeSizes(){var e,t=0,n=[],o=this._isColumn?'height':'width';for(e=0;e<this.contentItems.length;e++)void 0===this.contentItems[e].config[o]?n.push(this.contentItems[e]):t+=this.contentItems[e].config[o];if(100===a(t))return void this._respectMinItemWidth();if(100>a(t)&&0<n.length){for(e=0;e<n.length;e++)n[e].config[o]=(100-t)/n.length;return void this._respectMinItemWidth()}if(100<a(t))for(e=0;e<n.length;e++)n[e].config[o]=50,t+=50;for(e=0;e<this.contentItems.length;e++)this.contentItems[e].config[o]=100*(this.contentItems[e].config[o]/t);this._respectMinItemWidth()}_respectMinItemWidth(){var e,t,n,o=this.layoutManager.config.dimensions?this.layoutManager.config.dimensions.minItemWidth||0:0,s=null,r=[],l=0,c=0,p=0,d=0,m=null,_=[];if(!(this._isColumn||!o||1>=this.contentItems.length)){s=this._calculateAbsoluteSizes();for(var g=0;g<this.contentItems.length;g++)m=this.contentItems[g],d=s.itemSizes[g],d<o?(c+=o-d,n={width:o}):(l+=d-o,n={width:d},r.push(n)),_.push(n);if(!(0==c||c>l)){for(e=c/l,p=c,g=0;g<r.length;g++)n=r[g],t=a((n.width-o)*e),p-=t,n.width-=t;for(0!==p&&(_[_.length-1].width-=p),g=0;g<this.contentItems.length;g++)this.contentItems[g].config.width=100*(_[g].width/s.totalWidth)}}}_createSplitter(e){var t;return t=new l.a(this._isColumn,this._splitterSize,this._splitterGrabSize),t.on('drag',Object(c.c)(this._onSplitterDrag,this,[t]),this),t.on('dragStop',Object(c.c)(this._onSplitterDragStop,this,[t]),this),t.on('dragStart',Object(c.c)(this._onSplitterDragStart,this,[t]),this),this._splitter.splice(e,0,t),t}_getItemsForSplitter(e){var t=Object(c.g)(e,this._splitter);return{before:this.contentItems[t],after:this.contentItems[t+1]}}_isDocked(e){if('undefined'==typeof e){for(var t=0,n=0;n<this.contentItems.length;++n)this._isDocked(n)&&t++;return t}return e<this.contentItems.length?this.contentItems[e]._docker&&this.contentItems[e]._docker.docked:void 0}_validateDocking(e){e=e||this;for(var t=1<e.contentItems.length-e._isDocked(),n=0;n<e.contentItems.length;++n)e.contentItems[n]instanceof r.a&&(e.contentItems[n].header._setDockable(e._isDocked(n)||t),e.contentItems[n].header._$setClosable(t))}_getMinimumDimensions(e){for(var t=0,o=0,a=0;a<e.length;++a)t=n(e[a].minWidth||0,t),o=n(e[a].minHeight||0,o);return{horizontal:t,vertical:o}}_onSplitterDragStart(e){var t=this._getItemsForSplitter(e),n=this.layoutManager.config.dimensions[this._isColumn?'minItemHeight':'minItemWidth'],o=this._getMinimumDimensions(t.before.config.content),i=this._isColumn?o.vertical:o.horizontal,a=this._getMinimumDimensions(t.after.config.content),s=this._isColumn?a.vertical:a.horizontal;this._splitterPosition=0,this._splitterMinPosition=-1*(t.before.element[this._dimension]()-(i||n)),this._splitterMaxPosition=t.after.element[this._dimension]()-(s||n)}_onSplitterDrag(e,t,n){var o=this._isColumn?n:t;o>this._splitterMinPosition&&o<this._splitterMaxPosition&&(this._splitterPosition=o,e.element.css(this._isColumn?'top':'left',o))}_onSplitterDragStop(e){var t=this._getItemsForSplitter(e),n=t.before.element[this._dimension](),o=t.after.element[this._dimension](),i=(this._splitterPosition+n)/(n+o),a=t.before.config[this._dimension]+t.after.config[this._dimension];t.before.config[this._dimension]=i*a,t.after.config[this._dimension]=(1-i)*a,e.element.css({top:0,left:0}),Object(c.a)(Object(c.c)(this.callDownwards,this,['setSize']))}}o.a=p},function(e,t,n){'use strict';var o=n(1),i=n(0);class a extends o.b{constructor(e,t){super(),this._timeout=null,this._eElement=$(e),this._oDocument=$(document),this._eBody=$(document.body),this._nButtonCode=t||0,this._nDelay=200,this._nDistance=10,this._nX=0,this._nY=0,this._nOriginalX=0,this._nOriginalY=0,this._bDragging=!1,this._fMove=Object(i.c)(this.onMouseMove,this),this._fUp=Object(i.c)(this.onMouseUp,this),this._fDown=Object(i.c)(this.onMouseDown,this),this._eElement.on('mousedown touchstart',this._fDown)}destroy(){this._eElement.unbind('mousedown touchstart',this._fDown),this._oDocument.unbind('mouseup touchend',this._fUp),this._eElement=null,this._oDocument=null,this._eBody=null}onMouseDown(e){if(e.preventDefault(),0==e.button||'touchstart'===e.type){var t=this._getCoordinates(e);this._nOriginalX=t.x,this._nOriginalY=t.y,this._oDocument.on('mousemove touchmove',this._fMove),this._oDocument.one('mouseup touchend',this._fUp),this._timeout=setTimeout(Object(i.c)(this._startDrag,this),this._nDelay)}}onMouseMove(e){var t=Math.abs;if(null!=this._timeout){e.preventDefault();var n=this._getCoordinates(e);this._nX=n.x-this._nOriginalX,this._nY=n.y-this._nOriginalY,!1===this._bDragging&&(t(this._nX)>this._nDistance||t(this._nY)>this._nDistance)&&(clearTimeout(this._timeout),this._startDrag()),this._bDragging&&this.emit('drag',this._nX,this._nY,e)}}onMouseUp(e){null!=this._timeout&&(clearTimeout(this._timeout),this._eBody.removeClass('lm_dragging'),this._eElement.removeClass('lm_dragging'),this._oDocument.find('iframe').css('pointer-events',''),this._oDocument.unbind('mousemove touchmove',this._fMove),this._oDocument.unbind('mouseup touchend',this._fUp),!0===this._bDragging&&(this._bDragging=!1,this.emit('dragStop',e,this._nOriginalX+this._nX)))}_startDrag(){this._bDragging=!0,this._eBody.addClass('lm_dragging'),this._eElement.addClass('lm_dragging'),this._oDocument.find('iframe').css('pointer-events','none'),this.emit('dragStart',this._nOriginalX,this._nOriginalY)}_getCoordinates(e){return e=Object(i.e)(e),{x:e.pageX,y:e.pageY}}}t.a=a},function(e,t,n){var o=n(9);e.exports=function(e){if(!o(e))throw TypeError(e+' is not an object!');return e}},function(e){e.exports=function(e){return'object'==typeof e?null!==e:'function'==typeof e}},function(e){e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t,n){'use strict';var o=n(0);t.a=class{constructor(){if(this._keys=['settings','hasHeaders','constrainDragToContainer','selectionEnabled','dimensions','borderWidth','minItemHeight','minItemWidth','headerHeight','dragProxyWidth','dragProxyHeight','labels','close','maximise','minimise','popout','content','componentName','componentState','id','width','type','height','isClosable','title','popoutWholeStack','openPopouts','parentId','activeItemIndex','reorderEnabled','borderGrabWidth'],36<this._keys.length)throw new Error('Too many keys in config minifier map');this._values=[!0,!1,'row','column','stack','component','close','maximise','minimise','open in new window']}minifyConfig(e){var t={};return this._nextLevel(e,t,'_min'),t}unminifyConfig(e){var t={};return this._nextLevel(e,t,'_max'),t}_nextLevel(e,t,n){var o,i;for(o in e)e instanceof Array&&(o=parseInt(o,10)),e.hasOwnProperty(o)&&(i=this[n](o,this._keys),'object'==typeof e[o]?(t[i]=e[o]instanceof Array?[]:{},this._nextLevel(e[o],t[i],n)):t[i]=this[n](e[o],this._values))}_min(e,t){if('string'==typeof e&&1===e.length)return'___'+e;var n=Object(o.g)(e,t);return-1===n?e:n.toString(36)}_max(e,t){return'string'==typeof e&&1===e.length?t[parseInt(e,36)]:'string'==typeof e&&'___'===e.substr(0,3)?e[3]:e}}},function(e,t,n){'use strict';var o=n(3),i=n(6);class a extends o.a{constructor(e,t,n){super(e,t,null),this.isRoot=!0,this.type='root',this.element=$('<div class=\"lm_goldenlayout lm_item lm_root\"></div>'),this.childElementContainer=this.element,this._containerElement=n,this._containerElement.append(this.element)}addChild(e){if(0<this.contentItems.length)throw new Error('Root node can only have a single child');e=this.layoutManager._$normalizeContentItem(e,this),this.childElementContainer.append(e.element),o.a.prototype.addChild.call(this,e),this.callDownwards('setSize'),this.emitBubblingEvent('stateChanged')}setSize(e,t){e='undefined'==typeof e?this._containerElement.width():e,t='undefined'==typeof t?this._containerElement.height():t,this.element.width(e),this.element.height(t),this.contentItems[0]&&(this.contentItems[0].element.width(e),this.contentItems[0].element.height(t))}_$highlightDropZone(){this.layoutManager.tabDropPlaceholder.remove(),o.a.prototype._$highlightDropZone.apply(this,arguments)}_$onDrop(e,t){var n;if(e.isComponent&&(n=this.layoutManager.createContentItem({type:'stack',header:e.config.header||{}},this),n._$init(),n.addChild(e),e=n),!this.contentItems.length)this.addChild(e);else{('row'===e.config.type||'column'===e.config.type)&&(n=this.layoutManager.createContentItem({type:'stack'},this),n.addChild(e),e=n);var o='x'==t.side[0]?'row':'column',a='x'==t.side[0]?'width':'height',s='2'==t.side[1],r=this.contentItems[0];if(!(r instanceof i.a)||r.type!=o){var l=this.layoutManager.createContentItem({type:o},this);this.replaceChild(r,l),l.addChild(e,s?0:void 0,!0),l.addChild(r,s?void 0:0,!0),r.config[a]=50,e.config[a]=50,l.callDownwards('setSize')}else{var c=r.contentItems[s?0:r.contentItems.length-1];r.addChild(e,s?0:void 0,!0),c.config[a]*=0.5,e.config[a]=c.config[a],r.callDownwards('setSize')}}}}t.a=a},function(t,o,i){'use strict';var a=i(3),s=i(6),r=i(28),l=i(0);class c extends a.a{constructor(e,t,n){super(e,t,n),this.element=$('<div class=\"lm_item lm_stack\"></div>'),this._activeContentItem=null;var o=e.config;this._header={show:!0===o.settings.hasHeaders&&!1!==t.hasHeaders,popout:o.settings.showPopoutIcon&&o.labels.popout,maximise:o.settings.showMaximiseIcon&&o.labels.maximise,close:o.settings.showCloseIcon&&o.labels.close,minimise:o.labels.minimise},o.header&&Object(l.b)(this._header,o.header),t.header&&Object(l.b)(this._header,t.header),t.content&&t.content[0]&&t.content[0].header&&Object(l.b)(this._header,t.content[0].header),this._dropZones={},this._dropSegment=null,this._contentAreaDimensions=null,this._dropIndex=null,this.isStack=!0,this.childElementContainer=$('<div class=\"lm_items\"></div>'),this.header=new r.a(e,this),this.element.on('mouseleave mouseenter',Object(l.c)(function(e){this._docker&&this._docker.docked&&this.childElementContainer[this._docker.dimension]('mouseenter'==e.type?this._docker.realSize:0)},this)),this.element.append(this.header.element),this.element.append(this.childElementContainer),this._setupHeaderPosition(),this._$validateClosability()}dock(e){this._header.dock&&this.parent instanceof s.a&&this.parent.dock(this,e)}setSize(){if('none'!==this.element.css('display')){var e=this._docker&&this._docker.docked,t={width:this.element.width(),height:this.element.height()};this._header.show&&(t[this._sided?'width':'height']-=this.layoutManager.config.dimensions.headerHeight),e&&(t[this._docker.dimension]=this._docker.realSize),e&&'height'!=this._docker.dimension||this.childElementContainer.width(t.width),e&&'width'!=this._docker.dimension||this.childElementContainer.height(t.height);for(var n=0;n<this.contentItems.length;n++)this.contentItems[n].element.width(t.width),this.contentItems[n].element.height(t.height);this.emit('resize'),this.emitBubblingEvent('stateChanged')}}_$init(){var e,t;if(!0!==this.isInitialised){for(a.a.prototype._$init.call(this),e=0;e<this.contentItems.length;e++)this.header.createTab(this.contentItems[e]),this.contentItems[e]._$hide();if(0<this.contentItems.length){if(t=this.contentItems[this.config.activeItemIndex||0],!t)throw new Error('Configured activeItemIndex out of bounds');this.setActiveContentItem(t)}}}setActiveContentItem(e){if(-1===Object(l.g)(e,this.contentItems))throw new Error('contentItem is not a child of this stack');null!==this._activeContentItem&&this._activeContentItem._$hide(),this._activeContentItem=e,this.header.setActiveContentItem(e),e._$show(),this.emit('activeContentItemChanged',e),this.layoutManager.emit('activeContentItemChanged',e),this.emitBubblingEvent('stateChanged')}getActiveContentItem(){return this.header.activeContentItem}addChild(e,t){t>this.contentItems.length&&(t-=1),e=this.layoutManager._$normalizeContentItem(e,this),a.a.prototype.addChild.call(this,e,t),this.childElementContainer.append(e.element),this.header.createTab(e,t),this.setActiveContentItem(e),this.callDownwards('setSize'),this._$validateClosability(),this.parent instanceof s.a&&this.parent._validateDocking(),this.emitBubblingEvent('stateChanged')}removeChild(e,t){var o=Object(l.g)(e,this.contentItems);a.a.prototype.removeChild.call(this,e,t),this.header.removeTab(e),this.header.activeContentItem===e&&(0<this.contentItems.length?this.setActiveContentItem(this.contentItems[n(o-1,0)]):this._activeContentItem=null),this._$validateClosability(),this.parent instanceof s.a&&this.parent._validateDocking(),this.emitBubblingEvent('stateChanged')}undisplayChild(e){if(1<this.contentItems.length){var t=Object(l.g)(e,this.contentItems);e._$hide&&e._$hide(),this.setActiveContentItem(this.contentItems[0===t?t+1:t-1])}else this.header.hideTab(e),e._$hide&&e._$hide(),a.a.prototype.undisplayChild.call(this,e),this.parent instanceof s.a&&this.parent._validateDocking();this.emitBubblingEvent('stateChanged')}_$validateClosability(){var e,t,n;for(e=this.header._isClosable(),n=0,t=this.contentItems.length;n<t&&!!e;n++)e=this.contentItems[n].config.isClosable;this.header._$setClosable(e)}_$destroy(){a.a.prototype._$destroy.call(this),this.header._$destroy(),this.element.off('mouseenter mouseleave')}_$onDrop(e){if('header'===this._dropSegment)return this._resetHeaderDropZone(),void this.addChild(e,this._dropIndex);if('body'===this._dropSegment)return void this.addChild(e);var t,n,o,i='top'===this._dropSegment||'bottom'===this._dropSegment,a='left'===this._dropSegment||'right'===this._dropSegment,s='top'===this._dropSegment||'left'===this._dropSegment,r=i&&this.parent.isColumn||a&&this.parent.isRow,c=i?'column':'row',p=i?'height':'width';e.isComponent&&(n=this.layoutManager.createContentItem({type:'stack',header:e.config.header||{}},this),n._$init(),n.addChild(e),e=n),('row'===e.config.type||'column'===e.config.type)&&(n=this.layoutManager.createContentItem({type:'stack'},this),n.addChild(e),e=n),r?(t=Object(l.g)(this,this.parent.contentItems),this.parent.addChild(e,s?t:t+1,!0),this.config[p]*=0.5,e.config[p]=this.config[p],this.parent.callDownwards('setSize')):(c=i?'column':'row',o=this.layoutManager.createContentItem({type:c},this),this.parent.replaceChild(this,o),o.addChild(e,s?0:void 0,!0),o.addChild(this,s?void 0:0,!0),this.config[p]=50,e.config[p]=50,o.callDownwards('setSize')),this.parent._validateDocking()}_$highlightDropZone(e,t){var n,o;for(n in this._contentAreaDimensions)if(o=this._contentAreaDimensions[n].hoverArea,o.x1<e&&o.x2>e&&o.y1<t&&o.y2>t)return void('header'===n?(this._dropSegment='header',this._highlightHeaderDropZone(this._sided?t:e)):(this._resetHeaderDropZone(),this._highlightBodyDropZone(n)))}_$getArea(){if('none'===this.element.css('display'))return null;var e=a.a.prototype._$getArea,t=e.call(this,this.header.element),n=e.call(this,this.childElementContainer),o=n.x2-n.x1,i=n.y2-n.y1;return(this._contentAreaDimensions={header:{hoverArea:{x1:t.x1,y1:t.y1,x2:t.x2,y2:t.y2},highlightArea:{x1:t.x1,y1:t.y1,x2:t.x2,y2:t.y2}}},this._activeContentItem&&!1===this._activeContentItem.isComponent)?t:0===this.contentItems.length?(this._contentAreaDimensions.body={hoverArea:{x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2},highlightArea:{x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2}},e.call(this,this.element)):(this._contentAreaDimensions.left={hoverArea:{x1:n.x1,y1:n.y1,x2:n.x1+0.25*o,y2:n.y2},highlightArea:{x1:n.x1,y1:n.y1,x2:n.x1+0.5*o,y2:n.y2}},this._contentAreaDimensions.top={hoverArea:{x1:n.x1+0.25*o,y1:n.y1,x2:n.x1+0.75*o,y2:n.y1+0.5*i},highlightArea:{x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y1+0.5*i}},this._contentAreaDimensions.right={hoverArea:{x1:n.x1+0.75*o,y1:n.y1,x2:n.x2,y2:n.y2},highlightArea:{x1:n.x1+0.5*o,y1:n.y1,x2:n.x2,y2:n.y2}},this._contentAreaDimensions.bottom={hoverArea:{x1:n.x1+0.25*o,y1:n.y1+0.5*i,x2:n.x1+0.75*o,y2:n.y2},highlightArea:{x1:n.x1,y1:n.y1+0.5*i,x2:n.x2,y2:n.y2}},e.call(this,this.element))}_highlightHeaderDropZone(t){var n,o,i,a,s,r,l,c,p,d=this.header.tabs.length,m=!1;if(0===d)return l=this.header.element.offset(),void this.layoutManager.dropTargetIndicator.highlightArea({x1:l.left,x2:l.left+100,y1:l.top+this.header.element.height()-20,y2:l.top+this.header.element.height()});for(n=0;n<d;n++)if(o=this.header.tabs[n].element,s=o.offset(),this._sided?(a=s.top,i=s.left,c=o.height()):(a=s.left,i=s.top,c=o.width()),t>a&&t<a+c){m=!0;break}if(!(!1==m&&t<a)){if(p=a+c/2,t<p?(this._dropIndex=n,o.before(this.layoutManager.tabDropPlaceholder)):(this._dropIndex=e(n+1,d),o.after(this.layoutManager.tabDropPlaceholder)),this._sided){var _=this.layoutManager.tabDropPlaceholder.offset().top;return void this.layoutManager.dropTargetIndicator.highlightArea({x1:i,x2:i+o.innerHeight(),y1:_,y2:_+this.layoutManager.tabDropPlaceholder.width()})}r=this.layoutManager.tabDropPlaceholder.offset().left,this.layoutManager.dropTargetIndicator.highlightArea({x1:r,x2:r+this.layoutManager.tabDropPlaceholder.width(),y1:i,y2:i+o.innerHeight()})}}_resetHeaderDropZone(){this.layoutManager.tabDropPlaceholder.remove()}toggleMaximise(t){this.isMaximised||this.dock(!1),a.a.prototype.toggleMaximise.call(this,t)}_setupHeaderPosition(){var e=0<=['right','left','bottom'].indexOf(this._header.show)&&this._header.show;if(this.header.element.toggle(!!this._header.show),this._side=e,this._sided=0<=['right','left'].indexOf(this._side),this.element.removeClass('lm_left lm_right lm_bottom'),this._side&&this.element.addClass('lm_'+this._side),this.element.find('.lm_header').length&&this.childElementContainer){var t=0<=['right','bottom'].indexOf(this._side)?'before':'after';this.header.element[t](this.childElementContainer),this.callDownwards('setSize')}}_highlightBodyDropZone(e){var t=this._contentAreaDimensions[e].highlightArea;this.layoutManager.dropTargetIndicator.highlightArea(t),this._dropSegment=e}}o.a=c},function(e){e.exports=function(e){if(e==void 0)throw TypeError('Can\\'t call method on '+e);return e}},function(e,t,n){var o=n(44),i=n(20);e.exports=Object.keys||function(e){return o(e,i)}},function(e){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},function(e,t,n){var o=n(45),i=n(14);e.exports=function(e){return o(i(e))}},function(e){var n=Math.ceil;e.exports=function(e){return isNaN(e=+e)?0:(0<e?t:n)(e)}},function(e,t,n){var o=n(50)('keys'),i=n(52);e.exports=function(e){return o[e]||(o[e]=i(e))}},function(e){e.exports=['constructor','hasOwnProperty','isPrototypeOf','propertyIsEnumerable','toLocaleString','toString','valueOf']},function(e,t,n){var o=n(4),i=n(2),a=n(54),s=n(56),r=n(16),l='prototype',c=function(e,t,n){var p,d,m,_=e&c.F,g=e&c.G,u=e&c.S,f=e&c.P,h=e&c.B,y=e&c.W,v=g?i:i[t]||(i[t]={}),b=v[l],k=g?o:u?o[t]:(o[t]||{})[l];for(p in g&&(n=t),n)d=!_&&k&&void 0!==k[p],d&&r(v,p)||(m=d?k[p]:n[p],v[p]=g&&'function'!=typeof k[p]?n[p]:h&&d?a(m,o):y&&k[p]==m?function(e){var t=function(t,n,o){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n);}return new e(t,n,o)}return e.apply(this,arguments)};return t[l]=e[l],t}(m):f&&'function'==typeof m?a(Function.call,m):m,f&&((v.virtual||(v.virtual={}))[p]=m,e&c.R&&b&&!b[p]&&s(b,p,m)))};c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,t,n){var o=n(8),i=n(57),a=n(58),s=Object.defineProperty;t.f=n(5)?Object.defineProperty:function(e,t,n){if(o(e),t=a(t,!0),o(n),i)try{return s(e,t,n)}catch(t){}if('get'in n||'set'in n)throw TypeError('Accessors not supported!');return'value'in n&&(e[t]=n.value),e}},function(e,t,n){var o=n(9),i=n(4).document,a=o(i)&&o(i.createElement);e.exports=function(e){return a?i.createElement(e):{}}},function(e,t){'use strict';t.a=class{constructor(e,t){this._reactComponent=null,this._originalComponentWillUpdate=null,this._container=e,this._initialState=t,this._reactClass=this._getReactClass(),this._container.on('open',this._render,this),this._container.on('destroy',this._destroy,this)}_render(){this._reactComponent=ReactDOM.render(this._getReactComponent(),this._container.getElement()[0]),this._originalComponentWillUpdate=this._reactComponent.componentWillUpdate||function(){},this._reactComponent.componentWillUpdate=this._onUpdate.bind(this),this._container.getState()&&this._reactComponent.setState(this._container.getState())}_destroy(){ReactDOM.unmountComponentAtNode(this._container.getElement()[0]),this._container.off('open',this._render,this),this._container.off('destroy',this._destroy,this)}_onUpdate(e,t){this._container.setState(t),this._originalComponentWillUpdate.call(this._reactComponent,e,t)}_getReactClass(){var e,t=this._container._config.component;if(!t)throw new Error('No react component name. type: react-component needs a field `component`');if(e=this._container.layoutManager.getComponent(t),!e)throw new Error('React component \"'+t+'\" not found. Please register all components with GoldenLayout using `registerComponent(name, component)`');return e}_getReactComponent(){var e={glEventHub:this._container.layoutManager.eventHub,glContainer:this._container},t=$.extend(e,this._container._config.props);return React.createElement(this._reactClass,t)}}},function(e,t,n){'use strict';var o=n(1),i=n(0);class a extends o.b{constructor(e){super(),this._layoutManager=e,this._dontPropagateToParent=null,this._childEventSource=null,this.on(o.a,Object(i.c)(this._onEventFromThis,this)),this._boundOnEventFromChild=Object(i.c)(this._onEventFromChild,this),$(window).on('gl_child_event',this._boundOnEventFromChild)}_onEventFromThis(){var e=Array.prototype.slice.call(arguments);this._layoutManager.isSubWindow&&e[0]!==this._dontPropagateToParent&&this._propagateToParent(e),this._propagateToChildren(e),this._dontPropagateToParent=null,this._childEventSource=null}_$onEventFromParent(e){this._dontPropagateToParent=e[0],this.emit.apply(this,e)}_onEventFromChild(e){this._childEventSource=e.originalEvent.__gl,this.emit.apply(this,e.originalEvent.__glArgs)}_propagateToParent(e){var t,n='gl_child_event';document.createEvent?(t=window.opener.document.createEvent('HTMLEvents'),t.initEvent(n,!0,!0)):(t=window.opener.document.createEventObject(),t.eventType=n),t.eventName=n,t.__glArgs=e,t.__gl=this._layoutManager,document.createEvent?window.opener.dispatchEvent(t):window.opener.fireEvent('on'+t.eventType,t)}_propagateToChildren(e){var t,n;for(n=0;n<this._layoutManager.openPopouts.length;n++)t=this._layoutManager.openPopouts[n].getGlInstance(),t&&t!==this._childEventSource&&t.eventHub._$onEventFromParent(e)}destroy(){$(window).off('gl_child_event',this._boundOnEventFromChild)}}t.a=a},function(e,t){'use strict';t.a=class{constructor(e,t){this.name=e,this.origin=t,this.isPropagationStopped=!1}stopPropagation(){this.isPropagationStopped=!0}}},function(e,t){'use strict';class n extends Error{constructor(e,t){super(),this.name='Configuration Error',this.message=e,this.node=t}}t.a=n},function(e,t,n){'use strict';var o=n(1),a=n(29),i=n(31),s=n(0);class r extends o.b{constructor(e,t){super(),this.layoutManager=e,this.element=$('<div class=\"lm_header\"><ul class=\"lm_tabs\"></ul><ul class=\"lm_controls\"></ul><ul class=\"lm_tabdropdown_list\"></ul></div>'),!0===this.layoutManager.config.settings.selectionEnabled&&(this.element.addClass('lm_selectable'),this.element.on('click touchstart',Object(s.c)(this._onHeaderClick,this))),this.tabsContainer=this.element.find('.lm_tabs'),this.tabDropdownContainer=this.element.find('.lm_tabdropdown_list'),this.tabDropdownContainer.hide(),this.controlsContainer=this.element.find('.lm_controls'),this.parent=t,this.parent.on('resize',this._updateTabSizes,this),this.tabs=[],this.tabsMarkedForRemoval=[],this.activeContentItem=null,this.closeButton=null,this.dockButton=null,this.tabDropdownButton=null,this.hideAdditionalTabsDropdown=Object(s.c)(this._hideAdditionalTabsDropdown,this),$(document).mouseup(this.hideAdditionalTabsDropdown),this._lastVisibleTabIndex=-1,this._tabControlOffset=this.layoutManager.config.settings.tabControlOffset,this._createControls()}createTab(e,t){var n,o;for(o=0;o<this.tabs.length;o++)if(this.tabs[o].contentItem===e)return;return n=new a.a(this,e),0===this.tabs.length?(this.tabs.push(n),void this.tabsContainer.append(n.element)):void(void 0===t&&(t=this.tabs.length),0<t?this.tabs[t-1].element.after(n.element):this.tabs[0].element.before(n.element),this.tabs.splice(t,0,n),this._updateTabSizes())}removeTab(e){for(var t=0;t<this.tabs.length;t++)if(this.tabs[t].contentItem===e)return this.tabs[t]._$destroy(),void this.tabs.splice(t,1);for(t=0;t<this.tabsMarkedForRemoval.length;t++)if(this.tabsMarkedForRemoval[t].contentItem===e)return this.tabsMarkedForRemoval[t]._$destroy(),void this.tabsMarkedForRemoval.splice(t,1);throw new Error('contentItem is not controlled by this header')}hideTab(e){for(var t=0;t<this.tabs.length;t++)if(this.tabs[t].contentItem===e)return this.tabs[t].element.hide(),this.tabsMarkedForRemoval.push(this.tabs[t]),void this.tabs.splice(t,1);throw new Error('contentItem is not controlled by this header')}setActiveContentItem(e){var t,n,o,i;for(t=0;t<this.tabs.length;t++)o=this.tabs[t].contentItem===e,this.tabs[t].setActive(o),!0===o&&(this.activeContentItem=e,this.parent.config.activeItemIndex=t);if(this.layoutManager.config.settings.reorderOnTabMenuClick&&-1!==this._lastVisibleTabIndex&&this.parent.config.activeItemIndex>this._lastVisibleTabIndex){for(i=this.tabs[this.parent.config.activeItemIndex],n=this.parent.config.activeItemIndex;0<n;n--)this.tabs[n]=this.tabs[n-1];this.tabs[0]=i,this.parent.config.activeItemIndex=0}this._updateTabSizes(),this.parent.emitBubblingEvent('stateChanged')}position(e){var t=this.parent._header.show;if(this.parent._docker&&this.parent._docker.docked)throw new Error('Can\\'t change header position in docked stack');return t&&!this.parent._side&&(t='top'),void 0!==e&&this.parent._header.show!=e&&(this.parent._header.show=e,this.parent._setupHeaderPosition()),t}_$setClosable(e){return this._canDestroy=e||1<this.tabs.length,this.closeButton&&this._isClosable()&&(this.closeButton.element[e?'show':'hide'](),!0)}_setDockable(e){return this.dockButton&&this.parent._header&&this.parent._header.dock&&(this.dockButton.element.toggle(!!e),!0)}_$destroy(){this.emit('destroy',this);for(var e=0;e<this.tabs.length;e++)this.tabs[e]._$destroy();$(document).off('mouseup',this.hideAdditionalTabsDropdown),this.element.remove()}_getHeaderSetting(e){if(e in this.parent._header)return this.parent._header[e]}_createControls(){var e,t,n,o,a,r,l,c,p;if(p=Object(s.c)(this._showAdditionalTabsDropdown,this),c=this.layoutManager.config.labels.tabDropdown,this.tabDropdownButton=new i.a(this,c,'lm_tabdropdown',p),this.tabDropdownButton.element.hide(),this.parent._header&&this.parent._header.dock){var d=Object(s.c)(this.parent.dock,this.parent);n=this._getHeaderSetting('dock'),this.dockButton=new i.a(this,n,'lm_dock',d)}this._getHeaderSetting('popout')&&(t=Object(s.c)(this._onPopoutClick,this),n=this._getHeaderSetting('popout'),new i.a(this,n,'lm_popout',t)),this._getHeaderSetting('maximise')&&(r=Object(s.c)(this.parent.toggleMaximise,this.parent),o=this._getHeaderSetting('maximise'),a=this._getHeaderSetting('minimise'),l=new i.a(this,o,'lm_maximise',r),this.parent.on('maximised',function(){l.element.attr('title',a)}),this.parent.on('minimised',function(){l.element.attr('title',o)})),this._isClosable()&&(e=Object(s.c)(this.parent.remove,this.parent),n=this._getHeaderSetting('close'),this.closeButton=new i.a(this,n,'lm_close',e))}_showAdditionalTabsDropdown(){this.tabDropdownContainer.show()}_hideAdditionalTabsDropdown(){this.tabDropdownContainer.hide()}_isClosable(){return this.parent.config.isClosable&&this.layoutManager.config.settings.showCloseIcon}_onPopoutClick(){!0===this.layoutManager.config.settings.popoutWholeStack?this.parent.popout():this.activeContentItem.popout()}_onHeaderClick(e){e.target===this.element[0]&&this.parent.select()}_updateTabSizes(e){if(0!==this.tabs.length){this.tabDropdownButton.element.toggle(!0===e);var t=function(e){return e?'width':'height'};this.element.css(t(!this.parent._sided),''),this.element[t(this.parent._sided)](this.layoutManager.config.dimensions.headerHeight);var n,o,i,a,s,r=this.element.outerWidth()-this.controlsContainer.outerWidth()-this._tabControlOffset,l=0,c=0,p=0,d=this.layoutManager.config.settings.tabOverlapAllowance,m=!1,_=this.activeContentItem?this.tabs.indexOf(this.activeContentItem.tab):0,g=this.tabs[_];for(this.parent._sided&&(r=this.element.outerHeight()-this.controlsContainer.outerHeight()-this._tabControlOffset),this._lastVisibleTabIndex=-1,o=0;o<this.tabs.length;o++)if(n=this.tabs[o].element,this.tabsContainer.append(n),s=n.outerWidth()+parseInt(n.css('margin-right'),10),l+=s,c=_<=o?l:l+g.element.outerWidth()+parseInt(g.element.css('margin-right'),10),c>r){if(!!m)o===_&&(n.css({\"z-index\":'auto',\"margin-left\":''}),this.tabsContainer.append(n));else if(p=0<_&&_<=o?(c-r)/(o-1):(c-r)/o,p<d){for(i=0;i<=o;i++)a=i!==_&&0!==i?'-'+p+'px':'',this.tabs[i].element.css({\"z-index\":o-i,\"margin-left\":a});this._lastVisibleTabIndex=o,this.tabsContainer.append(n)}else m=!0;if(m&&o!==_)if(e)n.css({\"z-index\":'auto',\"margin-left\":''}),this.tabDropdownContainer.append(n);else return void this._updateTabSizes(!0)}else this._lastVisibleTabIndex=o,n.css({\"z-index\":'auto',\"margin-left\":''}),this.tabsContainer.append(n)}}}t.a=r},function(e,t,n){'use strict';var o=n(7),i=n(30),a=n(0);t.a=class{constructor(e,t){this.header=e,this.contentItem=t,this.element=$('<li class=\"lm_tab\"><i class=\"lm_left\"></i><span class=\"lm_title\"></span><div class=\"lm_close_tab\"></div><i class=\"lm_right\"></i></li>'),this.titleElement=this.element.find('.lm_title'),this.closeElement=this.element.find('.lm_close_tab'),this.closeElement[t.config.isClosable?'show':'hide'](),this.isActive=!1,this.setTitle(t.config.title),this.contentItem.on('titleChanged',this.setTitle,this),this._layoutManager=this.contentItem.layoutManager,!0===this._layoutManager.config.settings.reorderEnabled&&!0===t.config.reorderEnabled&&(this._dragListener=new o.a(this.element),this._dragListener.on('dragStart',this._onDragStart,this),this.contentItem.on('destroy',this._dragListener.destroy,this._dragListener)),this._onTabClickFn=Object(a.c)(this._onTabClick,this),this._onCloseClickFn=Object(a.c)(this._onCloseClick,this),this.element.on('mousedown touchstart',this._onTabClickFn),this.contentItem.config.isClosable?(this.closeElement.on('click touchstart',this._onCloseClickFn),this.closeElement.on('mousedown',this._onCloseMousedown)):this.closeElement.remove(),this.contentItem.tab=this,this.contentItem.emit('tab',this),this.contentItem.layoutManager.emit('tabCreated',this),this.contentItem.isComponent&&(this.contentItem.container.tab=this,this.contentItem.container.emit('tab',this))}setTitle(e){this.element.attr('title',Object(a.k)(e)),this.titleElement.html(e)}setActive(e){e===this.isActive||(this.isActive=e,e?this.element.addClass('lm_active'):this.element.removeClass('lm_active'))}_$destroy(){this.element.off('mousedown touchstart',this._onTabClickFn),this.closeElement.off('click touchstart',this._onCloseClickFn),this._dragListener&&(this.contentItem.off('destroy',this._dragListener.destroy,this._dragListener),this._dragListener.off('dragStart',this._onDragStart),this._dragListener=null),this.element.remove()}_onDragStart(e,t){return this.header._canDestroy?void(!0===this.contentItem.parent.isMaximised&&this.contentItem.parent.toggleMaximise(),new i.a(e,t,this._dragListener,this._layoutManager,this.contentItem,this.header.parent)):null}_onTabClick(e){if(0===e.button||'touchstart'===e.type){var t=this.header.parent.getActiveContentItem();this.contentItem!==t&&this.header.parent.setActiveContentItem(this.contentItem)}else 1===e.button&&this.contentItem.config.isClosable&&this._onCloseClick(e)}_onCloseClick(e){e.stopPropagation();this.header._canDestroy&&this.header.parent.removeChild(this.contentItem)}_onCloseMousedown(e){e.stopPropagation()}}},function(e,t,n){'use strict';var o=n(1),i=n(0);class a extends o.b{constructor(e,t,n,o,a,s){super(),this._dragListener=n,this._layoutManager=o,this._contentItem=a,this._originalParent=s,this._area=null,this._lastValidArea=null,this._dragListener.on('drag',this._onDrag,this),this._dragListener.on('dragStop',this._onDrop,this),this.element=$('<div class=\"lm_dragProxy\"><div class=\"lm_header\"><ul class=\"lm_tabs\"><li class=\"lm_tab lm_active\"><i class=\"lm_left\"></i><span class=\"lm_title\"></span><i class=\"lm_right\"></i></li></ul></div><div class=\"lm_content\"></div></div>'),s&&s._side&&(this._sided=s._sided,this.element.addClass('lm_'+s._side),0<=['right','bottom'].indexOf(s._side)&&this.element.find('.lm_content').after(this.element.find('.lm_header'))),this.element.css({left:e,top:t}),this.element.find('.lm_tab').attr('title',Object(i.k)(this._contentItem.config.title)),this.element.find('.lm_title').html(this._contentItem.config.title),this.childElementContainer=this.element.find('.lm_content'),this.childElementContainer.append(a.element),this._undisplayTree(),this._layoutManager._$calculateItemAreas(),this._setDimensions(),$(document.body).append(this.element);var r=this._layoutManager.container.offset();this._minX=r.left,this._minY=r.top,this._maxX=this._layoutManager.container.width()+this._minX,this._maxY=this._layoutManager.container.height()+this._minY,this._width=this.element.width(),this._height=this.element.height(),this._setDropPosition(e,t)}_onDrag(e,t,n){n=Object(i.e)(n);var o=n.pageX,a=n.pageY,s=o>this._minX&&o<this._maxX&&a>this._minY&&a<this._maxY;(s||!0!==this._layoutManager.config.settings.constrainDragToContainer)&&this._setDropPosition(o,a)}_setDropPosition(e,t){this.element.css({left:e,top:t}),this._area=this._layoutManager._$getArea(e,t),null!==this._area&&(this._lastValidArea=this._area,this._area.contentItem._$highlightDropZone(e,t,this._area))}_onDrop(){this._updateTree(),this._layoutManager.dropTargetIndicator.hide(),null===this._area?null===this._lastValidArea?this._originalParent?this._originalParent.addChild(this._contentItem):this._contentItem._$destroy():this._lastValidArea.contentItem._$onDrop(this._contentItem,this._lastValidArea):this._area.contentItem._$onDrop(this._contentItem,this._area),this.element.remove(),this._layoutManager.emit('itemDropped',this._contentItem)}_undisplayTree(){this._contentItem.parent&&this._contentItem.parent.undisplayChild(this._contentItem)}_updateTree(){this._contentItem.parent&&this._contentItem.parent.removeChild(this._contentItem,!0),this._contentItem._$setParent(this)}_setDimensions(){var e=this._layoutManager.config.dimensions,t=e.dragProxyWidth,n=e.dragProxyHeight;this.element.width(t),this.element.height(n),t-=this._sided?e.headerHeight:0,n-=this._sided?0:e.headerHeight,this.childElementContainer.width(t),this.childElementContainer.height(n),this._contentItem.element.width(t),this._contentItem.element.height(n),this._contentItem.callDownwards('_$show'),this._contentItem.callDownwards('setSize')}}t.a=a},function(e,t){'use strict';t.a=class{constructor(e,t,n,o){this._header=e,this.element=$('<li class=\"'+n+'\" title=\"'+t+'\"></li>'),this._header.on('destroy',this._$destroy,this),this._action=o,this.element.on('click touchstart',this._action),this._header.controlsContainer.append(this.element)}_$destroy(){this.element.off(),this.element.remove()}}},function(e,t,n){'use strict';var o=n(3),i=n(33);class a extends o.a{constructor(e,t,n){super(e,t,n);var o=e.getComponent(this.config.componentName),a=$.extend(!0,{},this.config.componentState||{});a.componentName=this.config.componentName,this.componentName=this.config.componentName,''===this.config.title&&(this.config.title=this.config.componentName),this.isComponent=!0,this.container=new i.a(this.config,this,e),this.instance=new o(this.container,a),this.element=this.container._element}close(){this.parent.removeChild(this)}setSize(){'none'!==this.element.css('display')&&this.container._$setSize(this.element.width(),this.element.height())}_$init(){o.a.prototype._$init.call(this),this.container.emit('open')}_$hide(){this.container.hide(),o.a.prototype._$hide.call(this)}_$show(){this.container.show(),o.a.prototype._$show.call(this)}_$shown(){this.container.shown(),o.a.prototype._$shown.call(this)}_$destroy(){this.container.emit('destroy',this),o.a.prototype._$destroy.call(this)}_$getArea(){return null}}t.a=a},function(e,t,n){'use strict';var o=n(1);class i extends o.b{constructor(e,t,n){super(),this.width=null,this.height=null,this.title=e.componentName,this.parent=t,this.layoutManager=n,this.isHidden=!1,this._config=e,this._element=$('<div class=\"lm_item_container\"><div class=\"lm_content\"></div></div>'),this._contentElement=this._element.find('.lm_content')}getElement(){return this._contentElement}hide(){this.emit('hide'),this.isHidden=!0,this._element.hide()}show(){this.emit('show'),this.isHidden=!1,this._element.show(),(0!=this.height||0!=this.width)&&this.emit('shown')}setSize(e,t){for(var n,o,a,s,r,l,i=this.parent,c=this;!i.isColumn&&!i.isRow;)if(c=i,i=i.parent,i.isRoot)return!1;for(a=i.isColumn?'height':'width',s='height'===a?t:e,n=this[a]*(1/(c.config[a]/100)),o=100*(s/n),r=(c.config[a]-o)/(i.contentItems.length-1),l=0;l<i.contentItems.length;l++)i.contentItems[l]===c?i.contentItems[l].config[a]=o:i.contentItems[l].config[a]+=r;return i.callDownwards('setSize'),!0}close(){this._config.isClosable&&(this.emit('close'),this.parent.close())}getState(){return this._config.componentState}extendState(e){this.setState($.extend(!0,this.getState(),e))}setState(e){this._config.componentState=e,this.parent.emitBubblingEvent('stateChanged')}setTitle(e){this.parent.setTitle(e)}_$setSize(e,t){(e!==this.width||t!==this.height)&&(this.width=e,this.height=t,$.zepto?this._contentElement.width(e):this._contentElement.outerWidth(e),$.zepto?this._contentElement.height(t):this._contentElement.outerHeight(t),this.emit('resize'))}}t.a=i},function(e,n,o){'use strict';var i=o(68),a=o.n(i),s=o(1),r=o(11),l=o(0);class c extends s.b{constructor(e,t,n,o,i){super(),this.isInitialised=!1,this._config=e,this._dimensions=t,this._parentId=n,this._indexInParent=o,this._layoutManager=i,this._popoutWindow=null,this._id=null,this._createWindow()}toConfig(){if(!1===this.isInitialised)throw new Error('Can\\'t create config, layout not yet initialised');return{dimensions:{width:this.getGlInstance().width,height:this.getGlInstance().height,left:this._popoutWindow.screenX||this._popoutWindow.screenLeft,top:this._popoutWindow.screenY||this._popoutWindow.screenTop},content:this.getGlInstance().toConfig().content,parentId:this._parentId,indexInParent:this._indexInParent}}getGlInstance(){return this._popoutWindow.__glInstance}getWindow(){return this._popoutWindow}close(){if(this.getGlInstance())this.getGlInstance()._$closeWindow();else try{this.getWindow().close()}catch(t){}}popIn(){var e,t,n=this._indexInParent;this._parentId&&(e=$.extend(!0,{},this.getGlInstance().toConfig()).content[0],t=this._layoutManager.root.getItemsById(this._parentId)[0],!t&&(t=0<this._layoutManager.root.contentItems.length?this._layoutManager.root.contentItems[0]:this._layoutManager.root,n=0)),t.addChild(e,this._indexInParent),this.close()}_createWindow(){var e,n=this._createUrl(),o=t(1e6*Math.random()).toString(36),i=this._serializeWindowOptions({width:this._dimensions.width,height:this._dimensions.height,innerWidth:this._dimensions.width,innerHeight:this._dimensions.height,menubar:'no',toolbar:'no',location:'no',personalbar:'no',resizable:'yes',scrollbars:'no',status:'no'});if(this._popoutWindow=window.open(n,o,i),!this._popoutWindow)if(!0===this._layoutManager.config.settings.blockedPopoutsThrowError){var a=new Error('Popout blocked');throw a.type='popoutBlocked',a}else return;$(this._popoutWindow).on('load',Object(l.c)(this._positionWindow,this)).on('unload beforeunload',Object(l.c)(this._onClose,this)),e=setInterval(Object(l.c)(function(){this._popoutWindow.__glInstance&&this._popoutWindow.__glInstance.isInitialised&&(this._onInitialised(),clearInterval(e))},this),10)}_serializeWindowOptions(e){var t,n=[];for(t in e)n.push(t+'='+e[t]);return n.join(',')}_createUrl(){var e,t={content:this._config},n='gl-window-config-'+Object(l.f)();t=new r.a().minifyConfig(t);try{localStorage.setItem(n,a()(t))}catch(t){throw new Error('Error while writing to localStorage '+t.toString())}return e=document.location.href.split('?'),1===e.length?e[0]+'?gl-window='+n:document.location.href+'&gl-window='+n}_positionWindow(){this._popoutWindow.moveTo(this._dimensions.left,this._dimensions.top),this._popoutWindow.focus()}_onInitialised(){this.isInitialised=!0,this.getGlInstance().on('popIn',this.popIn,this),this.emit('initialised')}_onClose(){setTimeout(Object(l.c)(this.emit,this,['closed']),50)}}n.a=c},function(e,t,n){'use strict';Object.defineProperty(t,'__esModule',{value:!0});var o=n(36),i=n.n(o),a=n(37),s=n.n(a),r=n(38),l=n.n(r),c=n(39);n.d(t,'default',function(){return c.a});var p=n(33);n.d(t,'ItemContainer',function(){return p.a});var d=n(34);n.d(t,'BrowserPopout',function(){return d.a});var m=n(28);n.d(t,'Header',function(){return m.a});var _=n(31);n.d(t,'HeaderButton',function(){return _.a});var g=n(29);n.d(t,'Tab',function(){return g.a});var u=n(32);n.d(t,'Component',function(){return u.a});var f=n(12);n.d(t,'Root',function(){return f.a});var h=n(6);n.d(t,'RowOrColumn',function(){return h.a});var y=n(13);n.d(t,'Stack',function(){return y.a});var v=n(26);n.d(t,'BubblingEvent',function(){return v.a});var b=n(11);n.d(t,'ConfigMinifier',function(){return b.a});var k=n(7);n.d(t,'DragListener',function(){return k.a});var x=n(1);n.d(t,'EventEmitter',function(){return x.b});var D=n(25);n.d(t,'EventHub',function(){return D.a});var w=n(24);n.d(t,'ReactComponentHandler',function(){return w.a}),{}.ES6&&(n(74),n(77))},function(){},function(){},function(){},function(e,o,i){'use strict';var a=i(1),s=i(24),r=i(11),l=i(25),c=i(12),p=i(6),d=i(13),m=i(32),_=i(3),g=i(34),u=i(70),f=i(71),h=i(72),y=i(27),v=i(73),b=i(0);class k extends a.b{constructor(e,t){if(!$){var n='jQuery is missing as dependency for GoldenLayout. ';throw n+='Please either expose $ on GoldenLayout\\'s scope (e.g. window) or add \"jquery\" to ',n+='your paths when using RequireJS/AMD',new Error(n)}super(),this.isInitialised=!1,this._isFullPage=!1,this._resizeTimeoutId=null,this._components={\"lm-react-component\":s.a},this._itemAreas=[],this._resizeFunction=Object(b.c)(this._onResize,this),this._unloadFunction=Object(b.c)(this._onUnload,this),this._maximisedItem=null,this._maximisePlaceholder=$('<div class=\"lm_maximise_place\"></div>'),this._creationTimeoutPassed=!1,this._subWindowsCreated=!1,this._dragSources=[],this._updatingColumnsResponsive=!1,this._firstLoad=!0,this.width=null,this.height=null,this.root=null,this.openPopouts=[],this.selectedItem=null,this.isSubWindow=!1,this.eventHub=new l.a(this),this.config=this._createConfig(e),this.container=t,this.dropTargetIndicator=null,this.transitionIndicator=null,this.tabDropPlaceholder=$('<div class=\"lm_drop_tab_placeholder\"></div>'),!0===this.isSubWindow&&$('body').css('visibility','hidden'),this._typeToItem={column:Object(b.c)(p.a,this,[!0]),row:Object(b.c)(p.a,this,[!1]),stack:d.a,component:m.a}}minifyConfig(e){return new r.a().minifyConfig(e)}unminifyConfig(e){return new r.a().unminifyConfig(e)}registerComponent(e,t){if('function'!=typeof t)throw new Error('Please register a constructor function');if(void 0!==this._components[e])throw new Error('Component '+e+' is already registered');this._components[e]=t}toConfig(e){var t,n,o;if(!1===this.isInitialised)throw new Error('Can\\'t create config, layout not yet initialised');if(e&&!(e instanceof _.a))throw new Error('Root must be a ContentItem');for(t={settings:Object(b.b)({},this.config.settings),dimensions:Object(b.b)({},this.config.dimensions),labels:Object(b.b)({},this.config.labels)},t.content=[],n=function(e,t){var o,a;for(o in t.config)'content'!==o&&(e[o]=t.config[o]);if(t.contentItems.length)for(e.content=[],a=0;a<t.contentItems.length;a++)e.content[a]={},n(e.content[a],t.contentItems[a])},e?n(t,{contentItems:[e]}):n(t,this.root),this._$reconcilePopoutWindows(),t.openPopouts=[],o=0;o<this.openPopouts.length;o++)t.openPopouts.push(this.openPopouts[o].toConfig());return t.maximisedItemId=this._maximisedItem?'__glMaximised':null,t}getComponent(e){if(this._components[e]===void 0)throw new y.a('Unknown component \"'+e+'\"');return this._components[e]}init(){return!1===this._subWindowsCreated&&(this._createSubWindows(),this._subWindowsCreated=!0),'loading'===document.readyState||null===document.body?void $(document).ready(Object(b.c)(this.init,this)):!0===this.isSubWindow&&!1===this._creationTimeoutPassed?(setTimeout(Object(b.c)(this.init,this),7),void(this._creationTimeoutPassed=!0)):void(!0===this.isSubWindow&&this._adjustToWindowMode(),this._setContainer(),this.dropTargetIndicator=new f.a(this.container),this.transitionIndicator=new h.a,this.updateSize(),this._create(this.config),this._bindEvents(),this.isInitialised=!0,this._adjustColumnsResponsive(),this.emit('initialised'))}updateSize(e,t){2===arguments.length?(this.width=e,this.height=t):(this.width=this.container.width(),this.height=this.container.height()),!0===this.isInitialised&&(this.root.callDownwards('setSize',[this.width,this.height]),this._maximisedItem&&(this._maximisedItem.element.width(this.container.width()),this._maximisedItem.element.height(this.container.height()),this._maximisedItem.callDownwards('setSize')),this._adjustColumnsResponsive())}destroy(){!1===this.isInitialised||(this._onUnload(),$(window).off('resize',this._resizeFunction),$(window).off('unload beforeunload',this._unloadFunction),this.root.callDownwards('_$destroy',[],!0),this.root.contentItems=[],this.tabDropPlaceholder.remove(),this.dropTargetIndicator.destroy(),this.transitionIndicator.destroy(),this.eventHub.destroy(),this._dragSources.forEach(function(e){e._dragListener.destroy(),e._element=null,e._itemConfig=null,e._dragListener=null}),this._dragSources=[])}createContentItem(e,t){var n,o;if('string'!=typeof e.type)throw new y.a('Missing parameter \\'type\\'',e);if('react-component'===e.type&&(e.type='component',e.componentName='lm-react-component'),!this._typeToItem[e.type])throw n='Unknown type \\''+e.type+'\\'. Valid types are '+Object(b.j)(this._typeToItem).join(','),new y.a(n);return'component'!==e.type||t instanceof d.a||!t||!0===this.isSubWindow&&t instanceof c.a||(e={type:'stack',width:e.width,height:e.height,content:[e]}),o=new this._typeToItem[e.type](this,e,t),o}createPopout(e,t,n,o){var i,a,s,r,l,c,p=e,d=e instanceof _.a,m=this;if(n=n||null,d){for(p=this.toConfig(e).content,n=Object(b.f)(),r=e.parent,l=e;1===r.contentItems.length&&!r.isRoot;)r=r.parent,l=l.parent;r.addId(n),isNaN(o)&&(o=Object(b.g)(l,r.contentItems))}else p instanceof Array||(p=[p]);return!t&&d&&(i=window.screenX||window.screenLeft,a=window.screenY||window.screenTop,s=e.element.offset(),t={left:i+s.left,top:a+s.top,width:e.element.width(),height:e.element.height()}),t||d||(t={left:window.screenX||window.screenLeft+20,top:window.screenY||window.screenTop+20,width:500,height:309}),d&&e.remove(),c=new g.a(p,t,n,o,this),c.on('initialised',function(){m.emit('windowOpened',c)}),c.on('closed',function(){m._$reconcilePopoutWindows()}),this.openPopouts.push(c),c}createDragSource(e,t){this.config.settings.constrainDragToContainer=!1;var n=new u.a($(e),t,this);return this._dragSources.push(n),n}selectItem(e,t){if(!0!==this.config.settings.selectionEnabled)throw new Error('Please set selectionEnabled to true to use this feature');e===this.selectedItem||(null!==this.selectedItem&&this.selectedItem.deselect(),e&&!0!==t&&e.select(),this.selectedItem=e,this.emit('selectionChanged',e))}_$maximiseItem(e){null!==this._maximisedItem&&this._$minimiseItem(this._maximisedItem),this._maximisedItem=e,this._maximisedItem.addId('__glMaximised'),e.element.addClass('lm_maximised'),e.element.after(this._maximisePlaceholder),this.root.element.prepend(e.element),e.element.width(this.container.width()),e.element.height(this.container.height()),e.callDownwards('setSize'),this._maximisedItem.emit('maximised'),this.emit('stateChanged')}_$minimiseItem(e){e.element.removeClass('lm_maximised'),e.removeId('__glMaximised'),this._maximisePlaceholder.after(e.element),this._maximisePlaceholder.remove(),e.parent.callDownwards('setSize'),this._maximisedItem=null,e.emit('minimised'),this.emit('stateChanged')}_$closeWindow(){window.setTimeout(function(){window.close()},1)}_$getArea(e,t){var n,o,i=Infinity,a=null;for(n=0;n<this._itemAreas.length;n++)o=this._itemAreas[n],e>o.x1&&e<o.x2&&t>o.y1&&t<o.y2&&i>o.surface&&(i=o.surface,a=o);return a}_$createRootItemAreas(){var e=50,t={y2:0,x2:0,y1:'y2',x1:'x2'};for(var n in t){var o=this.root._$getArea();o.side=n,o[n]=t[n]?o[t[n]]-e:e,o.surface=(o.x2-o.x1)*(o.y2-o.y1),this._itemAreas.push(o)}}_$calculateItemAreas(){var e,t,n=this._getAllContentItems();if(this._itemAreas=[],1===n.length)return void this._itemAreas.push(this.root._$getArea());for(this._$createRootItemAreas(),e=0;e<n.length;e++)if(n[e].isStack)if(t=n[e]._$getArea(),null===t)continue;else if(t instanceof Array)this._itemAreas=this._itemAreas.concat(t);else{this._itemAreas.push(t);var o={};Object(b.b)(o,t),Object(b.b)(o,t.contentItem._contentAreaDimensions.header.highlightArea),o.surface=(o.x2-o.x1)*(o.y2-o.y1),this._itemAreas.push(o)}}_$normalizeContentItem(e,t){if(!e)throw new Error('No content item defined');if(Object(b.h)(e)&&(e=e()),e instanceof _.a)return e;if($.isPlainObject(e)&&e.type){var n=this.createContentItem(e,t);return n.callDownwards('_$init'),n}throw new Error('Invalid contentItem')}_$reconcilePopoutWindows(){var e,t=[];for(e=0;e<this.openPopouts.length;e++)!1===this.openPopouts[e].getWindow().closed?t.push(this.openPopouts[e]):this.emit('windowClosed',this.openPopouts[e]);this.openPopouts.length!==t.length&&(this.emit('stateChanged'),this.openPopouts=t)}_getAllContentItems(){var e=[],t=function(n){if(e.push(n),n.contentItems instanceof Array)for(var o=0;o<n.contentItems.length;o++)t(n.contentItems[o])};return t(this.root),e}_bindEvents(){this._isFullPage&&$(window).resize(this._resizeFunction),$(window).on('unload beforeunload',this._unloadFunction)}_onResize(){clearTimeout(this._resizeTimeoutId),this._resizeTimeoutId=setTimeout(Object(b.c)(this.updateSize,this),100)}_createConfig(e){var t=Object(b.d)('gl-window');t&&(this.isSubWindow=!0,e=localStorage.getItem(t),e=JSON.parse(e),e=new r.a().unminifyConfig(e),localStorage.removeItem(t)),e=$.extend(!0,{},v.a,e);var n=function(e){for(var t in e)'props'!=t&&'object'==typeof e[t]?n(e[t]):'type'==t&&'react-component'===e[t]&&(e.type='component',e.componentName='lm-react-component')};return n(e),!1===e.settings.hasHeaders&&(e.dimensions.headerHeight=0),e}_adjustToWindowMode(){var e=$('<div class=\"lm_popin\" title=\"'+this.config.labels.popin+'\"><div class=\"lm_icon\"></div><div class=\"lm_bg\"></div></div>');e.click(Object(b.c)(function(){this.emit('popIn')},this)),document.title=Object(b.k)(this.config.content[0].title),$('head').append($('body link, body style, template, .gl_keep')),this.container=$('body').html('').css('visibility','visible').append(e);document.body.offsetHeight;window.__glInstance=this}_createSubWindows(){var e,t;for(e=0;e<this.config.openPopouts.length;e++)t=this.config.openPopouts[e],this.createPopout(t.content,t.dimensions,t.parentId,t.indexInParent)}_setContainer(){var e=$(this.container||'body');if(0===e.length)throw new Error('GoldenLayout container not found');if(1<e.length)throw new Error('GoldenLayout more than one container element specified');e[0]===document.body&&(this._isFullPage=!0,$('html, body').css({height:'100%',margin:0,padding:0,overflow:'hidden'})),this.container=e}_create(e){var t;if(!(e.content instanceof Array))throw t=void 0===e.content?'Missing setting \\'content\\' on top level of configuration':'Configuration parameter \\'content\\' must be an array',new y.a(t,e);if(1<e.content.length)throw t='Top level content can\\'t contain more then one element.',new y.a(t,e);this.root=new c.a(this,{content:e.content},this.container),this.root.callDownwards('_$init'),'__glMaximised'===e.maximisedItemId&&this.root.getItemsById(e.maximisedItemId)[0].toggleMaximise()}_onUnload(){if(!0===this.config.settings.closePopoutsOnUnload)for(var e=0;e<this.openPopouts.length;e++)this.openPopouts[e].close()}_adjustColumnsResponsive(){if(!this._useResponsiveLayout()||this._updatingColumnsResponsive||!this.config.dimensions||!this.config.dimensions.minItemWidth||0===this.root.contentItems.length||!this.root.contentItems[0].isRow)return void(this._firstLoad=!1);this._firstLoad=!1;var e=this.root.contentItems[0].contentItems.length;if(!(1>=e)){var o=this.config.dimensions.minItemWidth;if(!(e*o<=this.width)){this._updatingColumnsResponsive=!0;for(var a,s=n(t(this.width/o),1),r=this.root.contentItems[0],l=this._findAllStackContainers()[0],c=0;c<e-s;c++)a=r.contentItems[r.contentItems.length-1],this._addChildContentItemsToContainer(l,a);this._updatingColumnsResponsive=!1}}}_useResponsiveLayout(){return this.config.settings&&('always'==this.config.settings.responsiveMode||'onload'==this.config.settings.responsiveMode&&this._firstLoad)}_addChildContentItemsToContainer(e,t){'stack'===t.type?t.contentItems.forEach(function(n){e.addChild(n),t.removeChild(n,!0)}):t.contentItems.forEach(Object(b.c)(function(t){this._addChildContentItemsToContainer(e,t)},this))}_findAllStackContainers(){var e=[];return this._findAllStackContainersRecursive(e,this.root),e}_findAllStackContainersRecursive(e,t){t.contentItems.forEach(Object(b.c)(function(t){'stack'==t.type?e.push(t):!t.isComponent&&this._findAllStackContainersRecursive(e,t)},this))}}o.a=k},function(e,t,n){e.exports={default:n(41),__esModule:!0}},function(e,t,n){n(42),e.exports=n(2).Object.keys},function(e,t,n){var o=n(43),i=n(15);n(53)('keys',function(){return function(e){return i(o(e))}})},function(e,t,n){var o=n(14);e.exports=function(e){return Object(o(e))}},function(e,t,n){var o=n(16),a=n(17),s=n(47)(!1),i=n(19)('IE_PROTO');e.exports=function(e,t){var n,r=a(e),l=0,c=[];for(n in r)n!=i&&o(r,n)&&c.push(n);for(;t.length>l;)o(r,n=t[l++])&&(~s(c,n)||c.push(n));return c}},function(e,t,n){var o=n(46);e.exports=Object('z').propertyIsEnumerable(0)?Object:function(e){return'String'==o(e)?e.split(''):Object(e)}},function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},function(e,t,n){var o=n(17),i=n(48),a=n(49);e.exports=function(e){return function(t,n,s){var r,l=o(t),c=i(l.length),p=a(s,c);if(e&&n!=n){for(;c>p;)if(r=l[p++],r!=r)return!0;}else for(;c>p;p++)if((e||p in l)&&l[p]===n)return e||p||0;return!e&&-1}}},function(t,n,o){var i=o(18);t.exports=function(t){return 0<t?e(i(t),9007199254740991):0}},function(t,o,i){var a=i(18);t.exports=function(t,o){return t=a(t),0>t?n(t+o,0):e(t,o)}},function(e,t,n){var o=n(2),i=n(4),a='__core-js_shared__',s=i[a]||(i[a]={});(e.exports=function(e,t){return s[e]||(s[e]=t===void 0?{}:t)})('versions',[]).push({version:o.version,mode:n(51)?'pure':'global',copyright:'\\xA9 2018 Denis Pushkarev (zloirock.ru)'})},function(e){e.exports=!0},function(e){var t=0,n=Math.random();e.exports=function(e){return'Symbol('.concat(e===void 0?'':e,')_',(++t+n).toString(36))}},function(e,t,n){var o=n(21),i=n(2),a=n(10);e.exports=function(e,t){var n=(i.Object||{})[e]||Object[e],s={};s[e]=t(n),o(o.S+o.F*a(function(){n(1)}),'Object',s)}},function(e,t,n){var o=n(55);e.exports=function(e,t,n){return(o(e),void 0===t)?e:1===n?function(n){return e.call(t,n)}:2===n?function(n,o){return e.call(t,n,o)}:3===n?function(n,o,i){return e.call(t,n,o,i)}:function(){return e.apply(t,arguments)}}},function(e){e.exports=function(e){if('function'!=typeof e)throw TypeError(e+' is not a function!');return e}},function(e,t,n){var o=n(22),i=n(59);e.exports=n(5)?function(e,t,n){return o.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){e.exports=!n(5)&&!n(10)(function(){return 7!=Object.defineProperty(n(23)('div'),'a',{get:function(){return 7}}).a})},function(e,t,n){var o=n(9);e.exports=function(e,t){if(!o(e))return e;var n,i;if(t&&'function'==typeof(n=e.toString)&&!o(i=n.call(e)))return i;if('function'==typeof(n=e.valueOf)&&!o(i=n.call(e)))return i;if(!t&&'function'==typeof(n=e.toString)&&!o(i=n.call(e)))return i;throw TypeError('Can\\'t convert object to primitive value')}},function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){e.exports={default:n(61),__esModule:!0}},function(e,t,n){n(62);var o=n(2).Object;e.exports=function(e,t){return o.create(e,t)}},function(e,t,n){var o=n(21);o(o.S,'Object',{create:n(63)})},function(e,t,n){var o=n(8),i=n(64),a=n(20),s=n(19)('IE_PROTO'),r=function(){},l='prototype',c=function(){var e,t=n(23)('iframe'),o=a.length,i='<',s='>';for(t.style.display='none',n(65).appendChild(t),t.src='javascript:',e=t.contentWindow.document,e.open(),e.write(i+'script'+s+'document.F=Object'+i+'/script'+s),e.close(),c=e.F;o--;)delete c[l][a[o]];return c()};e.exports=Object.create||function(e,t){var n;return null===e?n=c():(r[l]=o(e),n=new r,r[l]=null,n[s]=e),void 0===t?n:i(n,t)}},function(e,t,n){var o=n(22),a=n(8),s=n(15);e.exports=n(5)?Object.defineProperties:function(e,t){a(e);for(var n,r=s(t),l=r.length,c=0;l>c;)o.f(e,n=r[c++],t[n]);return e}},function(e,t,n){var o=n(4).document;e.exports=o&&o.documentElement},function(e,t){'use strict';t.a={isClosable:!0,reorderEnabled:!0,title:''}},function(e,t,n){'use strict';var o=n(7);t.a=class{constructor(e,t,n){this._isVertical=e,this._size=t,this._grabSize=n<t?t:n,this.element=this._createElement(),this._dragListener=new o.a(this.element)}on(e,t,n){this._dragListener.on(e,t,n)}_$destroy(){this.element.remove()}_createElement(){var e=$('<div class=\"lm_drag_handle\"></div>'),t=$('<div class=\"lm_splitter\"></div>');t.append(e);var n=this._grabSize-this._size,o=n/2;return this._isVertical?(e.css('top',-o),e.css('height',this._size+n),t.addClass('lm_vertical'),t.height(this._size)):(e.css('left',-o),e.css('width',this._size+n),t.addClass('lm_horizontal'),t.width(this._size)),t}}},function(e,t,n){e.exports={default:n(69),__esModule:!0}},function(e,t,n){var o=n(2),i=o.JSON||(o.JSON={stringify:JSON.stringify});e.exports=function(){return i.stringify.apply(i,arguments)}},function(e,t,n){'use strict';var o=n(7),i=n(30),a=n(0);t.a=class{constructor(e,t,n){this._element=e,this._itemConfig=t,this._layoutManager=n,this._dragListener=null,this._createDragListener()}_createDragListener(){null!==this._dragListener&&this._dragListener.destroy(),this._dragListener=new o.a(this._element),this._dragListener.on('dragStart',this._onDragStart,this),this._dragListener.on('dragStop',this._createDragListener,this)}_onDragStart(e,t){var n=this._itemConfig;Object(a.h)(n)&&(n=n());var o=this._layoutManager._$normalizeContentItem($.extend(!0,{},n)),s=new i.a(e,t,this._dragListener,this._layoutManager,o,null);this._layoutManager.transitionIndicator.transitionElements(this._element,s.element)}}},function(e,t){'use strict';t.a=class{constructor(){this.element=$('<div class=\"lm_dropTargetIndicator\"><div class=\"lm_inner\"></div></div>'),$(document.body).append(this.element)}destroy(){this.element.remove()}highlight(e,t,n,o){this.highlightArea({x1:e,y1:t,x2:n,y2:o})}highlightArea(e){this.element.css({left:e.x1,top:e.y1,width:e.x2-e.x1,height:e.y2-e.y1}).show()}hide(){this.element.hide()}}},function(e,t,n){'use strict';var o=n(0);t.a=class{constructor(){this._element=$('<div class=\"lm_transition_indicator\"></div>'),$(document.body).append(this._element),this._toElement=null,this._fromDimensions=null,this._totalAnimationDuration=200,this._animationStartTime=null}destroy(){this._element.remove()}transitionElements(){}_nextAnimationFrame(){var e,t=this._measure(this._toElement),n=(Object(o.i)()-this._animationStartTime)/this._totalAnimationDuration,i={};if(1<=n)return void this._element.hide();for(e in t.opacity=0,this._fromDimensions)i[e]=this._fromDimensions[e]+(t[e]-this._fromDimensions[e])*n;this._element.css(i),Object(o.a)(Object(o.c)(this._nextAnimationFrame,this))}_measure(e){var t=e.offset();return{left:t.left,top:t.top,width:e.outerWidth(),height:e.outerHeight()}}}},function(e,t){'use strict';t.a={openPopouts:[],settings:{hasHeaders:!0,constrainDragToContainer:!0,reorderEnabled:!0,selectionEnabled:!1,popoutWholeStack:!1,blockedPopoutsThrowError:!0,closePopoutsOnUnload:!0,showPopoutIcon:!0,showMaximiseIcon:!0,showCloseIcon:!0,responsiveMode:'onload',tabOverlapAllowance:0,reorderOnTabMenuClick:!0,tabControlOffset:10},dimensions:{borderWidth:5,borderGrabWidth:15,minItemHeight:10,minItemWidth:10,headerHeight:20,dragProxyWidth:300,dragProxyHeight:200},labels:{close:'close',maximise:'maximise',minimise:'minimise',popout:'open in new window',popin:'pop in',tabDropdown:'additional tabs'}}},function(e,t,n){n(75)(n(76))},function(e){e.exports=function(e){function t(e){'undefined'!=typeof console&&(console.error||console.log)('[Script Loader]',e)}function n(){return'undefined'!=typeof attachEvent&&'undefined'==typeof addEventListener}try{'undefined'!=typeof execScript&&n()?execScript(e):'undefined'==typeof eval?t('EvalError: No eval function available'):eval.call(null,e)}catch(e){t(e)}}},function(e){e.exports='/* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */\\n(function(global, factory) {\\n if (typeof define === \\'function\\' && define.amd)\\n define(function() { return factory(global) })\\n else\\n factory(global)\\n}(this, function(window) {\\n var Zepto = (function() {\\n var undefined, key, $, classList, emptyArray = [], concat = emptyArray.concat, filter = emptyArray.filter, slice = emptyArray.slice,\\n document = window.document,\\n elementDisplay = {}, classCache = {},\\n cssNumber = { \\'column-count\\': 1, \\'columns\\': 1, \\'font-weight\\': 1, \\'line-height\\': 1,\\'opacity\\': 1, \\'z-index\\': 1, \\'zoom\\': 1 },\\n fragmentRE = /^\\\\s*<(\\\\w+|!)[^>]*>/,\\n singleTagRE = /^<(\\\\w+)\\\\s*\\\\/?>(?:<\\\\/\\\\1>|)$/,\\n tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\\\w:]+)[^>]*)\\\\/>/ig,\\n rootNodeRE = /^(?:body|html)$/i,\\n capitalRE = /([A-Z])/g,\\n\\n // special attributes that should be get/set via method calls\\n methodAttributes = [\\'val\\', \\'css\\', \\'html\\', \\'text\\', \\'data\\', \\'width\\', \\'height\\', \\'offset\\'],\\n\\n adjacencyOperators = [ \\'after\\', \\'prepend\\', \\'before\\', \\'append\\' ],\\n table = document.createElement(\\'table\\'),\\n tableRow = document.createElement(\\'tr\\'),\\n containers = {\\n \\'tr\\': document.createElement(\\'tbody\\'),\\n \\'tbody\\': table, \\'thead\\': table, \\'tfoot\\': table,\\n \\'td\\': tableRow, \\'th\\': tableRow,\\n \\'*\\': document.createElement(\\'div\\')\\n },\\n readyRE = /complete|loaded|interactive/,\\n simpleSelectorRE = /^[\\\\w-]*$/,\\n class2type = {},\\n toString = class2type.toString,\\n zepto = {},\\n camelize, uniq,\\n tempParent = document.createElement(\\'div\\'),\\n propMap = {\\n \\'tabindex\\': \\'tabIndex\\',\\n \\'readonly\\': \\'readOnly\\',\\n \\'for\\': \\'htmlFor\\',\\n \\'class\\': \\'className\\',\\n \\'maxlength\\': \\'maxLength\\',\\n \\'cellspacing\\': \\'cellSpacing\\',\\n \\'cellpadding\\': \\'cellPadding\\',\\n \\'rowspan\\': \\'rowSpan\\',\\n \\'colspan\\': \\'colSpan\\',\\n \\'usemap\\': \\'useMap\\',\\n \\'frameborder\\': \\'frameBorder\\',\\n \\'contenteditable\\': \\'contentEditable\\'\\n },\\n isArray = Array.isArray ||\\n function(object){ return object instanceof Array }\\n\\n zepto.matches = function(element, selector) {\\n if (!selector || !element || element.nodeType !== 1) return false\\n var matchesSelector = element.matches || element.webkitMatchesSelector ||\\n element.mozMatchesSelector || element.oMatchesSelector ||\\n element.matchesSelector\\n if (matchesSelector) return matchesSelector.call(element, selector)\\n // fall back to performing a selector:\\n var match, parent = element.parentNode, temp = !parent\\n if (temp) (parent = tempParent).appendChild(element)\\n match = ~zepto.qsa(parent, selector).indexOf(element)\\n temp && tempParent.removeChild(element)\\n return match\\n }\\n\\n function type(obj) {\\n return obj == null ? String(obj) :\\n class2type[toString.call(obj)] || \"object\"\\n }\\n\\n function isFunction(value) { return type(value) == \"function\" }\\n function isWindow(obj) { return obj != null && obj == obj.window }\\n function isDocument(obj) { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }\\n function isObject(obj) { return type(obj) == \"object\" }\\n function isPlainObject(obj) {\\n return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype\\n }\\n\\n function likeArray(obj) {\\n var length = !!obj && \\'length\\' in obj && obj.length,\\n type = $.type(obj)\\n\\n return \\'function\\' != type && !isWindow(obj) && (\\n \\'array\\' == type || length === 0 ||\\n (typeof length == \\'number\\' && length > 0 && (length - 1) in obj)\\n )\\n }\\n\\n function compact(array) { return filter.call(array, function(item){ return item != null }) }\\n function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }\\n camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : \\'\\' }) }\\n function dasherize(str) {\\n return str.replace(/::/g, \\'/\\')\\n .replace(/([A-Z]+)([A-Z][a-z])/g, \\'$1_$2\\')\\n .replace(/([a-z\\\\d])([A-Z])/g, \\'$1_$2\\')\\n .replace(/_/g, \\'-\\')\\n .toLowerCase()\\n }\\n uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }\\n\\n function classRE(name) {\\n return name in classCache ?\\n classCache[name] : (classCache[name] = new RegExp(\\'(^|\\\\\\\\s)\\' + name + \\'(\\\\\\\\s|$)\\'))\\n }\\n\\n function maybeAddPx(name, value) {\\n return (typeof value == \"number\" && !cssNumber[dasherize(name)]) ? value + \"px\" : value\\n }\\n\\n function defaultDisplay(nodeName) {\\n var element, display\\n if (!elementDisplay[nodeName]) {\\n element = document.createElement(nodeName)\\n document.body.appendChild(element)\\n display = getComputedStyle(element, \\'\\').getPropertyValue(\"display\")\\n element.parentNode.removeChild(element)\\n display == \"none\" && (display = \"block\")\\n elementDisplay[nodeName] = display\\n }\\n return elementDisplay[nodeName]\\n }\\n\\n function children(element) {\\n return \\'children\\' in element ?\\n slice.call(element.children) :\\n $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })\\n }\\n\\n function Z(dom, selector) {\\n var i, len = dom ? dom.length : 0\\n for (i = 0; i < len; i++) this[i] = dom[i]\\n this.length = len\\n this.selector = selector || \\'\\'\\n }\\n\\n // `$.zepto.fragment` takes a html string and an optional tag name\\n // to generate DOM nodes from the given html string.\\n // The generated DOM nodes are returned as an array.\\n // This function can be overridden in plugins for example to make\\n // it compatible with browsers that don\\'t support the DOM fully.\\n zepto.fragment = function(html, name, properties) {\\n var dom, nodes, container\\n\\n // A special case optimization for a single tag\\n if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1))\\n\\n if (!dom) {\\n if (html.replace) html = html.replace(tagExpanderRE, \"<$1></$2>\")\\n if (name === undefined) name = fragmentRE.test(html) && RegExp.$1\\n if (!(name in containers)) name = \\'*\\'\\n\\n container = containers[name]\\n container.innerHTML = \\'\\' + html\\n dom = $.each(slice.call(container.childNodes), function(){\\n container.removeChild(this)\\n })\\n }\\n\\n if (isPlainObject(properties)) {\\n nodes = $(dom)\\n $.each(properties, function(key, value) {\\n if (methodAttributes.indexOf(key) > -1) nodes[key](value)\\n else nodes.attr(key, value)\\n })\\n }\\n\\n return dom\\n }\\n\\n // `$.zepto.Z` swaps out the prototype of the given `dom` array\\n // of nodes with `$.fn` and thus supplying all the Zepto functions\\n // to the array. This method can be overridden in plugins.\\n zepto.Z = function(dom, selector) {\\n return new Z(dom, selector)\\n }\\n\\n // `$.zepto.isZ` should return `true` if the given object is a Zepto\\n // collection. This method can be overridden in plugins.\\n zepto.isZ = function(object) {\\n return object instanceof zepto.Z\\n }\\n\\n // `$.zepto.init` is Zepto\\'s counterpart to jQuery\\'s `$.fn.init` and\\n // takes a CSS selector and an optional context (and handles various\\n // special cases).\\n // This method can be overridden in plugins.\\n zepto.init = function(selector, context) {\\n var dom\\n // If nothing given, return an empty Zepto collection\\n if (!selector) return zepto.Z()\\n // Optimize for string selectors\\n else if (typeof selector == \\'string\\') {\\n selector = selector.trim()\\n // If it\\'s a html fragment, create nodes from it\\n // Note: In both Chrome 21 and Firefox 15, DOM error 12\\n // is thrown if the fragment doesn\\'t begin with <\\n if (selector[0] == \\'<\\' && fragmentRE.test(selector))\\n dom = zepto.fragment(selector, RegExp.$1, context), selector = null\\n // If there\\'s a context, create a collection on that context first, and select\\n // nodes from there\\n else if (context !== undefined) return $(context).find(selector)\\n // If it\\'s a CSS selector, use it to select nodes.\\n else dom = zepto.qsa(document, selector)\\n }\\n // If a function is given, call it when the DOM is ready\\n else if (isFunction(selector)) return $(document).ready(selector)\\n // If a Zepto collection is given, just return it\\n else if (zepto.isZ(selector)) return selector\\n else {\\n // normalize array if an array of nodes is given\\n if (isArray(selector)) dom = compact(selector)\\n // Wrap DOM nodes.\\n else if (isObject(selector))\\n dom = [selector], selector = null\\n // If it\\'s a html fragment, create nodes from it\\n else if (fragmentRE.test(selector))\\n dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null\\n // If there\\'s a context, create a collection on that context first, and select\\n // nodes from there\\n else if (context !== undefined) return $(context).find(selector)\\n // And last but no least, if it\\'s a CSS selector, use it to select nodes.\\n else dom = zepto.qsa(document, selector)\\n }\\n // create a new Zepto collection from the nodes found\\n return zepto.Z(dom, selector)\\n }\\n\\n // `$` will be the base `Zepto` object. When calling this\\n // function just call `$.zepto.init, which makes the implementation\\n // details of selecting nodes and creating Zepto collections\\n // patchable in plugins.\\n $ = function(selector, context){\\n return zepto.init(selector, context)\\n }\\n\\n function extend(target, source, deep) {\\n for (key in source)\\n if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\\n if (isPlainObject(source[key]) && !isPlainObject(target[key]))\\n target[key] = {}\\n if (isArray(source[key]) && !isArray(target[key]))\\n target[key] = []\\n extend(target[key], source[key], deep)\\n }\\n else if (source[key] !== undefined) target[key] = source[key]\\n }\\n\\n // Copy all but undefined properties from one or more\\n // objects to the `target` object.\\n $.extend = function(target){\\n var deep, args = slice.call(arguments, 1)\\n if (typeof target == \\'boolean\\') {\\n deep = target\\n target = args.shift()\\n }\\n args.forEach(function(arg){ extend(target, arg, deep) })\\n return target\\n }\\n\\n // `$.zepto.qsa` is Zepto\\'s CSS selector implementation which\\n // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.\\n // This method can be overridden in plugins.\\n zepto.qsa = function(element, selector){\\n var found,\\n maybeID = selector[0] == \\'#\\',\\n maybeClass = !maybeID && selector[0] == \\'.\\',\\n nameOnly = maybeID || maybeClass ? selector.slice(1) : selector, // Ensure that a 1 char tag name still gets checked\\n isSimple = simpleSelectorRE.test(nameOnly)\\n return (element.getElementById && isSimple && maybeID) ? // Safari DocumentFragment doesn\\'t have getElementById\\n ( (found = element.getElementById(nameOnly)) ? [found] : [] ) :\\n (element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11) ? [] :\\n slice.call(\\n isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn\\'t have getElementsByClassName/TagName\\n maybeClass ? element.getElementsByClassName(nameOnly) : // If it\\'s simple, it could be a class\\n element.getElementsByTagName(selector) : // Or a tag\\n element.querySelectorAll(selector) // Or it\\'s not simple, and we need to query all\\n )\\n }\\n\\n function filtered(nodes, selector) {\\n return selector == null ? $(nodes) : $(nodes).filter(selector)\\n }\\n\\n $.contains = document.documentElement.contains ?\\n function(parent, node) {\\n return parent !== node && parent.contains(node)\\n } :\\n function(parent, node) {\\n while (node && (node = node.parentNode))\\n if (node === parent) return true\\n return false\\n }\\n\\n function funcArg(context, arg, idx, payload) {\\n return isFunction(arg) ? arg.call(context, idx, payload) : arg\\n }\\n\\n function setAttribute(node, name, value) {\\n value == null ? node.removeAttribute(name) : node.setAttribute(name, value)\\n }\\n\\n // access className property while respecting SVGAnimatedString\\n function className(node, value){\\n var klass = node.className || \\'\\',\\n svg = klass && klass.baseVal !== undefined\\n\\n if (value === undefined) return svg ? klass.baseVal : klass\\n svg ? (klass.baseVal = value) : (node.className = value)\\n }\\n\\n // \"true\" => true\\n // \"false\" => false\\n // \"null\" => null\\n // \"42\" => 42\\n // \"42.5\" => 42.5\\n // \"08\" => \"08\"\\n // JSON => parse if valid\\n // String => self\\n function deserializeValue(value) {\\n try {\\n return value ?\\n value == \"true\" ||\\n ( value == \"false\" ? false :\\n value == \"null\" ? null :\\n +value + \"\" == value ? +value :\\n /^[\\\\[\\\\{]/.test(value) ? $.parseJSON(value) :\\n value )\\n : value\\n } catch(e) {\\n return value\\n }\\n }\\n\\n $.type = type\\n $.isFunction = isFunction\\n $.isWindow = isWindow\\n $.isArray = isArray\\n $.isPlainObject = isPlainObject\\n\\n $.isEmptyObject = function(obj) {\\n var name\\n for (name in obj) return false\\n return true\\n }\\n\\n $.isNumeric = function(val) {\\n var num = Number(val), type = typeof val\\n return val != null && type != \\'boolean\\' &&\\n (type != \\'string\\' || val.length) &&\\n !isNaN(num) && isFinite(num) || false\\n }\\n\\n $.inArray = function(elem, array, i){\\n return emptyArray.indexOf.call(array, elem, i)\\n }\\n\\n $.camelCase = camelize\\n $.trim = function(str) {\\n return str == null ? \"\" : String.prototype.trim.call(str)\\n }\\n\\n // plugin compatibility\\n $.uuid = 0\\n $.support = { }\\n $.expr = { }\\n $.noop = function() {}\\n\\n $.map = function(elements, callback){\\n var value, values = [], i, key\\n if (likeArray(elements))\\n for (i = 0; i < elements.length; i++) {\\n value = callback(elements[i], i)\\n if (value != null) values.push(value)\\n }\\n else\\n for (key in elements) {\\n value = callback(elements[key], key)\\n if (value != null) values.push(value)\\n }\\n return flatten(values)\\n }\\n\\n $.each = function(elements, callback){\\n var i, key\\n if (likeArray(elements)) {\\n for (i = 0; i < elements.length; i++)\\n if (callback.call(elements[i], i, elements[i]) === false) return elements\\n } else {\\n for (key in elements)\\n if (callback.call(elements[key], key, elements[key]) === false) return elements\\n }\\n\\n return elements\\n }\\n\\n $.grep = function(elements, callback){\\n return filter.call(elements, callback)\\n }\\n\\n if (window.JSON) $.parseJSON = JSON.parse\\n\\n // Populate the class2type map\\n $.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\\n class2type[ \"[object \" + name + \"]\" ] = name.toLowerCase()\\n })\\n\\n // Define methods that will be available on all\\n // Zepto collections\\n $.fn = {\\n constructor: zepto.Z,\\n length: 0,\\n\\n // Because a collection acts like an array\\n // copy over these useful array functions.\\n forEach: emptyArray.forEach,\\n reduce: emptyArray.reduce,\\n push: emptyArray.push,\\n sort: emptyArray.sort,\\n splice: emptyArray.splice,\\n indexOf: emptyArray.indexOf,\\n concat: function(){\\n var i, value, args = []\\n for (i = 0; i < arguments.length; i++) {\\n value = arguments[i]\\n args[i] = zepto.isZ(value) ? value.toArray() : value\\n }\\n return concat.apply(zepto.isZ(this) ? this.toArray() : this, args)\\n },\\n\\n // `map` and `slice` in the jQuery API work differently\\n // from their array counterparts\\n map: function(fn){\\n return $($.map(this, function(el, i){ return fn.call(el, i, el) }))\\n },\\n slice: function(){\\n return $(slice.apply(this, arguments))\\n },\\n\\n ready: function(callback){\\n // need to check if document.body exists for IE as that browser reports\\n // document ready when it hasn\\'t yet created the body element\\n if (readyRE.test(document.readyState) && document.body) callback($)\\n else document.addEventListener(\\'DOMContentLoaded\\', function(){ callback($) }, false)\\n return this\\n },\\n get: function(idx){\\n return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]\\n },\\n toArray: function(){ return this.get() },\\n size: function(){\\n return this.length\\n },\\n remove: function(){\\n return this.each(function(){\\n if (this.parentNode != null)\\n this.parentNode.removeChild(this)\\n })\\n },\\n each: function(callback){\\n emptyArray.every.call(this, function(el, idx){\\n return callback.call(el, idx, el) !== false\\n })\\n return this\\n },\\n filter: function(selector){\\n if (isFunction(selector)) return this.not(this.not(selector))\\n return $(filter.call(this, function(element){\\n return zepto.matches(element, selector)\\n }))\\n },\\n add: function(selector,context){\\n return $(uniq(this.concat($(selector,context))))\\n },\\n is: function(selector){\\n return this.length > 0 && zepto.matches(this[0], selector)\\n },\\n not: function(selector){\\n var nodes=[]\\n if (isFunction(selector) && selector.call !== undefined)\\n this.each(function(idx){\\n if (!selector.call(this,idx)) nodes.push(this)\\n })\\n else {\\n var excludes = typeof selector == \\'string\\' ? this.filter(selector) :\\n (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)\\n this.forEach(function(el){\\n if (excludes.indexOf(el) < 0) nodes.push(el)\\n })\\n }\\n return $(nodes)\\n },\\n has: function(selector){\\n return this.filter(function(){\\n return isObject(selector) ?\\n $.contains(this, selector) :\\n $(this).find(selector).size()\\n })\\n },\\n eq: function(idx){\\n return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)\\n },\\n first: function(){\\n var el = this[0]\\n return el && !isObject(el) ? el : $(el)\\n },\\n last: function(){\\n var el = this[this.length - 1]\\n return el && !isObject(el) ? el : $(el)\\n },\\n find: function(selector){\\n var result, $this = this\\n if (!selector) result = $()\\n else if (typeof selector == \\'object\\')\\n result = $(selector).filter(function(){\\n var node = this\\n return emptyArray.some.call($this, function(parent){\\n return $.contains(parent, node)\\n })\\n })\\n else if (this.length == 1) result = $(zepto.qsa(this[0], selector))\\n else result = this.map(function(){ return zepto.qsa(this, selector) })\\n return result\\n },\\n closest: function(selector, context){\\n var nodes = [], collection = typeof selector == \\'object\\' && $(selector)\\n this.each(function(_, node){\\n while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))\\n node = node !== context && !isDocument(node) && node.parentNode\\n if (node && nodes.indexOf(node) < 0) nodes.push(node)\\n })\\n return $(nodes)\\n },\\n parents: function(selector){\\n var ancestors = [], nodes = this\\n while (nodes.length > 0)\\n nodes = $.map(nodes, function(node){\\n if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {\\n ancestors.push(node)\\n return node\\n }\\n })\\n return filtered(ancestors, selector)\\n },\\n parent: function(selector){\\n return filtered(uniq(this.pluck(\\'parentNode\\')), selector)\\n },\\n children: function(selector){\\n return filtered(this.map(function(){ return children(this) }), selector)\\n },\\n contents: function() {\\n return this.map(function() { return this.contentDocument || slice.call(this.childNodes) })\\n },\\n siblings: function(selector){\\n return filtered(this.map(function(i, el){\\n return filter.call(children(el.parentNode), function(child){ return child!==el })\\n }), selector)\\n },\\n empty: function(){\\n return this.each(function(){ this.innerHTML = \\'\\' })\\n },\\n // `pluck` is borrowed from Prototype.js\\n pluck: function(property){\\n return $.map(this, function(el){ return el[property] })\\n },\\n show: function(){\\n return this.each(function(){\\n this.style.display == \"none\" && (this.style.display = \\'\\')\\n if (getComputedStyle(this, \\'\\').getPropertyValue(\"display\") == \"none\")\\n this.style.display = defaultDisplay(this.nodeName)\\n })\\n },\\n replaceWith: function(newContent){\\n return this.before(newContent).remove()\\n },\\n wrap: function(structure){\\n var func = isFunction(structure)\\n if (this[0] && !func)\\n var dom = $(structure).get(0),\\n clone = dom.parentNode || this.length > 1\\n\\n return this.each(function(index){\\n $(this).wrapAll(\\n func ? structure.call(this, index) :\\n clone ? dom.cloneNode(true) : dom\\n )\\n })\\n },\\n wrapAll: function(structure){\\n if (this[0]) {\\n $(this[0]).before(structure = $(structure))\\n var children\\n // drill down to the inmost element\\n while ((children = structure.children()).length) structure = children.first()\\n $(structure).append(this)\\n }\\n return this\\n },\\n wrapInner: function(structure){\\n var func = isFunction(structure)\\n return this.each(function(index){\\n var self = $(this), contents = self.contents(),\\n dom = func ? structure.call(this, index) : structure\\n contents.length ? contents.wrapAll(dom) : self.append(dom)\\n })\\n },\\n unwrap: function(){\\n this.parent().each(function(){\\n $(this).replaceWith($(this).children())\\n })\\n return this\\n },\\n clone: function(){\\n return this.map(function(){ return this.cloneNode(true) })\\n },\\n hide: function(){\\n return this.css(\"display\", \"none\")\\n },\\n toggle: function(setting){\\n return this.each(function(){\\n var el = $(this)\\n ;(setting === undefined ? el.css(\"display\") == \"none\" : setting) ? el.show() : el.hide()\\n })\\n },\\n prev: function(selector){ return $(this.pluck(\\'previousElementSibling\\')).filter(selector || \\'*\\') },\\n next: function(selector){ return $(this.pluck(\\'nextElementSibling\\')).filter(selector || \\'*\\') },\\n html: function(html){\\n return 0 in arguments ?\\n this.each(function(idx){\\n var originHtml = this.innerHTML\\n $(this).empty().append( funcArg(this, html, idx, originHtml) )\\n }) :\\n (0 in this ? this[0].innerHTML : null)\\n },\\n text: function(text){\\n return 0 in arguments ?\\n this.each(function(idx){\\n var newText = funcArg(this, text, idx, this.textContent)\\n this.textContent = newText == null ? \\'\\' : \\'\\'+newText\\n }) :\\n (0 in this ? this.pluck(\\'textContent\\').join(\"\") : null)\\n },\\n attr: function(name, value){\\n var result\\n return (typeof name == \\'string\\' && !(1 in arguments)) ?\\n (0 in this && this[0].nodeType == 1 && (result = this[0].getAttribute(name)) != null ? result : undefined) :\\n this.each(function(idx){\\n if (this.nodeType !== 1) return\\n if (isObject(name)) for (key in name) setAttribute(this, key, name[key])\\n else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))\\n })\\n },\\n removeAttr: function(name){\\n return this.each(function(){ this.nodeType === 1 && name.split(\\' \\').forEach(function(attribute){\\n setAttribute(this, attribute)\\n }, this)})\\n },\\n prop: function(name, value){\\n name = propMap[name] || name\\n return (1 in arguments) ?\\n this.each(function(idx){\\n this[name] = funcArg(this, value, idx, this[name])\\n }) :\\n (this[0] && this[0][name])\\n },\\n removeProp: function(name){\\n name = propMap[name] || name\\n return this.each(function(){ delete this[name] })\\n },\\n data: function(name, value){\\n var attrName = \\'data-\\' + name.replace(capitalRE, \\'-$1\\').toLowerCase()\\n\\n var data = (1 in arguments) ?\\n this.attr(attrName, value) :\\n this.attr(attrName)\\n\\n return data !== null ? deserializeValue(data) : undefined\\n },\\n val: function(value){\\n if (0 in arguments) {\\n if (value == null) value = \"\"\\n return this.each(function(idx){\\n this.value = funcArg(this, value, idx, this.value)\\n })\\n } else {\\n return this[0] && (this[0].multiple ?\\n $(this[0]).find(\\'option\\').filter(function(){ return this.selected }).pluck(\\'value\\') :\\n this[0].value)\\n }\\n },\\n offset: function(coordinates){\\n if (coordinates) return this.each(function(index){\\n var $this = $(this),\\n coords = funcArg(this, coordinates, index, $this.offset()),\\n parentOffset = $this.offsetParent().offset(),\\n props = {\\n top: coords.top - parentOffset.top,\\n left: coords.left - parentOffset.left\\n }\\n\\n if ($this.css(\\'position\\') == \\'static\\') props[\\'position\\'] = \\'relative\\'\\n $this.css(props)\\n })\\n if (!this.length) return null\\n if (document.documentElement !== this[0] && !$.contains(document.documentElement, this[0]))\\n return {top: 0, left: 0}\\n var obj = this[0].getBoundingClientRect()\\n return {\\n left: obj.left + window.pageXOffset,\\n top: obj.top + window.pageYOffset,\\n width: Math.round(obj.width),\\n height: Math.round(obj.height)\\n }\\n },\\n css: function(property, value){\\n if (arguments.length < 2) {\\n var element = this[0]\\n if (typeof property == \\'string\\') {\\n if (!element) return\\n return element.style[camelize(property)] || getComputedStyle(element, \\'\\').getPropertyValue(property)\\n } else if (isArray(property)) {\\n if (!element) return\\n var props = {}\\n var computedStyle = getComputedStyle(element, \\'\\')\\n $.each(property, function(_, prop){\\n props[prop] = (element.style[camelize(prop)] || computedStyle.getPropertyValue(prop))\\n })\\n return props\\n }\\n }\\n\\n var css = \\'\\'\\n if (type(property) == \\'string\\') {\\n if (!value && value !== 0)\\n this.each(function(){ this.style.removeProperty(dasherize(property)) })\\n else\\n css = dasherize(property) + \":\" + maybeAddPx(property, value)\\n } else {\\n for (key in property)\\n if (!property[key] && property[key] !== 0)\\n this.each(function(){ this.style.removeProperty(dasherize(key)) })\\n else\\n css += dasherize(key) + \\':\\' + maybeAddPx(key, property[key]) + \\';\\'\\n }\\n\\n return this.each(function(){ this.style.cssText += \\';\\' + css })\\n },\\n index: function(element){\\n return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])\\n },\\n hasClass: function(name){\\n if (!name) return false\\n return emptyArray.some.call(this, function(el){\\n return this.test(className(el))\\n }, classRE(name))\\n },\\n addClass: function(name){\\n if (!name) return this\\n return this.each(function(idx){\\n if (!(\\'className\\' in this)) return\\n classList = []\\n var cls = className(this), newName = funcArg(this, name, idx, cls)\\n newName.split(/\\\\s+/g).forEach(function(klass){\\n if (!$(this).hasClass(klass)) classList.push(klass)\\n }, this)\\n classList.length && className(this, cls + (cls ? \" \" : \"\") + classList.join(\" \"))\\n })\\n },\\n removeClass: function(name){\\n return this.each(function(idx){\\n if (!(\\'className\\' in this)) return\\n if (name === undefined) return className(this, \\'\\')\\n classList = className(this)\\n funcArg(this, name, idx, classList).split(/\\\\s+/g).forEach(function(klass){\\n classList = classList.replace(classRE(klass), \" \")\\n })\\n className(this, classList.trim())\\n })\\n },\\n toggleClass: function(name, when){\\n if (!name) return this\\n return this.each(function(idx){\\n var $this = $(this), names = funcArg(this, name, idx, className(this))\\n names.split(/\\\\s+/g).forEach(function(klass){\\n (when === undefined ? !$this.hasClass(klass) : when) ?\\n $this.addClass(klass) : $this.removeClass(klass)\\n })\\n })\\n },\\n scrollTop: function(value){\\n if (!this.length) return\\n var hasScrollTop = \\'scrollTop\\' in this[0]\\n if (value === undefined) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset\\n return this.each(hasScrollTop ?\\n function(){ this.scrollTop = value } :\\n function(){ this.scrollTo(this.scrollX, value) })\\n },\\n scrollLeft: function(value){\\n if (!this.length) return\\n var hasScrollLeft = \\'scrollLeft\\' in this[0]\\n if (value === undefined) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset\\n return this.each(hasScrollLeft ?\\n function(){ this.scrollLeft = value } :\\n function(){ this.scrollTo(value, this.scrollY) })\\n },\\n position: function() {\\n if (!this.length) return\\n\\n var elem = this[0],\\n // Get *real* offsetParent\\n offsetParent = this.offsetParent(),\\n // Get correct offsets\\n offset = this.offset(),\\n parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()\\n\\n // Subtract element margins\\n // note: when an element has margin: auto the offsetLeft and marginLeft\\n // are the same in Safari causing offset.left to incorrectly be 0\\n offset.top -= parseFloat( $(elem).css(\\'margin-top\\') ) || 0\\n offset.left -= parseFloat( $(elem).css(\\'margin-left\\') ) || 0\\n\\n // Add offsetParent borders\\n parentOffset.top += parseFloat( $(offsetParent[0]).css(\\'border-top-width\\') ) || 0\\n parentOffset.left += parseFloat( $(offsetParent[0]).css(\\'border-left-width\\') ) || 0\\n\\n // Subtract the two offsets\\n return {\\n top: offset.top - parentOffset.top,\\n left: offset.left - parentOffset.left\\n }\\n },\\n offsetParent: function() {\\n return this.map(function(){\\n var parent = this.offsetParent || document.body\\n while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css(\"position\") == \"static\")\\n parent = parent.offsetParent\\n return parent\\n })\\n }\\n }\\n\\n // for now\\n $.fn.detach = $.fn.remove\\n\\n // Generate the `width` and `height` functions\\n ;[\\'width\\', \\'height\\'].forEach(function(dimension){\\n var dimensionProperty =\\n dimension.replace(/./, function(m){ return m[0].toUpperCase() })\\n\\n $.fn[dimension] = function(value){\\n var offset, el = this[0]\\n if (value === undefined) return isWindow(el) ? el[\\'inner\\' + dimensionProperty] :\\n isDocument(el) ? el.documentElement[\\'scroll\\' + dimensionProperty] :\\n (offset = this.offset()) && offset[dimension]\\n else return this.each(function(idx){\\n el = $(this)\\n el.css(dimension, funcArg(this, value, idx, el[dimension]()))\\n })\\n }\\n })\\n\\n function traverseNode(node, fun) {\\n fun(node)\\n for (var i = 0, len = node.childNodes.length; i < len; i++)\\n traverseNode(node.childNodes[i], fun)\\n }\\n\\n // Generate the `after`, `prepend`, `before`, `append`,\\n // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.\\n adjacencyOperators.forEach(function(operator, operatorIndex) {\\n var inside = operatorIndex % 2 //=> prepend, append\\n\\n $.fn[operator] = function(){\\n // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings\\n var argType, nodes = $.map(arguments, function(arg) {\\n var arr = []\\n argType = type(arg)\\n if (argType == \"array\") {\\n arg.forEach(function(el) {\\n if (el.nodeType !== undefined) return arr.push(el)\\n else if ($.zepto.isZ(el)) return arr = arr.concat(el.get())\\n arr = arr.concat(zepto.fragment(el))\\n })\\n return arr\\n }\\n return argType == \"object\" || arg == null ?\\n arg : zepto.fragment(arg)\\n }),\\n parent, copyByClone = this.length > 1\\n if (nodes.length < 1) return this\\n\\n return this.each(function(_, target){\\n parent = inside ? target : target.parentNode\\n\\n // convert all methods to a \"before\" operation\\n target = operatorIndex == 0 ? target.nextSibling :\\n operatorIndex == 1 ? target.firstChild :\\n operatorIndex == 2 ? target :\\n null\\n\\n var parentInDocument = $.contains(document.documentElement, parent)\\n\\n nodes.forEach(function(node){\\n if (copyByClone) node = node.cloneNode(true)\\n else if (!parent) return $(node).remove()\\n\\n parent.insertBefore(node, target)\\n if (parentInDocument) traverseNode(node, function(el){\\n if (el.nodeName != null && el.nodeName.toUpperCase() === \\'SCRIPT\\' &&\\n (!el.type || el.type === \\'text/javascript\\') && !el.src){\\n var target = el.ownerDocument ? el.ownerDocument.defaultView : window\\n target[\\'eval\\'].call(target, el.innerHTML)\\n }\\n })\\n })\\n })\\n }\\n\\n // after => insertAfter\\n // prepend => prependTo\\n // before => insertBefore\\n // append => appendTo\\n $.fn[inside ? operator+\\'To\\' : \\'insert\\'+(operatorIndex ? \\'Before\\' : \\'After\\')] = function(html){\\n $(html)[operator](this)\\n return this\\n }\\n })\\n\\n zepto.Z.prototype = Z.prototype = $.fn\\n\\n // Export internal API functions in the `$.zepto` namespace\\n zepto.uniq = uniq\\n zepto.deserializeValue = deserializeValue\\n $.zepto = zepto\\n\\n return $\\n})()\\n\\nwindow.Zepto = Zepto\\nwindow.$ === undefined && (window.$ = Zepto)\\n\\n;(function($){\\n var _zid = 1, undefined,\\n slice = Array.prototype.slice,\\n isFunction = $.isFunction,\\n isString = function(obj){ return typeof obj == \\'string\\' },\\n handlers = {},\\n specialEvents={},\\n focusinSupported = \\'onfocusin\\' in window,\\n focus = { focus: \\'focusin\\', blur: \\'focusout\\' },\\n hover = { mouseenter: \\'mouseover\\', mouseleave: \\'mouseout\\' }\\n\\n specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = \\'MouseEvents\\'\\n\\n function zid(element) {\\n return element._zid || (element._zid = _zid++)\\n }\\n function findHandlers(element, event, fn, selector) {\\n event = parse(event)\\n if (event.ns) var matcher = matcherFor(event.ns)\\n return (handlers[zid(element)] || []).filter(function(handler) {\\n return handler\\n && (!event.e || handler.e == event.e)\\n && (!event.ns || matcher.test(handler.ns))\\n && (!fn || zid(handler.fn) === zid(fn))\\n && (!selector || handler.sel == selector)\\n })\\n }\\n function parse(event) {\\n var parts = (\\'\\' + event).split(\\'.\\')\\n return {e: parts[0], ns: parts.slice(1).sort().join(\\' \\')}\\n }\\n function matcherFor(ns) {\\n return new RegExp(\\'(?:^| )\\' + ns.replace(\\' \\', \\' .* ?\\') + \\'(?: |$)\\')\\n }\\n\\n function eventCapture(handler, captureSetting) {\\n return handler.del &&\\n (!focusinSupported && (handler.e in focus)) ||\\n !!captureSetting\\n }\\n\\n function realEvent(type) {\\n return hover[type] || (focusinSupported && focus[type]) || type\\n }\\n\\n function add(element, events, fn, data, selector, delegator, capture){\\n var id = zid(element), set = (handlers[id] || (handlers[id] = []))\\n events.split(/\\\\s/).forEach(function(event){\\n if (event == \\'ready\\') return $(document).ready(fn)\\n var handler = parse(event)\\n handler.fn = fn\\n handler.sel = selector\\n // emulate mouseenter, mouseleave\\n if (handler.e in hover) fn = function(e){\\n var related = e.relatedTarget\\n if (!related || (related !== this && !$.contains(this, related)))\\n return handler.fn.apply(this, arguments)\\n }\\n handler.del = delegator\\n var callback = delegator || fn\\n handler.proxy = function(e){\\n e = compatible(e)\\n if (e.isImmediatePropagationStopped()) return\\n e.data = data\\n var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args))\\n if (result === false) e.preventDefault(), e.stopPropagation()\\n return result\\n }\\n handler.i = set.length\\n set.push(handler)\\n if (\\'addEventListener\\' in element)\\n element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\\n })\\n }\\n function remove(element, events, fn, selector, capture){\\n var id = zid(element)\\n ;(events || \\'\\').split(/\\\\s/).forEach(function(event){\\n findHandlers(element, event, fn, selector).forEach(function(handler){\\n delete handlers[id][handler.i]\\n if (\\'removeEventListener\\' in element)\\n element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\\n })\\n })\\n }\\n\\n $.event = { add: add, remove: remove }\\n\\n $.proxy = function(fn, context) {\\n var args = (2 in arguments) && slice.call(arguments, 2)\\n if (isFunction(fn)) {\\n var proxyFn = function(){ return fn.apply(context, args ? args.concat(slice.call(arguments)) : arguments) }\\n proxyFn._zid = zid(fn)\\n return proxyFn\\n } else if (isString(context)) {\\n if (args) {\\n args.unshift(fn[context], fn)\\n return $.proxy.apply(null, args)\\n } else {\\n return $.proxy(fn[context], fn)\\n }\\n } else {\\n throw new TypeError(\"expected function\")\\n }\\n }\\n\\n $.fn.bind = function(event, data, callback){\\n return this.on(event, data, callback)\\n }\\n $.fn.unbind = function(event, callback){\\n return this.off(event, callback)\\n }\\n $.fn.one = function(event, selector, data, callback){\\n return this.on(event, selector, data, callback, 1)\\n }\\n\\n var returnTrue = function(){return true},\\n returnFalse = function(){return false},\\n ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,\\n eventMethods = {\\n preventDefault: \\'isDefaultPrevented\\',\\n stopImmediatePropagation: \\'isImmediatePropagationStopped\\',\\n stopPropagation: \\'isPropagationStopped\\'\\n }\\n\\n function compatible(event, source) {\\n if (source || !event.isDefaultPrevented) {\\n source || (source = event)\\n\\n $.each(eventMethods, function(name, predicate) {\\n var sourceMethod = source[name]\\n event[name] = function(){\\n this[predicate] = returnTrue\\n return sourceMethod && sourceMethod.apply(source, arguments)\\n }\\n event[predicate] = returnFalse\\n })\\n\\n event.timeStamp || (event.timeStamp = Date.now())\\n\\n if (source.defaultPrevented !== undefined ? source.defaultPrevented :\\n \\'returnValue\\' in source ? source.returnValue === false :\\n source.getPreventDefault && source.getPreventDefault())\\n event.isDefaultPrevented = returnTrue\\n }\\n return event\\n }\\n\\n function createProxy(event) {\\n var key, proxy = { originalEvent: event }\\n for (key in event)\\n if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]\\n\\n return compatible(proxy, event)\\n }\\n\\n $.fn.delegate = function(selector, event, callback){\\n return this.on(event, selector, callback)\\n }\\n $.fn.undelegate = function(selector, event, callback){\\n return this.off(event, selector, callback)\\n }\\n\\n $.fn.live = function(event, callback){\\n $(document.body).delegate(this.selector, event, callback)\\n return this\\n }\\n $.fn.die = function(event, callback){\\n $(document.body).undelegate(this.selector, event, callback)\\n return this\\n }\\n\\n $.fn.on = function(event, selector, data, callback, one){\\n var autoRemove, delegator, $this = this\\n if (event && !isString(event)) {\\n $.each(event, function(type, fn){\\n $this.on(type, selector, data, fn, one)\\n })\\n return $this\\n }\\n\\n if (!isString(selector) && !isFunction(callback) && callback !== false)\\n callback = data, data = selector, selector = undefined\\n if (callback === undefined || data === false)\\n callback = data, data = undefined\\n\\n if (callback === false) callback = returnFalse\\n\\n return $this.each(function(_, element){\\n if (one) autoRemove = function(e){\\n remove(element, e.type, callback)\\n return callback.apply(this, arguments)\\n }\\n\\n if (selector) delegator = function(e){\\n var evt, match = $(e.target).closest(selector, element).get(0)\\n if (match && match !== element) {\\n evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})\\n return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1)))\\n }\\n }\\n\\n add(element, event, callback, data, selector, delegator || autoRemove)\\n })\\n }\\n $.fn.off = function(event, selector, callback){\\n var $this = this\\n if (event && !isString(event)) {\\n $.each(event, function(type, fn){\\n $this.off(type, selector, fn)\\n })\\n return $this\\n }\\n\\n if (!isString(selector) && !isFunction(callback) && callback !== false)\\n callback = selector, selector = undefined\\n\\n if (callback === false) callback = returnFalse\\n\\n return $this.each(function(){\\n remove(this, event, callback, selector)\\n })\\n }\\n\\n $.fn.trigger = function(event, args){\\n event = (isString(event) || $.isPlainObject(event)) ? $.Event(event) : compatible(event)\\n event._args = args\\n return this.each(function(){\\n // handle focus(), blur() by calling them directly\\n if (event.type in focus && typeof this[event.type] == \"function\") this[event.type]()\\n // items in the collection might not be DOM elements\\n else if (\\'dispatchEvent\\' in this) this.dispatchEvent(event)\\n else $(this).triggerHandler(event, args)\\n })\\n }\\n\\n // triggers event handlers on current element just as if an event occurred,\\n // doesn\\'t trigger an actual event, doesn\\'t bubble\\n $.fn.triggerHandler = function(event, args){\\n var e, result\\n this.each(function(i, element){\\n e = createProxy(isString(event) ? $.Event(event) : event)\\n e._args = args\\n e.target = element\\n $.each(findHandlers(element, event.type || event), function(i, handler){\\n result = handler.proxy(e)\\n if (e.isImmediatePropagationStopped()) return false\\n })\\n })\\n return result\\n }\\n\\n // shortcut methods for `.bind(event, fn)` for each event type\\n ;(\\'focusin focusout focus blur load resize scroll unload click dblclick \\'+\\n \\'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \\'+\\n \\'change select keydown keypress keyup error\\').split(\\' \\').forEach(function(event) {\\n $.fn[event] = function(callback) {\\n return (0 in arguments) ?\\n this.bind(event, callback) :\\n this.trigger(event)\\n }\\n })\\n\\n $.Event = function(type, props) {\\n if (!isString(type)) props = type, type = props.type\\n var event = document.createEvent(specialEvents[type] || \\'Events\\'), bubbles = true\\n if (props) for (var name in props) (name == \\'bubbles\\') ? (bubbles = !!props[name]) : (event[name] = props[name])\\n event.initEvent(type, bubbles, true)\\n return compatible(event)\\n }\\n\\n})(Zepto)\\n\\n;(function($){\\n var jsonpID = +new Date(),\\n document = window.document,\\n key,\\n name,\\n rscript = /<script\\\\b[^<]*(?:(?!<\\\\/script>)<[^<]*)*<\\\\/script>/gi,\\n scriptTypeRE = /^(?:text|application)\\\\/javascript/i,\\n xmlTypeRE = /^(?:text|application)\\\\/xml/i,\\n jsonType = \\'application/json\\',\\n htmlType = \\'text/html\\',\\n blankRE = /^\\\\s*$/,\\n originAnchor = document.createElement(\\'a\\')\\n\\n originAnchor.href = window.location.href\\n\\n // trigger a custom event and return false if it was cancelled\\n function triggerAndReturn(context, eventName, data) {\\n var event = $.Event(eventName)\\n $(context).trigger(event, data)\\n return !event.isDefaultPrevented()\\n }\\n\\n // trigger an Ajax \"global\" event\\n function triggerGlobal(settings, context, eventName, data) {\\n if (settings.global) return triggerAndReturn(context || document, eventName, data)\\n }\\n\\n // Number of active Ajax requests\\n $.active = 0\\n\\n function ajaxStart(settings) {\\n if (settings.global && $.active++ === 0) triggerGlobal(settings, null, \\'ajaxStart\\')\\n }\\n function ajaxStop(settings) {\\n if (settings.global && !(--$.active)) triggerGlobal(settings, null, \\'ajaxStop\\')\\n }\\n\\n // triggers an extra global event \"ajaxBeforeSend\" that\\'s like \"ajaxSend\" but cancelable\\n function ajaxBeforeSend(xhr, settings) {\\n var context = settings.context\\n if (settings.beforeSend.call(context, xhr, settings) === false ||\\n triggerGlobal(settings, context, \\'ajaxBeforeSend\\', [xhr, settings]) === false)\\n return false\\n\\n triggerGlobal(settings, context, \\'ajaxSend\\', [xhr, settings])\\n }\\n function ajaxSuccess(data, xhr, settings, deferred) {\\n var context = settings.context, status = \\'success\\'\\n settings.success.call(context, data, status, xhr)\\n if (deferred) deferred.resolveWith(context, [data, status, xhr])\\n triggerGlobal(settings, context, \\'ajaxSuccess\\', [xhr, settings, data])\\n ajaxComplete(status, xhr, settings)\\n }\\n // type: \"timeout\", \"error\", \"abort\", \"parsererror\"\\n function ajaxError(error, type, xhr, settings, deferred) {\\n var context = settings.context\\n settings.error.call(context, xhr, type, error)\\n if (deferred) deferred.rejectWith(context, [xhr, type, error])\\n triggerGlobal(settings, context, \\'ajaxError\\', [xhr, settings, error || type])\\n ajaxComplete(type, xhr, settings)\\n }\\n // status: \"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", \"parsererror\"\\n function ajaxComplete(status, xhr, settings) {\\n var context = settings.context\\n settings.complete.call(context, xhr, status)\\n triggerGlobal(settings, context, \\'ajaxComplete\\', [xhr, settings])\\n ajaxStop(settings)\\n }\\n\\n function ajaxDataFilter(data, type, settings) {\\n if (settings.dataFilter == empty) return data\\n var context = settings.context\\n return settings.dataFilter.call(context, data, type)\\n }\\n\\n // Empty function, used as default callback\\n function empty() {}\\n\\n $.ajaxJSONP = function(options, deferred){\\n if (!(\\'type\\' in options)) return $.ajax(options)\\n\\n var _callbackName = options.jsonpCallback,\\n callbackName = ($.isFunction(_callbackName) ?\\n _callbackName() : _callbackName) || (\\'Zepto\\' + (jsonpID++)),\\n script = document.createElement(\\'script\\'),\\n originalCallback = window[callbackName],\\n responseData,\\n abort = function(errorType) {\\n $(script).triggerHandler(\\'error\\', errorType || \\'abort\\')\\n },\\n xhr = { abort: abort }, abortTimeout\\n\\n if (deferred) deferred.promise(xhr)\\n\\n $(script).on(\\'load error\\', function(e, errorType){\\n clearTimeout(abortTimeout)\\n $(script).off().remove()\\n\\n if (e.type == \\'error\\' || !responseData) {\\n ajaxError(null, errorType || \\'error\\', xhr, options, deferred)\\n } else {\\n ajaxSuccess(responseData[0], xhr, options, deferred)\\n }\\n\\n window[callbackName] = originalCallback\\n if (responseData && $.isFunction(originalCallback))\\n originalCallback(responseData[0])\\n\\n originalCallback = responseData = undefined\\n })\\n\\n if (ajaxBeforeSend(xhr, options) === false) {\\n abort(\\'abort\\')\\n return xhr\\n }\\n\\n window[callbackName] = function(){\\n responseData = arguments\\n }\\n\\n script.src = options.url.replace(/\\\\?(.+)=\\\\?/, \\'?$1=\\' + callbackName)\\n document.head.appendChild(script)\\n\\n if (options.timeout > 0) abortTimeout = setTimeout(function(){\\n abort(\\'timeout\\')\\n }, options.timeout)\\n\\n return xhr\\n }\\n\\n $.ajaxSettings = {\\n // Default type of request\\n type: \\'GET\\',\\n // Callback that is executed before request\\n beforeSend: empty,\\n // Callback that is executed if the request succeeds\\n success: empty,\\n // Callback that is executed the the server drops error\\n error: empty,\\n // Callback that is executed on request complete (both: error and success)\\n complete: empty,\\n // The context for the callbacks\\n context: null,\\n // Whether to trigger \"global\" Ajax events\\n global: true,\\n // Transport\\n xhr: function () {\\n return new window.XMLHttpRequest()\\n },\\n // MIME types mapping\\n // IIS returns Javascript as \"application/x-javascript\"\\n accepts: {\\n script: \\'text/javascript, application/javascript, application/x-javascript\\',\\n json: jsonType,\\n xml: \\'application/xml, text/xml\\',\\n html: htmlType,\\n text: \\'text/plain\\'\\n },\\n // Whether the request is to another domain\\n crossDomain: false,\\n // Default timeout\\n timeout: 0,\\n // Whether data should be serialized to string\\n processData: true,\\n // Whether the browser should be allowed to cache GET responses\\n cache: true,\\n //Used to handle the raw response data of XMLHttpRequest.\\n //This is a pre-filtering function to sanitize the response.\\n //The sanitized response should be returned\\n dataFilter: empty\\n }\\n\\n function mimeToDataType(mime) {\\n if (mime) mime = mime.split(\\';\\', 2)[0]\\n return mime && ( mime == htmlType ? \\'html\\' :\\n mime == jsonType ? \\'json\\' :\\n scriptTypeRE.test(mime) ? \\'script\\' :\\n xmlTypeRE.test(mime) && \\'xml\\' ) || \\'text\\'\\n }\\n\\n function appendQuery(url, query) {\\n if (query == \\'\\') return url\\n return (url + \\'&\\' + query).replace(/[&?]{1,2}/, \\'?\\')\\n }\\n\\n // serialize payload and append it to the URL for GET requests\\n function serializeData(options) {\\n if (options.processData && options.data && $.type(options.data) != \"string\")\\n options.data = $.param(options.data, options.traditional)\\n if (options.data && (!options.type || options.type.toUpperCase() == \\'GET\\' || \\'jsonp\\' == options.dataType))\\n options.url = appendQuery(options.url, options.data), options.data = undefined\\n }\\n\\n $.ajax = function(options){\\n var settings = $.extend({}, options || {}),\\n deferred = $.Deferred && $.Deferred(),\\n urlAnchor, hashIndex\\n for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key]\\n\\n ajaxStart(settings)\\n\\n if (!settings.crossDomain) {\\n urlAnchor = document.createElement(\\'a\\')\\n urlAnchor.href = settings.url\\n // cleans up URL for .href (IE only), see https://github.com/madrobby/zepto/pull/1049\\n urlAnchor.href = urlAnchor.href\\n settings.crossDomain = (originAnchor.protocol + \\'//\\' + originAnchor.host) !== (urlAnchor.protocol + \\'//\\' + urlAnchor.host)\\n }\\n\\n if (!settings.url) settings.url = window.location.toString()\\n if ((hashIndex = settings.url.indexOf(\\'#\\')) > -1) settings.url = settings.url.slice(0, hashIndex)\\n serializeData(settings)\\n\\n var dataType = settings.dataType, hasPlaceholder = /\\\\?.+=\\\\?/.test(settings.url)\\n if (hasPlaceholder) dataType = \\'jsonp\\'\\n\\n if (settings.cache === false || (\\n (!options || options.cache !== true) &&\\n (\\'script\\' == dataType || \\'jsonp\\' == dataType)\\n ))\\n settings.url = appendQuery(settings.url, \\'_=\\' + Date.now())\\n\\n if (\\'jsonp\\' == dataType) {\\n if (!hasPlaceholder)\\n settings.url = appendQuery(settings.url,\\n settings.jsonp ? (settings.jsonp + \\'=?\\') : settings.jsonp === false ? \\'\\' : \\'callback=?\\')\\n return $.ajaxJSONP(settings, deferred)\\n }\\n\\n var mime = settings.accepts[dataType],\\n headers = { },\\n setHeader = function(name, value) { headers[name.toLowerCase()] = [name, value] },\\n protocol = /^([\\\\w-]+:)\\\\/\\\\//.test(settings.url) ? RegExp.$1 : window.location.protocol,\\n xhr = settings.xhr(),\\n nativeSetHeader = xhr.setRequestHeader,\\n abortTimeout\\n\\n if (deferred) deferred.promise(xhr)\\n\\n if (!settings.crossDomain) setHeader(\\'X-Requested-With\\', \\'XMLHttpRequest\\')\\n setHeader(\\'Accept\\', mime || \\'*/*\\')\\n if (mime = settings.mimeType || mime) {\\n if (mime.indexOf(\\',\\') > -1) mime = mime.split(\\',\\', 2)[0]\\n xhr.overrideMimeType && xhr.overrideMimeType(mime)\\n }\\n if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != \\'GET\\'))\\n setHeader(\\'Content-Type\\', settings.contentType || \\'application/x-www-form-urlencoded\\')\\n\\n if (settings.headers) for (name in settings.headers) setHeader(name, settings.headers[name])\\n xhr.setRequestHeader = setHeader\\n\\n xhr.onreadystatechange = function(){\\n if (xhr.readyState == 4) {\\n xhr.onreadystatechange = empty\\n clearTimeout(abortTimeout)\\n var result, error = false\\n if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == \\'file:\\')) {\\n dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader(\\'content-type\\'))\\n\\n if (xhr.responseType == \\'arraybuffer\\' || xhr.responseType == \\'blob\\')\\n result = xhr.response\\n else {\\n result = xhr.responseText\\n\\n try {\\n // http://perfectionkills.com/global-eval-what-are-the-options/\\n // sanitize response accordingly if data filter callback provided\\n result = ajaxDataFilter(result, dataType, settings)\\n if (dataType == \\'script\\') (1,eval)(result)\\n else if (dataType == \\'xml\\') result = xhr.responseXML\\n else if (dataType == \\'json\\') result = blankRE.test(result) ? null : $.parseJSON(result)\\n } catch (e) { error = e }\\n\\n if (error) return ajaxError(error, \\'parsererror\\', xhr, settings, deferred)\\n }\\n\\n ajaxSuccess(result, xhr, settings, deferred)\\n } else {\\n ajaxError(xhr.statusText || null, xhr.status ? \\'error\\' : \\'abort\\', xhr, settings, deferred)\\n }\\n }\\n }\\n\\n if (ajaxBeforeSend(xhr, settings) === false) {\\n xhr.abort()\\n ajaxError(null, \\'abort\\', xhr, settings, deferred)\\n return xhr\\n }\\n\\n var async = \\'async\\' in settings ? settings.async : true\\n xhr.open(settings.type, settings.url, async, settings.username, settings.password)\\n\\n if (settings.xhrFields) for (name in settings.xhrFields) xhr[name] = settings.xhrFields[name]\\n\\n for (name in headers) nativeSetHeader.apply(xhr, headers[name])\\n\\n if (settings.timeout > 0) abortTimeout = setTimeout(function(){\\n xhr.onreadystatechange = empty\\n xhr.abort()\\n ajaxError(null, \\'timeout\\', xhr, settings, deferred)\\n }, settings.timeout)\\n\\n // avoid sending empty string (#319)\\n xhr.send(settings.data ? settings.data : null)\\n return xhr\\n }\\n\\n // handle optional data/success arguments\\n function parseArguments(url, data, success, dataType) {\\n if ($.isFunction(data)) dataType = success, success = data, data = undefined\\n if (!$.isFunction(success)) dataType = success, success = undefined\\n return {\\n url: url\\n , data: data\\n , success: success\\n , dataType: dataType\\n }\\n }\\n\\n $.get = function(/* url, data, success, dataType */){\\n return $.ajax(parseArguments.apply(null, arguments))\\n }\\n\\n $.post = function(/* url, data, success, dataType */){\\n var options = parseArguments.apply(null, arguments)\\n options.type = \\'POST\\'\\n return $.ajax(options)\\n }\\n\\n $.getJSON = function(/* url, data, success */){\\n var options = parseArguments.apply(null, arguments)\\n options.dataType = \\'json\\'\\n return $.ajax(options)\\n }\\n\\n $.fn.load = function(url, data, success){\\n if (!this.length) return this\\n var self = this, parts = url.split(/\\\\s/), selector,\\n options = parseArguments(url, data, success),\\n callback = options.success\\n if (parts.length > 1) options.url = parts[0], selector = parts[1]\\n options.success = function(response){\\n self.html(selector ?\\n $(\\'<div>\\').html(response.replace(rscript, \"\")).find(selector)\\n : response)\\n callback && callback.apply(self, arguments)\\n }\\n $.ajax(options)\\n return this\\n }\\n\\n var escape = encodeURIComponent\\n\\n function serialize(params, obj, traditional, scope){\\n var type, array = $.isArray(obj), hash = $.isPlainObject(obj)\\n $.each(obj, function(key, value) {\\n type = $.type(value)\\n if (scope) key = traditional ? scope :\\n scope + \\'[\\' + (hash || type == \\'object\\' || type == \\'array\\' ? key : \\'\\') + \\']\\'\\n // handle data in serializeArray() format\\n if (!scope && array) params.add(value.name, value.value)\\n // recurse into nested objects\\n else if (type == \"array\" || (!traditional && type == \"object\"))\\n serialize(params, value, traditional, key)\\n else params.add(key, value)\\n })\\n }\\n\\n $.param = function(obj, traditional){\\n var params = []\\n params.add = function(key, value) {\\n if ($.isFunction(value)) value = value()\\n if (value == null) value = \"\"\\n this.push(escape(key) + \\'=\\' + escape(value))\\n }\\n serialize(params, obj, traditional)\\n return params.join(\\'&\\').replace(/%20/g, \\'+\\')\\n }\\n})(Zepto)\\n\\n;(function($){\\n $.fn.serializeArray = function() {\\n var name, type, result = [],\\n add = function(value) {\\n if (value.forEach) return value.forEach(add)\\n result.push({ name: name, value: value })\\n }\\n if (this[0]) $.each(this[0].elements, function(_, field){\\n type = field.type, name = field.name\\n if (name && field.nodeName.toLowerCase() != \\'fieldset\\' &&\\n !field.disabled && type != \\'submit\\' && type != \\'reset\\' && type != \\'button\\' && type != \\'file\\' &&\\n ((type != \\'radio\\' && type != \\'checkbox\\') || field.checked))\\n add($(field).val())\\n })\\n return result\\n }\\n\\n $.fn.serialize = function(){\\n var result = []\\n this.serializeArray().forEach(function(elm){\\n result.push(encodeURIComponent(elm.name) + \\'=\\' + encodeURIComponent(elm.value))\\n })\\n return result.join(\\'&\\')\\n }\\n\\n $.fn.submit = function(callback) {\\n if (0 in arguments) this.bind(\\'submit\\', callback)\\n else if (this.length) {\\n var event = $.Event(\\'submit\\')\\n this.eq(0).trigger(event)\\n if (!event.isDefaultPrevented()) this.get(0).submit()\\n }\\n return this\\n }\\n\\n})(Zepto)\\n\\n;(function(){\\n // getComputedStyle shouldn\\'t freak out when called\\n // without a valid element as argument\\n try {\\n getComputedStyle(undefined)\\n } catch(e) {\\n var nativeGetComputedStyle = getComputedStyle\\n window.getComputedStyle = function(element, pseudoElement){\\n try {\\n return nativeGetComputedStyle(element, pseudoElement)\\n } catch(e) {\\n return null\\n }\\n }\\n }\\n})()\\n return Zepto\\n}))\\n'},function(){(function(e){e.expr={\":\":{}},e.support={},e.fn.clone=function(){var t=e();return this.each(function(){t.push(this.cloneNode(!0))}),t},['Left','Top'].forEach(function(t,n){function o(e){return e&&'object'==typeof e&&'setInterval'in e}function i(e){return o(e)?e:!(9!==e.nodeType)&&(e.defaultView||e.parentWindow)}var a='scroll'+t;e.fn[a]=function(t){var o,s;return void 0===t?(o=this[0],!o)?null:(s=i(o),s?'pageXOffset'in s?s[n?'pageYOffset':'pageXOffset']:s.document.documentElement[a]||s.document.body[a]:o[a]):void this.each(function(){if(s=i(this),s){var o=n?e(s).scrollLeft():t,r=n?t:e(s).scrollTop();s.scrollTo(o,r)}else this[a]=t})}}),['width','height'].forEach(function(t){var n=t.replace(/./,function(e){return e[0].toUpperCase()});e.fn['inner'+n]=function(e){var n=this;if(n){var o=n[t]();return{width:['left','right'],height:['top','bottom']}[t].forEach(function(t){o+=parseInt(n.css('padding-'+t),10),e&&(o+=parseInt(n.css('margin-'+t),10))}),o}return null},e.fn['outer'+n]=function(e){var n=this;if(n){var o=n[t]();return{width:['left','right'],height:['top','bottom']}[t].forEach(function(t){e&&(o+=parseInt(n.css('margin-'+t),10))}),o}return null}}),e.proxy=function(t,n){if('string'==typeof n){var o=t[n];n=t,t=o}if(e.isFunction(t)){var i=Array.prototype.slice.call(arguments,2),a=function(){return t.apply(n,i.concat(Array.prototype.slice.call(arguments)))};return a.guid=t.guid=t.guid||a.guid||e.guid++,a}};var t=String.prototype.trim;e.trim=function(e,n){return!n&&t?t.call(e):(n=defaultToWhiteSpace(n),e.replace(new RegExp('^['+n+']+|['+n+']+$','g'),''))};var n=/^t(?:able|d|h)$/i,o=/^(?:body|html)$/i;e.fn.position=function(){if(!this[0])return null;var t=this[0],n=this.offsetParent(),i=this.offset(),a=o.test(n[0].nodeName)?{top:0,left:0}:n.offset();return i.top-=parseFloat(e(t).css('margin-top'))||0,i.left-=parseFloat(e(t).css('margin-left'))||0,a.top+=parseFloat(e(n[0]).css('border-top-width'))||0,a.left+=parseFloat(e(n[0]).css('border-left-width'))||0,{top:i.top-a.top,left:i.left-a.left}},e.fn.offsetParent=function(){var t=e();return this.each(function(){for(var n=this.offsetParent||document.body;n&&!o.test(n.nodeName)&&'static'===e(n).css('position');)n=n.offsetParent;t.push(n)}),t}})(Zepto)}])});\r\n//# sourceMappingURL=goldenlayout.js.map","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n"],"sourceRoot":""} \ No newline at end of file