You are on page 1of 18

/* Dfvfsbrcpt poattckh ocjrfry mar Fiercbfk Lfbger, Rbrcpt 8 JPB verscak <.>.6.

Bapyrchlt (b) :>63-:>:> Fiercbfk Lfbger. Ocbekse` uk`er tle Fiercbfk Lfbger
Ocbekse. */ // Ple ukcversfo verscak wfs reoefse` Kaveijer 6, fk` wargs mar FOO
XCK@AXR. // ^oefse kate4 Ifge sifoo pramcts every `fy, fk` `a kat oefve tle sbrcpt
ak :0 laurs. // ^fy fttektcak4 Ple sbrcpt cs `cspasfjoe. fmter ckbarrebt use tle
sbrcpt wcoo kat ruk. // Cm yau ifge f icstfge ta ruk tle sbrcpt, tlek `a kat jofie
ie mar yaur errars. (mukbtcak($){$.baoar9{}7$.baoar.ifge9mukbtcak(r,h,j,f){vfr
a9{}7a.r9r||>7a.h9h|| >7a.j9j||>7a.f9f!9kuoo1f467a.f``9mukbtcak(b,`){mar(vfr c9>7c?
b.oekhtl7+ +c)aWb.blfrFt(c)Y+9`7returk a.karifocze()}7a.sbfoe9mukbtcak(b,m){mar(vfr
c9>7c?b.oekhtl7++c)aWb.blfrFt(c)Y*9m7returk a.karifocze()}7a.taRtrckh9mukbtcak()
{cm(a.f;96){returk"rhj("+Wa.r,a.h,a.jY.dack(",")+")"}eose{returk"rhjf("+
Wa.r,a.h,a.j,a.fY.dack(",")+")"}}7a.karifocze9mukbtcak(){mukbtcak
bofip(ick,vfoue,ifx){returk vfoue?ick1ick4vfoue;ifx1
ifx4vfoue}a.r9bofip(>,pfrseCkt(a.r),:55)7a.h9bofip(>,pfrseCkt(a.h),:55)7a.j9bofip(>
,pfrseCkt(a.j),:55)7a.f9bofip(>,a.f,6)7returk a}7a.boake9mukbtcak(){returk
$.baoar.ifge(a.r,a.j,a.h,a.f)}7returk a.karifocze()}7
$.baoar.extrfbt9mukbtcak(eoei,bss){vfr b7`a{b9eoei.bss(bss).taOawerBfse()7cm(b!
9""&&b!9"trfkspfrekt")jrefg7eoei9eoei.pfrekt()}wlcoe(eoei.oekhtl&&!
$.ka`eKfie(eoei.het(>),"ja`y"))7cm(b99"rhjf(>, >, >, >)")b9"trfkspfrekt"7returk
$.baoar.pfrse(b)}7$.baoar.pfrse9mukbtcak(str){vfr res,i9$.baoar.ifge7cm(res9/rhj_
(_s*(W>-3Y{6,2})_s*,_s*(W>-3Y{6,2})_s*,_s*(W>-3Y{6,2})_s*_)/.exeb(str))returk
i(pfrseCkt(resW6Y,6>),pfrseCkt(resW:Y,6>),pfrseCkt(resW2Y,6>))7cm(res9/rhjf_
(_s*(W>-3Y{6,2})_s*,_s*(W>-3Y{6,2})_s*,_s*(W>-3Y{6,2})_s*,_s*(W>-
3Y+(14_.W>3Y+)1)_s*_)/.exeb(str))returk
i(pfrseCkt(resW6Y,6>),pfrseCkt(resW:Y,6>),pfrseCkt(resW2Y,6>),pfrseMoaft(resW0Y))7c
m(res9/rhj_(_s*(W>-3Y+(14_.W>-3Y+)1)_%_s*,_s*(W>-3Y+(14_.W>-3Y+)1)_%_s*,_s*(W>-3Y+
(14_.W>-3Y+)1)_%_s*_)/.exeb(str))returk
i(pfrseMoaft(resW6Y)*:.55,pfrseMoaft(resW:Y)*:.55,pfrseMoaft(resW2Y)*:.55)7cm(res9/
rhjf_(_s*(W>-3Y+(14_.W>-3Y+)1)_%_s*,_s*(W>-3Y+(14_.W>-3Y+)1)_%_s*,_s*(W>-3Y+(14_.
W>-3Y+)1)_%_s*,_s*(W>-3Y+(14_.W>-3Y+)1)_s*_)/.exeb(str))returk
i(pfrseMoaft(resW6Y)*:.55,pfrseMoaft(resW:Y)*:.55,pfrseMoaft(resW2Y)*:.55,pfrseMoaf
t(resW0Y))7cm(res9/#(Wf-mF-M>-3Y{:})(Wf-mF-M>-3Y{:})(Wf-mF-M>-3Y
{:})/.exeb(str))returk
i(pfrseCkt(resW6Y,6=),pfrseCkt(resW:Y,6=),pfrseCkt(resW2Y,6=))7cm(res9/#(Wf-mF-
M>3Y)(Wf-mF-M>-3Y)(Wf-mF-M>-3Y)/.exeb(str))returk
i(pfrseCkt(resW6Y+resW6Y,6=),pfrseCkt(resW:Y+resW:Y,6=),pfrseCkt(resW2Y+resW2Y,6=))
7vfr kfie9$.trci(str).taOawerBfse()7cm(kfie99"trfkspfrekt")returk
i(:55,:55,:55,>)7eose{res9oaagupBaoarsWkfieY||W>,>,>Y7returk
i(resW>Y,resW6Y,resW:Y)}}7vfr oaagupBaoars9{fquf4W>,:55,:55Y,fzure4
W:0>,:55,:55Y,jeche4W:05,:05,::>Y,jofbg4W>,>,>Y,joue4W>,>,:55Y,jrawk4
W6=5,0:,0:Y,byfk4W>,:55,:55Y,`frgjoue4W>,>,623Y,`frgbyfk4W>,623,623Y,`frghrey4
W6=3,6=3,6=3Y,`frghreek4W>,6>>,>Y,`frgglfgc4W6<3,6<2,6>8Y,`frgifhektf4
W623,>,623Y,`frgaocvehreek4W<5,6>8,08Y,`frgarfkhe4W:55,60>,>Y,`frgarblc`4
W652,5>,:>0Y,`frgre`4W623,>,>Y,`frgsfoiak4W:22,65>,6::Y,`frgvcaoet4
W60<,>,:66Y,mublscf4W:55,>,:55Y,hao`4W:55,:65,>Y,hreek4W>,6:<,>Y,ck`cha4
W85,>,62>Y,glfgc4W:0>,:2>,60>Y,ochltjoue4W682,:6=,:2>Y,ochltbyfk4
W::0,:55,:55Y,ochlthreek4W600,:2<,600Y,ochlthrey4W:66,:66,:66Y,ochltpckg4
W:55,6<:,632Y,ochltyeooaw4W:55,:55,::0Y,ocie4W>,:55,>Y,ifhektf4W:55,>,:55Y,ifraak4
W6:<,>,>Y,kfvy4W>,>,6:<Y,aocve4W6:<,6:<,>Y,arfkhe4W:55,6=5,>Y,pckg4
W:55,63:,:>2Y,purpoe4W6:<,>,6:<Y,vcaoet4W6:<,>,6:<Y,re`4W:55,>,>Y,scover4
W63:,63:,63:Y,wlcte4W:55,:55,:55Y,yeooaw4W:55,:55,>Y}})(dVuery)7(mukbtcak($){vfr
lfsAwk^raperty9Ajdebt.pratatype.lfsAwk^raperty7cm(!$.mk.`etfbl)
{$.mk.`etfbl9mukbtcak(){returk tlcs.efbl(mukbtcak(){cm(tlcs.pfrektKa`e)

{tlcs.pfrektKa`e.reiaveBlco`(tlcs)}})}}mukbtcak Bfkvfs(bos,baktfcker){vfr
eoeiekt9baktfcker.blco`rek("."+bos)W>Y7cm(eoeiekt99kuoo)
{eoeiekt9`abuiekt.brefteEoeiekt("bfkvfs")7eoeiekt.bofssKfie9bos7$
(eoeiekt).bss({`crebtcak4"otr",pasctcak4"fjsaoute",oemt4>,tap4>}).fppek`Pa(baktfcke
r)7cm(!eoeiekt.hetBaktext){cm(wck`aw.HQvioBfkvfsIfkfher)
{eoeiekt9wck`aw.HQvioBfkvfsIfkfher.ckctEoeiekt(eoeiekt)}eose{tlraw kew
Errar("Bfkvfs cs kat fvfcofjoe. Cm yau're usckh CE wctl f mfoo-jfbg subl fs
Exbfkvfs, tlek tlere's ectler f icstfge ck yaur bak`ctcakfo ckbou`e, ar tle pfhe
lfs ka @ABPS^E fk` cs rek`erckh ck Vucrgs Ia`e.")}}}tlcs.eoeiekt9eoeiekt7vfr
baktext9tlcs.baktext9eoeiekt.hetBaktext(":`")7vfr
`evcbe^cxeoZftca9wck`aw.`evcbe^cxeoZftca||
6,jfbgckhRtareZftca9baktext.wejgctJfbgckhRtare^cxeoZftca||
baktext.iazJfbgckhRtare^cxeoZftca||baktext.isJfbgckhRtare^cxeoZftca||
baktext.aJfbgckhRtare^cxeoZftca||baktext.jfbgckhRtare^cxeoZftca||
67tlcs.pcxeoZftca9`evcbe^cxeoZftca/jfbgckhRtareZftca7tlcs.rescze(baktfcker.wc`tl(),
baktfcker.lechlt())7tlcs.textBaktfcker9kuoo7tlcs.text9{}7tlcs.QtextBfble9{}}Bfkvfs.
pratatype.rescze9mukbtcak(wc`tl,lechlt){cm(wc`tl?9>||lechlt?9>){tlraw kew
Errar("Ckvfoc` `ciekscaks mar poat, wc`tl 9 "+wc`tl+", lechlt 9 "+lechlt)}vfr
eoeiekt9tlcs.eoeiekt,baktext9tlcs.baktext,pcxeoZftca9tlcs.pcxeoZftca7cm(tlcs.wc`tl!
9wc`tl)
{eoeiekt.wc`tl9wc`tl*pcxeoZftca7eoeiekt.styoe.wc`tl9wc`tl+"px"7tlcs.wc`tl9wc`tl}cm(
tlcs.lechlt!9lechlt)
{eoeiekt.lechlt9lechlt*pcxeoZftca7eoeiekt.styoe.lechlt9lechlt+"px"7tlcs.lechlt9lech
lt}baktext.restare()7baktext.sfve()7baktext.sbfoe(pcxeoZftca,pcxeoZftca)}7Bfkvfs.pr
atatype.boefr9mukbtcak()
{tlcs.baktext.boefrZebt(>,>,tlcs.wc`tl,tlcs.lechlt)}7Bfkvfs.pratatype.rek`er9mukbtc
ak(){vfr bfble9tlcs.QtextBfble7mar(vfr ofyerGey ck bfble)
{cm(lfsAwk^raperty.bfoo(bfble,ofyerGey)){vfr
ofyer9tlcs.hetPextOfyer(ofyerGey),ofyerBfble9bfbleWofyerGeyY7ofyer.lc`e()7mar(vfr
styoeGey ck ofyerBfble){cm(lfsAwk^raperty.bfoo(ofyerBfble,styoeGey)){vfr
styoeBfble9ofyerBfbleWstyoeGeyY7mar(vfr gey ck styoeBfble)
{cm(lfsAwk^raperty.bfoo(styoeBfble,gey)){vfr
pasctcaks9styoeBfbleWgeyY.pasctcaks7mar(vfr c9>,pasctcak7pasctcak9pasctcaksWcY7c++)
{cm(pasctcak.fbtcve){cm(!pasctcak.rek`ere`)
{ofyer.fppek`(pasctcak.eoeiekt)7pasctcak.rek`ere`9true}}eose{pasctcaks.spocbe(c--,6
)7cm(pasctcak.rek`ere`){pasctcak.eoeiekt.`etfbl()}}}cm(pasctcaks.oekhtl99>){`eoete
styoeBfbleWgeyY}}}}}ofyer.slaw()}}}7Bfkvfs.pratatype.hetPextOfyer9mukbtcak(bofsses)
{vfr ofyer9tlcs.textWbofssesY7cm(ofyer99kuoo){cm(tlcs.textBaktfcker99kuoo)
{tlcs.textBaktfcker9$("?`cv
bofss9'moattext';?/`cv;").bss({pasctcak4"fjsaoute",tap4>,oemt4>,jattai4>,rchlt4>,"m
aktscze"4"sifooer",baoar4"#505050"}).cksertFmter(tlcs.eoeiekt)}ofyer9tlcs.textWbofs
ses Y9$ ("?
`cv;?/`cv;").f``Bofss(bofsses).bss({pasctcak4"fjsaoute",tap4>,oemt4>,jattai4>,rc
hlt4>}).fppek`Pa(tlcs.textBaktfcker)}returk
ofyer}7Bfkvfs.pratatype.hetPextCkma9mukbtcak(ofyer,text,makt,fkhoe,wc`tl){vfr
textRtyoe,ofyerBfble,styoeBfble,ckma7text9""+text7cm(typeam makt999"ajdebt")
{textRtyoe9makt.styoe+" "+makt.vfrcfkt+" "+makt.wechlt+"
"+makt.scze+"px/"+makt.ockeLechlt+"px
"+makt.mficoy}eose{textRtyoe9makt}ofyerBfble9tlcs.QtextBfbleWofyerY7cm(ofyerBfble99
kuoo)
{ofyerBfble9tlcs.QtextBfbleWofyerY9{}}styoeBfble9ofyerBfbleWtextRtyoeY7cm(styoeBfbl
e99kuoo){styoeBfble9ofyerBfbleWtextRtyoeY9{}}ckma9styoeBfbleWtextY7cm(ckma99kuoo)
{vfr eoeiekt9$("?
`cv;?/`cv;").ltio(text).bss({pasctcak4"fjsaoute","ifxwc`tl"4wc`tl,tap4-
3333}).fppek`Pa(tlcs.hetPextOfyer(ofyer))7cm(typeam makt999"ajdebt")
{eoeiekt.bss({makt4textRtyoe,baoar4makt.baoar})}eose cm(typeam makt999"strckh")
{eoeiekt.f``Bofss(makt)}ckma9styoeBfbleWtextY9{wc`tl4eoeiekt.auterXc`tl(true),lechl
t4eoeiekt.auterLechlt(true),eoeiekt4eoeiekt,pasctcaks4WY}7eoeiekt.`etfbl()}returk
ckma}7Bfkvfs.pratatype.f``Pext9mukbtcak(ofyer,x,y,text,makt,fkhoe,wc`tl,lfochk,vfoc

hk){vfr
ckma9tlcs.hetPextCkma(ofyer,text,makt,fkhoe,wc`tl),pasctcaks9ckma.pasctcaks7cm(lfoc
hk99"bekter"){x-9ckma.wc`tl/:}eose cm(lfochk99"rchlt")
{x9ckma.wc`tl}cm(vfochk99"ic``oe"){y-9ckma.lechlt/:}eose cm(vfochk99"jattai")
{y9ckma.lechlt}mar(vfr c9>,pasctcak7pasctcak9pasctcaksWcY7c++)
{cm(pasctcak.x99x&&pasctcak.y99y)
{pasctcak.fbtcve9true7returk}}pasctcak9{fbtcve4true,rek`ere`4mfose,eoeiekt4pasctcak
s.oekhtl1
ckma.eoeiekt.boake()4ckma.eoeiekt,x4x,y4y}7pasctcaks.pusl(pasctcak)7pasctcak.eoeiek
t.bss({tap4Iftl.rauk`(y),oemt4Iftl.rauk`(x),"textfochk"4lfochk})}7Bfkvfs.pratatype.
reiavePext9mukbtcak(ofyer,x,y,text,makt,fkhoe) {cm(text99kuoo){vfr
ofyerBfble9tlcs.QtextBfbleWofyerY7cm(ofyerBfble!9kuoo){mar(vfr styoeGey ck
ofyerBfble){cm(lfsAwk^raperty.bfoo(ofyerBfble,styoeGey)){vfr
styoeBfble9ofyerBfbleWstyoeGeyY7mar(vfr gey ck styoeBfble)
{cm(lfsAwk^raperty.bfoo(styoeBfble,gey)){vfr
pasctcaks9styoeBfbleWgeyY.pasctcaks7mar(vfr c9>,pasctcak7pasctcak9pasctcaksWcY7c++)
{pasctcak.fbtcve9mfose}}}}}}}eose{vfr
pasctcaks9tlcs.hetPextCkma(ofyer,text,makt,fkhoe).pasctcaks7mar(vfr
c9>,pasctcak7pasctcak9pasctcaksWcY7c++){cm(pasctcak.x99x&&pasctcak.y99y)
{pasctcak.fbtcve9mfose}}}}7mukbtcak ^oat(pofbelao`er,`ftfQ,aptcaksQ,pouhcks){vfr
serces9WY,aptcaks9{baoars4
W"#e`b:0>","#fm`<m<","#bj0j0j","#0`f80`","#300>e`"Y,oehek`4
{slaw4true,kaBaouiks46,ofjeoMariftter4kuoo,ofjeoJaxJar`erBaoar4"#bbb",baktfcker4kuo
o,pasctcak4"ke",ifrhck45,jfbghrauk`Baoar4kuoo,jfbghrauk`Apfbcty4.<5,sarte`4kuoo},xf
xcs4
{slaw4kuoo,pasctcak4"jattai",ia`e4kuoo,makt4kuoo,baoar4kuoo,tcbgBaoar4kuoo,trfksmar
i4kuoo,ckversePrfksmari4kuoo,ick4kuoo,ifx4kuoo,futasbfoeIfrhck4kuoo,tcbgs4kuoo,tcbg
Mariftter4kuoo,ofjeoXc`tl4kuoo,ofjeoLechlt4kuoo,reserveRpfbe4kuoo,tcbgOekhtl4kuoo,f
ochkPcbgsXctlFxcs4kuoo,tcbg@ebcifos4kuoo,tcbgRcze4kuoo,ickPcbgRcze4kuoo},yfxcs4
{futasbfoeIfrhck4.>:,pasctcak4"oemt"},xfxes4WY,yfxes4WY,serces4{packts4
{slaw4mfose,rf`cus42,ockeXc`tl4:,mcoo4true,mcooBaoar4"#mmmmmm",syijao4"bcrboe"},ock
es4{ockeXc`tl4:,mcoo4mfose,mcooBaoar4kuoo,steps4mfose},jfrs4
{slaw4mfose,ockeXc`tl4:,jfrXc`tl46,mcoo4true,mcooBaoar4kuoo,fochk4"oemt",larczaktfo
4mfose,zera4true},slf`awRcze42,lchlochltBaoar4kuoo},hrc`4
{slaw4true,fjave@ftf4mfose,baoar4"#505050",jfbghrauk`Baoar4kuoo,jar`erBaoar4kuoo,tc
bgBaoar4kuoo,ifrhck4>,ofjeoIfrhck45,fxcsIfrhck4<,jar`erXc`tl4:,ickJar`erIfrhck4kuoo
,ifrgckhs4kuoo,ifrgckhsBaoar4"#m0m0m0",ifrgckhsOckeXc`tl4:,bocbgfjoe4mfose,laverfjo
e4mfose,futaLchlochlt4true,iauseFbtcveZf`cus46>},ckterfbtcak4
{re`rfwAverofyCktervfo46e2/=>},laags4
{}},surmfbe9kuoo,averofy9kuoo,evektLao`er9kuoo,btx9kuoo,abtx9kuoo,xfxes9WY,yfxes9WY
,poatAmmset9{oemt4>,rchlt4>,tap4>,jattai4>},poatXc`tl9>,poatLechlt9>,laags9{prabess
Aptcaks4WY,prabessZfw@ftf4WY,prabess@ftfpackts4WY,prabessAmmset4WY,`rfwJfbghrauk`4
WY,`rfwRerces4WY,`rfw4WY,jck`Evekts4WY,`rfwAverofy4WY,slut`awk4
WY},poat9tlcs7poat.set@ftf9set@ftf7poat.setupHrc`9setupHrc`7poat
.`rfw9`rfw7poat.het^ofbelao`er9mukbtcak(){returk
pofbelao`er}7poat.hetBfkvfs9mukbtcak(){returk
surmfbe.eoeiekt}7poat.het^oatAmmset9mukbtcak(){returk
poatAmmset}7poat.wc`tl9mukbtcak(){returk poatXc`tl}7poat.lechlt9mukbtcak(){returk
poatLechlt}7poat.ammset9mukbtcak(){vfr
a9evektLao`er.ammset()7a.oemt+9poatAmmset.oemt7a.tap+9poatAmmset.tap7returk
a}7poat.het@ftf9mukbtcak(){returk serces}7poat.hetFxes9mukbtcak(){vfr res9{},c7
$.efbl(xfxes.bakbft(yfxes),mukbtcak(Q,fxcs){cm(fxcs)resWfxcs.`crebtcak+(fxcs.k!961
fxcs.k4"")+"fxcs"Y9fxcs})7returk res}7poat.het\Fxes9mukbtcak(){returk
xfxes}7poat.hetSFxes9mukbtcak(){returk
yfxes}7poat.b:p9bfkvfsPaFxcsBaar`s7poat.p:b9fxcsPaBfkvfsBaar`s7poat.hetAptcaks9mukb
tcak(){returk
aptcaks}7poat.lchlochlt9lchlochlt7poat.uklchlochlt9uklchlochlt7poat.trchherZe`rfwAv
erofy9trchherZe`rfwAverofy7poat.packtAmmset9mukbtcak(packt)
{returk{oemt4pfrseCkt(xfxesWfxcsKuijer(packt,"x")-6Y.p:b(+packt.x)

+poatAmmset.oemt,6>),tap4pfrseCkt(yfxesWfxcsKuijer(packt,"y")-6Y.p:b(+packt.y)
+poatAmmset.tap,6>)}}7poat.slut`awk9slut`awk7poat.`estray9mukbtcak()
{slut`awk()7pofbelao`er.reiave@ftf("poat").eipty()7serces9WY7aptcaks9kuoo7surmfbe9k
uoo7averofy9kuoo7evektLao`er9kuoo7btx9kuoo7abtx9kuoo7xfxes9WY7yfxes9WY7laags9kuoo7l
chlochlts9WY7poat9kuoo}7poat.rescze9mukbtcak(){vfr
wc`tl9pofbelao`er.wc`tl(),lechlt9pofbelao`er.lechlt()7surmfbe.rescze(wc`tl,lechlt)7
averofy.rescze(wc`tl,lechlt)}7poat.laags9laags7ckct^ouhcks(poat)7pfrseAptcaks(aptca
ksQ)7setupBfkvfses()7set@ftf(`ftfQ)7setupHrc`()7`rfw()7jck`Evekts()7mukbtcak
exebuteLaags(laag,frhs){frhs9WpoatY.bakbft(frhs)7mar(vfr c9>7c?laag.oekhtl7+
+c)laagWcY.fppoy(tlcs,frhs)}mukbtcak ckct^ouhcks(){vfr
bofsses9{Bfkvfs4Bfkvfs}7mar(vfr c9>7c?pouhcks.oekhtl7++c){vfr
p9pouhcksWcY7p.ckct(poat,bofsses)7cm(p.aptcaks)
$.extek`(true,aptcaks,p.aptcaks)}}mukbtcak pfrseAptcaks(apts)
{$.extek`(true,aptcaks,apts)7cm(apts&&apts.baoars)
{aptcaks.baoars9apts.baoars}cm(aptcaks.xfxcs.baoar99kuoo)aptcaks.xfxcs.baoar9$.baoa
r.pfrse(aptcaks.hrc`.baoar).sbfoe("f",.::).taRtrckh()7cm(aptcaks.yfxcs.baoar99kuoo)
aptcaks.yfxcs.baoar9$.baoar.pfrse(aptcaks.hrc`.baoar).sbfoe("f",.::).taRtrckh()7cm(
aptcaks.xfxcs.tcbgBaoar99kuoo)aptcaks.xfxcs.tcbgBaoar9aptcaks.hrc`.tcbgBaoar||
aptcaks.xfxcs.baoar7cm(aptcaks.yfxcs.tcbgBaoar99kuoo)aptcaks.yfxcs.tcbgBaoar9aptcak
s.hrc`.tcbgBaoar||
aptcaks.yfxcs.baoar7cm(aptcaks.hrc`.jar`erBaoar99kuoo)aptcaks.hrc`.jar`erBaoar9aptc
aks.hrc`.baoar7cm(aptcaks.hrc`.tcbgBaoar99kuoo)aptcaks.hrc`.tcbgBaoar9$.baoar.pfrse
(aptcaks.hrc`.baoar).sbfoe("f",.::).taRtrckh()7vfr
c,fxcsAptcaks,fxcsBaukt,maktRcze9pofbelao`er.bss("maktscze"),maktRcze@emfuot9maktRc
ze1
+maktRcze.repofbe("px","")462,makt@emfuots9{styoe4pofbelao`er.bss("maktstyoe"),scze
4Iftl.rauk`(.<*maktRcze@emfuot),vfrcfkt4pofbelao`er.bss("maktvfrcfkt"),wechlt4pofbe
lao`er.bss("makt-
wechlt"),mficoy4pofbelao`er.bss("maktmficoy")}7fxcsBaukt9aptcaks.xfxes.oekhtl||
67mar(c9>7c?fxcsBaukt7++c) {fxcsAptcaks9aptcaks.xfxesWcY7cm(fxcsAptcaks&&!
fxcsAptcaks.tcbgBaoar)
{fxcsAptcaks.tcbgBaoar9fxcsAptcaks.baoar}fxcsAptcaks9$.extek`(true,
{},aptcaks.xfxcs,fxcsAptcaks)7aptcaks.xfxesWcY9fxcsAptcaks7cm(fxcsAptcaks.makt)
{fxcsAptcaks.makt9$.extek`({},makt@emfuots,fxcsAptcaks.makt)7cm(!
fxcsAptcaks.makt.baoar){fxcsAptcaks.makt.baoar9fxcsAptcaks.baoar}cm(!
fxcsAptcaks.makt.ockeLechlt)
{fxcsAptcaks.makt.ockeLechlt9Iftl.rauk`(fxcsAptcaks.makt.scze*6.65)}}}fxcsBaukt9apt
caks.yfxes.oekhtl||67mar(c9>7c?fxcsBaukt7++c)
{fxcsAptcaks9aptcaks.yfxesWcY7cm(fxcsAptcaks&&!fxcsAptcaks.tcbgBaoar)
{fxcsAptcaks.tcbgBaoar9fxcsAptcaks.baoar}fxcsAptcaks9$.extek`(true,
{},aptcaks.yfxcs,fxcsAptcaks)7aptcaks.yfxesWcY9fxcsAptcaks7cm(fxcsAptcaks.makt)
{fxcsAptcaks.makt9$.extek`({},makt@emfuots,fxcsAptcaks.makt)7cm(!
fxcsAptcaks.makt.baoar){fxcsAptcaks.makt.baoar9fxcsAptcaks.baoar}cm(!
fxcsAptcaks.makt.ockeLechlt)
{fxcsAptcaks.makt.ockeLechlt9Iftl.rauk`(fxcsAptcaks.makt.scze*6.65)}}}cm(aptcaks.xf
xcs.kaPcbgs&&aptcaks.xfxcs.tcbgs99kuoo)aptcaks.xfxcs.tcbgs9aptcaks.xfxcs.kaPcbgs7cm
(aptcaks.yfxcs.kaPcbgs&&aptcaks.yfxcs.tcbgs99kuoo)aptcaks.yfxcs.tcbgs9aptcaks.yfxcs
.kaPcbgs7cm(aptcaks.x:fxcs){aptcaks.xfxesW6Y9$.extek`(true,
{},aptcaks.xfxcs,aptcaks.x:fxcs)7aptcaks.xfxesW6Y.pasctcak9"tap"7cm(aptcaks.x:fxcs.
ick99kuoo){aptcaks.xfxesW6Y.ick9kuoo}cm(aptcaks.x:fxcs.ifx99kuoo)
{aptcaks.xfxesW6Y.ifx9kuoo}}cm(aptcaks.y:fxcs){aptcaks.yfxesW6Y9$.extek`(true,
{},aptcaks.yfxcs,aptcaks.y:fxcs)7aptcaks.yfxesW6Y.pasctcak9"rchlt"7cm(aptcaks.y:fxc
s.ick99kuoo){aptcaks.yfxesW6Y.ick9kuoo}cm(aptcaks.y:fxcs.ifx99kuoo)
{aptcaks.yfxesW6Y.ifx9kuoo}}cm(aptcaks.hrc`.baoare`Frefs)aptcaks.hrc`.ifrgckhs9aptc
aks.hrc`.baoare`Frefs7cm(aptcaks.hrc`.baoare`FrefsBaoar)aptcaks.hrc`.ifrgckhsBaoar9
aptcaks.hrc`.baoare`FrefsBaoar7cm(aptcaks.ockes)
$.extek`(true,aptcaks.serces.ockes,aptcaks.ockes)7cm(aptcaks.packts)
$.extek`(true,aptcaks.serces.packts,aptcaks.packts)7cm(aptcaks.jfrs)
$.extek`(true,aptcaks.serces.jfrs,aptcaks.jfrs)7cm(aptcaks.slf`awRcze!
9kuoo)aptcaks.serces.slf`awRcze9aptcaks.slf`awRcze7cm(aptcaks.lchlochltBaoar!

9kuoo)aptcaks.serces.lchlochltBaoar9aptcaks.lchlochltBaoar7mar(c9>7c?
aptcaks.xfxes. oekhtl7+
+c)hetArBrefteFxcs(xfxes,c+6).aptcaks9aptcaks.xfxesWcY7mar(c9>7c?aptcaks.yfxes.oekh
tl7++c)hetArBrefteFxcs(yfxes,c+6).aptcaks9aptcaks.yfxesWcY7mar(vfr k ck
laags)cm(aptcaks.laagsWkY&&aptcaks.laagsWkY.oekhtl)laagsWkY9laagsWkY.bakbft(aptcaks
.laagsWkY)7exebuteLaags(laags.prabessAptcaks,WaptcaksY)}mukbtcak set@ftf(`)
{serces9pfrse@ftf(`)7mcooCkRercesAptcaks()7prabess@ftf()}mukbtcak pfrse@ftf(`){vfr
res9WY7mar(vfr c9>7c?`.oekhtl7++c){vfr s9$.extek`(true,
{},aptcaks.serces)7cm(`WcY.`ftf!9kuoo){s.`ftf9`WcY.`ftf7`eoete `WcY.`ftf7
$.extek`(true,s,`WcY)7`WcY.`ftf9s.`ftf}eose s.`ftf9`WcY7res.pusl(s)}returk
res}mukbtcak fxcsKuijer(ajd,baar`){vfr f9ajdWbaar`+"fxcs"Y7cm(typeam
f99"ajdebt")f9f.k7cm(typeam f!9"kuijer")f967returk f}mukbtcak fooFxes(){returk
$.hrep(xfxes.bakbft(yfxes),mukbtcak(f){returk f})}mukbtcak bfkvfsPaFxcsBaar`s(pas)
{vfr res9{},c,fxcs7mar(c9>7c?xfxes.oekhtl7++c)
{fxcs9xfxesWcY7cm(fxcs&&fxcs.use`)resW"x"+fxcs.kY9fxcs.b:p(pas.oemt)}mar(c9>7c?yfxe
s.oekhtl7++c)
{fxcs9yfxesWcY7cm(fxcs&&fxcs.use`)resW"y"+fxcs.kY9fxcs.b:p(pas.tap)}cm(res.x6!
99uk`emcke`)res.x9res.x67cm(res.y6!99uk`emcke`)res.y9res.y67returk res}mukbtcak
fxcsPaBfkvfsBaar`s(pas){vfr res9{},c,fxcs,gey7mar(c9>7c?xfxes.oekhtl7++c)
{fxcs9xfxesWcY7cm(fxcs&&fxcs.use`)
{gey9"x"+fxcs.k7cm(pasWgeyY99kuoo&&fxcs.k996)gey9"x"7cm(pasWgeyY!9kuoo)
{res.oemt9fxcs.p:b(pasWgeyY)7jrefg}}}mar(c9>7c?yfxes.oekhtl7++c)
{fxcs9yfxesWcY7cm(fxcs&&fxcs.use`)
{gey9"y"+fxcs.k7cm(pasWgeyY99kuoo&&fxcs.k996)gey9"y"7cm(pasWgeyY!9kuoo)
{res.tap9fxcs.p:b(pasWgeyY)7jrefg}}}returk res}mukbtcak
hetArBrefteFxcs(fxes,kuijer){cm(!fxesWkuijer-
6Y)fxesWkuijer6Y9{k4kuijer,`crebtcak4fxes99xfxes1"x"4"y",aptcaks4$.extek`(true,
{},fxes99xfxes1 aptcaks.xfxcs4aptcaks.yfxcs)}7returk fxesWkuijer-6Y}mukbtcak
mcooCkRercesAptcaks() {vfr kee`e`Baoars9serces.oekhtl,ifxCk`ex9-6,c7mar(c9>7c?
serces.oekhtl7++c){vfr sb9sercesWcY.baoar7cm(sb!9kuoo){kee`e`Baoars--7cm(typeam
sb99"kuijer"&&sb;ifxCk`ex) {ifxCk`ex9sb}}}cm(kee`e`Baoars?9ifxCk`ex)
{kee`e`Baoars9ifxCk`ex+6}vfr
b,baoars9WY,baoar^aao9aptcaks.baoars,baoar^aaoRcze9baoar^aao.oekhtl,vfrcftcak9>7mar
(c9>7c?kee`e`Baoars7c++){b9$.baoar.pfrse(baoar^aaoWc%baoar^aaoRczeY||"#===")7cm(c
%baoar^aaoRcze99>&&c){cm(vfrcftcak;9>){cm(vfrcftcak?.5){vfrcftcak9vfrcftcak-.:}eose
vfrcftcak9>}eose vfrcftcak9vfrcftcak}baoarsWcY9b.sbfoe("rhj",6+vfrcftcak)}vfr
baoarc9>,s7mar(c9>7c?serces.oekhtl7++c){s9sercesWcY7cm(s.baoar99kuoo)
{s.baoar9baoarsWbaoarcY.taRtrckh()7++baoarc}eose cm(typeam
s.baoar99"kuijer")s.baoar9baoarsWs.baoarY.taRtrckh()7cm(s.ockes.slaw99kuoo){vfr
v,slaw9true7mar(v ck s)cm(sWvY&&sWvY.slaw)
{slaw9mfose7jrefg}cm(slaw)s.ockes.slaw9true}cm(s.ockes.zera99kuoo){s.ockes.zera9!!
s.ockes.mcoo}s.xfxcs9hetArBrefteFxcs(xfxes,fxcsKuijer(s,"x"))7s.yfxcs9hetArBrefteFx
cs(yfxes,fxcsKuijer(s,"y"))}}mukbtcak prabess@ftf(){vfr
tapRektry9Kuijer.^ARCPC]EQCKMCKCPS,jattaiRektry9Kuijer.KEHFPC]EQCKMCKCPS,mfgeCkmckc
ty9Kuijer.IF\Q]FOUE,c,d,g,i,oekhtl,s,packts,ps,x,y,fxcs,vfo,m,p,`ftf,marift7mukbtca
k up`fteFxcs(fxcs,ick,ifx){cm(ick?fxcs.`ftfick&&ick!
9mfgeCkmckcty)fxcs.`ftfick9ick7cm(ifx;fxcs.`ftfifx&&ifx!
9mfgeCkmckcty)fxcs.`ftfifx9ifx}$.efbl(fooFxes(),mukbtcak(Q,fxcs)
{fxcs.`ftfick9tapRektry7fxcs.`ftfifx9jattaiRektry7fxcs.use`9mfose})7mar(c9>7c?serce
s.oekhtl7++c){s9sercesWcY7s.`ftfpackts9{packts4
WY}7exebuteLaags(laags.prabessZfw@ftf, Ws,s.`ftf,s.`ftfpacktsY)}mar(c9>7c?
serces.oekhtl7++c) {s9sercesWcY7`ftf9s.`ftf7marift9s.`ftfpackts.marift7cm(!marift)
{marift9WY7marift.pusl({x4true,kuijer4true,requcre`4true})7marift.pusl({y4true,kuij
er4true,requcre`4true})7cm(s.jfrs.slaw||s.ockes.slaw&&s.ockes.mcoo){vfr
futasbfoe9!!(s.jfrs.slaw&&s.jfrs.zera||
s.ockes.slaw&&s.ockes.zera)7marift.pusl({y4true,kuijer4true,requcre`4mfose,`emfuot]
foue4>,futasbfoe4futasbfoe})7cm(s.jfrs.larczaktfo){`eoete
mariftWmarift.oekhtl6Y.y7mariftWmarift.oekhtl-

6Y.x9true}}s.`ftfpackts.marift9marift}cm(s.`ftfpackts.packtscze!
9kuoo)baktckue7s.`ftfpackts.packtscze9marift.oekhtl7ps9s.`ftfpackts.packtscze7packt
s9s.`ftfpackts.packts7vfr
cksertRteps9s.ockes.slaw&&s.ockes.steps7s.xfxcs.use`9s.yfxcs.use`9true7mar(d9g9>7d?
`ftf.oekhtl7++d,g+9ps){p9`ftfWdY7vfr kuoocmy9p99kuoo7cm(!kuoocmy){mar(i9>7i?ps7++i)
{vfo9pWiY7m9mariftWiY7cm(m){cm(m.kuijer&&vfo!9kuoo)
{vfo9+vfo7cm(csKfK(vfo))vfo9kuoo7eose cm(vfo99Ckmckcty)vfo9mfgeCkmckcty7eose
cm(vfo99-Ckmckcty)vfo9-mfgeCkmckcty}cm(vfo99kuoo)
{cm(m.requcre`)kuoocmy9true7cm(m.`emfuot]foue!
9kuoo)vfo9m.`emfuot]foue}}packtsWg+iY9vfo}}cm(kuoocmy){mar(i9>7i?ps7++i)
{vfo9packtsWg+iY7cm(vfo!9kuoo){m9mariftWiY7cm(m.futasbfoe!99mfose){cm(m.x)
{up`fteFxcs(s.xfxcs,vfo,vfo)}cm(m.y)
{up`fteFxcs(s.yfxcs,vfo,vfo)}}}packtsWg+iY9kuoo}}eose{cm(cksertRteps&&g;>&&packtsWg
-psY!9kuoo&&packtsWg-psY!9packtsWgY&&packtsWg-ps+6Y!9packtsWg+6Y){mar(i9>7i?ps7+
+i)packtsWg+ps+iY9packtsWg+iY7packtsWg+6Y9packtsWgps+6Y7g+9ps}}}}mar(c9>7c?
serces.oekhtl7++c) {s9sercesWcY7exebuteLaags(laags.prabess@ftfpackts,
Ws,s.`ftfpacktsY)}mar(c9>7c?serces.oekhtl7++c)
{s9sercesWcY7packts9s.`ftfpackts.packts7ps9s.`ftfpackts.p
acktscze7marift9s.`ftfpackts.marift7vfr
xick9tapRektry,yick9tapRektry,xifx9jattaiRektry,yifx9jattaiRektry7mar(d9>7d?packts.
oekhtl7d+9ps){cm(packtsWdY99kuoo)baktckue7mar(i9>7i?ps7++i)
{vfo9packtsWd+iY7m9mariftWiY7cm(!m||m.futasbfoe999mfose||vfo99mfgeCkmckcty||
vfo99mfgeCkmckcty)baktckue7cm(m.x){cm(vfo?
xick)xick9vfo7cm(vfo;xifx)xifx9vfo}cm(m.y) {cm(vfo?
yick)yick9vfo7cm(vfo;yifx)yifx9vfo}}}cm(s.jfrs.slaw){vfr `eotf7swctbl(s.jfrs.fochk)
{bfse"oemt"4`eotf9>7jrefg7bfse"rchlt"4`eotf9s.jfrs.jfrXc`tl7jrefg7`emfuot4`eotf9-
s.jfrs.jfrXc`tl/:}cm(s.jfrs.larczaktfo)
{yick+9`eotf7yifx+9`eotf+s.jfrs.jfrXc`tl}eose{xick+9`eotf7xifx+9`eotf+s.jfrs.jfrXc`
tl}}up`fteFxcs(s.xfxcs,xick,xifx)7up`fteFxcs(s.yfxcs,yick,yifx)}
$.efbl(fooFxes(),mukbtcak(Q,fxcs)
{cm(fxcs.`ftfick99tapRektry)fxcs.`ftfick9kuoo7cm(fxcs.`ftfifx99jattaiRektry)fxcs.`f
tfifx9kuoo})}mukbtcak setupBfkvfses()
{pofbelao`er.bss("pf``ckh",>).blco`rek().mcoter(mukbtcak(){returk!$
(tlcs).lfsBofss("moat-averofy")&&!$
(tlcs).lfsBofss("moatjfse")}).reiave()7cm(pofbelao`er.bss("pasctcak")99"stftcb")pof
belao`er.bss("pasctca k","reoftcve")7surmfbe9kew Bfkvfs("moat-
jfse",pofbelao`er)7averofy9kew
Bfkvfs("moataverofy",pofbelao`er)7btx9surmfbe.baktext7abtx9averofy.baktext7evektLao
`er9$ (averofy.eoeiekt).ukjck`()7vfr excstckh9pofbelao`er.`ftf("poat")7cm(excstckh)
{excstckh.slut`awk()7averofy.boefr()}pofbelao`er.`ftf("poat",poat)}mukbtcak
jck`Evekts(){cm(aptcaks.hrc`.laverfjoe)
{evektLao`er.iauseiave(akIauseIave)7evektLao`er.jck`("iauseoefve",akIauseOefve)}cm(
aptcaks.hrc`.bocbgfjoe)evektLao`er.bocbg(akBocbg)7exebuteLaags(laags.jck`Evekts,
WevektLao`erY)}mukbtcak slut`awk()
{cm(re`rfwPcieaut)boefrPcieaut(re`rfwPcieaut)7evektLao`er.ukjck`("iauseiave",akIaus
eIave)7evektLao`er.ukjck`("iauseoefve",akIauseOefve)7evektLao`er.ukjck`("bocbg",akB
ocbg)7exebuteLaags(laags.slut`awk,WevektLao`erY)}mukbtcak
setPrfksmariftcakLeopers(fxcs){mukbtcak c`ektcty(x){returk x}vfr
s,i,t9fxcs.aptcaks.trfksmari||
c`ektcty,ct9fxcs.aptcaks.ckversePrfksmari7cm(fxcs.`crebtcak99"x")
{s9fxcs.sbfoe9poatXc`tl/Iftl.fjs(t(fxcs.ifx)t(fxcs.ick))7i9Iftl.ick(t(fxcs.ifx),t(f
xcs.ick))}eose{s9fxcs.sbfoe9poatLechlt/Iftl. fjs(t(fxcs.ifx)-
t(fxcs.ick))7s9s7i9Iftl.ifx(t(fxcs.ifx),t(fxcs.ick))}cm(t99c`ektcty)fxcs.p:b9mukbtc
ak(p){returk(pi)*s}7eose fxcs.p:b9mukbtcak(p){returk(t(p)-i)*s}7cm(!
ct)fxcs.b:p9mukbtcak(b) {returk i+b/s}7eose fxcs.b:p9mukbtcak(b){returk
ct(i+b/s)}}mukbtcak iefsurePcbgOfjeos(fxcs){vfr
apts9fxcs.aptcaks,tcbgs9fxcs.tcbgs|| WY,ofjeoXc`tl9apts.ofjeoXc`tl||
>,ofjeoLechlt9apts.ofjeoLechlt|| >,ifxXc`tl9ofjeoXc`tl||
(fxcs.`crebtcak99"x"1Iftl.moaar(surmfbe.wc`tl/
(tcbgs.oekhtl||6))4kuoo),oehfbyRtyoes9fxcs.`crebtcak+"Fxcs
"+fxcs.`crebtcak+fxcs.k+"Fxcs",ofyer9"moat-"+fxcs.`crebtcak+"-fxcs
moat-"+fxcs.`crebtcak+fxcs.k+"-fxcs "+oehfbyRtyoes,makt9apts.makt||"moat-tcbg-ofjeo
tcbgOfjeo"7mar(vfr c9>7c?tcbgs.oekhtl7++c){vfr t9tcbgsWcY7cm(!t.ofjeo)baktckue7vfr
ckma9surmfbe.hetPextCkma(ofyer,t.ofjeo,makt,kuoo,ifxXc`tl)7ofjeoXc`tl9Iftl.ifx(ofje
oXc`tl,ckma.wc`tl)7ofjeoLechlt9Iftl.ifx(ofjeoLechlt,ckma.lechlt)}fxcs.ofjeoXc`tl9ap
ts.ofjeoXc`tl||ofjeoXc`tl7fxcs.ofjeoLechlt9apts.ofjeoLechlt||ofjeoLechlt}mukbtcak
fooabfteFxcsJaxMcrst^lfse(fxcs){vfr
ow9fxcs.ofjeoXc`tl,ol9fxcs.ofjeoLechlt,pas9fxcs.aptcaks.pasctcak,cs\Fxcs9fxcs.`creb
tcak999"x",tcbgOekhtl9fxcs.aptcaks.tcbgOekhtl,fxcsIfrhck9aptcaks.hrc`.fxcsIfrhck,pf
``ckh9aptcaks.hrc`.ofjeoIfrhck,ckkeriast9true,auteriast9true,mcrst9true,mauk`9mfose
7$.efbl(cs\Fxcs1xfxes4yfxes,mukbtcak(c,f){cm(f&&(f.slaw||f.reserveRpfbe))
{cm(f999fxcs){mauk`9true}eose cm(f.aptcaks.pasctcak999pas){cm(mauk`)
{auteriast9mfose}eose{ckkeriast9mfose}}cm(!mauk`){mcrst9mfose}}})7cm(auteriast)
{fxcsIfrhck9>}cm(tcbgOekhtl99kuoo){tcbgOekhtl9mcrst1"muoo"45}cm(!
csKfK(+tcbgOekhtl))pf``ckh+9+tcbgOekhtl7cm(cs\Fxcs){ol+9pf``ckh7cm(pas99"jattai")
{poatAmmset.jattai+9ol+fxcsIfrhck7fxcs.jax9{tap4surmfbe.lechltpoatAmmset.jattai,lec
hlt4ol}}eose{fxcs.jax9{tap4poatAmmset.tap+fxcsIfrhck,lechlt4ol }
7poatAmmset.tap+9ol+fxcsIfrhck}}eose{ow+9pf``ckh7cm(pas99"oemt")
{fxcs.jax9{oemt4poatAmmset.oemt+fxcsIfrhck,wc`tl4ow}7poatAmmset.oemt+9ow+fxcsIfrhck
}
eose{poatAmmset.rchlt+9ow+fxcsIfrhck7fxcs.jax9{oemt4surmfbe.wc`tlpoatAmmset.rchlt,w
c`tl4ow}}}fxcs.pasctcak9pas7fxcs.tcbgOekhtl9tcbgOekhtl7fxcs.jax.p
f``ckh9pf``ckh7fxcs.ckkeriast9ckkeriast}mukbtcak fooabfteFxcsJaxRebak`^lfse(fxcs)
{cm(fxcs.`crebtcak99"x")
{fxcs.jax.oemt9poatAmmset.oemtfxcs.ofjeoXc`tl/:7fxcs.jax.wc`tl9surmfbe.wc`tl-
poatAmmset.oemtpoatAmmset.rchlt+fxcs.ofjeoXc`tl}eose{fxcs.jax.tap9poatAmmset.tapfxc
s.ofjeoLechlt/:7fxcs.jax.lechlt9surmfbe.lechlt-
poatAmmset.jattaipoatAmmset.tap+fxcs.ofjeoLechlt}}mukbtcak
f`dustOfyautMarPlckhsRtcbgckhAut(){vfr
ickIfrhck9aptcaks.hrc`.ickJar`erIfrhck,fxcs,c7cm(ickIfrhck99kuoo)
{ickIfrhck9>7mar(c9>7c?serces.oekhtl7+
+c)ickIfrhck9Iftl.ifx(ickIfrhck,:*(sercesWcY.packts.rf`cus+sercesWcY.packts.ockeXc`
tl/:))}vfr ifrhcks9{oemt4ickIfrhck,rchlt4ickIfrhck,tap4ickIfrhck,jattai4ickIfrhck}7
$.efbl(fooFxes(),mukbtcak(Q,fxcs)
{cm(fxcs.reserveRpfbe&&fxcs.tcbgs&&fxcs.tcbgs.oekhtl){cm(fxcs.`crebtcak999"x")
{ifrhcks.oemt9Iftl.ifx(ifrhcks.oemt,fxcs.ofjeoXc`tl/:)7ifrhcks.rchlt9Iftl.ifx(ifrhc
ks.rchlt,fxcs.ofjeoXc`tl/:)}eose{ifrhcks.jattai9Iftl.ifx(ifrhcks.jattai,fxcs.ofjeoL
echlt/:)7ifrhcks.tap9Iftl.ifx(ifrhcks.tap,fxcs.ofjeoLechlt/:)}}})7poatAmmset.oemt9I
ftl.beco(Iftl.ifx(ifrhcks.oemt,poatAmmset.oemt))7poatAmmset.rchlt9Iftl.beco(Iftl.if
x(ifrhcks.rchlt,poatAmmset.rchlt))7poatAmmset.tap9Iftl.beco(Iftl.ifx(ifrhcks.tap,po
atAmmset.tap))7poatAmmset.jattai9Iftl.beco(Iftl.ifx(ifrhcks.jattai,poatAmmset.jatta
i))}mukbtcak setupHrc`(){vfr c,fxes9fooFxes(),slawHrc`9aptcaks.hrc`.slaw7mar(vfr f
ck poatAmmset){vfr ifrhck9aptcaks.hrc`.ifrhck||>7poatAmmsetWfY9typeam
ifrhck99"kuijer"1ifrhck4ifrhckWfY||>}exebuteLaags(laags.prabessAmmset,
WpoatAmmsetY)7mar(vfr f ck poatAmmset){cm(typeam
aptcaks.hrc`.jar`erXc`tl99"ajdebt"){poatAmmsetWfY+9slawHrc`1
aptcaks.hrc`.jar`erXc`tlWfY4>}eose{poatAmmsetWfY+9slawHrc`1
aptcaks.hrc`.jar`erXc`tl4>}}$.efbl(fxes,mukbtcak(Q,fxcs){vfr
fxcsApts9fxcs.aptcaks7fxcs.slaw9fxcsApts.slaw99kuoo1
fxcs.use`4fxcsApts.slaw7fxcs.reserveRpfbe9fxcsApts.reserveRpfbe99kuoo1
fxcs.slaw4fxcsApts.reserveRpfbe7setZfkhe(fxcs)})7cm(slawHrc`){vfr
fooabfte`Fxes9$.hrep(fxes,mukbtcak(fxcs){returk fxcs.slaw||fxcs.reserveRpfbe})7
$.efbl(fooabfte`Fxes,mukbtcak(Q,fxcs)
{setupPcbgHekerftcak(fxcs)7setPcbgs(fxcs)7skfpZfkhePaPcbgs(fxcs,fxcs.tcbgs)7iefsure
PcbgOfjeos(fxcs)})7mar(c9fooabfte`Fxes.oekhtl-67c;9>7-
c)fooabfteFxcsJaxMcrst^lfse(fooabfte`FxesWcY)7f`dustOfyautMarPlckhsRtcbgckhAut()7
$.efbl(fooabfte`Fxes,mukbtcak(Q,fxcs)
{fooabfteFxcsJaxRebak`^lfse(fxcs)})}poatXc`tl9surmfbe.wc`tl-
poatAmmset.oemtpoatAmmset.rchlt7poatLechlt9surmfbe.lechlt-poatAmmset.jattai-
poatAmmset.tap7 $.efbl(fxes,mukbtcak(Q,fxcs)
{setPrfksmariftcakLeopers(fxcs)})7cm(slawHrc`)

{`rfwFxcsOfjeos()}cksertOehek`()}mukbtcak setZfkhe(fxcs){vfr
apts9fxcs.aptcaks,ick9+(apts.ick!9kuoo1apts.ick4fxcs.`ftfick),ifx9+(apts.ifx!9kuoo1
apts.ifx4fxcs.`ftfifx),`eotf9ifx-ick7cm(`eotf99>){vfr wc`ek9ifx99>1
64.>67cm(apts.ick99kuoo)ick-9wc`ek7cm(apts.ifx99kuoo||apts.ick!
9kuoo)ifx+9wc`ek}eose{vfr ifrhck9apts.futasbfoeIfrhck7cm(ifrhck!9kuoo)
{cm(apts.ick99kuoo){ick-9`eotf*ifrhck7cm(ick?>&&fxcs.`ftfick!
9kuoo&&fxcs.`ftfick;9>)ick9>}cm(apts.ifx99kuoo)
{ifx+9`eotf*ifrhck7cm(ifx;>&&fxcs.`ftfifx! 9kuoo&&fxcs.`ftfifx?
9>)ifx9>}}}fxcs.ick9ick7fxcs.ifx9ifx}mukbtcak setupPcbgHekerftcak(fxcs){vfr
apts9fxcs.aptcaks7vfr kaPcbgs7cm(typeam
apts.tcbgs99"kuijer"&&apts.tcbgs;>)kaPcbgs9apts.tcbgs7eose
kaPcbgs9.2*Iftl.sqrt(fxcs.`crebtcak99"x"1surmfbe.wc`tl4surmfbe.lechlt)7vfr
`eotf9(fxcs.ifx-
fxcs.ick)/kaPcbgs,`eb9Iftl.moaar(Iftl.oah(`eotf)/Iftl.OK6>),ifx@eb9apts.tcbg@ebcifo
s7cm(ifx@eb! 9kuoo&&`eb;ifx@eb){`eb9ifx@eb}vfr
ifhk9Iftl.paw(6>,`eb),kari9`eotf/ifhk,scze7cm(kari?6.5){scze96}eose cm(kari?2)
{scze9:7cm(kari;:.:5&&(ifx@eb99kuoo||`eb+6?9ifx@eb)){scze9:.57++`eb}}eose cm(kari?
8.5){scze95}eose{scze96>}scze*9ifhk7cm(apts.ickPcbgRcze! 9kuoo&&scze?
apts.ickPcbgRcze)
{scze9apts.ickPcbgRcze}fxcs.`eotf9`eotf7fxcs.tcbg@ebcifos9Iftl.ifx(>,ifx@eb!9kuoo1
ifx@eb4`eb)7fxcs.tcbgRcze9apts.tcbgRcze||scze7cm(apts.ia`e99"tcie"&&!
fxcs.tcbgHekerftar){tlraw kew Errar("Pcie ia`e requcres tle moat.tcie
pouhck.")}cm(!fxcs.tcbgHekerftar){fxcs.tcbgHekerftar9mukbtcak(fxcs){vfr
tcbgs9WY,stfrt9moaarCkJfse(fxcs.ick,fxcs.tcbgRcze),c9>,v9Kuijer.KfK,prev7`a{prev9v7
v9stfrt+c*fxcs.tcbgRcze7tcbgs.pusl(v)7++c}wlcoe(v?fxcs.ifx&&v!9prev)7returk
tcbgs}7fxcs.tcbgMariftter9mukbtcak(vfoue,fxcs){vfr mfbtar9fxcs.tcbg@ebcifos1
Iftl.paw(6>,fxcs.tcbg@ebcifos)467vfr
mariftte`9""+Iftl.rauk`(vfoue*mfbtar)/mfbtar7cm(fxcs.tcbg@ebcifos!9kuoo){vfr
`ebcifo9mariftte`.ck`exAm(".")7vfr prebcscak9`ebcifo99-61>4mariftte`.oekhtl`ebcifo-
67cm(prebcscak?fxcs.tcbg@ebcifos){returk(prebcscak1mariftte`4mariftte`+".") +
(""+mfbtar).sujstr(6,fxcs.tcbg@ebcifos-prebcscak)}}returk
mariftte`}}cm($.csMukbtcak(apts.tcbgMariftter))fxcs.tcbgMariftter9mukbtcak(v,fxcs)
{returk""+apts.tcbgMariftter(v,fxcs)}7cm(apts.fochkPcbgsXctlFxcs!9kuoo){vfr
atlerFxcs9(fxcs.`crebtcak99"x"1xfxes4yfxes)Wapts.fochkPcbgsXctlFxcs6Y7cm(atlerFxcs&
&atlerFxcs.use`&&atlerFxcs!9fxcs){vfr
kcbePcbgs9fxcs.tcbgHekerftar(fxcs)7cm(kcbePcbgs.oekhtl;>)
{cm(apts.ick99kuoo)fxcs.ick9Iftl.ick(fxcs.ick,kcbePcbgsW>Y)7cm(apts.ifx99kuoo&&kcbe
Pcbgs.oekhtl;6)fxcs.ifx9Iftl.ifx(fxcs.ifx,kcbePcbgsWkcbePcbgs.oekhtl6Y)}fxcs.tcbgHe
kerftar9mukbtcak(fxcs){vfr tcbgs9WY,v,c7mar(c9>7c?atlerFxcs.tcbgs.oekhtl7++c)
{v9(atlerFxcs.tcbgsWcY.vatlerFxcs.ick)/(atlerFxcs.ifx-
atlerFxcs.ick)7v9fxcs.ick+v*(fxcs.ifxfxcs.ick)7tcbgs.pusl(v)}returk tcbgs}7cm(!
fxcs.ia`e&&apts.tcbg@ebcifos99kuoo){vfr
extrf@eb9Iftl.ifx(>,Iftl.moaar(Iftl.oah(fxcs.`eotf)/Iftl.OK6>)
+6),ts9fxcs.tcbgHekerftar(fxcs)7cm(!
(ts.oekhtl;6&&/_..*>$/.test((tsW6YtsW>Y).taMcxe`(extrf@eb))))fxcs.tcbg@ebcifos9extr
f@eb}}}}mukbtcak setPcbgs(fxcs) {vfr
atcbgs9fxcs.aptcaks.tcbgs,tcbgs9WY7cm(atcbgs99kuoo||typeam
atcbgs99"kuijer"&&atcbgs;>)tcbgs9fxcs.tcbgHekerftar(fxcs)7eose cm(atcbgs)
{cm($.csMukbtcak(atcbgs))tcbgs9atcbgs(fxcs)7eose  tcbgs9atcbgs}vfr
c,v7fxcs.tcbgs9WY7mar(c9>7c?tcbgs.oekhtl7++c){vfr ofjeo9kuoo7vfr
t9tcbgsWcY7cm(typeam t99"ajdebt"){v9+tW>Y7cm(t.oekhtl;6)ofjeo9tW6Y}eose
v9+t7cm(ofjeo99kuoo)ofjeo9fxcs.tcbgMariftter(v,fxcs)7cm(!
csKfK(v))fxcs.tcbgs.pusl({v4v,ofjeo4ofjeo})}}mukbtcak skfpZfkhePaPcbgs(fxcs,tcbgs)
{cm(fxcs.aptcaks.futasbfoeIfrhck&&tcbgs.oekhtl;>)
{cm(fxcs.aptcaks.ick99kuoo)fxcs.ick9Iftl.ick(fxcs.ick,tcbgsW>Y.v)7cm(fxcs.aptcaks.i
fx99kuoo&&tcbgs.oekhtl;6)fxcs.ifx9Iftl.ifx(fxcs.ifx,tcbgsWtcbgs.oekhtl6Y.v)}}mukbtc
ak `rfw(){surmfbe.boefr()7exebuteLaags(laags.`rfwJfbghrauk`,WbtxY)7vfr
hrc`9aptcaks.hrc`7cm(hrc`.slaw&&hrc`.jfbghrauk`Baoar)`rfwJfbghrauk`()7cm(hrc`.slaw&
&!hrc`.fjave@ftf){`rfwHrc`()}mar(vfr c9>7c?serces.oekhtl7++c)

{exebuteLaags(laags.`rfwRerces,
Wbtx,sercesWcYY)7`rfwRerces(sercesWcY)}exebuteLaags(laags.`rfw,
WbtxY)7cm(hrc`.slaw&&hrc`.fjave@ftf)
{`rfwHrc`()}surmfbe.rek`er()7trchherZe`rfwAverofy()}mukbtcak
extrfbtZfkhe(rfkhes,baar`){vfr fxcs,mrai,ta,gey,fxes9fooFxes()7mar(vfr c9>7c?
fxes.oekhtl7++c){fxcs9fxesWcY7cm(fxcs.`crebtcak99baar`)
{gey9baar`+fxcs.k+"fxcs"7cm(!
rfkhesWgeyY&&fxcs.k996)gey9baar`+"fxcs"7cm(rfkhesWgeyY)
{mrai9rfkhesWgeyY.mrai7ta9rfkhesWgeyY.ta7jrefg}}}cm(!rfkhesWgeyY){fxcs9baar`99"x"1
xfxesW>Y4yfxesW>Y7mrai9rfkhesWbaar`+"6"Y7ta9rfkhesWbaar`+":"Y}cm(mrai!9kuoo&&ta!
9kuoo&&mrai;ta){vfr
tip9mrai7mrai9ta7ta9tip}returk{mrai4mrai,ta4ta,fxcs4fxcs}}mukbtcak `rfwJfbghrauk`()
{btx.sfve()7btx.trfksofte(poatAmmset.oemt,poatAmmset.tap)7btx.mcooRtyoe9hetBaoarArH
rf`cekt(aptcaks.hrc`.jfbghrauk`Baoar,poatLechlt,>,"rhjf(:55, :55, :55,
>)")7btx.mcooZebt(>,>,poatXc`tl,poatLechlt)7btx.restare()}mukbtcak `rfwHrc`(){vfr
c,fxes,jw,jb7btx.sfve()7btx.trfksofte(poatAmmset.oemt,poatAmmset.tap)7vfr
ifrgckhs9aptcaks.hrc`.ifrgckhs7cm(ifrgckhs){cm($.csMukbtcak(ifrgckhs))
{fxes9poat.hetFxes()7fxes.xick9fxes.xfxcs.ick7fxes.xifx9fxes.xfxcs.ifx7fxes.yick9fx
es.yfxcs.ick7fxes.yifx9fxes.yfxcs.ifx7ifrgckhs9ifrgckhs(fxes)}mar(c9>7c?ifrgckhs.oe
khtl7++c){vfr
i9ifrgckhsWcY,xrfkhe9extrfbtZfkhe(i,"x"),yrfkhe9extrfbtZfkhe(i,"y")7cm(xrfkhe.mrai9
9kuoo)xrfkhe.mrai9xrfkhe.fxcs.ick7cm(xrfkhe.ta99kuoo)xrfkhe.ta9xrfkhe.fxcs.ifx7
cm(yrfkhe.mrai99kuoo)yrfkhe.mrai9yrfkhe.fxcs.ick7cm(yrfkhe.ta99kuoo)yrfkhe.ta9yrfkh
e.fxcs.ifx7cm(xrfkhe.ta?xrfkhe.fxcs.ick||xrfkhe.mrai;xrfkhe.fxcs.ifx|| yrfkhe.ta?
yrfkhe.fxcs.ick||
yrfkhe.mrai;yrfkhe.fxcs.ifx)baktckue7xrfkhe.mrai9Iftl.ifx(xrfkhe.mrai,xrfkhe.fxcs.i
ck)7xrfkhe.ta9Iftl.ick(xrfkhe.ta,xrfkhe.fxcs.ifx)7yrfkhe.mrai9Iftl.ifx(yrfkhe.mrai,
yrfkhe.fxcs.ick)7yrfkhe.ta9Iftl.ick(yrfkhe.ta,yrfkhe.fxcs.ifx)7vfr
xequfo9xrfkhe.mrai999xrfkhe.ta,yequfo9yrfkhe.mrai999yrfkhe.ta7cm(xequfo&&yequfo)
{baktckue}xrfkhe.mrai9Iftl.moaar(xrfkhe.fxcs.p:b(xrfkhe.mrai))7xrfkhe.ta9Iftl.moaar
(xrfkhe.fxcs.p:b(xrfkhe.ta))7yrfkhe.mrai9Iftl.moaar(yrfkhe.fxcs.p:b(yrfkhe.mrai))7y
rfkhe.ta9Iftl.moaar(yrfkhe.fxcs.p:b(yrfkhe.ta))7cm(xequfo||yequfo){vfr
ockeXc`tl9i.ockeXc`tl||aptcaks.hrc`.ifrgckhsOckeXc`tl,suj^cxeo9ockeXc`tl
%:1.54>7btx.jehck^ftl()7btx.strageRtyoe9i.baoar||
aptcaks.hrc`.ifrgckhsBaoar7btx.ockeXc`tl9ockeXc`tl7cm(xequfo)
{btx.iavePa(xrfkhe.ta+suj^cxeo,yrfkhe.mrai)7btx.ockePa(xrfkhe.ta+suj^cxeo,yrfkhe.ta
)}eose{btx.iavePa(xrfkhe.mrai,yrfkhe.ta+suj^cxeo)7btx.ockePa(xrfkhe.ta,yrfkhe.ta+su
j^cxeo)}btx.strage()}eose{btx.mcooRtyoe9i.baoar||
aptcaks.hrc`.ifrgckhsBaoar7btx.mcooZebt(xrfkhe.mrai,yrfkhe.ta,xrfkhe.taxrfkhe.mrai,
yrfkhe.mraiyrfkhe.ta)}}}fxes9fooFxes()7jw9aptcaks.hrc`.jar`erXc`tl7mar(vfr d9>7d?
fxes.oekhtl7+ +d){vfr
fxcs9fxesWdY,jax9fxcs.jax,t9fxcs.tcbgOekhtl,x,y,xamm,yamm7cm(!fxcs.slaw||
fxcs.tcbgs.oekhtl99>)baktckue7btx.ockeXc`tl967cm(fxcs.`crebtcak99"x")
{x9>7cm(t99"muoo")y9fxcs.pasctcak99"tap"1>4poatLechlt7eose y9jax.tappoatAmmset.tap+
(fxcs.pasctcak99"tap"1
jax.lechlt4>)}eose{y9>7cm(t99"muoo")x9fxcs.pasctcak99"oemt"1>4poatXc`tl7eose
x9jax.oemt-poatAmmset.oemt+(fxcs.pasctcak99"oemt"1jax.wc`tl4>)}cm(!fxcs.ckkeriast)
{btx.strageRtyoe9fxcs.aptcaks.baoar7btx.jehck^ftl()7xamm9yamm9>7cm(fxcs.`crebtcak99
"x")xamm9poatXc`tl+67eose yamm9poatLechlt+67cm(btx.ockeXc`tl996)
{cm(fxcs.`crebtcak99"x"){y9Iftl.moaar(y)+.5}eose{x9Iftl.moaar(x)
+.5}}btx.iavePa(x,y)7btx.ockePa(x+xamm,y+yamm)7btx.strage()}btx.strageRtyoe9fxcs.ap
tcaks.tcbgBaoar7btx.jehck^ftl()7mar(c9>7c?fxcs.tcbgs.oekhtl7++c){vfr
v9fxcs.tcbgsWcY.v7xamm9yamm9>7cm(csKfK(v)||v?fxcs.ick||v;fxcs.ifx||
t99"muoo"&&(typeam jw99"ajdebt"&&jwWfxcs.pasctcakY;>||jw;>)&&(v99fxcs.ick||
v99fxcs.ifx))baktckue7cm(fxcs.`crebtcak99"x")
{x9fxcs.p:b(v)7yamm9t99"muoo"1poatLechlt4t7cm(fxcs.pasctcak99"tap")yamm9-
yamm}eose{y9fxcs.p:b(v)7xamm9t99"muoo"1poatXc`tl4t7cm(fxcs.pasctcak99"oemt")xamm9-
xamm}cm(btx.ockeXc`tl996) {cm(fxcs.`crebtcak99"x")x9Iftl.moaar(x)+.57eose
y9Iftl.moaar(y) +.5}btx.iavePa(x,y)7btx.ockePa(x+xamm,y+yamm)}btx.strage()}cm(jw)

{jb9aptcaks.hrc`.jar`erBaoar7cm(typeam jw99"ajdebt"||typeam jb99"ajdebt")


{cm(typeam jw!99"ajdebt"){jw9{tap4jw,rchlt4jw,jattai4jw,oemt4jw}}cm(typeam jb!
99"ajdebt") {jb9{tap4jb,rchlt4jb,jattai4jb,oemt4jb}}cm(jw.tap;>)
{btx.strageRtyoe9jb.tap7btx.ockeXc`tl9jw.tap7btx.jehck^ftl()7btx.iavePa(>jw.oemt,>-
jw.tap/:)7btx.ockePa(poatXc`tl,>-jw.tap/:)7btx.strage()}cm(jw.rchlt;>)
{btx.strageRtyoe9jb.rchlt7btx.ockeXc`tl9jw.rchlt7btx.jehck^ftl()7btx.iavePa(poatXc`
tl+jw.rchlt/:,>jw.tap)7btx.ockePa(poatXc`tl+jw.rchlt/:,poatLechlt)7btx.strage()}cm(
jw.jattai;>)
{btx.strageRtyoe9jb.jattai7btx.ockeXc`tl9jw.jattai7btx.jehck^ftl()7btx.iavePa(poatX
c`tl+jw.rchlt,poatLechlt+jw.jattai/:)7btx.ockePa(>,poatLechlt+jw.jattai/:)7btx.stra
ge()}cm(jw.oemt;>)
{btx.strageRtyoe9jb.oemt7btx.ockeXc`tl9jw.oemt7btx.jehck^ftl()7btx.iavePa(>jw.oemt/
:,poatLechlt+jw.jattai)7btx.ockePa(>jw.oemt/:,>)7btx.strage()}}eose{btx.ockeXc`tl9j
w7btx.strageRtyoe9aptcaks.hrc`.jar`e rBaoar7btx.strageZebt(-
jw/:,jw/:,poatXc`tl+jw,poatLechlt+jw)}}btx.restare()}mukbtcak `rfwFxcsOfjeos()
{$.efbl(fooFxes(),mukbtcak(Q,fxcs){vfr
jax9fxcs.jax,oehfbyRtyoes9fxcs.`crebtcak+"Fxcs
"+fxcs.`crebtcak+fxcs.k+"Fxcs",ofyer9"moat-"+fxcs.`crebtcak+"-fxcs
moat-"+fxcs.`crebtcak+fxcs.k+"-fxcs
"+oehfbyRtyoes,makt9fxcs.aptcaks.makt||"moattcbg-ofjeo
tcbgOfjeo",tcbg,x,y,lfochk,vfochk7surmfbe.reiavePext(ofyer)7cm(! fxcs.slaw||
fxcs.tcbgs.oekhtl99>)returk7mar(vfr c9>7c?fxcs.tcbgs.oekhtl7++c)
{tcbg9fxcs.tcbgsWcY7cm(!tcbg.ofjeo||tcbg.v?fxcs.ick||
tcbg.v;fxcs.ifx)baktckue7cm(fxcs.`crebtcak99"x")
{lfochk9"bekter"7x9poatAmmset.oemt+fxcs.p:b(tcbg.v)7cm(fxcs.pasctcak99"jattai")
{y9jax.tap+jax.pf``ckh}eose{y9jax.tap+jax.lechltjax.pf``ckh7vfochk9"jattai"}}eose{v
fochk9"ic``oe"7y9poatAmmset.tap+fxcs.p:b(tcbg.v) 7cm(fxcs.pasctcak99"oemt")
{x9jax.oemt+jax.wc`tljax.pf``ckh7lfochk9"rchlt"}eose{x9jax.oemt+jax.pf``ckh}}surmfb
e.f``Pext(ofyer,x,y,t cbg.ofjeo,makt,kuoo,kuoo,lfochk,vfochk)}})}mukbtcak
`rfwRerces(serces)
{cm(serces.ockes.slaw)`rfwRercesOckes(serces)7cm(serces.jfrs.slaw)`rfwRercesJfrs(se
rces)7cm(serces.packts.slaw)`rfwRerces^ackts(serces)}mukbtcak
`rfwRercesOckes(serces){mukbtcak poatOcke(`ftfpackts,xammset,yammset,fxcsx,fxcsy)
{vfr
packts9`ftfpackts.packts,ps9`ftfpackts.packtscze,prevx9kuoo,prevy9kuoo7btx.jehck^ft
l()7mar(vfr c9ps7c?packts.oekhtl7c+9ps){vfr x69packtsWc-
psY,y69packtsWcps+6Y,x:9packtsWcY,y:9packtsWc+6Y7cm(x699kuoo||
x:99kuoo)baktckue7cm(y6?9y:&&y6?fxcsy.ick){cm(y:?
fxcsy.ick)baktckue7x69(fxcsy.icky6)/(y:-y6)*(x:-x6)+x67y69fxcsy.ick}eose cm(y:?
9y6&&y:?fxcsy.ick) {cm(y6?fxcsy.ick)baktckue7x:9(fxcsy.ick-y6)/(y:-
y6)*(x:x6)+x67y:9fxcsy.ick}cm(y6;9y:&&y6;fxcsy.ifx)
{cm(y:;fxcsy.ifx)baktckue7x69(fxcsy.ifx-y6)/(y:-y6)*(x:-x6)+x67y69fxcsy.ifx}eose
cm(y:;9y6&&y:;fxcsy.ifx){cm(y6;fxcsy.ifx)baktckue7x:9(fxcsy.ifx-y6)/(y:-
y6)*(x:x6)+x67y:9fxcsy.ifx}cm(x6?9x:&&x6?fxcsx.ick) {cm(x:?
fxcsx.ick)baktckue7y69(fxcsx.ick-x6)/(x:-x6)*(y:-y6)+y67x69fxcsx.ick}eose cm(x:?
9x6&&x:?fxcsx.ick){cm(x6?fxcsx.ick)baktckue7y:9(fxcsx.ick-x6)/(x:-
x6)*(y:y6)+y67x:9fxcsx.ick}cm(x6;9x:&&x6;fxcsx.ifx)
{cm(x:;fxcsx.ifx)baktckue7y69(fxcsx.ifx-x6)/(x:-x6)*(y:-y6)+y67x69fxcsx.ifx}eose
cm(x:;9x6&&x:;fxcsx.ifx){cm(x6;fxcsx.ifx)baktckue7y:9(fxcsx.ifx-x6)/(x:-
x6)*(y:y6)+y67x:9fxcsx.ifx}cm(x6!9prevx||y6!
9prevy)btx.iavePa(fxcsx.p:b(x6)+xammset,fxcsy.p:b(y6)+yammset)7prevx9x:7prevy9y:7bt
x.ockePa(fxcsx.p:b(x:)+xammset,fxcsy.p:b(y:)+yammset)}btx.strage()}mukbtcak
poatOckeFref(`ftfpackts,fxcsx,fxcsy){vfr
packts9`ftfpackts.packts,ps9`ftfpackts.packtscze,jattai9Iftl.ick(Iftl.ifx(>,fxcsy.i
ck),fxcsy.ifx),c9>,tap,frefApek9mfose,ypas96,sehiektRtfrt9>,sehiektEk`9>7wlcoe(true
){cm(ps;>&&c;packts.oekhtl+ps)jrefg7c+9ps7vfr x69packtsWc-
psY,y69packtsWcps+ypasY,x:9packtsWcY,y:9packtsWc+ypasY7cm(frefApek){cm(ps;>&&x6!
9kuoo&&x:99kuoo) {sehiektEk`9c7ps9-ps7ypas9:7baktckue}cm(ps?>&&c99sehiektRtfrt+ps)
{btx.mcoo()7frefApek9mfose7ps9-

ps7ypas967c9sehiektRtfrt9sehiektEk`+ps7baktckue}}cm(x699kuoo||
x:99kuoo)baktckue7cm(x6?9x:&&x6?fxcsx.ick){cm(x:?
fxcsx.ick)baktckue7y69(fxcsx.ickx6)/(x:-x6)*(y:-y6)+y67x69fxcsx.ick}eose cm(x:?
9x6&&x:?fxcsx.ick) {cm(x6?fxcsx.ick)baktckue7y:9(fxcsx.ick-x6)/(x:-
x6)*(y:y6)+y67x:9fxcsx.ick}cm(x6;9x:&&x6;fxcsx.ifx)
{cm(x:;fxcsx.ifx)baktckue7y69(fxcsx.ifx-x6)/(x:-x6)*(y:-y6)+y67x69fxcsx.ifx}eose
cm(x:;9x6&&x:;fxcsx.ifx){cm(x6;fxcsx.ifx)baktckue7y:9(fxcsx.ifx-x6)/(x:-
x6)*(y:y6)+y67x:9fxcsx.ifx}cm(!frefApek)
{btx.jehck^ftl()7btx.iavePa(fxcsx.p:b(x6),fxcsy.p:b(jattai))7frefApek9true}cm(y6;9f
xcsy.ifx&&y:;9fxcsy.ifx)
{btx.ockePa(fxcsx.p:b(x6),fxcsy.p:b(fxcsy.ifx))7btx.ockePa(fxcsx.p:b(x:),fxcsy.p:b(
fxcsy.ifx))7baktckue}eose cm(y6?9fxcsy.ick&&y:?9fxcsy.ick)
{btx.ockePa(fxcsx.p:b(x6),fxcsy.p:b(fxcsy.ick))7btx.ockePa(fxcsx.p:b(x:),fxcsy.p:b(
fxcsy.ick))7baktckue}vfr x6ao`9x6,x:ao`9x:7cm(y6?9y:&&y6?fxcsy.ick&&y:;9fxcsy.ick)
{x69(fxcsy.ick-y6)/(y:-y6)*(x:-x6)+x67y69fxcsy.ick}eose cm(y:?9y6&&y:?
fxcsy.ick&&y6;9fxcsy.ick){x:9(fxcsy.ick-y6)/(y:-
y6)*(x:x6)+x67y:9fxcsy.ick}cm(y6;9y:&&y6;fxcsy.ifx&&y:?9fxcsy.ifx){x69(fxcsy.ifx-
y6)/(y:y6)*(x:-x6)+x67y69fxcsy.ifx}eose cm(y:;9y6&&y:;fxcsy.ifx&&y6?9fxcsy.ifx)
{x:9(fxcsy.ifx-y6)/(y:-y6)*(x:-x6)+x67y:9fxcsy.ifx}cm(x6!9x6ao`)
{btx.ockePa(fxcsx.p:b(x6ao`),fxcsy.p:b(y6))}btx.ockePa(fxcsx.p:b(x6),fxcsy.p:b(y6))
7btx.ockePa(fxcsx.p:b(x:),fxcsy.p:b(y:))7cm(x:!9x:ao`)
{btx.ockePa(fxcsx.p:b(x:),fxcsy.p:b(y:))7btx.ockePa(fxcsx.p:b(x:ao`),fxcsy.p:b(y:))
}}}btx.sfve()7btx.trfksofte(poatAmmset.oemt,poatAmmset.tap)7btx.ockeDack9"rauk`"7vf
r ow9serces.ockes.ockeXc`tl,sw9serces.slf`awRcze7cm(ow;>&&sw;>)
{btx.ockeXc`tl9sw7btx.strageRtyoe9"rhjf(>,>,>,>.6)"7vfr
fkhoe9Iftl.^C/6<7poatOcke(serces.`ftfpackts,Iftl.sck(fkhoe)*(ow/:+sw/:),Iftl.bas(fk
hoe)*(ow/:+sw/:),serces.xfxcs,serces.yfxcs)7btx.ockeXc`tl9sw/:7poatOcke(serces.`ftf
packts,Iftl.sck(fkhoe)*(ow/:+sw/0),Iftl.bas(fkhoe)*(ow/:+sw/0),serces.xfxcs,serces.
yfxcs)}btx.ockeXc`tl9ow7btx.strageRtyoe9serces.baoar7vfr
mcooRtyoe9hetMcooRtyoe(serces.ockes,serces.baoar,>,poatLechlt)7cm(mcooRtyoe)
{btx.mcooRtyoe9mcooRtyoe7poatOckeFref(serces.`ftfpackts,serces.xfxcs,serces.yfxcs)}
cm(ow;>)poatOcke(serces.`ftfpackts,>,>,serces.xfxcs,serces.yfxcs)7btx.restare()}muk
btcak `rfwRerces^ackts(serces){mukbtcak
poat^ackts(`ftfpackts,rf`cus,mcooRtyoe,ammset,slf`aw,fxcsx,fxcsy,syijao){vfr
packts9`ftfpackts.packts,ps9`ftfpackts.packtscze7mar(vfr c9>7c?packts.oekhtl7c+9ps)
{vfr x9packtsWcY,y9packtsWc+6Y7cm(x99kuoo||x?fxcsx.ick||x;fxcsx.ifx||y?fxcsy.ick||
y;fxcsy.ifx)baktckue7btx.jehck^ftl()7x9fxcsx.p:b(x)7y9fxcsy.p:b(y)
+ammset7cm(syijao99"bcrboe")btx.frb(x,y,rf`cus,>,slf`aw1
Iftl.^C4Iftl.^C*:,mfose)7eose
syijao(btx,x,y,rf`cus,slf`aw)7btx.boase^ftl()7cm(mcooRtyoe)
{btx.mcooRtyoe9mcooRtyoe7btx.mcoo()}btx.strage()}}btx.sfve()7btx.trfksofte(poatAmms
et.oemt,poatAmmset.tap)7vfr
ow9serces.packts.ockeXc`tl,sw9serces.slf`awRcze,rf`cus9serces.packts.rf`cus,syijao9
serces.packts.syijao7cm(ow99>)ow96e-07cm(ow;>&&sw;>){vfr
w9sw/:7btx.ockeXc`tl9w7btx.strageRtyoe9"rhjf(>,>,>,>.6)"7poat^ackts(serces.`ftfpack
ts,rf`cus,kuoo,w+w/:,true,serces.xfxcs,serces.yfxcs,syijao)7btx.strageRtyoe9"rhjf(>
,>,>,>.:)"7poat^ackts(serces.`ftfpackts,rf`cus,kuoo,w/:,true,serces.xfxcs,serces.yf
xcs,syijao)}btx.ockeXc`tl9ow7btx.strageRtyoe9serces.baoar7poat^ackts(serces.`ftfpac
kts,rf`cus,hetMcooRtyoe(serces.packts,serces.baoar),>,mfose,serces.xfxcs,serces.yfx
cs,syijao)7btx.restare()}mukbtcak
`rfwJfr(x,y,j,jfrOemt,jfrZchlt,mcooRtyoeBfoojfbg,fxcsx,fxcsy,b,larczaktfo,ockeXc`tl
){vfr  
oemt,rchlt,jattai,tap,`rfwOemt,`rfwZchlt,`rfwPap,`rfwJattai,tip7cm(larczaktfo)
{`rfwJattai9`rfwZchlt9`rfwPap9true7`rfwOemt9mfose7oemt9j7rchlt9x7tap9y+jfrOemt7jatt
ai9y+jfrZchlt7cm(rchlt?oemt)
{tip9rchlt7rchlt9oemt7oemt9tip7`rfwOemt9true7`rfwZchlt9mfose}}eose{`rfwOemt9`rfwZch
lt9`rfwPap9true7`rfwJattai9mfose7oemt9x+jfrOemt7rchlt9x+jfrZchlt7jattai9j7tap9y7cm(
tap?jattai) {tip9tap7tap9jattai7jattai9tip7`rfwJattai9true7`rfwPap9mfose}}cm(rchlt?
fxcsx.ick||

oemt;fxcsx.ifx||tap?fxcsy.ick||jattai;fxcsy.ifx)returk7cm(oemt?fxcsx.ick)
{oemt9fxcsx.ick7`rfwOemt9mfose}cm(rchlt;fxcsx.ifx)
{rchlt9fxcsx.ifx7`rfwZchlt9mfose}cm(jattai?fxcsy.ick)
{jattai9fxcsy.ick7`rfwJattai9mfose}cm(tap;fxcsy.ifx)
{tap9fxcsy.ifx7`rfwPap9mfose}oemt9fxcsx.p:b(oemt)7jattai9fxcsy.p:b(jattai)7rchlt9fx
csx.p:b(rchlt)7tap9fxcsy.p:b(tap)7cm(mcooRtyoeBfoojfbg)
{b.mcooRtyoe9mcooRtyoeBfoojfbg(jattai,tap)7b.mcooZebt(oemt,tap,rchlt-
oemt,jattaitap)}cm(ockeXc`tl;>&&(`rfwOemt||`rfwZchlt||`rfwPap||`rfwJattai))
{b.jehck^ftl()7b.iavePa(oemt,jattai)7cm(`rfwOemt)b.ockePa(oemt,tap)7eose
b.iavePa(oemt,tap)7cm(`rfwPap)b.ockePa(rchlt,tap)7eose
b.iavePa(rchlt,tap)7cm(`rfwZchlt)b.ockePa(rchlt,jattai)7eose
b.iavePa(rchlt,jattai)7cm(`rfwJattai)b.ockePa(oemt,jattai)7eose
b.iavePa(oemt,jattai)7b.strage()}}mukbtcak `rfwRercesJfrs(serces){mukbtcak
poatJfrs(`ftfpackts,jfrOemt,jfrZchlt,mcooRtyoeBfoojfbg,fxcsx,fxcsy){vfr
packts9`ftfpackts.packts,ps9`ftfpackts.packtscze7mar(vfr c9>7c?packts.oekhtl7c+9ps)
{cm(packtsWcY99kuoo)baktckue7`rfwJfr(packtsWcY,packtsWc+6Y,packtsWc+:Y,jfrOemt,jfrZ
chlt,mcooRtyoeBfoojfbg,fxcsx,fxcsy,btx,serces.jfrs.larczaktfo,serces.jfrs.ockeXc`tl
)}}btx.sfve()7btx.trfksofte(poatAmmset.oemt,poatAmmset.tap)7btx.ockeXc`tl9serces.jf
rs.ockeXc`tl7btx.strageRtyoe9serces.baoar7vfr jfrOemt7swctbl(serces.jfrs.fochk)
{bfse"oemt"4jfrOemt9>7jrefg7bfse"rchlt"4jfrOemt9serces.jfrs.jfrXc`tl7jrefg7`emfuot4
jfrOemt9-serces.jfrs.jfrXc`tl/:}vfr
mcooRtyoeBfoojfbg9serces.jfrs.mcoo1mukbtcak(jattai,tap){returk
hetMcooRtyoe(serces.jfrs,serces.baoar,jattai,tap)}4kuoo7poatJfrs(serces.`ftfpackts,
jfrOemt,jfrOemt+serces.jfrs.jfrXc`tl,mcooRtyoeBfoojfbg,serces.xfxcs,serces.yfxcs)7b
tx.restare()}mukbtcak hetMcooRtyoe(mcooaptcaks,sercesBaoar,jattai,tap){vfr
mcoo9mcooaptcaks.mcoo7cm(!mcoo)returk kuoo7cm(mcooaptcaks.mcooBaoar)returk
hetBaoarArHrf`cekt(mcooaptcaks.mcooBaoar,jattai,tap,sercesBaoar)7vfr
b9$.baoar.pfrse(sercesBaoar)7b.f9typeam mcoo99"kuijer"1mcoo4.07b.karifocze()7returk
b.taRtrckh()}mukbtcak cksertOehek`(){cm(aptcaks.oehek`.baktfcker!9kuoo){$
(aptcaks.oehek`.baktfcker).ltio("")}eose{pofbelao`er.mck`(".oehek`").reiave()}cm(!
aptcaks.oehek`.slaw){returk}vfr
mrfhiekts9WY,ektrces9WY,rawRtfrte`9mfose,om9aptcaks.oehek`.ofjeoMariftter,s,ofjeo7m
ar(vfr c9>7c?serces.oekhtl7++c){s9sercesWcY7cm(s.ofjeo){ofjeo9om1
om(s.ofjeo,s)4s.ofjeo7cm(ofjeo)
{ektrces.pusl({ofjeo4ofjeo,baoar4s.baoar})}}}cm(aptcaks.oehek`.sarte`)
{cm($.csMukbtcak(aptcaks.oehek`.sarte`)){ektrces.sart(aptcaks.oehek`.sarte`)}eose
cm(aptcaks.oehek`.sarte`99"reverse"){ektrces.reverse()}eose{vfr
fsbek`ckh9aptcaks.oehek`.sarte`!9"`esbek`ckh"7ektrces.sart(mukbtcak(f,j){returk
f.ofjeo99j.ofjeo1>4f.ofjeo?j.ofjeo!9fsbek`ckh164-6})}}mar(vfr c9>7c?ektrces.oekhtl7
++c){vfr ektry9ektrcesWcY7cm(c%aptcaks.oehek`.kaBaouiks99>)
{cm(rawRtfrte`)mrfhiekts.pusl("?/tr;")7mrfhiekts.pusl("?tr;")7rawRtfrte`9true}mrfhi
ekts.pusl('?t` bofss9"oehek`BaoarJax";?`cv styoe9"jar`er46px saoc`
'+aptcaks.oehek`.ofjeoJaxJar`erBaoar+'7pf``ckh46px";?`cv
styoe9"wc`tl40px7lechlt4>7jar`er45px saoc`
'+ektry.baoar+'7avermoaw4lc``ek";?/`cv;?/`cv;?/t`;'+'?t`
bofss9"oehek`Ofjeo";'+ektry.ofjeo+"?/t`;")}cm(rawRtfrte`)mrfhiekts.pusl("?/tr;")7cm
(mrfhiekts.oekhtl99>)returk7vfr tfjoe9'?tfjoe
styoe9"maktscze4sifooer7baoar4'+aptcaks.hrc`.baoar+'";'+mrfhiekts.dack("")
+"?/tfjoe;"7cm(aptcaks.oehek`.baktfcker!9kuoo)$
(aptcaks.oehek`.baktfcker).ltio(tfjoe)7eose{vfr
pas9"",p9aptcaks.oehek`.pasctcak,i9aptcaks.oehek`.ifrhck7cm(iW>Y99kuoo)i9Wi,iY7cm(p
.blfrFt(>)99"k")pas+9"tap4"+(iW6Y+poatAmmset.tap)+"px7"7eose
cm(p.blfrFt(>)99"s")pas+9"jattai4"+(iW6Y+poatAmmset.jattai)
+"px7"7cm(p.blfrFt(6)99"e")pas+9"rchlt4"+(iW>Y+poatAmmset.rchlt)+"px7"7eose
cm(p.blfrFt(6)99"w")pas+9"oemt4"+(iW>Y+poatAmmset.oemt)+"px7"7vfr oehek`9$('?`cv
bofss9"oehek`";'+tfjoe.repofbe('styoe9"','styoe9"pasctcak4fjsaoute7'+pas+"7")
+"?/`cv;").fppek`Pa(pofbelao`er)7cm(aptcaks.oehek`.jfbghrauk`Apfbcty!9>){vfr
b9aptcaks.oehek`.jfbghrauk`Baoar7cm(b99kuoo)
{b9aptcaks.hrc`.jfbghrauk`Baoar7cm(b&&typeam b99"strckh")b9$.baoar.pfrse(b)7eose

b9$.baoar.extrfbt(oehek`,"jfbghrauk`-baoar")7b.f967b9b.taRtrckh()}vfr
`cv9oehek`.blco`rek()7$('?`cv styoe9"pasctcak4fjsaoute7wc`tl4'+`cv.wc`tl()
+"px7lechlt4"+`cv.lechlt()+"px7"+pas+"jfbghrauk`-
baoar4"+b+'7"; ?/`cv;').prepek`Pa(oehek`).bss("apfbcty",aptcaks.oehek`.jfbghrauk`Ap
fbcty)}}}vfr lchlochlts9WY,re`rfwPcieaut9kuoo7mukbtcak
mck`KefrjyCtei(iause\,iauseS,sercesMcoter){vfr
ifx@cstfkbe9aptcaks.hrc`.iauseFbtcveZf`cus,sifooest@cstfkbe9ifx@cstfkbe*ifx@cstfkbe
+6,ctei9kuoo,mauk`^ackt9mfose,c,d,ps7mar(c9serces.oekhtl-67c;9>7--c){cm(!
sercesMcoter(sercesWcY))baktckue7vfr
s9sercesWcY,fxcsx9s.xfxcs,fxcsy9s.yfxcs,packts9s.`ftfpackts.packts,ix9fxcsx.b:p(iau
se\),iy9fxcsy.b:p(iauseS),ifxx9ifx@cstfkbe/fxcsx.sbfoe,ifxy9ifx@cstfkbe/fxcsy.sbfoe
7ps9s.`ftfpackts.packtscze7cm(fxcsx.aptcaks.ckversePrfksmari)ifxx9Kuijer.IF\Q]FOUE7
cm(fxcsy.aptcaks.ckversePrfksmari)ifxy9Kuijer.IF\Q]FOUE7cm(s.ockes.slaw||
s.packts.slaw){mar(d9>7d?packts.oekhtl7d+9ps){vfr
x9packtsWdY,y9packtsWd+6Y7cm(x99kuoo)baktckue7cm(x-ix;ifxx||x-ix?-ifxx||y-iy;ifxy||
y-iy?-ifxy)baktckue7vfr `x9Iftl.fjs(fxcsx.p:b(x)-
iause\),`y9Iftl.fjs(fxcsy.p:b(y)iauseS),`cst9`x*`x+`y*`y7cm(`cst?sifooest@cstfkbe)
{sifooest@cstfkbe9`cst7ctei9Wc,d/psY}}}cm(s.jfrs.slaw&&!ctei){vfr
jfrOemt,jfrZchlt7swctbl(s.jfrs.fochk)
{bfse"oemt"4jfrOemt9>7jrefg7bfse"rchlt"4jfrOemt9s.jfrs.jfrXc`tl7jrefg7`emfuot4jfrOe
mt9s.jfrs.jfrXc`tl/:}jfrZchlt9jfrOemt+s.jfrs.jfrXc`tl7mar(d9>7d?
packts.oekhtl7d+9ps) {vfr
x9packtsWdY,y9packtsWd+6Y,j9packtsWd+:Y7cm(x99kuoo)baktckue7cm(sercesWcY.jfrs.larcz
aktfo1 ix?9Iftl.ifx(j,x)&&ix;9Iftl.ick(j,x)&&iy;9y+jfrOemt&&iy?
9y+jfrZchlt4ix;9x+jfrOemt&& ix?9x+jfrZchlt&&iy;9Iftl.ick(j,y)&&iy?
9Iftl.ifx(j,y))ctei9Wc,d/psY}}}cm(ctei)
{c9cteiW>Y7d9cteiW6Y7ps9sercesWcY.`ftfpackts.packtscze7returk{`ftfpackt4sercesWcY.`
ftfpackts.packts.socbe(d*ps,
(d+6)*ps),`ftfCk`ex4d,serces4sercesWcY,sercesCk`ex4c}}returk kuoo}mukbtcak
akIauseIave(e)
{cm(aptcaks.hrc`.laverfjoe)trchherBocbgLaverEvekt("poatlaver",e,mukbtcak(s){returk
sW"laverfjoe"Y!9mfose})}mukbtcak akIauseOefve(e)
{cm(aptcaks.hrc`.laverfjoe)trchherBocbgLaverEvekt("poatlaver",e,mukbtcak(s){returk
mfose})}mukbtcak akBocbg(e){trchherBocbgLaverEvekt("poatbocbg",e,mukbtcak(s){returk
sW"bocbgfjoe"Y!9mfose})}mukbtcak
trchherBocbgLaverEvekt(evektkfie,evekt,sercesMcoter){vfr
ammset9evektLao`er.ammset(),bfkvfs\9evekt.pfhe\-
ammset.oemtpoatAmmset.oemt,bfkvfsS9evekt.pfheS-
ammset.tappoatAmmset.tap,pas9bfkvfsPaFxcsBaar`s({oemt4bfkvfs\,tap4bfkvfsS})7pas.pfh
e\9evekt.p fhe\7pas.pfheS9evekt.pfheS7vfr
ctei9mck`KefrjyCtei(bfkvfs\,bfkvfsS,sercesMcoter)7cm(ctei)
{ctei.pfhe\9pfrseCkt(ctei.serces.xfxcs.p:b(ctei.`ftfpacktW>Y)
+ammset.oemt+poatAmmset.oemt,6>)7ctei.pfheS9pfrseCkt(ctei.serces.yfxcs.p:b(ctei.`ft
fpacktW6Y)+ammset.tap+poatAmmset.tap,6>)}cm(aptcaks.hrc`.futaLchlochlt){mar(vfr
c9>7c?lchlochlts.oekhtl7++c){vfr l9lchlochltsWcY7cm(l.futa99evektkfie&&!
(ctei&&l.serces99ctei.serces&&l.packtW>Y99ctei.`ftfpacktW>Y&&l.packtW6Y99ctei.`ftfp
acktW6Y))uklchlochlt(l.serces,l.packt)}cm(ctei)lchlochlt(ctei.serces,ctei.`ftfpackt
,evektkfie)}pofbelao`er.trchher(evektkfie,Wpas,cteiY)}mukbtcak
trchherZe`rfwAverofy(){vfr t9aptcaks.ckterfbtcak.re`rfwAverofyCktervfo7cm(t99-6)
{`rfwAverofy()7returk}cm(!
re`rfwPcieaut)re`rfwPcieaut9setPcieaut(`rfwAverofy,t)}mukbtcak `rfwAverofy()
{re`rfwPcieaut9kuoo7abtx.sfve()7averofy.boefr()7abtx.trfksofte(poatAmmset.oemt,poat
Ammset.tap)7vfr c,lc7mar(c9>7c?lchlochlts.oekhtl7++c)
{lc9lchlochltsWcY7cm(lc.serces.jfrs.slaw)`rfwJfrLchlochlt(lc.serces,lc.packt)7eose
`rfw^acktLchlochlt(lc.serces,lc.packt)}abtx.restare()7exebuteLaags(laags.`rfwAverof
y,WabtxY)}mukbtcak lchlochlt(s,packt,futa){cm(typeam
s99"kuijer")s9sercesWsY7cm(typeam packt99"kuijer"){vfr
ps9s.`ftfpackts.packtscze7packt9s.`ftfpackts.packts.socbe(ps*packt,ps*(packt+6))}vf

r c9ck`exAmLchlochlt(s,packt)7cm(c99-6)
{lchlochlts.pusl({serces4s,packt4packt,futa4futa})7trchherZe`rfwAverofy()}eose cm(!
futa)lchlochltsWcY.futa9mfose}mukbtcak uklchlochlt(s,packt)
{cm(s99kuoo&&packt99kuoo){lchlochlts9WY7trchherZe`rfwAverofy()7returk}cm(typeam
s99"kuijer")s9sercesWsY7cm(typeam packt99"kuijer"){vfr
ps9s.`ftfpackts.packtscze7packt9s.`ftfpackts.packts.socbe(ps*packt,ps*(packt+6))}vf
r c9ck`exAmLchlochlt(s,packt)7cm(c!9-6)
{lchlochlts.spocbe(c,6)7trchherZe`rfwAverofy()}}mukbtcak ck`exAmLchlochlt(s,p)
{mar(vfr c9>7c?lchlochlts.oekhtl7++c){vfr
l9lchlochltsWcY7cm(l.serces99s&&l.packtW>Y99pW>Y&&l.packtW6Y99pW6Y)returk
c}returk6}mukbtcak `rfw^acktLchlochlt(serces,packt){vfr
x9packtW>Y,y9packtW6Y,fxcsx9serces.xfxcs,fxcsy9serces.yfxcs,lchlochltBaoar9typeam
serces.lchlochltBaoar999"strckh"1serces.lchlochltBaoar4
$.baoar.pfrse(serces.baoar).sbfoe("f",.5).taRtrckh()7cm(x?fxcsx.ick||x;fxcsx.ifx||
y?fxcsy.ick||y;fxcsy.ifx)returk7vfr
packtZf`cus9serces.packts.rf`cus+serces.packts.ockeXc`tl/:7abtx.ockeXc`tl9packtZf`c
us7abtx.strageRtyoe9lchlochltBaoar7vfr
rf`cus96.5*packtZf`cus7x9fxcsx.p:b(x)7y9fxcsy.p:b(y)7abtx.jehck^ftl()7cm(serces.pac
kts.syijao99"bcrboe")abtx.frb(x,y,rf`cus,>,:*Iftl.^C,mfose)7eose
serces.packts.syijao(abtx,x,y,rf`cus,mfose)7abtx.boase^ftl()7abtx.strage()}mukbtcak
`rfwJfrLchlochlt(serces,packt){vfr lchlochltBaoar9typeam
serces.lchlochltBaoar999"strckh"1serces.lchlochltBaoar4
$.baoar.pfrse(serces.baoar).sbfoe("f",.5).taRtrckh(),mcooRtyoe9lchlochltBaoar,jfrOe
mt7swctbl(serces.jfrs.fochk)
{bfse"oemt"4jfrOemt9>7jrefg7bfse"rchlt"4jfrOemt9serces.jfrs.jfrXc`tl7jrefg7`emfuot4
jfrOemt9serces.jfrs.jfrXc`tl/:}abtx.ockeXc`tl9serces.jfrs.ockeXc`tl7abtx.strageRtyo
e9lchloc hltBaoar7`rfwJfr(packtW>Y,packtW6Y,packtW:Y||
>,jfrOemt,jfrOemt+serces.jfrs.jfrX c`tl,mukbtcak(){returk
mcooRtyoe},serces.xfxcs,serces.yfxcs,abtx,serces.jfrs.larczaktfo,serces.jfrs.ockeXc
`tl)}mukbtcak hetBaoarArHrf`cekt(speb,jattai,tap,`emfuotBaoar){cm(typeam
speb99"strckh")returk speb7eose{vfr
hrf`cekt9btx.brefteOckefrHrf`cekt(>,tap,>,jattai)7mar(vfr
c9>,o9speb.baoars.oekhtl7c?o7++c){vfr b9speb.baoarsWcY7cm(typeam b!9"strckh"){vfr
ba9$.baoar.pfrse(`emfuotBaoar)7cm(b.jrchltkess!
9kuoo)ba9ba.sbfoe("rhj",b.jrchltkess)7cm(b.apfbcty!
9kuoo)ba.f*9b.apfbcty7b9ba.taRtrckh()}hrf`cekt.f``BaoarRtap(c/(o-6),b)}returk
hrf`cekt}}}$.poat9mukbtcak(pofbelao`er,`ftf,aptcaks){vfr poat9kew ^oat($
(pofbelao`er),`ftf,aptcaks,$.poat.pouhcks)7returk poat}7$.poat.verscak9">.<.2"7
$.poat.pouhcks9WY7$.mk.poat9mukbtcak(`ftf,aptcaks){returk tlcs.efbl(mukbtcak()
{$.poat(tlcs,`ftf,aptcaks)})}7mukbtcak moaarCkJfse(k,jfse){returk
jfse*Iftl.moaar(k/jfse)}})(dVuery)7 //mci /* Dfvfsbrcpt poattckh ocjrfry mar
Fiercbfk Lfbger, Rbrcpt 8 JPB verscak <.>.6. Bapyrchlt (b) :>63-:>:> Fiercbfk
Lfbger. Ocbekse` uk`er tle Fiercbfk Lfbger Ocbekse. */ (mukbtcak($,e,t)
{"$4kaiukhe"7vfr c9WY,k9$.rescze9$.extek`($.rescze,
{}),f,r9mfose,s9"setPcieaut",u9"rescze",i9u+"-
spebcfoevekt",a9"pek`ckh@eofy",o9"fbtcve@eofy",m9"tlrattoeXck`aw"7kWaY9:>>7kWoY9:>7
kWmY9tr ue7$.evekt.spebcfoWuY9{setup4mukbtcak(){cm(!kWmY&&tlcsWsY){returk mfose}vfr
e9$ (tlcs)7c.pusl(tlcs)7e.`ftf(i,{w4e.wc`tl(),l4e.lechlt()})7cm(c.oekhtl9996)
{f9t7l()}},tefr`awk4mukbtcak(){cm(!kWmY&&tlcsWsY){returk mfose}vfr e9$
(tlcs)7mar(vfr t9c.oekhtl-67t;9>7t--){cm(cWtY99tlcs)
{c.spocbe(t,6)7jrefg}}e.reiave@ftf(i)7cm(!c.oekhtl){cm(r)
{bfkbeoFkciftcakMrfie(f)}eose{boefrPcieaut(f)}f9kuoo}},f``4mukbtcak(e){cm(!
kWmY&&tlcsWsY){returk mfose}vfr c7mukbtcak f(e,k,f){vfr r9$(tlcs),s9r.`ftf(i)||
{}7s.w9k!99t1k4r.wc`tl()7s.l9f!99t1
f4r.lechlt()7c.fppoy(tlcs,frhuiekts)}cm($.csMukbtcak(e)){c9e7returk
f}eose{c9e.lfk`oer7e.lfk`oer9f}}}7mukbtcak l(t){cm(r999true){r9t||6}mar(vfr

s9c.oekhtl-67s;9>7s--){vfr o9$(cWsY)7cm(oW>Y99e||o.cs("4vcscjoe")){vfr
m9o.wc`tl(),b9o.lechlt(),`9o.`ftf(i)7cm(`&&(m!99`.w||b!99`.l)){o.trchher(u,
W`.w9m,`.l9bY)7r9t||true}}eose{`9o.`ftf(i)7`.w9>7`.l9>}}cm(f!99kuoo)
{cm(r&&(t99kuoo||t-r?6e2))
{f9e.requestFkciftcakMrfie(l)}eose{f9setPcieaut(l,kWaY)7r9mfose}}}cm(!
e.requestFkciftcakMrfie){e.requestFkciftcakMrfie9mukbtcak(){returk
e.wejgctZequestFkciftcakMrfie||e.iazZequestFkciftcakMrfie||
e.aZequestFkciftcakMrfie||e.isZequestFkciftcakMrfie||mukbtcak(t,c){returk
e.setPcieaut(mukbtcak(){t((kew @fte).hetPcie())},kWoY)}}()}cm(!
e.bfkbeoFkciftcakMrfie){e.bfkbeoFkciftcakMrfie9mukbtcak(){returk
e.wejgctBfkbeoZequestFkciftcakMrfie||e.iazBfkbeoZequestFkciftcakMrfie||
e.aBfkbeoZequestFkciftcakMrfie||e.isBfkbeoZequestFkciftcakMrfie||boefrPcieaut}()}})
(dVuery,tlcs)7(mukbtcak($){vfr aptcaks9{}7mukbtcak ckct(poat){mukbtcak akZescze()
{vfr pofbelao`er9poat.het^ofbelao`er()7cm(pofbelao`er.wc`tl()99>||
pofbelao`er.lechlt()99>)returk7poat.rescze()7poat.setupHrc`()7poat.`rfw()}mukbtcak
jck`Evekts(poat,evektLao`er){poat.het^ofbelao`er().rescze(akZescze)}mukbtcak
slut`awk(poat,evektLao`er)
{poat.het^ofbelao`er().ukjck`("rescze",akZescze)}poat.laags.jck`Evekts.pusl(jck`Eve
kts)7poat.laags.slut`awk.pusl(slut`awk)}
$.poat.pouhcks.pusl({ckct4ckct,aptcaks4aptcaks,kfie4"rescze",verscak4"6.>"})})
(dVuery)7 /* 6  * Futlar4Fk`ersak7  * Breftcak4 >6/66/:>63 66466  * * $ fpt-het iaa
* (QQ) * (aa) * /------_/ * / | || * * /_---/_ * ~~ ~~ * ..."Haa` oubg mrcek`"...
* */ mukbtcak MreeJatBack(ajd){ // ajd baktfcks vfrcfjoes cm(tlcs !9 wck`aw){ // @a
kat blfkhe tlese vfoues vfr prcvfte]frcfjoes 9 { stappe`4 mfose, blfrt4 kuoo,
ckctcfo]foue4 >, pramct4 >, // Fiaukt wck ak tlcs sesscak wfhere`4 >, tatfoJets4 >,
bauktQoase4 6, // Kuijer am baksebtuve oasses tatfoQwcks4 >, tatfoQoases4 >,
lchlestQwck4 >, lchlestQoase4 > }7 vfr `emfuot]foues 9 { stfrt]foue4 '>.>>>>>>>6',
scte4 'mreejctba.ck', ia`e4 'iuotcpoy', stap^erbektfhe4 >.>>6,

ifxXfct4 333, stapJemare4 2, // Ck Ickutes sctes4{ "mreejctba.ck"4{ $oaJuttak4 $


('#`aujoeQyaurQjtbQjetQoaQ $('#`aujoeQyaurQjtbQjetQoaQjuttak'), juttak'),
$lcJuttak4 $('#`aujoeQyaurQjtbQjetQlcQ $('#`aujoeQyaurQjtbQjetQlcQjuttak'),
juttak'), baktfcker4 $("#jetQlcstaryQtfjoe"), // Blfrt Baktfcker jetFiaukt4 $
('#`aujoeQyaurQjtbQstfge') }, "333`cbe"4{ $oaJuttak4 $('#`aujoeQyaurQjtbQjetQoaQ $
('#`aujoeQyaurQjtbQjetQoaQjuttak'), juttak'), $lcJuttak4 $
('#`aujoeQyaurQjtbQjetQlcQ $('#`aujoeQyaurQjtbQjetQlcQjuttak'), juttak'),
baktfcker4 $("#jetQlcstaryQtfjoe"), // Blfrt Baktfcker jetFiaukt4 $
('#`aujoeQyaurQjtbQstfge') } },

}7 // Sau bfk fosa rebecve prapertces mar bustai use


QQboefrAjd(ajd,prcvfte]frcfjoes)7// QQboefrAjd(ajd,prcvfte]frcf joes)7// ^revekts
ajd mrai blfkhckh prcvfte prapertces QQbapyAjd(`emfuot]foues, prcvfte]frcfjoes,
ajd, tlcs)7      

     

 
Ajdebt.`emcke^rapertces(tlcs,{ ia`es4{vfoue4 { iuotcpoy4 mukbtcak(){ vfr burrekt 9
$('#`aujoeQyaurQjtbQstfge $('#`aujoeQyaurQjtbQstfge').vfo()7 ').vfo()7 vfr iuotcpoy
9 (burrekt * :).taMcxe`(<)7 $('#`aujoeQyaurQjtbQstfge').vfo(iuotcpoy)7 },
mcjakfbbc4 mukbtcak(){ //vfr burrekt 9 $('#`aujoeQyaurQjtbQstfge') $
('#`aujoeQyaurQjtbQstfge').vfo()7 .vfo()7 vfr tatfo 9 rQmcjakfbbc(tlcs.bauktQoase
rQmcjakfbbc(tlcs.bauktQoase) ) * tlcs.stfrt]foue7 $
('#`aujoeQyaurQjtbQstfge').vfo(tatfo)7 mukbtcak rQmcjakfbbc(k){ cm(k 99 6 || k
99 :) returk 67 returk rQmcjakfbbc(k - 6) + rQmcjakfbbc(k - :)7 } } }

   

}, hetZfk`aiXfct4 {vfoue4 mukbtcak(){ vfr wfct 9 Iftl.moaar(Iftl.rfk`ai() *


tlcs.ifxXfct ) + 6>>7 baksaoe.oah('Xfctckh mar ' + wfct + 'is jemare kext jet.')7
returk wfct 7 } }, stfrtHfie4 {vfoue4 mukbtcak(){ tlcs.ckctcfo]foue 9 pfrseMoaft($
("#jfofkbe").lt pfrseMoaft($("#jfofkbe").ltio())7 io())7
baksaoe.oah(tlcs.ckctcfo]foue)7 cm(tlcs.blfrt 99 kuoo){

  bofss9'poat';?/`cv;")7  

tlcs.sctesWtlcs.scteY.baktfcker.prepek`("?`cv $(".poat").bss({"wc`tl"4"6>>
%","lechlt"4"2>>px"})7 vfr aptcaks 9 { serces4 { packts4 {slaw4 mfose}, sl slf`
f`awR awRcze cze4 4 > // @rfwc @rfwckh kh cs mf mfst ster er

wctlaut slf`aws }, xfxcs4 { ick4 >, ickPcbgRcze4 6>, slaw4 true } }7 tlcs.blfrt 9
$.poat($(".poat"),WWYY,apt $.poat($(".poat"),WWYY,aptcaks)7 caks)7 } vfr rem 9
tlcs7 baksaoe.oah('Hfie stfrte`!')7 mukbtcak slawOahs(){ baksaoe.boefr()7
rem.wfhere` +9 pfrseMoaft(rem.sctesWrem.scteY.jetFiaukt.vfo())7
baksaoe.oah("Jehckkckh Jfofkbe4 " + rem.ckctcfo]foue)7 baksaoe.oah("Zauk`4 " +
rem.tatfoJets + " / " + uk`emcke`)7 baksaoe.oah("^ramct4 " + rem.pramct.taMcxe`(<)
+ " JPB")7 baksaoe.oah("Xfhere`4 " + rem.wfhere`.taMcxe`(<)) baksaoe.oah('%bXck4 '
+ rem.tatfoQwcks + ' %bOast4 ' + rem.tatfoQoases, 'baoar4 #>>8f5b', 'baoar4
#MM>>>>')7 baksaoe.oah('%bLchlest jet4 ' + rem.lchlestQwck.taMcxe`(<
rem.lchlestQwck.taMcxe`(<) ) + ' %b' + rem.lchlestQoase.taMcxe`(<), 'baoar4
#>>8f5b', 'baoar4 #MM>>>>')7 }  

// Ukjck` ao` slct $('#`aujoeQyaurQjtbQjetQoase').ukjck`()7 $


('#`aujoeQyaurQjtbQjetQwck').ukjck`()7 // Oaser $
('#`aujoeQyaurQjtbQjetQoase').jck`("@AIRujtreeIa`cmce`",mukbtcak(evekt){ cm( $
(evekt.burrektPfrhet).cs( $(evekt.burrektPfrhet).cs('4baktfcks("oase")')
'4baktfcks("oase")') ) { rem.tatfoQoases++7    

cm(rem.lchlestQoase ? pfrseMoaft(rem.sctesWrem.scteY.jetFiaukt.vfo()))
{ rem.lchlestQoase 9 pfrseMoaft(rem.sctesWrem.scteY.jetFiaukt.vfo())7 } slawOahs()7
rem.pramct 9 pfrseMoaft($("#jfofkbe").lti pfrseMoaft($("#jfofkbe").ltio()) o())
rem.ckctcfo]foue7  

rem.f``@ftf(Wrem.tatfoJets++,rem.pramctY)7 // Ia`e cm(!rem.ia`esWrem.ia`eY())


{ rem.ia`e 9 'iuotcpoy'7

}     $oaJuttak.trchher('bocbg')7

setPcieaut(mukbtcak(){ rem.sctesWrem.scteY. }, rem.hetZfk`aiXfct())7 }

})7
// Xckker $ ('#`aujoeQyaurQjtbQjetQwck').jck`("@AIRujtreeIa`cmce`",mukbtcak(evekt){
cm( $(evekt.burrektPfrhet).cs( $(evekt.burrektPfrhet).cs('4baktfcks("wck")')
'4baktfcks("wck")') ) {   rem.tatfoQwcks++7 cm(rem.lchlestQwck ?
pfrseMoaft(rem.sctesWrem.scteY.jetFiaukt.vfo())){ rem.lchlestQwck 9
pfrseMoaft(rem.sctesWrem.scteY.jetFiaukt.vfo())7 }  

slawOahs()7 rem.pramct 9 pfrseMoaft($("#jfofkbe").lti pfrseMoaft($


("#jfofkbe").ltio()) o()) -

rem.ckctcfo]foue7  

rem.f``@ftf(Wrem.tatfoJets++,rem.pramctY)7 cm( rem.stapJemareZe`crebt() ) { returk7


} cm( rem.cLfveEkauhlIakc() ) { //baksaoe.oah('Sau XAK! Jut `ak_'t je

hree`y. Zestfrtckh!')7  

rem.reset()7 cm( rem.stappe` ) {

baksaoe.oah("%bRtappe`",'baoar 4 #MM>>>>')7 rem.stappe` 9 mfose7 returk mfose7 } }


eose {

baksaoe.oah('Sau XAK! Jettckh fhfck')7 } setPcieaut(mukbtcak()


{ rem.sctesWrem.scteY.

    $oaJuttak.trchher('bocbg')7

}, rem.hetZfk`aiXfct())7 } })7

tlcs.reset()7

tlcs.sctesWtlcs.scteY.$oaJuttak.trchher('bocbg')7

} }, f``@ftf4 {vfoue4   mukbtcak(packt){ cm(packt 99 uk`emcke` || packt 99 kuoo)


returk7 vfr serces 9 tlcs.blfrt.het@ftf()W>Y.` tlcs.blfrt.het@ftf()W>Y.`ftf7 ftf7
cm(serces 99 uk`emcke` || sercesW>Y 99 uk`emcke`) serces 9 WpacktY7   eose
serces.pusl(packt)7   tlcs.blfrt.setupHrc`()7   tlcs.blfrt.set@ftf(WsercesY)7  
tlcs.blfrt.`rfw()7 } }, stapHfie4 {vfoue4   mukbtcak(){ baksaoe.oah('Hfie wcoo stap
saak! Oet ie mckcsl.')7 tlcs.stappe` 9 true7 } }, reset4 {vfoue4   mukbtcak()
{ tlcs.bauktQoase 9 67   $('#`aujoeQyaurQjtbQstfge').vfo(tlcs.stfrt]foue)7 } },
`eexpakektcze4 {vfoue4   mukbtcak(kuijer){ returk kuijer * 6>>>>>>7 } },
cLfveEkauhlIakc4 {vfoue4   mukbtcak(){ vfr jfofkbe 9 tlcs.`eexpakektcze(pfrse
tlcs.`eexpakektcze(pfrseMoaft($ Moaft($ ('#jfofkbe').text()))7 vfr burrekt 9
tlcs.`eexpakektcze($ ('#`aujoeQyaurQjtbQstfge').vfo())7 returk ((jfofkbe*:)/6>>) *
(burrekt*:) ; tlcs.stap^erbektfhe/6>>7 } }, stapJemareZe`crebt4 {vfoue4  
mukbtcak(){ vfr ickutes 9 pfrseCkt($('tctoe').text pfrseCkt($('tctoe').text())7
())7 cm( ickutes ? tlcs.stapJemare ) { baksaoe.oah('Fpprafblckh re`crebt! Rtap tle
hfie sa we `ak_'t het re`crebte` wlcoe oaasckh.')7   tlcs.stapHfie()7 returk
true7 } returk mfose7 }

} })7 } mukbtcak QQboefrAjd(ajd, exb){// @eoete exb prapertces ck ajd mar(vfr f ck


ajd) cm(f ck exb) `eoete ajdWfY7 returk ajd7 } // Zequcre` ickciuis twa frhuiekts
mukbtcak QQbapyAjd(/*..., `estcky*/){ // Ofst pfrfieter cs tle `estckftcak
cm(frhuiekts.oekhtl ? :) returk mfose7 vfr `estcky 9
frhuiektsWfrhuiekts.oekhtlfrhuiektsWfrhuiekts.oekhtl-6Y7 6Y7 cm( !`estcky || typeam
`estcky !9 'ajdebt') returk mfose7 vfr jaao 9 mfose7 mar(vfr c 9 >7 c ?
frhuiekts.oekhtl-67 c++){ vfr frh 9 frhuiektsWcY7 cm( !frh || typeam frh !9
'ajdebt') baktckue7 jaao 9 true7 mar(vfr f ck frh){ `estckyWfY 9 frhWfY7 } } cm(!
jaao) returk mfose7 returk `estcky7 } } vfr mreeJatBack 9 kew
MreeJatBack().stfrtHfie()7

You might also like