diff --git a/.gitignore b/.gitignore index b407d3097..58c90df49 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,6 @@ package-lock.json dist/* !dist/leaflet.distortableimage.css !dist/leaflet.distortableimage.js +!dist/vendor.js +!dist/vendor.css +!dist/leaflet.distortableimage.js.map diff --git a/assets/icons/svg-min/opacities.svg b/assets/icons/svg-min/opacities.svg new file mode 100644 index 000000000..78ac05d14 --- /dev/null +++ b/assets/icons/svg-min/opacities.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/svg/opacities.svg b/assets/icons/svg/opacities.svg new file mode 100644 index 000000000..b6145ad77 --- /dev/null +++ b/assets/icons/svg/opacities.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/icons/symbol/sprite.symbol.html b/assets/icons/symbol/sprite.symbol.html index ea9b494b1..5a9640619 100644 --- a/assets/icons/symbol/sprite.symbol.html +++ b/assets/icons/symbol/sprite.symbol.html @@ -34,6 +34,7 @@ .svg-lock-dims { width: 18px; height: 18px; } .svg-opacity-dims { width: 18px; height: 18px; } .svg-opacity_empty-dims { width: 14px; height: 18px; } + .svg-opacities-dims { width: 14px; height: 18px; } .svg-restore-dims { width: 18px; height: 18px; } .svg-rotate-dims { width: 18px; height: 18px; } .svg-scale-dims { width: 18px; height: 18px; } @@ -76,6 +77,7 @@ + @@ -275,6 +277,17 @@

opacity

opacity_empty

+
  • +
    + + + + + + +
    +

    opacities

    +
  • @@ -516,6 +529,17 @@

    opacity

    opacity_empty

  • +
  • +
    + + + + + + +
    +

    opacities

    +
  • diff --git a/assets/icons/symbol/sprite.symbol.svg b/assets/icons/symbol/sprite.symbol.svg index 6189a3dcf..0ba34cb16 100644 --- a/assets/icons/symbol/sprite.symbol.svg +++ b/assets/icons/symbol/sprite.symbol.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/dist/leaflet.distortableimage.js.map b/dist/leaflet.distortableimage.js.map new file mode 100644 index 000000000..51fc22eeb --- /dev/null +++ b/dist/leaflet.distortableimage.js.map @@ -0,0 +1 @@ +{"version":3,"file":"leaflet.distortableimage.js","mappings":"kCAAA,IAAMA,EAAM,GACZC,EAAEC,sBAAwBD,EAAEE,aAAaC,OAAO,CAC9CC,QAAS,CACPC,UAAU,EACVC,WAAY,CACVC,eAAgB,iCAChBC,UAAW,0BACXC,UAAW,kCAIfC,WAV8C,SAUnCN,GACTJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEE,aAAaW,UAAUH,WAAWI,KAAKF,KAAMR,GAC/CJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAKP,SAAWO,KAAKR,QAAQC,UAG/BY,MAlB8C,SAkBxCC,GACJlB,EAAEE,aAAaW,UAAUI,MAAMH,KAAKF,KAAMM,GAE1CN,KAAKO,KAAOD,EAERN,KAAKP,UAAYO,KAAKQ,QAAQC,SAMlCT,KAAKU,GAAG,WAAYV,KAAKW,WAAYX,MACrCA,KAAKU,GAAG,cAAeV,KAAKY,cAAeZ,OAG7Ca,SAjC8C,WAkCxCb,KAAKQ,SAAWR,KAAKQ,QAAQM,UAEjCd,KAAKe,IAAI,WAAYf,KAAKW,WAAYX,MACtCA,KAAKe,IAAI,cAAef,KAAKY,cAAeZ,OAG9CW,WAxC8C,SAwCnCK,GACT,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASR,GAAGO,EAAO,CACnBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASR,GAAGO,EAAMM,aAAc,CAChCC,UAAWxB,KAAKyB,gBAEhBC,YAAa1B,KAAK2B,uBACjB3B,OAGLY,cAvD8C,SAuDhCI,GACZ,IAAMC,EAAQD,EAAEC,MAEhB7B,EAAE8B,SAASH,IAAIE,EAAO,CACpBE,UAAWnB,KAAKoB,mBAChBC,KAAMrB,KAAKsB,eACVtB,MAEHZ,EAAE8B,SAASH,IAAIE,EAAMM,aAAc,CACjCC,UAAWxB,KAAKyB,gBAChBC,YAAa1B,KAAK2B,uBACjB3B,OAGL2B,sBArE8C,SAqExBX,GAAG,WAClBhB,KAAKP,WAEVuB,EAAEY,iBAEF5B,KAAK6B,WAAU,SAACZ,GACd,IAAMa,EAAOb,EAAMT,QACfS,EAAMM,eAAiBP,EAAEe,QAAUD,EAAKE,YAC1C5C,EAAE6C,QAAQC,YAAYjB,EAAMM,aAAc,aACtC,EAAKY,gBACPlB,EAAMmB,WACN,EAAK5B,QAAQ6B,eAEb,EAAK7B,QAAQ8B,uBAMrBC,YAxF8C,SAwFlCC,GACV,OAAOpD,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAGlDY,aA5F8C,WA8F5C,OADiBnC,KAAK0C,YACNC,KAAK3C,KAAKuC,YAAYK,KAAK5C,QAG7C6C,iBAjG8C,SAiG7B7B,EAAGC,GACdD,EAAE8B,UAEA7B,EAAMT,QAAQwB,YAChB5C,EAAE6C,QAAQC,YAAYlB,EAAEe,OAAQ,aAGjB5C,EAAI4D,OAAM,SAACC,GACxB,OAAOA,EAAKC,cAAgBhC,EAAMgC,eAGlC9D,EAAI+D,KAAKjC,GAET9B,EAAIgE,OAAOhE,EAAIiE,QAAQnC,GAAQ,IAKjCjB,KAAKmC,eAAkBlB,EAAMmB,WAC1BpC,KAAKQ,QAAQ8B,kBAGtBb,gBAvH8C,SAuH9BT,GAAG,WACZhB,KAAKP,WAEVO,KAAK6B,WAAU,SAACZ,GACVA,EAAMM,eAAiBP,EAAEe,OAC3Bd,EAAMmB,WAEN,EAAKS,iBAAiB7B,EAAGC,MAIzBD,GAAK5B,EAAE8B,SAASmC,gBAAgBrC,KAGtCI,mBArI8C,SAqI3BJ,GACjB,IAEIsC,EAFEd,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAGZP,KAAKuC,YAAYC,IAEtBxC,KAAK6B,WAAU,SAACZ,GAGd,IAFAA,EAAMsC,iBAAmB,GACzBtC,EAAMmB,WACDkB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACtB,IAAME,EAAIvC,EAAMwC,UAAUH,GAC1BrC,EAAMsC,iBAAiBD,GAAKhD,EAAIoD,mBAAmBF,QAKzDlC,cAtJ8C,SAsJhCN,GACZ,IAAMwB,EAAUxB,EAAEe,OACZzB,EAAMN,KAAKO,KAEjB,GAAKP,KAAKuC,YAAYC,GAAtB,CAEA,IAAMmB,EAAUrD,EAAIoD,mBAAmBlB,EAAQiB,UAAU,IACnDG,EAAQpB,EAAQe,iBAAiB,GAAGM,SAASF,GAEnD3D,KAAK8D,4BAA4BF,EAAOpB,KAG1CuB,UAlK8C,WAkKlC,WAGV,OAFiB/D,KAAK0C,YAENsB,QAAO,SAAC/C,GACtB,IAAMgD,EAAOhD,EAAMT,QAAQ0D,MAC3B,OAAQ,EAAK3B,YAAYtB,IAAmB,SAATgD,MAIvCE,QA3K8C,SA2KtC3B,GAAS,WAGf,OAFiBxC,KAAK0C,YAENsB,QAAO,SAAC/C,GACtB,IAAMgD,EAAOhD,EAAMT,QAAQ0D,MAC3B,OAAOjD,IAAUuB,GAAW,EAAKD,YAAYtB,IAAmB,SAATgD,MAI3DH,4BApL8C,SAoLlBF,EAAOpB,GACjC,IAEIc,EAFEc,EAAepE,KAAKmE,QAAQ3B,GAC5B6B,EAAI,IAAIjF,EAAEkF,eAAe,GAAIV,EAAMW,EAAG,GAAIX,EAAMY,GAGtDJ,EAAaK,SAAQ,SAACxD,GACpB,IAAMyD,EAAc,GACpB,IAAKpB,EAAI,EAAGA,EAAI,EAAGA,IACjBoB,EAAYpB,GAAKe,EAAEM,UAAU1D,EAAMsC,iBAAiBD,IAEtDrC,EAAM2D,qBAAqBF,OAI/BG,kBAlM8C,SAkM5BC,GAIhB,OAHeA,EAAKC,QAAO,SAASC,EAAKC,GACvC,OAAOD,EAAMC,EAAIC,eAChB,GACaJ,EAAKK,QAGvBC,mBAzM8C,WA0M5C,IAAMC,EAAO,CACbA,OAAc,IA4Bd,OA1BArF,KAAK6B,WAAU,SAASZ,GACtB,GAAIjB,KAAKuC,YAAYtB,GAAQ,CAC3B,IAAMqE,EAAWrE,EAAMsE,OAAOC,IAAIC,MAAM,KAClCC,EAAWJ,EAASA,EAASH,OAAO,GACpCQ,EAAK1E,EAAM2E,aACXC,EAAU,CACd,CAACC,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,KAC5B,CAACF,IAAKH,EAAG,GAAGG,IAAKC,IAAKJ,EAAG,GAAGK,MAE9BX,EAAKY,OAAO/C,KAAK,CACfgD,GAAIjF,EAAMgC,YACVuC,IAAKvE,EAAMsE,OAAOC,IAClBW,MAAOlF,EAAMsE,OAAOY,MACpBC,OAAQnF,EAAMsE,OAAOa,OACrBC,gBAAiBX,EACjBY,MAAOT,EACPX,aAAc9F,EAAEmH,UAAUC,cAAcvF,QAG3CjB,MAEHqF,EAAKY,OAASZ,EAAKY,OAAOQ,UAC1BpB,EAAKqB,iBAAmB1G,KAAK6E,kBAAkBQ,EAAKY,QAE7CZ,KAIXjG,EAAEuH,sBAAwB,SAAST,EAAI1G,GACrC,OAAO,IAAIJ,EAAEC,sBAAsB6G,EAAI1G,K,eC7OzCJ,EAAEwH,wBAA0BxH,EAAEyH,aAAatH,OAAO,CAEhDC,QAAS,CACP4G,OAAQ,IACRU,aAAa,EAEbC,aAAc,GACdtH,UAAU,EACVwE,KAAM,UACN+C,UAAU,GAGZlH,WAZgD,SAYrCmH,EAAKzH,GACdJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAEe,MAAMC,gBAAgBF,KAAKF,MAE7BA,KAAK+G,aAAe/G,KAAKR,QAAQuH,aACjC/G,KAAKP,SAAWO,KAAKR,QAAQC,SAC7BO,KAAKkH,UAAYlH,KAAKR,QAAQwH,SAC9BhH,KAAKmH,KAAOF,EACZjH,KAAKoH,SAAW,IAGlB/G,MAvBgD,SAuB1CC,GAAK,WACTN,KAAKO,KAAOD,EACPN,KAAKuB,cAAgBvB,KAAKqH,aAE/B/G,EAAII,GAAG,YAAaV,KAAKsH,OAAQtH,MAE7BA,KAAKR,QAAQqG,UACf7F,KAAKuH,SAAWvH,KAAKR,QAAQqG,QACzBvF,EAAId,QAAQgI,eAAiBpI,EAAEqI,QAAQC,OACzCpH,EAAII,GAAG,WAAYV,KAAK2H,aAAc3H,OAK1CZ,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAAQ,WAIvC,GAHA,EAAKqG,UAAUC,YAAY,EAAKtG,cAChC,EAAKuG,uBAED,EAAKtI,QAAQ4H,SAAU,CACzB,IAAMW,EAAQ,EAAKvI,QAAQ4H,SAASY,KAAO,EAAI,MAAQ,MACvD,EAAKC,SAAS,EAAKzI,QAAQ4H,SAASW,GAAQA,QAE5C,EAAKX,SAAW,CAACY,IAAK,EAAGE,IAAK,GAC9B,EAAKZ,SAIF,EAAKC,UACJjH,EAAId,QAAQgI,eAAiBpI,EAAEqI,QAAQC,OACzCpH,EAAII,GAAG,WAAY,EAAKiH,aAAc,GAK1C,IAAMQ,EAAe,EAAKC,cACtBD,GACF,EAAKE,GAAKF,EAAaG,OAAOC,KAAKJ,GAAc,IAC7C,EAAKE,GAAG5I,UAAY,EAAKe,QAAQC,WAEjC,EAAKhB,UAAY,EAAKe,QAAQC,SAClC,EAAK4H,GAAK,SAIdjJ,EAAE8B,SAASR,GAAGV,KAAKuB,aAAc,QAASvB,KAAKwI,OAAQxI,MACvDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjBmI,cAAezI,KAAK0I,sBACpBC,eAAgB3I,KAAK4I,qBACrBC,YAAa7I,KAAK8I,cACjB9I,MAMGM,EAAIyI,gBAAgB/G,WAAa1B,EAAI0I,kBAAkBhH,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAG7CA,KAAKiJ,KAAK,QAGZpI,SArFgD,SAqFvCP,GACPlB,EAAE8B,SAASH,IAAIf,KAAKuB,aAAc,QAASvB,KAAKwI,OAAQxI,MACxDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClBmI,cAAezI,KAAK0I,sBACpBC,eAAgB3I,KAAK4I,qBACrBC,YAAa7I,KAAK8I,cACjB9I,MACHZ,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAExCA,KAAKQ,SAAWR,KAAKQ,QAAQM,UACjCd,KAAKiJ,KAAK,UAEV7J,EAAEyH,aAAa5G,UAAUY,SAASX,KAAKF,KAAMM,IAG/CwH,qBApGgD,WAqG9C,IAAMxH,EAAMN,KAAKO,KACX2I,EAAqB9J,EAAE6C,QAAQkH,SAASnJ,KAAKuB,aAAc,SAC3D6H,EAAsBhK,EAAE6C,QAAQkH,SAASnJ,KAAKuB,aAAc,UAC5D8H,EACFC,SAASJ,GAAsBI,SAASF,GACtCG,EAAcvJ,KAAKR,QAAQ4G,OAC3BoD,EAAaF,SAASD,EAAcE,GACpCE,EAASnJ,EAAIoJ,QAAQpJ,EAAIqJ,aACzBC,EAASxK,EAAEyK,MAAML,EAAYD,GAAaO,SAAS,GACrD9J,KAAKR,QAAQqG,QACf7F,KAAKuH,SAAWvH,KAAKR,QAAQqG,QAE7B7F,KAAKuH,SAAW,CACdjH,EAAIyJ,UAAUN,EAAO5F,SAAS+F,IAC9BtJ,EAAIyJ,UAAUN,EAAOO,IAAI5K,EAAEyK,MAAMD,EAAOrF,GAAIqF,EAAOpF,KACnDlE,EAAIyJ,UAAUN,EAAOO,IAAI5K,EAAEyK,OAAOD,EAAOrF,EAAGqF,EAAOpF,KACnDlE,EAAIyJ,UAAUN,EAAOO,IAAIJ,KAI7B5J,KAAKiK,mBAAqB,CACxB,OAAUR,EACV,OAAUG,EACV,KAAQtJ,EAAI4J,WAGdlK,KAAKmK,UAAU/K,EAAEgL,aAAapK,KAAK4F,gBAGrCkD,aAlIgD,SAkInC9H,GACI,gBAAXA,EAAEqJ,MAA0BrK,KAAKoC,YAIvCsG,sBAvIgD,WAwI9C,IAAMpI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAKoC,SAAUpC,MAC5CZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAKoC,SAAUpC,OAGnD4I,qBA7IgD,WA8I9C,IAAMtI,EAAMN,KAAKO,KACjBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAKoC,SAAUpC,MAC3CZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAKoC,SAAUpC,OAGpDsK,WAnJgD,WAoJ9C,OAAOtK,KAAKkH,WAGd9E,SAvJgD,WAwJ9C,IAAMN,EAAO9B,KAAKQ,QAClB,GAAKsB,EAAKE,UAOV,OALAF,EAAKQ,iBACLR,EAAKyI,eAELvK,KAAKkH,WAAY,EACjBlH,KAAKiJ,KAAK,YACHjJ,MAGTwI,OAnKgD,SAmKzCxH,GACL,IAAMc,EAAO9B,KAAKQ,QACZ6H,EAAKrI,KAAKqI,GAEhB,GAAKvG,EAAKE,UAAV,CAYA,GAXIhB,GAAK5B,EAAE8B,SAASmC,gBAAgBrC,GAGpChB,KAAKwK,wBAELxK,KAAKkH,WAAY,EACjBpF,EAAKO,cACLP,EAAK2I,eACLzK,KAAKiJ,KAAK,WAGNZ,IAAMA,EAAGlG,eAKb,OAAOnC,KAJLA,KAAKoC,aAOToI,sBA3LgD,WA4L9CxK,KAAKO,KAAKsB,WAAU,SAACZ,GACfA,aAAiB7B,EAAEwH,yBACrB3F,EAAMmB,eAKZsI,UAnMgD,SAmMtCC,EAAQC,GAChB,IAAM9I,EAAO9B,KAAKQ,QAalB,OAXAR,KAAKuH,SAASoD,GAAUC,EAExB5K,KAAKmK,UAAU/K,EAAEgL,aAAapK,KAAK4F,eACnC5F,KAAKiJ,KAAK,UAENnH,EAAK+I,SAAW/I,EAAK+I,mBAAmBzL,EAAE0L,iBAAiBC,UAC7DjJ,EAAKkJ,oBAGPhL,KAAKiL,QAAS,EAEPjL,MAGTkL,sBApNgD,SAoN1BC,EAAMR,EAAQrK,GAClC,OAAIA,EAAId,QAAQ4L,IAAIC,QAAUjM,EAAEkM,IAAID,SAKrB,IAATF,GACFI,EAAajL,EAAIoJ,QAAQiB,GAAQnG,EAAI,EACrCgH,EAAgBlL,EAAIoJ,QAAQiB,GAAQnG,GAAK,MAEzC+G,EAAajL,EAAIoJ,QAAQiB,GAAQnG,EAAI2G,EAAO,EAC5CK,EAAgBlL,EAAIoJ,QAAQiB,GAAQnG,EAAIiH,KAAKC,IAAI,EAAGP,IAAS,KAEvDI,GAAcC,GATtB,IAAID,EACAC,GAYRG,WArOgD,SAqOrCC,GACT,IAAMtL,EAAMN,KAAKO,KACX4K,EAAO7K,EAAI4J,UACXpI,EAAO9B,KAAKQ,QACd8C,EAAI,EAGR,IAAK,IAAMuI,KAAKD,EACd,GAAI5L,KAAKkL,sBAAsBC,EAAMS,EAAUC,GAAIvL,GAIjD,OAFAN,KAAKmK,UAAU/K,EAAEgL,aAAapK,KAAK4F,oBACnC5F,KAAKiJ,KAAK,UAKd,IAAK,IAAM4C,KAAKD,EACd5L,KAAKuH,SAASjE,GAAKsI,EAAUC,GAC7BvI,GAAK,EAYP,OATAtD,KAAKmK,UAAU/K,EAAEgL,aAAapK,KAAK4F,eACnC5F,KAAKiJ,KAAK,UAENnH,EAAK+I,SAAW/I,EAAK+I,mBAAmBzL,EAAE0L,iBAAiBC,UAC7DjJ,EAAKkJ,oBAGPhL,KAAKiL,QAAS,EAEPjL,MAGT4E,qBAtQgD,SAsQ3BkH,GACnB,IAAMxL,EAAMN,KAAKO,KACX4K,EAAO7K,EAAI4J,UACXpI,EAAO9B,KAAKQ,QACd8C,EAAI,EAER,IAAK,IAAMuI,KAAKC,EAAW,CACzB,IAAMnB,EAASrK,EAAIyL,mBAAmBD,EAAUD,IAEhD,GAAI7L,KAAKkL,sBAAsBC,EAAMR,EAAQrK,GAI3C,OAFAN,KAAKmK,UAAU/K,EAAEgL,aAAapK,KAAK4F,oBACnC5F,KAAKiJ,KAAK,UAKd,IAAK,IAAM4C,KAAKC,EACd9L,KAAKuH,SAASjE,GAAKhD,EAAIyL,mBAAmBD,EAAUD,IACpDvI,GAAK,EAYP,OATAtD,KAAKmK,UAAU/K,EAAEgL,aAAapK,KAAK4F,eACnC5F,KAAKiJ,KAAK,UAENnH,EAAK+I,SAAW/I,EAAK+I,mBAAmBzL,EAAE0L,iBAAiBC,UAC7DjJ,EAAKkJ,oBAGPhL,KAAKiL,QAAS,EAEPjL,MAGTgM,QAxSgD,SAwSxCC,GACN,IAEI3I,EACAe,EAHE/D,EAAMN,KAAKO,KACXkJ,EAASnJ,EAAIoJ,QAAQ1J,KAAK2J,aAG1BuC,EAAgB,GAEtB,GAAc,IAAVD,EAAJ,CAEA,IAAK3I,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAI/D,EACCoJ,QAAQ1J,KAAKyD,UAAUH,IACvBO,SAAS4F,GACT0C,WAAWF,GACXjC,IAAIP,GACTyC,EAAc5I,GAAKhD,EAAIyJ,UAAU1F,GAKnC,OAFArE,KAAK2L,WAAWO,GAETlM,OAGToM,SA/TgD,WA+TzB,IAAdC,EAAc,uDAAP,MACRC,EAAStM,KAAKuB,aAAagL,MAAMnN,EAAE6C,QAAQuK,WAC5C/G,MAAM,YAAY,GAClBgH,MAAM,GAAI,GACVhH,MAAM,KAELiH,EAAQJ,EAAO,GACfK,EAAQL,EAAO,GACfM,EAAQN,EAAO,GACfO,EAAQP,EAAO,GAEfQ,EAAcJ,EAAQG,EAAQF,EAAQC,EAExCG,EAAQ3N,EAAE4N,SAASC,UAAUP,EAAOC,EAAO,OAU/C,OARIG,EAAc,IAChBC,GAASA,EAAQ,EAAItB,KAAKyB,IAAMzB,KAAKyB,IAGnCH,EAAQ,IACVA,EAAQ,EAAItB,KAAKyB,GAAKH,GAGR,QAATV,EACHZ,KAAK0B,MAAM/N,EAAE4N,SAASI,iBAAiBL,IACvC3N,EAAEiO,KAAKC,UAAUP,EAAO,IAG9B9E,SA3VgD,SA2VvC8E,GAAqB,IAAdV,EAAc,uDAAP,MACfkB,EAAevN,KAAKoM,SAASC,GAC7BmB,EAAkBT,EAAQQ,EAGhC,OAFAvN,KAAKyN,SAASD,EAAiBnB,GAExBrM,MAGTyN,SAnWgD,SAmWvCV,GAAqB,IAIxBzJ,EACAe,EACAqJ,EANUrB,EAAc,uDAAP,MACf/L,EAAMN,KAAKO,KACXkJ,EAASnJ,EAAIoJ,QAAQ1J,KAAK2J,aAC1B9D,EAAU,GAShB,IAJa,QAATwG,IACFU,EAAQ3N,EAAE4N,SAASW,iBAAiBZ,IAGjCzJ,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAI/D,EAAIoJ,QAAQ1J,KAAKyD,UAAUH,IAAIO,SAAS4F,GAC5CiE,EAAItO,EAAEyK,MACF4B,KAAKmC,IAAIb,GAAS1I,EAAEE,EAAIkH,KAAKoC,IAAId,GAAS1I,EAAEG,EAC5CiH,KAAKoC,IAAId,GAAS1I,EAAEE,EAAIkH,KAAKmC,IAAIb,GAAS1I,EAAEG,GAEhDqB,EAAQvC,GAAKhD,EAAIyJ,UAAU2D,EAAE1D,IAAIP,IAKnC,OAFAzJ,KAAK2L,WAAW9F,GAET7F,MAGT8N,OA7XgD,SA6XzCC,EAAaC,GAClB,IACI1K,EACAe,EAFE/D,EAAMN,KAAKO,KAGX0N,EAAe,GACfrK,EAAQtD,EAAIoJ,QAAQqE,GAAalK,SAASvD,EAAIoJ,QAAQsE,IAE5D,IAAK1K,EAAI,EAAGA,EAAI,EAAGA,IACjBe,EAAI/D,EAAIoJ,QAAQ1J,KAAKyD,UAAUH,IAAIO,SAASD,GAC5CqK,EAAa3K,GAAKhD,EAAIyJ,UAAU1F,GAGlCrE,KAAK2L,WAAWsC,IAGlBC,QA5YgD,WAwZ9C,IAXA,IAAM5N,EAAMN,KAAKO,KACXkJ,EAASzJ,KAAKiK,mBAAmBR,OACjCG,EAAS5J,KAAKiK,mBAAmBL,OACjCuB,EAAOnL,KAAKiK,mBAAmBkB,KAC/BtF,EAAU,CACd4D,EAAO5F,SAAS+F,GAChBH,EAAOO,IAAI5K,EAAEyK,MAAMD,EAAOrF,GAAIqF,EAAOpF,IACrCiF,EAAOO,IAAI5K,EAAEyK,OAAOD,EAAOrF,EAAGqF,EAAOpF,IACrCiF,EAAOO,IAAIJ,IAGJtG,EAAI,EAAGA,EAAI,EAAGA,IAChBhD,EAAIyJ,UAAUlE,EAAQvC,GAAI6H,GAAMgD,OAAOnO,KAAKyD,UAAUH,KACzDtD,KAAK0K,UAAUpH,EAAGhD,EAAIyJ,UAAUlE,EAAQvC,GAAI6H,IAOhD,OAHAnL,KAAKiL,QAAS,EACdjL,KAAKiJ,KAAK,WAEHjJ,MAKToO,oBAtagD,SAsa5BvE,GAOlB,IAAMwE,EAAOjP,EAAEqI,QAAQ6G,SAEjBC,GAASF,EAAO,KAAO,IAAM,IAEnC,MAHa,aAAeA,EAAO,KAAO,IAAM,IAGlCxE,EAAMtF,EAAI,MAAQsF,EAAMrF,EAAI,KAAO+J,GAGnDjH,OApbgD,WAqb9C,IAAMhH,EAAMN,KAAKO,KACXiO,EAAQxO,KAAKuB,aACbmC,EAAqBtE,EAAEwD,KAAKtC,EAAIoD,mBAAoBpD,GACpDmO,EAAkBzO,KACnB0O,8BAA8BhL,GAC7BC,EAAUD,EAAmB1D,KAAKyD,UAAU,IAC5CkL,EAAOvP,EAAE6C,QAAQ2M,gBAAgBH,GACjCI,EAAc7O,KAAKoO,oBAAoBzK,GAG7C6K,EAAMM,aAAenL,EAErB6K,EAAMjC,MAAMnN,EAAE6C,QAAQuK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,KAK5DP,EAAMjC,MAAMnN,EAAE6C,QAAQuK,UAAY,WAAa,QAE/CxM,KAAKoH,SAASY,IAAMhI,KAAKoM,WACzBpM,KAAKoH,SAASc,IAAMlI,KAAKoM,SAAS,QASpCzE,aAldgD,SAkdnCqH,GACX,IAAM1O,EAAMN,KAAKO,KACXiO,EAAQxO,KAAKuB,aACb0N,EAAwB,SAASrE,GACrC,OAAOtK,EAAI4O,uBAAuBtE,EAAQoE,EAAM7D,KAAM6D,EAAMvF,SAExDgF,EAAkBzO,KAAK0O,8BACzBO,GAEEtL,EAAUsL,EAAsBjP,KAAKyD,UAAU,IAC/CkL,EAAOvP,EAAE6C,QAAQ2M,gBAAgBH,GACjCI,EAAc7O,KAAKoO,oBAAoBzK,GAG7C6K,EAAMM,aAAenL,EAErB6K,EAAMjC,MAAMnN,EAAE6C,QAAQuK,WAAa,CAACqC,EAAaF,GAAMI,KAAK,MAG9DnJ,WAregD,WAse9C,OAAO5F,KAAKuH,UAGd9D,UAzegD,SAyetCH,GACR,OAAOtD,KAAKuH,SAASjE,IAIvBqG,UA9egD,WA+e9C,IAAMrJ,EAAMN,KAAKO,KACXwE,EAAS/E,KAAK4F,aAAab,QAAO,SAASoK,EAAKxE,GACpD,OAAOwE,EAAInF,IAAI1J,EAAIoJ,QAAQiB,MAC1BvL,EAAEyK,MAAM,EAAG,IACd,OAAOvJ,EAAIyJ,UAAUhF,EAAO+E,SAAS,KAGvC4E,8BAtfgD,SAsflBU,GAI5B,IAIIC,EAJEzF,EAASwF,EAAkBpP,KAAKyD,UAAU,IAC1C6L,EAAItP,KAAKuB,aAAagO,aAAe,IACrCC,EAAIxP,KAAKuB,aAAakO,cAAgB,IACtCjM,EAAI,GAGV,IAAK6L,EAAI,EAAGA,EAAI,EAAGA,IACjB7L,EAAEN,KAAKkM,EAAkBpP,KAAKyD,UAAU4L,IAAIK,UAAU9F,IAcxD,OAAOxK,EAAEuQ,WAAWC,oBAChB,EAAG,EAAGpM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnB8K,EAAG,EAAG9L,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnB,EAAGgL,EAAGhM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,EACnB8K,EAAGE,EAAGhM,EAAE,GAAGe,EAAGf,EAAE,GAAGgB,MAK3BpF,EAAEyQ,wBAA0B,SAAS3J,EAAI1G,GACvC,OAAO,IAAIJ,EAAEwH,wBAAwBV,EAAI1G,IAG3CJ,EAAE0Q,IAAIC,aAAY,WACX3Q,EAAE6C,QAAQQ,SAASzC,KAAKgQ,eAAgB,QAC3C5Q,EAAE6C,QAAQgO,SAASjQ,KAAKgQ,eAAgB,W,0BC9hB5C5Q,EAAE6C,QAAU7C,EAAE6C,SAAW,GACzB7C,EAAE0L,iBAAmB1L,EAAE0L,kBAAoB,GAC3C1L,EAAE8Q,iBAAmB9Q,EAAE0L,iBAEvB1L,EAAE0L,iBAAiBqF,UAAY/Q,EAAEgR,QAAQ7Q,OAAO,CAE9CC,QAAS,CACP6Q,SAAU,YAGZvQ,WAN8C,SAMnCQ,EAAKd,GACdQ,KAAKO,KAAOD,EACZlB,EAAEW,WAAWC,KAAMR,IAGrB8Q,SAX8C,WAYvCtQ,KAAKuQ,aACRvQ,KAAKwQ,WAAaxQ,KAAKyQ,kBACvBzQ,KAAK0Q,eAAiB1Q,KAAK2Q,QAC3B3Q,KAAK4Q,SAAW5Q,KAAK6Q,gBACrB7Q,KAAK8Q,WAAW9Q,KAAKwQ,WAAYxQ,KAAK0Q,eAAgB1Q,KAAK4Q,UAE3DxR,EAAE8B,SAASR,GAAGV,KAAK4Q,SAAU,QAAS5Q,KAAK+Q,iBAAkB/Q,MAE7DZ,EAAE8B,SAAS8P,wBAAwBhR,KAAKwQ,YACxCpR,EAAE8B,SAAS+P,yBAAyBjR,KAAKwQ,cAI7CU,YAzB8C,WA0BxClR,KAAKuQ,aACPnR,EAAE8B,SAASH,IAAIf,KAAK4Q,SAAU,QAAS5Q,KAAK+Q,iBAAkB/Q,MAE9DZ,EAAE6C,QAAQkP,OAAOnR,KAAK4Q,UACtBxR,EAAE6C,QAAQkP,OAAOnR,KAAK0Q,gBACtBtR,EAAE6C,QAAQkP,OAAOnR,KAAKwQ,YACtBxQ,KAAKuQ,YAAa,IAItBE,gBApC8C,WAqC5C,IAAMW,EAAYhS,EAAE6C,QAAQoP,OAAO,MAAO,sBAC1CD,EAAUE,aAAa,KAAM,iBAE7B,IAAMC,EAAUnS,EAAE6C,QAAQoP,OAAO,KAAM,WAGvC,OAFAD,EAAUvJ,YAAY0J,GAEfH,GAGTP,cA9C8C,WA+C5C,IAAMW,EAAUpS,EAAE6C,QAAQoP,OAAO,IAAK,IAUtC,OATAG,EAAQC,UAAYrS,EAAEsS,SAASL,OAAO,iBAEtCG,EAAQF,aAAa,KAAM,oBAC3BE,EAAQF,aAAa,OAAQ,KAC7BE,EAAQF,aAAa,QAAS,eAE9BE,EAAQF,aAAa,OAAQ,UAC7BE,EAAQF,aAAa,aAAc,eAE5BE,GAGTb,MA5D8C,WA6D5C,IAAMgB,EAAOvS,EAAE6C,QAAQoP,OAAO,MAAO,IAIrC,OAHAM,EAAKL,aAAa,KAAM,qBACxBK,EAAKpF,MAAMqF,QAAU,OAEdD,GAGTb,WApE8C,SAoEnCM,EAAWO,EAAME,GAC1B7R,KAAKuQ,WAAanR,EAAE0S,QAAQ,CAACzB,SAAUrQ,KAAKR,QAAQ6Q,WAEpDrQ,KAAKuQ,WAAWlQ,MAAQ,WAuBtB,OAtBA+Q,EAAUvJ,YAAY8J,GACtBA,EAAKI,mBACD,YACA,k3CAkBJX,EAAUvJ,YAAYgK,GACfT,GAGTpR,KAAKuQ,WAAWyB,MAAMhS,KAAKO,OAG7BwQ,iBApG8C,SAoG7B/P,GACfA,EAAEY,iBAEF5B,KAAKwQ,WAAWyB,UACgB,kCAA9BjS,KAAKwQ,WAAWyB,UACd,qCACA,gCAGJjS,KAAK0Q,eAAenE,MAAMqF,QACc,SAAtC5R,KAAK0Q,eAAenE,MAAMqF,QAAqB,QAAU,OAG3D5R,KAAK4Q,SAASa,UACgB,UAA5BzR,KAAK4Q,SAASa,UACZrS,EAAEsS,SAASL,OAAO,iBAClB,QAGJjS,EAAEsS,SAASQ,YAAYlS,KAAK4Q,SAAU,cAAe,eACrDxR,EAAE6C,QAAQC,YAAYlC,KAAK4Q,SAAU,eAGvCuB,eA3H8C,WA4H5C,IAAIC,SAASC,cAAc,sBAA3B,CAEA,IAAMC,EAAKlT,EAAE6C,QAAQoP,OAAO,MAAO,IACnCiB,EAAGpM,GAAK,oBACRoM,EAAGhB,aAAa,SAAU,UAE1BtR,KAAKuS,UAAW,IAAInT,EAAEoT,kBAAmBC,SACzCH,EAAGb,UAAYzR,KAAKuS,SAEpBH,SAASC,cAAc,8BAA8BxK,YAAYyK,OAIrElT,EAAE0L,iBAAiBqF,UAAUJ,aAAY,WACvC3Q,EAAE0L,iBAAiBqF,UAAUlQ,UAAUyS,GACrCtT,EAAE0L,iBAAiBqF,UAAUlQ,UAAUyS,GACvCtT,EAAE0L,iBAAiBqF,UAAUlQ,UAAUyS,GAAK,EAC5C,EAGgD,IAA9CtT,EAAE0L,iBAAiBqF,UAAUlQ,UAAUyS,IAAatT,EAAEqI,QAAQkL,SAChE,EAAKlS,SACL,EAAK0R,qBAIT/S,EAAE8Q,iBAAiB0C,UAAY,SAACtS,EAAKd,GACnC,OAAO,IAAIJ,EAAE0L,iBAAiBqF,UAAU7P,EAAKd,K,eC3J/CJ,EAAE0L,iBAAmB1L,EAAE0L,kBAAoB,GAG3C1L,EAAEC,sBAAsBwT,KAAOzT,EAAEgR,QAAQ7Q,OAAO,CAC9CC,QAAS,CACPsT,OAAQ1T,EAAE8Q,iBAAiB6C,kBAG7BjT,WAL8C,SAKnCkT,EAAOxT,GAChBQ,KAAKiT,OAASD,EACdhT,KAAKkT,YAAcF,EAAMxT,QAAQE,WAEjCN,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE8Q,iBAAiB6C,iBAAiBI,OAAS,iBAG/C7C,SAd8C,WAe5C,IACMhQ,EADQN,KAAKiT,OACD1S,KAElBP,KAAKoT,YAAcpT,KAAKR,QAAQ6T,QAChCrT,KAAKsT,YACDlU,EAAEwD,KAAKxD,EAAEe,MAAMoT,aAAavT,KAAM,cAAe,aACjDA,KAAKwT,YAAaxT,MAEtBZ,EAAE8B,SAASR,GAAG0R,SAAU,UAAWpS,KAAKyT,WAAYzT,MAE9CM,EAAIyI,gBAAgB/G,WAAa1B,EAAI0I,kBAAkBhH,WAC3D5C,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAK0T,cAAe1T,MAGlDZ,EAAE8B,SAASR,GAAGJ,EAAK,CACjBmI,cAAezI,KAAK0I,sBACpBC,eAAgB3I,KAAK4I,qBACrBC,YAAa7I,KAAK8I,aAClB6K,cAAe3T,KAAK4T,iBACnB5T,MAEHA,KAAKiT,OAAOxT,UAAW,EACvBO,KAAKiT,OAAOpR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQC,aAG/CyQ,YAxC8C,WAyC5C,IACM5Q,EADQN,KAAKiT,OACD1S,KAElBnB,EAAE8B,SAASH,IAAIqR,SAAU,UAAWpS,KAAKyT,WAAYzT,MAE/CM,EAAIyI,gBAAgB/G,WAAa1B,EAAI0I,kBAAkBhH,WAC3D5C,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAK0T,cAAe1T,MAGnDZ,EAAE8B,SAASH,IAAIT,EAAK,CAClBmI,cAAezI,KAAK0I,sBACpBC,eAAgB3I,KAAK4I,qBACrBC,YAAa7I,KAAK8I,aAClB6K,cAAe3T,KAAK4T,iBACnB5T,MAEHA,KAAK0T,gBACL1T,KAAKiT,OAAOxT,UAAW,EACvBO,KAAKiT,OAAOpR,WAAU,SAAAZ,GAAK,OAAIA,EAAMT,QAAQM,cAG/CL,OA9D8C,WAiE5C,OAFAT,KAAK6T,UAAW,EAChB7T,KAAKsQ,WACEtQ,MAGTc,QApE8C,WAuE5C,OAFAd,KAAK6T,UAAW,EAChB7T,KAAKkR,cACElR,MAGTyT,WA1E8C,SA0EnCzS,GACT,IACM8S,EADS9T,KAAKR,QAAQsT,OACD9R,EAAE+S,KAExB/T,KAAK8T,IAEN9T,KAAKiT,OAAO9Q,gBACdnC,KAAK8T,GAAa5T,KAAKF,OAI3B8I,aArF8C,SAqFjC9H,GACI,gBAAXA,EAAEqJ,MAA0BrK,KAAK0T,cAAc1S,IAIrD0H,sBA1F8C,WA2F5C,IAAMpI,EAAMN,KAAKiT,OAAO1S,KACxBnB,EAAE8B,SAASH,IAAIT,EAAK,QAASN,KAAK0T,cAAe1T,MACjDZ,EAAE8B,SAASR,GAAGJ,EAAK,cAAeN,KAAK0T,cAAe1T,OAGxD4I,qBAhG8C,WAiG5C,IAAMtI,EAAMN,KAAKiT,OAAO1S,KACxBnB,EAAE8B,SAASR,GAAGJ,EAAK,QAASN,KAAK0T,cAAe1T,MAChDZ,EAAE8B,SAASH,IAAIT,EAAK,cAAeN,KAAK0T,cAAe1T,OAGzD0T,cAtG8C,SAsGhC1S,GACZ,IAAIgT,EAEAhT,IAAKgT,EAAKhT,EAAEiT,eAKZD,IAAOA,EAAGlR,UAAYkR,EAAGjS,kBAAkBmS,oBAI/ClU,KAAKiT,OAAOpR,WAAU,SAACZ,GACrB7B,EAAE6C,QAAQkS,YAAYlT,EAAMM,aAAc,aAC1CN,EAAMmB,cAGRpC,KAAKsC,iBAEDtB,GAAK5B,EAAE8B,SAASmC,gBAAgBrC,KAGtCoT,aA5H8C,WA4H/B,WACRpU,KAAKqU,QAAQjV,EAAEkV,eAEpBtU,KAAKiT,OAAOpR,WAAU,SAACZ,GACjB,EAAKgS,OAAO1Q,YAAYtB,KACbA,EAAMT,QACd+T,UAELtT,EAAMmB,gBAKZoS,WAzI8C,WAyIjC,WACNxU,KAAKqU,QAAQjV,EAAEqV,aAEpBzU,KAAKiT,OAAOpR,WAAU,SAACZ,GACjB,EAAKgS,OAAO1Q,YAAYtB,KACbA,EAAMT,QACdkU,QAELtV,EAAE6C,QAAQgO,SAAShP,EAAMM,aAAc,kBAK7CqS,gBAtJ8C,SAsJ9B5S,GAAG,WACX2T,EAAM3T,EAAE4T,iBACRtU,EAAMN,KAAKiT,OAAO1S,KAExBP,KAAKiT,OAAOpR,WAAU,SAACZ,GACrB,IAAMa,EAAOb,EAAMT,QAEfS,EAAMqJ,cAAgBrJ,EAAMmB,WAEhC,IAAM+I,EAAO7K,EAAI4J,UACXT,EAASnJ,EAAIqJ,YACfkL,EAAYzV,EAAEgL,aAAanJ,EAAMwC,UAAU,GAAIxC,EAAMwC,UAAU,IAEnEoR,EAAYvU,EAAIwU,8BAA8BD,EAAW1J,EAAM1B,GAC3DkL,EAAII,WAAWF,IAAc/S,EAAKE,YAC/B,EAAK6I,SAAW,EAAKxI,cAC1BjD,EAAE6C,QAAQgO,SAAShP,EAAMM,aAAc,kBAK7CyT,aA3K8C,SA2KjChU,GAAG,WACd,GAAKhB,KAAKqU,QAAQjV,EAAE6V,cAApB,CAEA,IAAMC,EAAiBlV,KAAKiT,OAAOlP,YAC7BoR,EAAID,EAAe/P,OAEf,IAANgQ,IAEW/V,EAAE6C,QAAQmT,eAAeD,KAGtCD,EAAezQ,SAAQ,SAACxD,GACtB,EAAKgS,OAAOoC,YAAYpU,MAErBjB,KAAKiT,OAAO9Q,gBACfnC,KAAKsC,kBAILtB,GAAK5B,EAAE8B,SAASmC,gBAAgBrC,MAGtCsU,aAjM8C,WAkMvCtV,KAAKuV,mBACRvV,KAAKkT,YAAYsC,gBAAaC,GAGhCC,cAAc1V,KAAK2V,iBAGrBtT,YAzM8C,WA0M5C,IAAM2Q,EAAQhT,KAAKiT,OACb3S,EAAM0S,EAAMzS,KAEdyS,EAAMxT,QAAQoW,iBAAmB5V,KAAK6K,UAE1C7K,KAAK6K,QAAUzL,EAAE8Q,iBAAiB2F,WAAW,CAC3CxC,QAASrT,KAAKoT,YACd/C,SAAU,YACT2B,MAAM1R,EAAK0S,KAGhB1Q,eArN8C,WAsN5C,IAAMhC,EAAMN,KAAKiT,OAAO1S,KACxB,IAAIP,KAAK6K,QAIP,OAAO,EAHPvK,EAAI+U,YAAYrV,KAAK6K,SACrB7K,KAAK6K,SAAU,GAMnBwJ,QA/N8C,SA+NtCyB,GACN,OAAO9V,KAAKoT,YAAYzQ,MAAK,SAAAoT,GAAM,OAAIA,IAAWD,MAGpDE,QAnO8C,SAmOtCF,GAMN,MALwB,yBAApBA,EAAMG,WAAyCjW,KAAKqU,QAAQyB,KAC9D9V,KAAKsC,iBACLtC,KAAKoT,YAAYlQ,KAAK4S,GACtB9V,KAAKqC,eAEArC,MAGTkW,WA5O8C,SA4OnCJ,GAAO,WAWhB,OAVA9V,KAAKoT,YAAYzQ,MAAK,SAACwT,EAAMC,GAC3B,OAAI,EAAKhD,YAAYgD,KAASN,IAC5B,EAAKxT,iBACL,EAAK8Q,YAAYjQ,OAAOiT,EAAK,GAC7B,EAAK/T,eACE,MAKJrC,MAGTwT,YA1P8C,WA0PhC,WACZ,GAAKxT,KAAKqU,QAAQjV,EAAEiX,cAEpB,OAAO,IAAIC,SAAQ,SAACC,GAClB,IAGI3W,EAHE4W,EAAO,EAAKtD,YAClBsD,EAAKD,QAAUA,EAGf,EAAKZ,eAAiB,KAmEtB,EAAKJ,mBAAqBiB,EAAKhB,WAC1B,EAAKD,mBACRiB,EAAKhB,WAAa,EAAKvC,OAAO7N,qBAAqBa,QAGrDuQ,EAAKC,UAAYD,EAAKC,WAAa,IACnCD,EAAKvK,MAAQuK,EAAKvK,OAAS,IAC3BuK,EAAKE,QAAUF,EAAKE,SAvEI,SAACC,IACvBA,EAAOC,KAAKC,MAAMF,IAETG,aACHlX,IAAc+W,EAAKG,YAAcH,EAAKG,WAAWC,MAAM,WAIzDnX,EAAY+W,EAAKG,YAIC,aAAhBH,EAAKK,SACPtB,cAAc,EAAKC,gBAEd,EAAKJ,mBACR,EAAKrC,YAAYsC,gBAAaC,GAGhCc,IACiB,OAAbI,EAAKM,KACPC,MAAM,qBAAuBV,EAAK3W,UAAY8W,EAAKM,MAMvDE,QAAQC,IAAIT,KA6ChBH,EAAKa,gBAAkBb,EAAKa,iBAvCI,SAACV,GAC/B/W,EAAY4W,EAAK5W,UAAY+W,EAE7B,EAAKhB,eAAiB2B,aAAY,WAChC,IACMC,EAAM,IAAIC,QAAJ,UAAe5X,EAAf,YAA4B6X,KAAKC,OAD7B,CAACC,OAAQ,QAEzBC,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKrB,EAAKE,WACZF,EAAKC,YA6BVD,EAAKyB,eAAiBzB,EAAKyB,gBAzBI,SAACC,GAC9B,IAAMC,EAAO,IAAIC,SACjBD,EAAKE,OAAO,aAAczB,KAAK0B,UAAUJ,EAAW1C,aACpD2C,EAAKE,OAAO,QAASH,EAAWjM,OAChCkM,EAAKE,OAAO,UAAU,GAEtB,IAAME,EAAU,CAACZ,OAAQ,OAAQa,KAAML,GACjCZ,EAAM,IAAIC,QAAQU,EAAWvY,eAAgB4Y,GACnDX,MAAML,GAAKM,MAAK,SAACC,GACf,GAAIA,EAAIC,GACN,OAAOD,EAAIE,UAEZH,KAAKK,EAAWb,kBAerBb,EAAKyB,eAAezB,SAK1BpX,EAAEuH,sBAAsB7E,KAAO,SAACkR,EAAOxT,GACrC,OAAO,IAAIJ,EAAEC,sBAAsBwT,KAAKG,EAAOxT,K,eCzVjDJ,EAAE0L,iBAAmB1L,EAAE0L,kBAAoB,GAG3C1L,EAAE0L,iBAAiB+H,KAAOzT,EAAEgR,QAAQ7Q,OAAO,CACzCC,QAAS,CACPiZ,QAAS,GACTC,QAAS,gBACT5F,OAAQ1T,EAAE8Q,iBAAiByI,YAG7B7Y,WAPyC,SAO9B0C,EAAShD,GAClBQ,KAAK4Y,SAAWpW,EAChBxC,KAAK6Y,eAAgB,EACrB7Y,KAAKkE,MAAQ1B,EAAQhD,QAAQyE,KAC7BjE,KAAK8Y,cAAe,EACpB9Y,KAAK+Y,WAAY,EACjB/Y,KAAKgZ,SAAWxZ,EAAQiZ,QAExBrZ,EAAEW,WAAWC,KAAMR,GAEnBJ,EAAE8Q,iBAAiByI,WAAWxF,OAAS,aAIzC7C,SArByC,WAsBvC,IAAM9N,EAAUxC,KAAK4Y,SAErB5Y,KAAKoT,YAAcpT,KAAKR,QAAQ6T,QAGhC7Q,EAAQyW,eACRjZ,KAAKkZ,aACLlZ,KAAKmZ,eACLnZ,KAAKoZ,4BAED5W,EAAQ8H,eAAiB9H,EAAQhD,QAAQoW,iBAC3C5V,KAAKqC,cAGPrC,KAAKqZ,cAAc7W,EAAQ6F,IAAK7F,EAAQ6F,GAExCjJ,EAAE8B,SAASR,GAAG8B,EAAQjB,aAAc,CAClC+X,SAAUtZ,KAAKuZ,UACdvZ,MAEHZ,EAAE8B,SAASR,GAAG8Y,OAAQ,UAAWxZ,KAAKyT,WAAYzT,OAIpDkR,YA9CyC,WA+CvC,IAAM1O,EAAUxC,KAAK4Y,SACfvQ,EAAKrI,KAAKqZ,YAOhB,IAAK,IAAMI,KAJXzZ,KAAK0Z,mBAED1Z,KAAK6K,SAAW7K,KAAKsC,iBAEJtC,KAAK2Z,SACxBva,EAAE6C,QAAQkP,OAAOsI,GAOfra,EAAE6C,QAAQQ,SAASD,EAAQjB,aAAc,cAC3CnC,EAAE6C,QAAQkS,YAAY3R,EAAQjB,aAAc,aAG1C8G,IAAQA,EAAGlG,gBAAkBkG,EAAG7H,QAAQqK,SAC1CxC,EAAG7H,QAAQ8B,iBAGblD,EAAE8B,SAASH,IAAIyB,EAAQjB,aAAc,CACnC+X,SAAUtZ,KAAKuZ,UACdvZ,MAEHZ,EAAE8B,SAASH,IAAIyY,OAAQ,UAAWxZ,KAAKyT,WAAYzT,OAGrDc,QA9EyC,WA+EvC,OAAKd,KAAK6T,UAEV7T,KAAK4Y,SAASxW,WACdpC,KAAK6T,UAAW,EAChB7T,KAAKkR,cACElR,MALsBA,MAQ/BkZ,WAvFyC,WA2FvC,IAAK,IAAMjV,KAHXjE,KAAK4Z,OAAS,GAGKxa,EAAE0L,iBAAiB+H,KAAKgH,MAAO,CAChD,IAAM9D,EAAS3W,EAAE0L,iBAAiB+H,KAAKgH,MAAM5V,IACH,IAAtCjE,KAAKoT,YAAYhQ,QAAQ2S,KAC3B/V,KAAK4Z,OAAO3V,GAAQ8R,GAMnB/V,KAAK4Z,OAAO5Z,KAAKkE,SACpBlE,KAAKkE,MAAQoE,OAAOC,KAAKvI,KAAK4Z,QAAQ,KAK1CT,aA1GyC,WA2GvC,IACI7V,EADEd,EAAUxC,KAAK4Y,SAIrB,IADA5Y,KAAK8Z,aAAe1a,EAAE2a,aACjBzW,EAAI,EAAGA,EAAI,EAAGA,IACjBtD,KAAK8Z,aAAaE,SAAS5a,EAAE6a,WAAWzX,EAASc,IAInD,IADAtD,KAAKka,cAAgB9a,EAAE2a,aAClBzW,EAAI,EAAGA,EAAI,EAAGA,IACjBtD,KAAKka,cAAcF,SAAS5a,EAAE+a,YAAY3X,EAASc,IAIrD,IADAtD,KAAKoa,gBAAkBhb,EAAE2a,aACpBzW,EAAI,EAAGA,EAAI,EAAGA,IACjBtD,KAAKoa,gBAAgBJ,SAAS5a,EAAEib,cAAc7X,EAASc,IAIzD,IADAtD,KAAKsa,eAAiBlb,EAAE2a,aACnBzW,EAAI,EAAGA,EAAI,EAAGA,IACjBtD,KAAKsa,eAAeN,SAAS5a,EAAEmb,aAAa/X,EAASc,IAKvD,IADAtD,KAAKwa,mBAAqBpb,EAAE2a,aACvBzW,EAAI,EAAGA,EAAI,EAAGA,IACjBtD,KAAKwa,mBAAmBR,SAAS5a,EAAEqb,iBAAiBjY,EAASc,IAI/D,IADAtD,KAAK0a,aAAetb,EAAE2a,aACjBzW,EAAI,EAAGA,EAAI,EAAGA,IACjBtD,KAAK0a,aAAaV,SAAS5a,EAAEub,WAAWnY,EAASc,EAAG,CAACsX,WAAW,KAGlE5a,KAAK2Z,SAAW,CACdtY,KAAMrB,KAAK8Z,aACX7N,MAAOjM,KAAKka,cACZW,QAAS7a,KAAKoa,gBACdU,OAAQ9a,KAAKsa,eACbS,WAAY/a,KAAKwa,mBACjBQ,KAAMhb,KAAK0a,eAIftB,0BAvJyC,WAwJvC,IAAM6B,EAAKjb,KAAK4Y,SAGX5Y,KAAKkE,OAKVlE,KAAKkb,iBAEAD,EAAG3Q,cAAgBtK,KAAKmb,eAC3Bnb,KAAKmb,cAActZ,WAAU,SAAC4X,GAC5BA,EAAO2B,WAAW,GACd3B,EAAO4B,UAAY5B,EAAO4B,SAASva,aAGtCd,KAAKsb,OAAO,SAAWtb,KAAKub,mBAZ/Bvb,KAAKub,mBAeT9H,WA3KyC,SA2K9BzS,GACT,IACM8S,EADS9T,KAAKR,QAAQsT,OACD9R,EAAE+S,KACvBkH,EAAKjb,KAAK4Y,SACVvQ,EAAKrI,KAAKqZ,YAEZhR,GAAMA,EAAGlG,qBAEasT,IAAtBzV,KAAK8T,IAA+BmH,EAAGzb,QAAQoW,iBAC7CqF,EAAG3Q,cAAgBtK,KAAK6K,SAC1B7K,KAAK8T,GAAa5T,KAAKF,OAK7Bwb,YA1LyC,SA0L7BC,EAAKC,GAAM,WACrB,MAAuB,yBAAnBA,EAAKzF,WAAwCjW,KAAKqU,QAAQqH,IAG9D1b,KAAKoT,YAAYzQ,MAAK,SAACwT,EAAMC,GAC3B,GAAID,IAASsF,EAAK,CAIhB,IAAK,IAAMxX,KAHX,EAAK3B,iBACL,EAAK8Q,YAAYgD,GAAOsF,EACxB,EAAKrZ,cACcjD,EAAE0L,iBAAiB+H,KAAKgH,MACrCza,EAAE0L,iBAAiB+H,KAAKgH,MAAM5V,KAAUwX,UACnC,EAAK7B,OAAO3V,GACnB,EAAK0X,YAAY1X,IACR7E,EAAE0L,iBAAiB+H,KAAKgH,MAAM5V,KAAUyX,IACjD,EAAK9B,OAAO3V,GAAQyX,GAGxB,OAAO,MAfF1b,MAqBXgW,QAjNyC,SAiNjCF,GACN,GAAwB,yBAApBA,EAAMG,YAAyCjW,KAAKqU,QAAQyB,GAAQ,CAItE,IAAK,IAAM7R,KAHXjE,KAAKsC,iBACLtC,KAAKoT,YAAYlQ,KAAK4S,GACtB9V,KAAKqC,cACcjD,EAAE0L,iBAAiB+H,KAAKgH,MACrCza,EAAE0L,iBAAiB+H,KAAKgH,MAAM5V,KAAU6R,IAC1C9V,KAAK4Z,OAAO3V,GAAQ6R,GAGnB9V,KAAK4Y,SAAStO,cAAgBtK,KAAKsC,iBAE1C,OAAOtC,MAGTqU,QAhOyC,SAgOjCyB,GACN,OAAO9V,KAAKoT,YAAYzQ,MAAK,SAAAoT,GAAM,OAAIA,IAAWD,MAGpDI,WApOyC,SAoO9BJ,GAAO,WAgBhB,OAfA9V,KAAKoT,YAAYzQ,MAAK,SAACwT,EAAMC,GAC3B,GAAID,IAASL,EAAO,CAIlB,IAAK,IAAM7R,KAHX,EAAK3B,iBACL,EAAK8Q,YAAYjQ,OAAOiT,EAAK,GAC7B,EAAK/T,cACcjD,EAAE0L,iBAAiB+H,KAAKgH,MACrCza,EAAE0L,iBAAiB+H,KAAKgH,MAAM5V,KAAU6R,WACnC,EAAK8D,OAAO3V,GACnB,EAAK0X,YAAY1X,IAGrB,OAAO,MAGNjE,KAAK4Y,SAAStO,cAAgBtK,KAAKsC,iBACjCtC,MAIT2b,YAxPyC,SAwP7B1X,GACNjE,KAAKsb,OAAOrX,KACVqE,OAAOC,KAAKvI,KAAK4b,YAAYzW,QAAU,EACzCnF,KAAKuZ,YAEQ,SAATtV,GAAmBjE,KAAKub,kBAC5Bvb,KAAKkE,MAAQ,GACblE,KAAKkb,mBAKX5Y,eApQyC,WAqQvC,IACMhC,EADKN,KAAK4Y,SACDrY,KAEXP,KAAK6K,UACPvK,EAAI+U,YAAYrV,KAAK6K,SACrB7K,KAAK6K,SAAU,IAInB0Q,gBA9QyC,WA8QvB,WACV/Y,EAAUxC,KAAK4Y,SACftY,EAAMkC,EAAQjC,KAEpBP,KAAKqb,SAAW,IAAIjc,EAAEyc,UAAUrZ,EAAQjB,cACxCvB,KAAKqb,SAAS5a,SAGdT,KAAKqb,SAAS3a,GAAG,aAAa,WAC5B8B,EAAQyG,KAAK,aACb,EAAK3G,oBAOPtC,KAAKqb,SAASS,gBAAkB,WAC9B,IAEIC,EAEAzY,EAJEK,EAAUnB,EAAQiB,UAAU,GAC5BG,EAAQ5D,KAAKgc,QAAQnY,SAASvD,EAAIoD,mBAAmBC,IAErDkC,EAAU,GAKhB,IAFA7F,KAAKiJ,KAAK,WAEL3F,EAAI,EAAGA,EAAI,EAAGA,IACjByY,EAAezb,EAAIoD,mBAAmBlB,EAAQiB,UAAUH,IACxDuC,EAAQvC,GAAKhD,EAAIyL,mBAAmBgQ,EAAa/R,IAAIpG,IAGvDpB,EAAQmJ,WAAW9F,GACnBrD,EAAQyG,KAAK,QAEbjJ,KAAKiJ,KAAK,SAGZjJ,KAAKqb,SAAS3a,GAAG,WAAW,WAC1B8B,EAAQyG,KAAK,eAIjByQ,iBAxTyC,WAyTnC1Z,KAAKqb,WACPrb,KAAKqb,SAASva,iBACPd,KAAKqb,WAIhBY,UA/TyC,WAgUvCjc,KAAKkc,QAAQ,SAGfC,WAnUyC,WAoUvCnc,KAAKkc,QAAQ,UAGfE,aAvUyC,WAwUvCpc,KAAKkc,QAAQ,YAGfG,YA3UyC,WA4UvCrc,KAAKkc,QAAQ,WAGfI,gBA/UyC,WAgVvCtc,KAAKkc,QAAQ,eAGfK,gBAnVyC,WAoVnCvc,KAAKsb,OAAO,QAAWtb,KAAKuU,UACzBvU,KAAK0U,SAGd8H,eAxVyC,WAyVvC,IACI/D,EADEjK,EAAQxO,KAAK4Y,SAASrX,aAGvBvB,KAAKqU,QAAQjV,EAAEqd,iBAEpBzc,KAAK8Y,cAAgB9Y,KAAK8Y,aAC1BL,EAAUzY,KAAK8Y,aAAe9Y,KAAKR,QAAQiZ,QAAU,EAErDrZ,EAAE6C,QAAQmZ,WAAW5M,EAAOiK,GAC5BjK,EAAM8C,aAAa,UAAWmH,GAE9BzY,KAAK0c,aAGPC,cAvWyC,SAuW3BC,GACZ,IAAMpO,EAAQxO,KAAK4Y,SAASrX,aAC5BvB,KAAKgZ,SAAW4D,EACX5c,KAAKqU,QAAQjV,EAAEyd,mBAEnB7c,KAAKgZ,SAAW,EAAKhZ,KAAK8Y,cAAe,EAAO9Y,KAAK8Y,cAAe,EAErE1Z,EAAE6C,QAAQmZ,WAAW5M,EAAOxO,KAAKgZ,UACjCxK,EAAM8C,aAAa,UAAWtR,KAAKgZ,UAEnChZ,KAAK0c,aAGPI,cApXyC,WAqXvC,IACIpE,EADElK,EAAQxO,KAAK4Y,SAASrX,aAGvBvB,KAAKqU,QAAQjV,EAAE2d,gBAEpB/c,KAAK+Y,WAAa/Y,KAAK+Y,UACvBL,EAAU1Y,KAAK+Y,UAAY/Y,KAAKR,QAAQkZ,QAAU,OAElDlK,EAAMjC,MAAMmM,QAAUA,EAEtB1Y,KAAK0c,aAIPM,aAnYyC,WAoYnChd,KAAK6Y,cAAiB7Y,KAAKid,WACxBjd,KAAKkd,cAGdC,eAxYyC,WAyYvC,IAAMlC,EAAKjb,KAAK4Y,SACVvQ,EAAKrI,KAAKqZ,aAEZrZ,KAAKsb,OAAO,SAAYtb,KAAKqU,QAAQjV,EAAE6V,eAE5B7V,EAAE6C,QAAQmb,kBAGzBpd,KAAKsC,iBAED+F,EAAMA,EAAGgN,YAAY4F,GAClBA,EAAG1a,KAAK8U,YAAY4F,KAI7BoC,WAxZyC,WAyZvC,IAAM7a,EAAUxC,KAAK4Y,SACftY,EAAMkC,EAAQjC,KACd0E,EAAMzC,EAAQjB,aAEpB,GAAKvB,KAAKqU,QAAQjV,EAAEiX,cAApB,CAGA,IAAMiH,EAAe,IAAIC,MAEzBD,EAAapX,GAAKoX,EAAapX,IAAM,cACrCkM,SAASoG,KAAK3Q,YAAYyV,GAE1BA,EAAaE,OAAS,WACpB,IAAMpX,EAASkX,EAAalX,OACtBD,EAAQmX,EAAanX,MACrBsX,EAAKnd,EAAIoD,mBAAmBlB,EAAQiB,UAAU,IAC9Cia,EAAKpd,EAAIoD,mBAAmBlB,EAAQiB,UAAU,IAC9Cka,EAAKrd,EAAIoD,mBAAmBlB,EAAQiB,UAAU,IAC9Cma,EAAKtd,EAAIoD,mBAAmBlB,EAAQiB,UAAU,IAsBpD6Z,EAAaE,OAAS,WACpBpe,EAAE6C,QAAQkP,OAAOmM,IAGf9D,QAAUA,OAAOqE,eAAe,cAClCC,UACIR,EAAapX,GACb,CAAC,EAAG,EAAGC,EAAO,EAAGA,EAAOC,EAAQ,EAAGA,GACnC,CAACqX,EAAGlZ,EAAGkZ,EAAGjZ,EAAGkZ,EAAGnZ,EAAGmZ,EAAGlZ,EAAGoZ,EAAGrZ,EAAGqZ,EAAGpZ,EAAGmZ,EAAGpZ,EAAGoZ,EAAGnZ,IAC9C,IAKR8Y,EAAa9X,IAAMhD,EAAQhD,QAAQue,mBAAqB9Y,EAAIO,MAG9DyX,SAldyC,WAmd7Bjd,KAAK6Y,eAEJ7Y,KAAKqU,QAAQjV,EAAE4e,eAE1Bhe,KAAK6Y,eAAgB,EACrB7Y,KAAK4Y,SAASK,eACdjZ,KAAK0c,aAGPQ,WA5dyC,YA6d7Bld,KAAK6Y,eAEL7Y,KAAKqU,QAAQjV,EAAE4e,eAEzBhe,KAAK6Y,eAAgB,EACrB7Y,KAAK4Y,SAASqF,cACdje,KAAK0c,aAGPnI,QAteyC,WAuevC,IAAM0G,EAAKjb,KAAK4Y,SACVtY,EAAM2a,EAAG1a,KACT8H,EAAKrI,KAAKqZ,YAEXrZ,KAAKsb,OAAO,YACZjT,GAAOA,EAAG9F,YAAY0Y,KAAS5S,GAC7BrI,KAAKqU,QAAQjV,EAAEqV,eAGlBzU,KAAKmb,eAAiB7a,EAAI+U,YAAYrV,KAAKmb,eACvB,SAApBF,EAAGzb,QAAQyE,MAAoBjE,KAAKke,QAAQjD,EAAGzb,QAAQyE,MAIzDjE,KAAKkE,MAAQ+W,EAAGzb,QAAQyE,MAHxBjE,KAAKkE,MAAQ,GACblE,KAAKmb,cAAgB,IAIvBnb,KAAKkb,gBACLlb,KAAKub,kBACLvb,KAAK0c,aAGPhI,MA5fyC,WA6fvC,IAAMuG,EAAKjb,KAAK4Y,SACVtY,EAAM2a,EAAG1a,KACT8H,EAAKrI,KAAKqZ,YAEZrZ,KAAKsb,OAAO,YACXjT,GAAOA,EAAG9F,YAAY0Y,KAAS5S,GAC7BrI,KAAKqU,QAAQjV,EAAEqV,eAGlBzU,KAAKmb,eAAiB7a,EAAI+U,YAAYrV,KAAKmb,eAC/Cnb,KAAKkE,MAAQ,OACblE,KAAKkb,gBACLlb,KAAK0Z,mBACL1Z,KAAK0c,aAGPyB,UA7gByC,WA8gBvCne,KAAK4Y,SAASxW,YAGhBqI,aAjhByC,SAihB5BzJ,GACX,IAAMqH,EAAKrI,KAAKqZ,YAEXrZ,KAAKmb,iBAELnb,KAAKsb,OAAO,SAAYjT,GAAMA,EAAGlG,gBAEtCnC,KAAKmb,cAActZ,WAAU,SAAC4X,GAC5BA,EAAO2B,WAAW,GACd3B,EAAO4B,UAAY5B,EAAO4B,SAAS5a,SACvCrB,EAAE6C,QAAQgO,SAASwJ,EAAOlY,aAAc,4BAI5CgJ,aA/hByC,WAgiBvC,IAAM0Q,EAAKjb,KAAK4Y,SACVvQ,EAAKrI,KAAKqZ,YAGXrZ,KAAK2Z,UAAY3Z,KAAKmZ,eAEtBnZ,KAAKmb,gBACNnb,KAAKsb,OAAO,SAAYjT,GAAMA,EAAG9F,YAAY0Y,IAEjDjb,KAAKmb,cAActZ,WAAU,SAAC4X,GAC5BA,EAAO2B,WAAW,GACd3B,EAAO4B,UAAY5B,EAAO4B,SAASva,UACvC1B,EAAE6C,QAAQkS,YAAYsF,EAAOlY,aAAc,4BAI/C2Z,cAhjByC,WAijBvC,IACM5a,EADKN,KAAK4Y,SACDrY,KACT0D,EAAOjE,KAAKoe,UAEdpe,KAAKmb,eAAiB7a,EAAI+U,YAAYrV,KAAKmb,eAC/Cnb,KAAKmb,cAAyB,KAATlX,EAAc,GAAKjE,KAAK2Z,SAAS1V,GAC3B,KAAvBjE,KAAKmb,eACP7a,EAAI0Z,SAASha,KAAKmb,gBAItB9Y,YA5jByC,WA6jBvC,IAAM4Y,EAAKjb,KAAK4Y,SACVvQ,EAAKrI,KAAKqZ,YACV/Y,EAAM2a,EAAG1a,KAETsF,EAAUoV,EAAGrV,aACfyY,GAAS,IAEb,GAAIhW,GAAMA,EAAGlG,eACXkG,EAAG7H,QAAQ6B,mBAIb,IAAI4Y,EAAGzb,QAAQoW,kBAAmB5V,KAAK6K,QAAvC,CAEA,IAAK,IAAIvH,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAMuY,IACnBA,EAASxY,EAAQvC,GAAGwC,KAKxB,IAAMwY,EAAcrD,EAAGtR,YACvB2U,EAAYxY,IAAMuY,EAElBre,KAAK6K,QAAUzL,EAAE8Q,iBAAiBqO,SAASD,EAAa,CACtDjL,QAASrT,KAAKoT,cACbpB,MAAM1R,EAAK2a,GACdA,EAAGhS,KAAK,qBAGVyT,SA3lByC,WA4lBnC1c,KAAK6K,SAAW7K,KAAKsC,iBACzBtC,KAAKqC,eAGP2I,kBAhmByC,WAimBvC,IAAMxI,EAAUxC,KAAK4Y,SAEf/S,EAAUrD,EAAQoD,aAClBiF,EAAU7K,KAAK6K,QACjBwT,GAAS,IAEb,GAAIxT,GAAWA,aAAmBzL,EAAE0L,iBAAiBC,SAAU,CAC7D,IAAK,IAAIzH,EAAI,EAAGA,EAAIuC,EAAQV,OAAQ7B,IAC9BuC,EAAQvC,GAAGwC,IAAMuY,IACnBA,EAASxY,EAAQvC,GAAGwC,KAKxB,IAAMwY,EAAc9b,EAAQmH,YAC5B2U,EAAYxY,IAAMuY,EAEb7b,EAAQhD,QAAQoW,iBACnB5V,KAAK6K,QAAQ2T,UAAUF,KAK7BJ,QAxnByC,SAwnBjCja,GACN,QAASjE,KAAK4Z,OAAO3V,IAGvBma,QA5nByC,WA6nBvC,GAAKpe,KAAKgC,UACV,OAAOhC,KAAKkE,OAGd0X,SAjoByC,WAkoBvC,OAAO5b,KAAK4Z,QAGd0B,OAroByC,SAqoBlCrX,GACL,QAAKjE,KAAKgC,WACHhC,KAAKkE,QAAUD,GAGxBiY,QA1oByC,SA0oBjCuC,GACN,IAAMxD,EAAKjb,KAAK4Y,SACVvQ,EAAKrI,KAAKqZ,YAGhB,GAFarZ,KAAKoe,YAELK,GAAYze,KAAKke,QAAQO,IAAaze,KAAKgC,UAaxD,OATIhC,KAAK6K,SAAW7K,KAAK6K,QAAQ6T,UAAUD,GACvCze,KAAKsb,OAAO,UAAYtb,KAAKqb,UAAYrb,KAAKub,kBAClDvb,KAAKkE,MAAQua,EACTze,KAAKsb,OAAO,SAAWtb,KAAK0Z,mBAChC1Z,KAAKkb,gBACLlb,KAAK0c,WAEDrU,GAAMA,EAAG9F,YAAY0Y,IAAOA,EAAG7Y,WAE5BpC,MAOTuZ,SAnqByC,SAmqBhCvY,GACP,IAAMiD,EAAOjE,KAAKoe,UACZ/V,EAAKrI,KAAKqZ,YACVsF,EAAarW,OAAOC,KAAKvI,KAAK4b,YAC9BxF,EAAMuI,EAAWvb,QAAQa,GAEzBwa,EAAUE,GADCvI,EAAM,GAAKuI,EAAWxZ,QAGvC,GAAInE,EAAG,CACL,GAAIqH,GAAMA,EAAGlG,eAAkB,OAC/B/C,EAAE8B,SAAS0d,KAAK5d,GAGlB,OAAOhB,KAAKkc,QAAQuC,MAIxBrf,EAAE8Q,iBAAiBpO,KAAO,SAACU,EAAShD,GAClC,OAAO,IAAIJ,EAAE0L,iBAAiB+H,KAAKrQ,EAAShD,K,eCxrB9CJ,EAAE2d,aAAe3d,EAAEyf,WAAWtf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIsf,EACAC,EAHEjd,EAAOU,EAAQhC,QACfyD,EAAOnC,EAAKoC,MAIdpC,EAAKiX,WACP+F,EAAM,eACNC,EAAUvc,EAAQhD,QAAQqP,YAAYmQ,eAEtCF,EAAM,eACNC,EAAUvc,EAAQhD,QAAQqP,YAAYoQ,YAGxCzf,EAAUA,GAAW,IACb0f,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT9M,UAAoB,SAAThO,EAAkB,WAAa,IAI5C7E,EAAE0L,iBAAiB6N,WAAW0G,EAAa,SAATpb,EAAkB,GAAK,gBAEzD7E,EAAEyf,WAAW5e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D8Q,SA7BmC,WA8BjC,IAAMxO,EAAO9B,KAAK4Y,SAASpY,QAE3BpB,EAAEsS,SAAS4N,YAAYtf,KAAKuf,MAAO,eAAgB,gBACnDngB,EAAEsS,SAASQ,YAAYlS,KAAKuf,MAAO,gBAAiB,cACpDzd,EAAKgb,oB,eClCT1d,EAAE6V,aAAe7V,EAAEyf,WAAWtf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,GACvB,IAEIuf,EAFEjd,EAAOU,EAAQhC,QAOjBsB,aAAgB1C,EAAE0L,iBAAiB+H,MACrCkM,EAAUvc,EAAQhD,QAAQqP,YAAY2Q,YAEtCpgB,EAAE0L,iBAAiB6N,WAAW8G,UACb,SAAf3d,EAAKoC,MAAmB,GAAK,mBAG/B6a,EAAUvc,EAAQhD,QAAQqP,YAAY6Q,aACtCtgB,EAAE0L,iBAAiBiI,iBAAiB0M,UACnB,SAAf3d,EAAKoC,MAAmB,GAAK,iBAIjC1E,EAAUA,GAAW,IACb0f,YAAc,CACpBC,KAAK,EACLC,KAtBU,iBAuBVL,QAASA,EACT9M,UAA0B,SAAfnQ,EAAKoC,MAAmB,WAAa,IAGlD9E,EAAEyf,WAAW5e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D8Q,SAjCmC,WAkCjC,IAAMxO,EAAO9B,KAAK4Y,SAASpY,QAEvBsB,aAAgB1C,EAAE0L,iBAAiB+H,KAAQ/Q,EAAKqb,iBAC7Crb,EAAKkT,mB,eCrChB5V,EAAEugB,cAAgBvgB,EAAEyf,WAAWtf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACb0f,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASvc,EAAQhD,QAAQqP,YAAY+Q,aACrC3N,UAAW,WAGb7S,EAAE0L,iBAAiB6N,WAAWkH,EAAI,eAClCzgB,EAAEyf,WAAW5e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D8Q,SAdoC,WAerBtQ,KAAK4Y,SAASpY,QACtB4b,mB,eChBThd,EAAE0gB,WAAa1gB,EAAEyf,WAAWtf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACb0f,YAAc,CACpBC,KAAK,EACLC,KAAM,OACNL,QAASvc,EAAQhD,QAAQqP,YAAYkR,UACrC9N,UAAW,QAGb7S,EAAE0L,iBAAiB6N,WAAWqH,EAAI,YAClC5gB,EAAEyf,WAAW5e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D8Q,SAdiC,WAelBtQ,KAAK4Y,SAASpY,QACtByb,gB,eChBT7c,EAAE0L,iBAAmB1L,EAAE0L,kBAAoB,GAC3C1L,EAAE8Q,iBAAmB9Q,EAAE0L,iBAEvB1L,EAAE0L,iBAAiB6N,WAAa,GAEhCvZ,EAAEyf,WAAazf,EAAE6gB,SAASC,OAAO3gB,OAAO,CACtCC,QAAS,CACP0f,YAAa,CACXC,KAAK,EACLC,KAAM,GACNnN,UAAW,GACX8M,QAAS,KAIbjf,WAVsC,SAU3BQ,EAAKkC,EAAShD,GACvBQ,KAAK4Y,SAAWpW,EAChBxC,KAAKO,KAAOD,EAEZlB,EAAEW,WAAWC,KAAMR,GACnBJ,EAAE6gB,SAASC,OAAOjgB,UAAUH,WAAWI,KAAKF,KAAMR,GAElDQ,KAAKmS,kBAGPgO,YApBsC,SAoB1BtV,EAASuG,EAAWgP,GAAM,WAC9BC,EAAcrgB,KAAKR,QAAQ0f,YAC3BjN,EAAYoO,EAAYpO,UACxBnQ,EAAO9B,KAAK4Y,SAASpY,QACrB+L,EAAQvM,KAAKR,QAAQ0f,YAAY3S,MAEvCvM,KAAK6K,QAAUA,EACf7K,KAAKsgB,MAAQlhB,EAAE6C,QAAQoP,OAAO,KAAM,GAAID,GACxCpR,KAAKuf,MAAQngB,EAAE6C,QAAQoP,OAAO,IAAK,GAAIrR,KAAKsgB,OAExCD,EAAYlB,IACdnf,KAAKuf,MAAM9N,UAAYrS,EAAEsS,SAASL,OAAOgP,EAAYjB,MAErDpf,KAAKuf,MAAM9N,UAAY4O,EAAYjB,KAGrCpf,KAAKuf,MAAMjO,aAAa,OAAQ,KAChCtR,KAAKuf,MAAMjO,aAAa,QAAS+O,EAAYtB,SACzCxS,GAASvM,KAAKuf,MAAMjO,aAAa,QAAS/E,GAC9CvM,KAAKuf,MAAMjO,aAAa,OAAQ,UAEhClS,EAAE6C,QAAQgO,SAASjQ,KAAKuf,MAAOvf,KAAKugB,YAAYtK,WAE5ChE,IACF7S,EAAE6C,QAAQgO,SAASjQ,KAAKuf,MAAOtN,GACb,aAAdA,GACF7S,EAAE6C,QAAQgO,SAASjQ,KAAKsgB,MAAOrO,GAE7BA,IAAcnQ,EAAKoC,MACrB9E,EAAE6C,QAAQgO,SAASjQ,KAAKuf,MAAO,iBAE/BngB,EAAE6C,QAAQkS,YAAYnU,KAAKuf,MAAO,kBAItCngB,EAAE8B,SAASR,GAAGV,KAAKuf,MAAO,QAASvf,KAAKS,OAAQT,MAChDZ,EAAE8B,SAASR,GAAGV,KAAK4Y,SAAU,UAAU,WACrC,IAAM7B,EAAQ,EAAKwI,MAAM9N,UAAUsF,MAAM,yBACrCA,GAA0B,IAAjBA,EAAM5R,QAAgB,EAAKqb,mBAI1CxgB,KAAKygB,eAAe5V,EAAS7K,KAAKsgB,MAAOF,IAG3CjO,eAjEsC,WAkEpC,IAAIC,SAASC,cAAc,YAA3B,CAIA,IAAMC,EAAKF,SAASsO,cAAc,OAClCpO,EAAGpM,GAAK,UACRoM,EAAGhB,aAAa,SAAU,UAC1BgB,EAAGb,WAAY,IAAIrS,EAAEuhB,gBAAiBlO,SAEtCL,SAASC,cAAc,wBAAwBxK,YAAYyK,KAG7DkO,cA9EsC,WA+EpCphB,EAAE6C,QAAQkS,YAAYnU,KAAKuf,MAAMqB,cAAe,YAChDxhB,EAAE6C,QAAQkS,YAAYnU,KAAKuf,MAAO,aAGpCsB,eAnFsC,WAoFpCzhB,EAAE6C,QAAQgO,SAASjQ,KAAKuf,MAAMqB,cAAe,YAC7CxhB,EAAE6C,QAAQgO,SAASjQ,KAAKuf,MAAO,eAInCngB,EAAE0hB,WAAa,SAASxgB,EAAKkC,EAAShD,GACpC,OAAO,IAAIJ,EAAEyf,WAAWve,EAAKkC,EAAShD,K,eC/FxCJ,EAAEiX,aAAejX,EAAEyf,WAAWtf,OAAO,CAEnCO,WAFmC,SAExBQ,EAAKkC,EAAShD,GACvB,IACIuf,EADEjd,EAAOU,EAAQhC,QAGrBR,KAAK+gB,aAAc,EACnB/gB,KAAKghB,gBAAiB,EACtBhhB,KAAKihB,iBAAkB,EAEnBnf,aAAgB1C,EAAE0L,iBAAiB+H,MACrCzT,EAAE0L,iBAAiB6N,WAAW3X,EAAI,aAClC+d,EAAUvc,EAAQhD,QAAQqP,YAAYqS,cAEtC9hB,EAAE0L,iBAAiBiI,iBAAiB/R,EAAI,cACxC+d,EAAUvc,EAAQhD,QAAQqP,YAAYsS,eAGxC3hB,EAAUA,GAAW,IACb0f,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASA,GAGX3f,EAAEyf,WAAW5e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D8Q,SA5BmC,WA6BjC,IAAMxO,EAAO9B,KAAK4Y,SAASpY,QAE3B,GAAIsB,aAAgB1C,EAAE0L,iBAAiB+H,KACrC/Q,EAAKub,kBAKP,IAAIrd,KAAKihB,gBAAT,CAGEjhB,KAAKihB,iBAAkB,EAGzB,IAAMG,EAAaphB,KAAKuf,MAAMqB,cAE9B5gB,KAAKqhB,kBAAoBrhB,KAAKshB,iBAAiB1e,KAAK5C,MACpDA,KAAKuhB,kBAAoBvhB,KAAKwhB,iBAAiB5e,KAAK5C,MAEpDZ,EAAE8B,SAASR,GAAG0gB,EAAY,SAAS,WACjC,GAAKphB,KAAK+gB,YAWH,CAEL,GAAI/gB,KAAKghB,eACP,OAGFhhB,KAAKyhB,aACLzhB,KAAK0hB,0BAA0BN,GAC/Btf,EAAKwT,oBAlBLtV,KAAK+gB,aAAc,EACnB/gB,KAAK2hB,mBAELC,WAAW5hB,KAAK6hB,0BAA0Bjf,KAAK5C,KAAMohB,GAAa,KAClEtf,EAAKwR,cAAcuE,KACf,WACE7X,KAAKyhB,aACLzhB,KAAK0hB,0BAA0BN,IAC/Bxe,KAAK5C,SAYZA,QAGLyhB,WAzEmC,WA0EjCzhB,KAAK8hB,qBACL9hB,KAAK+gB,aAAc,EACnB/gB,KAAKghB,gBAAiB,GAGxBa,0BA/EmC,SA+ETE,GACxBA,EAAQC,iBAAiB,aAAchiB,KAAKqhB,mBAC5CU,EAAQC,iBAAiB,aAAchiB,KAAKuhB,oBAG9CG,0BApFmC,SAoFTK,GACxBA,EAAQE,oBAAoB,aAAcjiB,KAAKqhB,mBAC/CU,EAAQE,oBAAoB,aAAcjiB,KAAKuhB,oBAGjDD,iBAzFmC,WA0FjCthB,KAAKkiB,oBAGPV,iBA7FmC,WA8F7BxhB,KAAKghB,eACPhhB,KAAKghB,gBAAiB,EAEtBhhB,KAAK2hB,oBAITG,mBArGmC,WAsGjC1iB,EAAEsS,SAAS4N,YAAYtf,KAAKuf,MAAO,UAAW,WAC9CngB,EAAEsS,SAASQ,YAAYlS,KAAKuf,MAAO,gBAAiB,cACpDngB,EAAE6C,QAAQkS,YAAYnU,KAAKuf,MAAM4C,WAAY,WAG/CR,iBA3GmC,WA4GjCviB,EAAEsS,SAAS4N,YAAYtf,KAAKuf,MAAO,WACnCngB,EAAEsS,SAASQ,YAAYlS,KAAKuf,MAAO,gBAAiB,cACpDngB,EAAEsS,SAAS0Q,cAAcpiB,KAAKuf,MAAO,WAGvC2C,iBAjHmC,WAkHjC9iB,EAAEsS,SAAS4N,YAAYtf,KAAKuf,MAAO,UACnCngB,EAAEsS,SAASQ,YAAYlS,KAAKuf,MAAO,gBAAiB,cACpDngB,EAAE6C,QAAQkS,YAAYnU,KAAKuf,MAAM4C,WAAY,c,cCpHjD/iB,EAAEijB,iBAAmBjjB,EAAEyf,WAAWtf,OAAO,CACvCO,WADuC,SAC5BQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACb0f,YAAc,CACpBC,KAAK,EACLC,KAAM,cACNL,QAASvc,EAAQhD,QAAQqP,YAAYyT,gBACrCrQ,UAAW,cAGb7S,EAAE0L,iBAAiB6N,WAAW4J,EAAI,kBAClCnjB,EAAEyf,WAAW5e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D8Q,SAduC,WAexBtQ,KAAK4Y,SAASpY,QACtB8b,sB,eChBTld,EAAEojB,gBAAkBpjB,EAAEyf,WAAWtf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IAAMsC,EAAOU,EAAQhC,SAErBhB,EAAUA,GAAW,IACb0f,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASvc,EAAQhD,QAAQqP,YAAY4T,eACrCxQ,UAA0B,SAAfnQ,EAAKoC,MAAmB,WAAa,IAGlD9E,EAAEyf,WAAW5e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D8Q,SAfsC,WAgBpC,IAAM9B,EAAQxO,KAAK4Y,SAASrX,aAE5BmhB,KAAKC,QAAQnU,EAAOpP,EAAEsjB,KAAKlU,Q,eClB/BpP,EAAEqV,WAAarV,EAAEyf,WAAWtf,OAAO,CACjCO,WADiC,SACtBQ,EAAKkC,EAAShD,GACvB,IACIsf,EACAC,EAFEjd,EAAOU,EAAQhC,QAIjBsB,aAAgB1C,EAAE0L,iBAAiB+H,MACrCzT,EAAE0L,iBAAiB6N,WAAWiK,EAAI,UAClCxjB,EAAE0L,iBAAiB6N,WAAWkK,EAAI,QAClC9D,EAAUvc,EAAQhD,QAAQqP,YAAYiU,SAEtChE,EAAMhd,EAAKwZ,OAAO,QAAU,OAAS,WAErClc,EAAE0L,iBAAiBiI,iBAAiB8P,EAAI,aACxC9D,EAAUvc,EAAQhD,QAAQqP,YAAYkU,WACtCjE,EAAM,SAGRtf,EAAUA,GAAW,IACb0f,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT9M,UAAW,QAGb7S,EAAEyf,WAAW5e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D8Q,SA7BiC,WA8B/B,IAAMxO,EAAO9B,KAAK4Y,SAASpY,QAEvBsB,aAAgB1C,EAAE0L,iBAAiB+H,KAAQ/Q,EAAKya,kBAC7Cza,EAAK0S,iB,eCjChB,IAAIwO,EAAY,CAAC,IAAK,GAAI,GAAI,GAAI,GAAI,GAGhCC,EAAgB,IAAIC,cAC1BD,EAAcE,YAAd,uoBAsBAF,EAAcG,WAAd,oGAKAhR,SAASiR,mBAAqB,CAACJ,GAE/BD,EAAYA,EAAU1iB,KAAI,SAACsc,GAIzB,OAHC0G,MAAM1G,IAAMA,EAAI,OAAOA,EAAI,KAC3BA,EAAI,IAAKA,EAAI,GAEPxd,EAAEyf,WAAWtf,OAAO,CACzBC,QAAS,CACP0f,YAAa,CACXE,KAAMxC,EACNmC,QAAS,WAAanC,EAAG,IACzB3K,UAAW,gCACX1F,MAAO,yBAA2B,IAAMqQ,GAAK,MAAQ,IAAMA,GAAK,MAAQ,IAAMA,GAAK,QAGvFtM,SATyB,WAUvBtQ,KAAK4Y,SAASpY,QAAQmc,cAAcC,EAAE,WAK5Cxd,EAAEmkB,kBAAoBnkB,EAAE6gB,SAAS1gB,OAAO,CACtCC,QAAS,CACPyS,UAAW,GACXjO,OAAQ,WAAa,OAAO,GAC5BqP,QAAS,GACT9G,MAAO,oBAAF,OAAiD,IAAxByW,EAAU7d,OAAS,GAA5C,QAGPqe,kBARsC,SAQpBpS,GAChB,IAGI9N,EAAO+L,EAAOwT,EAAOY,EAFrBxR,EADYjS,KAAKugB,YAAYtK,UAAY,IAAMjW,KAAK0jB,kBAC5B,IAAM1jB,KAAKR,QAAQyS,UAmB/C,IAfAjS,KAAKwQ,WAAaY,EAClBpR,KAAK2jB,IAAMvkB,EAAE6C,QAAQoP,OAAO,KAAMY,EAAWb,GAC7CpR,KAAK2jB,IAAIpX,MAAM5H,UAAc3E,KAAKR,QAAQ+M,MAAUvM,KAAKR,QAAQ+M,MAAQ,GAQzEvM,KAAK4jB,gBAAkB,CACrB,QAAS,YAAa,WACtB,YAAa,UAAW,cAGrBvU,EAAI,EAAGoU,EAAIzjB,KAAK4jB,gBAAgBze,OAAQkK,EAAIoU,EAAGpU,IAClDjQ,EAAE8B,SAASR,GAAGV,KAAK2jB,IAAK3jB,KAAK4jB,gBAAgBvU,GAAIjQ,EAAE8B,SAASmC,iBAI9D,IAAKC,EAAI,EAAGuf,EAAI7iB,KAAKR,QAAQ6T,QAAQlO,OAAQ7B,EAAIuf,EAAGvf,KAGzC,IAFAtD,KAAK6jB,sBAAsB7jB,KAAKR,QAAQ6T,QAAQ/P,MAGlD6c,YAAYngB,KAAMA,KAAK2jB,IAAK3jB,KAAK8jB,eAM9C1kB,EAAEyd,gBAAkBzd,EAAEyf,WAAWtf,OAAO,CACtCO,WADsC,SAC3BQ,EAAKkC,EAAShD,GACvB,IACMyE,EADOzB,EAAQhC,QACH0D,OAElB1E,EAAUA,GAAW,IACb0f,YAAc,CACpBC,KAAK,EACLC,KAAM,YACNL,QAAS,qBACT9M,UAAoB,SAAThO,EAAkB,WAAa,IAG5CzE,EAAQukB,WAAa,IAAI3kB,EAAEmkB,kBAAkB,CAC3ClQ,QAAS2P,IAGX5jB,EAAE0L,iBAAiB6N,WAAWiE,EAAa,SAAT3Y,EAAkB,GAAK,gBAEzD7E,EAAEyf,WAAW5e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D8Q,SAtBsC,WAsB3B,WACH0T,EAAOhkB,KAAKuf,MACdngB,EAAE6C,QAAQQ,SAASuhB,EAAM,uBAC3B5kB,EAAE6C,QAAQkS,YAAY6P,EAAM,sBAC5BpC,YAAW,WACT,EAAKpiB,QAAQukB,WAAWE,UACvB,MAEH7kB,EAAE6C,QAAQgO,SAAS+T,EAAM,sBAG3B5kB,EAAEsS,SAAS4N,YAAY0E,EAAM,YAAa,UAC1C5kB,EAAEsS,SAASQ,YAAY8R,EAAM,yBAA0B,c,eClI3D5kB,EAAEqd,cAAgBrd,EAAEyf,WAAWtf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAEIsf,EACAC,EAHEjd,EAAOU,EAAQhC,QACfyD,EAAOnC,EAAKoC,MAIdpC,EAAKgX,cACPgG,EAAM,gBACNC,EAAUvc,EAAQhD,QAAQqP,YAAYqV,kBAEtCpF,EAAM,UACNC,EAAUvc,EAAQhD,QAAQqP,YAAYsV,uBAGxC3kB,EAAUA,GAAW,IACb0f,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT9M,UAAoB,SAAThO,EAAkB,WAAa,IAG5C7E,EAAE0L,iBAAiB6N,WAAWiE,EAAa,SAAT3Y,EAAkB,GAAK,iBAEzD7E,EAAEyf,WAAW5e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D8Q,SA5BoC,WA6BlC,IAAMxO,EAAO9B,KAAK4Y,SAASpY,QACrBwjB,EAAOhkB,KAAKuf,MAElBngB,EAAEsS,SAAS4N,YAAY0E,EAAM,UAAW,iBACxC5kB,EAAEsS,SAASQ,YAAY8R,EAAM,yBAA0B,qBACvDliB,EAAK0a,qB,eClCTpd,EAAEglB,cAAgBhlB,EAAEyf,WAAWtf,OAAO,CACpCO,WADoC,SACzBQ,EAAKkC,EAAShD,GACvB,IAAMyE,EAAO7E,EAAEe,MAAMoT,aAAa/Q,EAAS,UAAW,SAChDyI,EAASzI,EAAQyI,QAEvBzL,EAAUA,GAAW,IACb0f,YAAc,CACpBC,KAAK,EACLC,KAAM,UACNL,QAASvc,EAAQhD,QAAQqP,YAAYwV,aACrCpS,UAAWhH,GAAmB,SAAThH,EAAkB,GAAK,YAG9C7E,EAAEyf,WAAW5e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D8Q,SAhBoC,WAiBlC,IAAM2K,EAAKjb,KAAK4Y,SAEhBxZ,EAAE8B,SAASR,GAAGua,EAAI,CAChBnZ,KAAM9B,KAAKwgB,cACXtS,QAASlO,KAAK6gB,gBACb7gB,MAEHib,EAAG/M,c,eCxBP9O,EAAEklB,aAAellB,EAAEyf,WAAWtf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACb0f,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASvc,EAAQhD,QAAQqP,YAAY0V,YACrCtS,UAAW,UAGb7S,EAAE0L,iBAAiB6N,WAAW6L,EAAI,cAClCplB,EAAEyf,WAAW5e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D8Q,SAdmC,WAepBtQ,KAAK4Y,SAASpY,QACtB6b,kB,eChBTjd,EAAEqlB,YAAcrlB,EAAEyf,WAAWtf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACb0f,YAAc,CACpBC,KAAK,EACLC,KAAM,QACNL,QAASvc,EAAQhD,QAAQqP,YAAY6V,WACrCzS,UAAW,SAGb7S,EAAE0L,iBAAiB6N,WAAWgM,EAAI,aAClCvlB,EAAEyf,WAAW5e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D8Q,SAdkC,WAenBtQ,KAAK4Y,SAASpY,QACtB2b,iB,eChBT/c,EAAE4e,YAAc5e,EAAEyf,WAAWtf,OAAO,CAClCO,WADkC,SACvBQ,EAAKkC,EAAShD,GACvB,IACIsf,EACAC,EAFEjd,EAAOU,EAAQhC,QAIjBsB,EAAK+W,eACPiG,EAAM,eACNC,EAAUvc,EAAQhD,QAAQqP,YAAY+V,eAEtC9F,EAAM,gBACNC,EAAUvc,EAAQhD,QAAQqP,YAAYgW,cAGxCrlB,EAAUA,GAAW,IACb0f,YAAc,CACpBC,KAAK,EACLC,KAAMN,EACNC,QAASA,EACT9M,UAA0B,SAAfnQ,EAAKoC,MAAmB,WAAa,IAGlD9E,EAAE0L,iBAAiB6N,WAAWjL,EAAmB,SAAf5L,EAAKoC,MAAmB,GAAK,WAC/D9E,EAAE0L,iBAAiB6N,WAAWmM,EAAmB,SAAfhjB,EAAKoC,MAAmB,GAAK,aAE/D9E,EAAEyf,WAAW5e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D8Q,SA5BkC,WA6BhC,IAAMxO,EAAO9B,KAAK4Y,SAASpY,QAE3BpB,EAAEsS,SAAS4N,YAAYtf,KAAKuf,MAAO,gBAAiB,gBACpDngB,EAAEsS,SAASQ,YAAYlS,KAAKuf,MAAO,iBAAkB,iBACrDzd,EAAKkb,mB,eCjCT5d,EAAEkV,aAAelV,EAAEyf,WAAWtf,OAAO,CACnCO,WADmC,SACxBQ,EAAKkC,EAAShD,IACvBA,EAAUA,GAAW,IACb0f,YAAc,CACpBC,KAAK,EACLC,KAAM,SACNL,QAASvc,EAAQhD,QAAQqP,YAAYkW,cAGvC3lB,EAAE0L,iBAAiBiI,iBAAiB6P,EAAI,eACxCxjB,EAAEyf,WAAW5e,UAAUH,WAAWI,KAAKF,KAAMM,EAAKkC,EAAShD,IAG7D8Q,SAbmC,WAcpBtQ,KAAK4Y,SAASpY,QACtB4T,mB,eCdThV,EAAEsjB,KAAO,SAAqBzd,GAC5B,GAAiD,IAA7CqD,OAAOC,KAAKma,KAAKsC,WAAW/f,IAAME,OAAc,CAClDgS,QAAQC,IAAIsL,KAAKsC,WAAW/f,IAC5B,IAAMggB,EAAMvC,KAAKsC,WAAW/f,QAKC,IAApBggB,EAAIC,kBACiB,IAArBD,EAAIE,eAKTF,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAChBD,EAAIC,YAAY,GAEhBD,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GACjBF,EAAIE,aAAa,GAEfF,EAAIG,eAGJH,EAAII,iBAUqB,MAA3BJ,EAAIK,oBAK8B,MAA3BL,EAAIK,oBAHV7Z,KAAKyB,GACL+X,EAAIM,gBAAgBC,UAAYP,EAAIM,gBAAgBE,aAOvDtO,QAAQC,IAAI,yBAGdD,QAAQC,IAAI,eAAgB6N,EAAIS,cAGR,IAApBT,EAAIS,aAGuB,IAApBT,EAAIS,aAGgB,IAApBT,EAAIS,cAJHja,KAAKyB,QAWY,IAApB+X,EAAIU,kBACmB,IAAvBV,EAAIW,qBAKkB,IAApBX,EAAIU,kBACmB,IAAvBV,EAAIW,iBAGTX,EAAIU,YAAYH,UAAYP,EAAIU,YAAYF,YAC5CR,EAAIW,qBAMV1O,MAAM,4D,cClFV9X,EAAEymB,cAAgBzmB,EAAE0mB,WAAWvmB,OAAO,CACpCC,QAAS,CACPumB,KAAM,UACNC,KAAM5mB,EAAE4mB,KAAK,CACXC,QAEE,iVACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZoC,WAalBpmB,KAAKqmB,SAEb3b,UAAU1K,KAAKsmB,QAAStmB,KAAKumB,cAGvCC,aAlBoC,WAmBlCxmB,KAAKwe,UAAUxe,KAAKqmB,SAAS5iB,UAAUzD,KAAKsmB,aAIhDlnB,EAAEib,cAAgB,SAAS7X,EAAS4T,EAAK5W,GACvC,OAAO,IAAIJ,EAAEymB,cAAcrjB,EAAS4T,EAAK5W,K,eCxB3CJ,EAAEqnB,WAAarnB,EAAE0mB,WAAWvmB,OAAO,CACjCC,QAAS,CACPumB,KAAM,OACNC,KAAM5mB,EAAE4mB,KAAK,CAEXC,QAAS,ykCACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAXiC,WAY/B,IAAM5jB,EAAUxC,KAAKqmB,SACfK,EAAelkB,EAAQiB,UAAUzD,KAAKsmB,SACtCK,EAAY3mB,KAAKumB,YAEvB/jB,EAAQsL,OAAO4Y,EAAcC,IAG/BH,aAnBiC,WAoB/BxmB,KAAKwe,UAAUxe,KAAKqmB,SAAS5iB,UAAUzD,KAAKsmB,aAIhDlnB,EAAE6a,WAAa,SAASzX,EAAS4T,EAAK5W,GACpC,OAAO,IAAIJ,EAAEqnB,WAAWjkB,EAAS4T,EAAK5W,K,eCzBxCJ,EAAE0mB,WAAa1mB,EAAEwnB,OAAOrnB,OAAO,CAC7BO,WAD6B,SAClB0C,EAASmI,EAAQnL,GAC1B,IAAMoL,EAASpI,EAAQiB,UAAUkH,GAEjCvL,EAAEW,WAAWC,KAAMR,GAEnBQ,KAAKqmB,SAAW7jB,EAChBxC,KAAKsmB,QAAU3b,EAEf,IAAMkc,EAAgB,CACpBjM,WAAW,EACXkM,aAAc,IAGZtnB,GAAWA,EAAQqe,eAAe,eACpCgJ,EAAcjM,UAAYpb,EAAQob,WAGpCxb,EAAEwnB,OAAO3mB,UAAUH,WAAWI,KAAKF,KAAM4K,EAAQic,IAGnDxmB,MArB6B,SAqBvBC,GACJlB,EAAEwnB,OAAO3mB,UAAUI,MAAMH,KAAKF,KAAMM,GACpCN,KAAK+mB,iBACL/mB,KAAKwmB,gBAGP3lB,SA3B6B,SA2BpBP,GACPN,KAAKgnB,mBACL5nB,EAAEwnB,OAAO3mB,UAAUY,SAASX,KAAKF,KAAMM,IAGzC2mB,mBAhC6B,WAiC3BjnB,KAAKqmB,SAASpd,KAAK,cAGrBie,iBApC6B,WAqC3BlnB,KAAKmnB,aAGPA,UAxC6B,WAyC3BnnB,KAAKqmB,SAASpb,QAAS,EACvBjL,KAAKqmB,SAASpd,KAAK,SAGrB8d,eA7C6B,WA8C3B/mB,KAAKU,GAAG,CACNgB,YAAatC,EAAE8B,SAAS0d,KACxBzd,UAAWnB,KAAKinB,mBAChB5lB,KAAMrB,KAAKomB,cACXgB,QAASpnB,KAAKknB,kBACblnB,MAEHA,KAAKqmB,SAAS9lB,KAAKG,GAAG,UAAWV,KAAKwmB,aAAcxmB,MACpDA,KAAKqmB,SAAS3lB,GAAG,SAAUV,KAAKwmB,aAAcxmB,OAGhDgnB,iBAzD6B,WA0D3BhnB,KAAKe,IAAI,CACPW,YAAatC,EAAE8B,SAAS0d,KACxBzd,UAAWnB,KAAKinB,mBAChB5lB,KAAMrB,KAAKomB,cACXgB,QAASpnB,KAAKknB,kBACblnB,MAEHA,KAAKqmB,SAAS9lB,KAAKQ,IAAI,UAAWf,KAAKwmB,aAAcxmB,MACrDA,KAAKqmB,SAAStlB,IAAI,SAAUf,KAAKwmB,aAAcxmB,OAIjDqnB,wBAtE6B,SAsELC,EAASC,GAC/B,IAAM/kB,EAAUxC,KAAKqmB,SACf/lB,EAAMkC,EAAQjC,KAEdinB,EAAclnB,EAAIoD,mBAAmBlB,EAAQmH,aAC7CoE,EAAczN,EAAIoD,mBAAmB4jB,GACrCtZ,EAAW1N,EAAIoD,mBAAmB6jB,GAClCE,EAAsBznB,KAAK0nB,IAAIF,EAAazZ,GAC5C4Z,EAAmB3nB,KAAK0nB,IAAIF,EAAaxZ,GAE/C,OAAOvC,KAAKmc,KAAKD,EAAmBF,IAItCC,IApF6B,SAoFzB5C,EAAGzF,GACL,IAAMwI,EAAK/C,EAAEvgB,EAAI8a,EAAE9a,EACbujB,EAAKhD,EAAEtgB,EAAI6a,EAAE7a,EAEnB,OAAOiH,KAAKC,IAAImc,EAAI,GAAKpc,KAAKC,IAAIoc,EAAI,IAIxCC,oBA5F6B,SA4FTT,EAASC,GAC3B,IAAM/kB,EAAUxC,KAAKqmB,SACf/lB,EAAMkC,EAAQjC,KAGdinB,EAAclnB,EAAIoD,mBAAmBlB,EAAQmH,aAC7CoE,EAAczN,EAAIoD,mBAAmB4jB,GACrCtZ,EAAW1N,EAAIoD,mBAAmB6jB,GAElCS,EACJvc,KAAKwc,MAAMT,EAAYhjB,EAAIuJ,EAAYvJ,EAAGgjB,EAAYjjB,EAAIwJ,EAAYxJ,GAMxE,OAHEkH,KAAKwc,MAAMT,EAAYhjB,EAAIwJ,EAASxJ,EAAGgjB,EAAYjjB,EAAIyJ,EAASzJ,GAGhDyjB,M,eC5GtB5oB,EAAE8oB,iBAAmB9oB,EAAE0mB,WAAWvmB,OAAO,CACvCC,QAAS,CACPumB,KAAM,aACNC,KAAM5mB,EAAE4mB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZuC,WAarC,IAAM5jB,EAAUxC,KAAKqmB,SACf/lB,EAAMkC,EAAQjC,KACdmmB,EAAelkB,EAAQiB,UAAUzD,KAAKsmB,SACtCK,EAAY3mB,KAAKumB,YACjBxZ,EAAQ/M,KAAK+nB,oBAAoBrB,EAAcC,GAC/C1a,EAAQjM,KAAKqnB,wBAAwBX,EAAcC,GAE3C,IAAV5Z,GAAevK,EAAQiL,SAASV,EAAO,OAE3C,IAAIhG,EAAevE,EAAQuE,aACtBA,IAAgBA,EAAe,IAEpC,IAAMohB,EAAU7nB,EAAI8nB,uBAAuB5lB,EAAQiB,UAAU,IACvD4kB,EAAU/nB,EAAI8nB,uBAAuB5lB,EAAQiB,UAAU,IACvD6L,EAAI7D,KAAK6c,IAAIH,EAAQ5jB,EAAI8jB,EAAQ9jB,GACjCiL,EAAI/D,KAAK6c,IAAIH,EAAQ3jB,EAAI6jB,EAAQ7jB,GACtBiH,KAAKmc,KAAKtY,EAAIA,EAAIE,EAAIA,GACxBzI,GAAgBkF,EAAQ,EACrCzJ,EAAQwJ,QAAQC,GAEhBzJ,EAAQwJ,QAAQ,IAIpBwa,aArCuC,WAsCrCxmB,KAAKwe,UAAUxe,KAAKqmB,SAAS5iB,UAAUzD,KAAKsmB,aAIhDlnB,EAAEqb,iBAAmB,SAACjY,EAAS4T,EAAK5W,GAClC,OAAO,IAAIJ,EAAE8oB,iBAAiB1lB,EAAS4T,EAAK5W,K,eC3C9CJ,EAAEmpB,WAAanpB,EAAE0mB,WAAWvmB,OAAO,CACjCC,QAAS,CACPumB,KAAM,OACNyC,aAAa,EACbxC,KAAM5mB,EAAE4mB,KAAK,CAEXC,QAAS,ycACTC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBtlB,SAZiC,SAYxBP,GACPN,KAAKyoB,gBACLrpB,EAAE0mB,WAAW7lB,UAAUY,SAASX,KAAKF,KAAMM,IAG7CymB,eAjBiC,WAkB/B,IAAMf,EAAOhmB,KAAKuB,aAElBnC,EAAE0mB,WAAW7lB,UAAU8mB,eAAe7mB,KAAKF,MAE3CZ,EAAE8B,SAASR,GAAGslB,EAAM,CAClBxkB,UAAWxB,KAAK0oB,WAChBC,QAAS3oB,KAAK4oB,aACb5oB,MAEHZ,EAAE8B,SAASR,GAAG0R,SAAU,eAAgBpS,KAAK4oB,YAAa5oB,OAG5DgnB,iBA9BiC,WA+B/B,IAAMhB,EAAOhmB,KAAKuB,aAElBnC,EAAE0mB,WAAW7lB,UAAU8mB,eAAe7mB,KAAKF,MAE3CZ,EAAE8B,SAASH,IAAIilB,EAAM,CACnBxkB,UAAWxB,KAAK0oB,WAChBC,QAAS3oB,KAAK4oB,aACb5oB,MAEHZ,EAAE8B,SAASH,IAAIqR,SAAU,eAAgBpS,KAAK4oB,YAAa5oB,OAI7DomB,cA5CiC,aA+CjCI,aA/CiC,WAgD/BxmB,KAAKwe,UAAUxe,KAAKqmB,SAAS5iB,UAAUzD,KAAKsmB,WAG9CoC,WAnDiC,SAmDtB1nB,GACT,IAAMqH,EAAKrI,KAAKqmB,SAAShN,YACnBvX,EAAOuG,EAAKA,EAAG7H,QAAUR,KAAKqmB,SAAS7lB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAKqmB,SAAS/b,eAAiBjC,GAAOA,EAAG9F,YAAYvC,KAAKqmB,WAA/D,CAIA,IAAMwC,EAAa/mB,EAAK4Y,aAExB1a,KAAK8oB,OAASlH,WAAWxiB,EAAEwD,MAAK,WAC1B5C,KAAK+oB,UAAYC,aAAahpB,KAAK+oB,UAElC/oB,KAAKipB,aAGRJ,EAAWhnB,WAAU,SAAS4X,GACxBzZ,OAASyZ,GAAUA,EAAOyP,kBAHhClpB,KAAKmpB,YAAY,UAAW,CAACC,WAAW,IAO1CppB,KAAKqpB,gBACJrpB,MAAO,OAGZ4oB,YA7EiC,SA6ErB5nB,GACV,IAAMqH,EAAKrI,KAAKqmB,SAAShN,YACnBvX,EAAOuG,EAAKA,EAAG7H,QAAUR,KAAKqmB,SAAS7lB,QAE7C,IAAIQ,EAAE8B,WACD9C,KAAKqmB,SAAS/b,eAAiBjC,GAAOA,EAAG9F,YAAYvC,KAAKqmB,WAA/D,CAIA,IAAMwC,EAAa/mB,EAAK4Y,aAEpB1Z,EAAEsoB,gBAAkBlX,UACtByW,EAAWhnB,WAAU,SAAS4X,GAC5BA,EAAOyP,kBAIPlpB,KAAK8oB,QAAUE,aAAahpB,KAAK8oB,QAErC9oB,KAAK+oB,SAAWnH,WAAWxiB,EAAEwD,MAAK,WAChC5C,KAAKkpB,iBACJlpB,MAAO,SAIdZ,EAAEub,WAAa,SAASnY,EAAS4T,EAAK5W,GACpC,OAAO,IAAIJ,EAAEmpB,WAAW/lB,EAAS4T,EAAK5W,K,eCvGxCJ,EAAEmqB,aAAenqB,EAAE0mB,WAAWvmB,OAAO,CACnCC,QAAS,CACPumB,KAAM,SACNC,KAAM5mB,EAAE4mB,KAAK,CACXC,QAEE,6vBACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZmC,WAajC,IAAM5jB,EAAUxC,KAAKqmB,SACfK,EAAelkB,EAAQiB,UAAUzD,KAAKsmB,SACtCK,EAAY3mB,KAAKumB,YACjBxZ,EAAQ/M,KAAK+nB,oBAAoBrB,EAAcC,GAMrDnkB,EAAQiL,SAASV,EAAO,QAG1ByZ,aAzBmC,WA0BjCxmB,KAAKwe,UAAUxe,KAAKqmB,SAAS5iB,UAAUzD,KAAKsmB,aAIhDlnB,EAAEmb,aAAe,SAAS/X,EAAS4T,EAAK5W,GACtC,OAAO,IAAIJ,EAAEmqB,aAAa/mB,EAAS4T,EAAK5W,K,eC/B1CJ,EAAEoqB,YAAcpqB,EAAE0mB,WAAWvmB,OAAO,CAClCC,QAAS,CACPumB,KAAM,QACNC,KAAM5mB,EAAE4mB,KAAK,CACXC,QAEE,iiEACFC,SAAU,CAAC,GAAI,IACfC,WAAY,CAAC,GAAI,OAIrBC,cAZkC,WAahC,IAAM5jB,EAAUxC,KAAKqmB,SACf/lB,EAAMkC,EAAQjC,KAChBwG,EAAevE,EAAQuE,aACrB2f,EAAelkB,EAAQiB,UAAUzD,KAAKsmB,SACtCK,EAAY3mB,KAAKumB,YACjBta,EAAQjM,KAAKqnB,wBAAwBX,EAAcC,GAOpD5f,IAAgBA,EAAe,IACpC,IAAMohB,EAAU7nB,EAAIoD,mBAAmBlB,EAAQiB,UAAU,IACnD4kB,EAAU/nB,EAAIoD,mBAAmBlB,EAAQiB,UAAU,IACnD6L,EAAI7D,KAAK6c,IAAIH,EAAQ5jB,EAAI8jB,EAAQ9jB,GACjCiL,EAAI/D,KAAK6c,IAAIH,EAAQ3jB,EAAI6jB,EAAQ7jB,GACtBiH,KAAKmc,KAAKtY,EAAIA,EAAIE,EAAIA,GAExBzI,GAAgBkF,EAAQ,EACrCzJ,EAAQwJ,QAAQC,GAMhBzJ,EAAQwJ,QAAQ,IAIpBwa,aA3CkC,WA4ChCxmB,KAAKwe,UAAUxe,KAAKqmB,SAAS5iB,UAAUzD,KAAKsmB,aAIhDlnB,EAAE+a,YAAc,SAAS3X,EAAS4T,EAAK5W,GACrC,OAAO,IAAIJ,EAAEoqB,YAAYhnB,EAAS4T,EAAK5W,K,eCjDzCJ,EAAE8Q,iBAAmB9Q,EAAE0L,kBAAoB,GAC3C1L,EAAE8Q,iBAAmB9Q,EAAE0L,iBAEvB1L,EAAE0L,iBAAiBiI,iBAAmB,GAEtC3T,EAAE0L,iBAAiB2e,WAAarqB,EAAE6gB,SAASyJ,QAAQnqB,OAAO,IAE1DH,EAAE8Q,iBAAiB2F,WAAa,SAASrW,GACvC,OAAO,IAAIJ,EAAE0L,iBAAiB2e,WAAWjqB,IAI3CJ,EAAEC,sBAAsB0Q,aAAY,WAElC/P,KAAK2pB,QAAU,CACbvqB,EAAEiX,aACFjX,EAAE6V,aACF7V,EAAEqV,WACFrV,EAAEkV,cAIJlV,EAAEC,sBAAsBwT,KAAKgH,MAAQ,CACnCmB,KAAM5b,EAAEqV,WACRmV,OAAQxqB,EAAEkV,cAGZ,IAAMwQ,EAAI9kB,KAAKR,QAAQ6T,QAAUrT,KAAKR,QAAQ6T,QAAUrT,KAAK2pB,QAE7D3pB,KAAKQ,QAAUpB,EAAEuH,sBAAsB7E,KAAK9B,KAAM,CAACqT,QAASyR,Q,cC7B9D1lB,EAAE0L,iBAAmB1L,EAAE0L,kBAAoB,GAC3C1L,EAAE8Q,iBAAmB9Q,EAAE0L,iBAEvB1L,EAAE0L,iBAAiB6N,WAAa,GAEhCvZ,EAAE0L,iBAAiBC,SAAW3L,EAAE6gB,SAAS4J,MAAMtqB,OAAO,CACpDC,QAAS,CACPsqB,OAAQ,CAAC,GAAI,KAGfhqB,WALoD,SAKzC8K,EAAQpL,GACjBJ,EAAEW,WAAWC,KAAMR,GACnBJ,EAAE6gB,SAAS4J,MAAM5pB,UAAUH,WAAWI,KAAKF,KAAM4K,EAAQpL,IAG3D8Q,SAVoD,SAU3ChQ,EAAK2a,GACZjb,KAAKM,IAAMA,EACXN,KAAKib,GAAKA,GAGZ8O,MAfoD,WAgBlD,GAAI/pB,KAAK2jB,IACP,OAAO3jB,KAAK2jB,IAAIqG,UAIpBtL,UArBoD,SAqB1CuL,GAER,IADA,IAAIF,EAAQ/pB,KAAK+pB,QACRzmB,EAAI,EAAGA,EAAIymB,EAAM5kB,OAAQ7B,IAAK,CACrC,IAAI4mB,EAAOH,EAAM5T,KAAK7S,GAAG0mB,SAAS,GAClC,GAAI5qB,EAAE6C,QAAQQ,SAASynB,EAAMD,GAE3B,OADAC,EAAKC,QACED,EAGX,OAAO,KAIX9qB,EAAE8Q,iBAAiBqO,SAAW,SAAS3T,EAAQpL,GAC7C,OAAO,IAAIJ,EAAE0L,iBAAiBC,SAASH,EAAQpL,IAGjDJ,EAAEwH,wBAAwBmJ,aAAY,WAEpC/P,KAAK2pB,QAAU,CACbvqB,EAAE0gB,WACF1gB,EAAEqlB,YACFrlB,EAAEugB,cACFvgB,EAAEklB,aACFllB,EAAEijB,iBACFjjB,EAAEqV,WACFrV,EAAEqd,cACFrd,EAAEyd,gBACFzd,EAAE2d,aACF3d,EAAEiX,aACFjX,EAAE6V,cAIJ7V,EAAE0L,iBAAiB+H,KAAKgH,MAAQ,CAC9BxY,KAAMjC,EAAE0gB,WACR7T,MAAO7M,EAAEqlB,YACT5J,QAASzb,EAAEugB,cACX7E,OAAQ1b,EAAEklB,aACVvJ,WAAY3b,EAAEijB,iBACdrH,KAAM5b,EAAEqV,YAGV,IAAMqQ,EAAI9kB,KAAKR,QAAQ6T,QAAUrT,KAAKR,QAAQ6T,QAAUrT,KAAK2pB,QAE7D3pB,KAAKQ,QAAUpB,EAAE8Q,iBAAiBpO,KAAK9B,KAAM,CAACqT,QAASyR,Q,eCrEzD1lB,EAAEgrB,QAAUhrB,EAAEirB,MAAM9qB,OAAO,CAEzB+qB,KAAM,2CAENC,SAAU,GAEV9X,OANyB,WAQvB,OADAzS,KAAKwqB,WAAWxqB,KAAKuqB,UACdvqB,KAAKsqB,MAGdE,WAXyB,SAWdC,GACTzqB,KAAKsqB,MAAQG,M,eCdjBrrB,EAAEoT,iBAAmBpT,EAAEgrB,QAAQ7qB,OAAO,CAEpCgrB,SAEI,8T,eCHNnrB,EAAEuhB,eAAiBvhB,EAAEgrB,QAAQ7qB,OAAO,CAClCgrB,SACE,uqT,eCHJnrB,EAAE0Q,IAAI4a,aAAa,CACjBC,cAAc,EACdC,SAAS,IAOXxrB,EAAE0Q,IAAI+a,aAAezrB,EAAE0Q,IAAIgb,QAAQvrB,OAAO,CACxCO,WADwC,SAC7BQ,GACTN,KAAKO,KAAOD,EACZN,KAAKwQ,WAAalQ,EAAIkQ,WACtBxQ,KAAK+qB,MAAQzqB,EAAI0qB,OAAOC,YACxBjrB,KAAKkrB,mBAAqB,EAC1B5qB,EAAII,GAAG,SAAUV,KAAKmrB,SAAUnrB,OAGlCsQ,SATwC,WAUtClR,EAAE8B,SAASR,GAAGV,KAAKwQ,WAAY,YAAaxQ,KAAKorB,aAAcprB,OAGjEkR,YAbwC,WActC9R,EAAE8B,SAASH,IAAIf,KAAKwQ,WAAY,YAAaxQ,KAAKorB,aAAcprB,OAGlEqrB,MAjBwC,WAkBtC,OAAOrrB,KAAKsrB,QAGdH,SArBwC,WAsBtC/rB,EAAE6C,QAAQkP,OAAOnR,KAAK+qB,cACf/qB,KAAK+qB,OAGdQ,YA1BwC,WA2BtCvrB,KAAKkrB,mBAAqB,EAC1BlrB,KAAKsrB,QAAS,GAGhBE,yBA/BwC,WAgCN,IAA5BxrB,KAAKkrB,qBACPlC,aAAahpB,KAAKkrB,oBAClBlrB,KAAKkrB,mBAAqB,IAI9BE,aAtCwC,SAsC3BpqB,GACX,IAAKA,EAAE8B,UAAyB,IAAZ9B,EAAEyqB,OAA4B,IAAbzqB,EAAE6Q,OACrC,OAAO,EAKT7R,KAAKwrB,2BACLxrB,KAAKurB,cAELnsB,EAAE6C,QAAQypB,uBACVtsB,EAAE6C,QAAQ0pB,mBAEV3rB,KAAK4rB,YAAc5rB,KAAKO,KAAKsrB,2BAA2B7qB,GAExD5B,EAAE8B,SAASR,GAAG0R,SAAU,CACtB1Q,YAAatC,EAAE8B,SAAS0d,KACxBkN,UAAW9rB,KAAK+rB,aAChBpD,QAAS3oB,KAAKgsB,YACbhsB,OAGL+rB,aA5DwC,SA4D3B/qB,GACNhB,KAAKsrB,SACRtrB,KAAKsrB,QAAS,EAEdtrB,KAAKisB,KAAO7sB,EAAE6C,QAAQoP,OAAO,MAAO,mBAAoBrR,KAAKwQ,YAC7DpR,EAAE6C,QAAQgO,SAASjQ,KAAKwQ,WAAY,qBAEpCxQ,KAAKO,KAAK0I,KAAK,iBAGjBjJ,KAAKksB,OAASlsB,KAAKO,KAAKsrB,2BAA2B7qB,GAEnDhB,KAAKmsB,QAAU/sB,EAAEgtB,OAAOpsB,KAAK4rB,YAAa5rB,KAAKksB,QAC/C,IAAIG,EAAOrsB,KAAKmsB,QAAQG,UAExBltB,EAAE6C,QAAQsqB,YAAYvsB,KAAKisB,KAAMjsB,KAAKmsB,QAAQK,KAE9CxsB,KAAKisB,KAAK1f,MAAMpG,MAAQkmB,EAAK9nB,EAAI,KACjCvE,KAAKisB,KAAK1f,MAAMnG,OAASimB,EAAK7nB,EAAI,MAGpCioB,QAjFwC,WAkFlCzsB,KAAKsrB,SACPlsB,EAAE6C,QAAQkP,OAAOnR,KAAKisB,MACtB7sB,EAAE6C,QAAQkS,YAAYnU,KAAKwQ,WAAY,sBAGzCpR,EAAE6C,QAAQyqB,sBACVttB,EAAE6C,QAAQ0qB,kBAEVvtB,EAAE8B,SAASH,IAAIqR,SAAU,CACvB1Q,YAAatC,EAAE8B,SAAS0d,KACxBkN,UAAW9rB,KAAK+rB,aAChBpD,QAAS3oB,KAAKgsB,YACbhsB,OAGLgsB,WAjGwC,SAiG7BhrB,GACT,IAAgB,IAAZA,EAAEyqB,OAA4B,IAAbzqB,EAAE6Q,UAIvB7R,KAAKysB,UAEAzsB,KAAKsrB,QAAV,CAIAtrB,KAAKwrB,2BACLxrB,KAAKkrB,mBAAqBtJ,WACtBxiB,EAAEiO,KAAKzK,KAAK5C,KAAKurB,YAAavrB,MAAO,GAEzC,IAAIosB,EAAShtB,EAAEgL,aACXpK,KAAKO,KAAKqsB,uBAAuB5sB,KAAKmsB,QAAQU,iBAC9C7sB,KAAKO,KAAKqsB,uBAAuB5sB,KAAKmsB,QAAQW,gBAG9C3hB,EAAOnL,KAAKO,KAAK2J,UACjBT,EAASzJ,KAAKO,KAAKoJ,YAGvByiB,EAASpsB,KAAKO,KAAKuU,8BAA8BsX,EAAQjhB,EAAM1B,GAE/DzJ,KAAKO,KAAK0I,KAAK,gBAAiB,CAAC2L,iBAAkBwX,QAIvDhtB,EAAE0Q,IAAIC,YAAY,aAAc,eAAgB3Q,EAAE0Q,IAAI+a,e,eCxItDzrB,EAAE0Q,IAAI4a,aAAa,CACjB1hB,mBAAmB,IAOrB5J,EAAE0Q,IAAIid,kBAAoB3tB,EAAE0Q,IAAIkd,gBAAgBztB,OAAO,CACrDkB,OADqD,WAEnD,IAAMH,EAAMN,KAAKO,KAEjB,OAAIP,KAAK6T,WAGLvT,EAAIyI,gBAAgB/G,WACtB1B,EAAIyI,gBAAgBjI,UAGtBd,KAAKO,KAAK0I,KAAK,iBAEfjJ,KAAK6T,UAAW,EAChB7T,KAAKsQ,YAVuBtQ,MAc9Bc,QAlBqD,WAmBnD,OAAKd,KAAK6T,UAEV7T,KAAK6T,UAAW,EAChB7T,KAAKkR,cAEElR,MALsBA,MAQ/BitB,cA3BqD,SA2BvCjsB,GACZ,IAAMV,EAAMN,KAAKO,KACXyT,EAAKhT,EAAEiT,cAGTD,GAAMA,EAAGlR,WAEbxC,EAAI4sB,UAAY,EAChBltB,KAAKO,KAAK4sB,cAAgBvL,YAAW,WACd,IAAjBthB,EAAI4sB,UACN5sB,EAAI4sB,SAAW,EACf5sB,EAAI2I,KAAK,cAAe,CAACoB,KAAM,iBAG3BjL,EAAEqI,QAAQ2lB,OAAUpZ,GAAMA,EAAGqZ,mBAAmBC,kBAClDhtB,EAAI2I,KAAK,cAGZ,OAGLskB,eAhDqD,WAiDnD,IAAMjtB,EAAMN,KAAKO,KACXitB,EAASltB,EAAImtB,QAEnB7L,YAAW,WACTthB,EAAI4sB,SAAW,EACflE,aAAa1oB,EAAI6sB,iBAChB,GAEEK,IAE0B,IAA3BA,EAAOhuB,QAAQiZ,SACjB+U,EAAOhuB,QAAQiZ,QAAU,EACzB+U,EAAOpS,WAAW,KAElBoS,EAAOhuB,QAAQiZ,QAAU,EACzB+U,EAAOpS,WAAW,QAKxBhc,EAAE0Q,IAAIC,YAAY,aAAc,oBAAqB3Q,EAAE0Q,IAAIid,oB,eCxE3D3tB,EAAE0Q,IAAIkd,gBAAgBU,QAAQ,CAC5Bpd,SAD4B,WAE1BtQ,KAAKO,KAAKG,GAAG,CACXypB,MAAOnqB,KAAKitB,cACZ3T,SAAUtZ,KAAKutB,gBACdvtB,OAGLkR,YAR4B,WAS1BlR,KAAKO,KAAKQ,IAAI,CACZopB,MAAOnqB,KAAKitB,cACZ3T,SAAUtZ,KAAKutB,gBACdvtB,OAGLS,OAf4B,WAgB1B,OAAIT,KAAK6T,UAGL7T,KAAKO,KAAKyI,mBACRhJ,KAAKO,KAAKyI,kBAAkBhH,YAMlChC,KAAKO,KAAK0I,KAAK,iBAEfjJ,KAAK6T,UAAW,EAChB7T,KAAKsQ,YAbuBtQ,MAiB9Bc,QAjC4B,WAkC1B,OAAKd,KAAK6T,UAGV7T,KAAKO,KAAK0I,KAAK,kBAEfjJ,KAAK6T,UAAW,EAChB7T,KAAKkR,cACElR,MAPsBA,MAU/BitB,cA5C4B,SA4CdjsB,GACZ,IAAMV,EAAMN,KAAKO,KACXyT,EAAKhT,EAAEiT,cAGTD,GAAMA,EAAGlR,WAEbxC,EAAI4sB,UAAY,EAChBltB,KAAKO,KAAK4sB,cAAgBvL,YAAW,WACd,IAAjBthB,EAAI4sB,UACN5sB,EAAI4sB,SAAW,EACf5sB,EAAI2I,KAAK,cAAe,CAACoB,KAAM,iBAG3BjL,EAAEqI,QAAQ2lB,OAAUpZ,GAAMA,EAAGqZ,mBAAmBC,kBAIlDhtB,EAAIqtB,cAAc3Z,EAAI,WAAY,CAAC1T,MAGtC,OAGLitB,eApE4B,SAoEbvsB,GACb,IAAMV,EAAMN,KAAKO,KACXyT,EAAKhT,EAAEiT,cAOb,GALA2N,YAAW,WACTthB,EAAI4sB,SAAW,EACflE,aAAa1oB,EAAI6sB,iBAChB,IAEEnZ,EAAM,OAAO,EAElB,IAAM4Z,EAAUttB,EAAI4J,UACdtG,EAAQtD,EAAId,QAAQquB,UACpB1iB,EAAO6I,EAAGlR,SAAW8qB,EAAUhqB,EAAQgqB,EAAUhqB,EAEnB,WAAhCtD,EAAId,QAAQuJ,gBACdzI,EAAIwtB,QAAQ3iB,GAEZ7K,EAAIytB,cAAc/sB,EAAEgtB,eAAgB7iB,O,eC1F1C/L,EAAE0Q,IAAI4d,QAAQ,CAEZR,SAAU,EAEVe,gBAJY,SAIIzX,GAiCd,OA9BAA,EAAOxW,KAAKkuB,cAAgB9uB,EAAEG,OAAO,CACnC4uB,cAAe,GACfC,QAAS,GACTC,cAAe,GACfC,QAAS,EACTd,QAAQ,EACRe,aAAc,EACdvlB,mBAAmB,GAClBwN,IAEOgX,SACRxtB,KAAKkuB,cAAgB9uB,EAAEG,OAAOS,KAAKkuB,cAAe,CAChDK,aAAc/X,EAAKgX,OAAS,OAAI/X,EAChCzM,oBAAmBwN,EAAKgX,aAAgB/X,KAI5CzV,KAAKwuB,cAAgBpvB,EAAEqvB,UAnBX,oDAmB0B,CACpCL,QAAS5X,EAAK4X,QACdC,cAAe7X,EAAK6X,cACpBC,QAAS9X,EAAK8X,QACd7V,QAASjC,EAAK2X,gBACbnc,MAAMhS,MAELwW,EAAKgX,OAAUxtB,KAAK0uB,WAAWlY,GAGjCxW,KAAKgJ,uBAAoByM,EAGpBzV,MAGT0uB,WAxCY,SAwCDlY,GAsBT,OAnB0B,IAAtBA,EAAK+X,cAA4C,IAAtB/X,EAAK+X,eAClC/X,EAAK+X,aAAe,GAGtBvuB,KAAKytB,QAAUruB,EAAEqvB,UANL,8EAMoB,CAC9BE,YAAa,0OACbC,WAAY,OACZpG,aAAa,EACb/P,QAASjC,EAAK+X,aACdH,QAAS5X,EAAK4X,QACdC,cAAe7X,EAAK6X,cACpBC,QAAS9X,EAAK8X,QACdO,IAAK,QACJ7c,MAAMhS,MAELA,KAAKkuB,cAAcllB,mBACrBhJ,KAAKgJ,kBAAkBvI,SAGlBT,QAKXZ,EAAE0Q,IAAIC,aAAY,WAChB/P,KAAKgJ,kBAAkBlI,UACvBd,KAAK+I,gBAAgBtI,a,eCtEvBrB,EAAE6C,QAAU7C,EAAEG,OAAOH,EAAE6C,QAAS,CAC9B7B,gBAD8B,SACd0uB,GACd9uB,KAAK6O,YAAcigB,GAGrBlgB,gBAL8B,SAKd6U,GACd,IAAMpV,EAAOjP,EAAEqI,QAAQ6G,UAAYlP,EAAEqI,QAAQsnB,SAAW3vB,EAAEqI,QAAQunB,KAS5D1iB,EAAS,CACbmX,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjBA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,GACjB,EAAG,EAAG,EAAG,EACTA,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,IAGbwL,EAAM5gB,EAAO,YAAc/B,EAAOyC,KAAK,KAAO,IAAM,GAQ1D,OANKV,GACH8I,QACKC,IAAI,uFAIJ6X,GAGT/sB,YAjC8B,SAiClBoQ,EAAIL,GACd,IAAMzO,EAAIyO,EACV,OAAOjS,KAAKyC,SAAS6P,EAAI9O,GACvBxD,KAAKmU,YAAY7B,EAAI9O,GAAKxD,KAAKiQ,SAASqC,EAAI9O,IAGhD4Z,cAvC8B,WAwC5B,OAAO5D,OAAO0V,QAAQlvB,KAAK6O,YAAYsgB,qBAGzC/Z,eA3C8B,SA2CfD,GACb,GAAU,IAANA,EAAW,OAAOnV,KAAKod,gBAE3B,IACIgS,EADEvgB,EAAc7O,KAAK6O,YAAYwgB,qBASrC,OALED,EADyB,mBAAhBvgB,EACIA,EAAYsG,GAEZtG,EAGR2K,OAAO0V,QAAQE,O,cCvD1BhwB,EAAEsS,SAAW,CAMXL,OANW,SAMJie,GAKL,MAJI,KAAKC,KAAKD,KACZA,EAAMA,EAAIE,QAAQ,KAAM,KAIxB,4BAA8BF,EAA9B,mDACuBA,EADvB,kBAMJlN,cAlBW,SAkBGhR,EAAWqe,GACvB,IAAMtQ,EAAM/N,EAAUiB,cAAc,OAEhC8M,GACF/f,EAAE6C,QAAQgO,SAASkP,EAAKsQ,IAK5BnQ,YA3BW,SA2BClO,EAAWse,EAAMC,GACtB,KAAKJ,KAAKG,KACbA,EAAO,IAAMA,GAEV,KAAKH,KAAKI,KACbA,EAAO,IAAMA,GAGf,IAAM7Q,EAAM1N,EAAUiB,cAAc,OACpC,GAAIyM,EAAK,CACP,IAAM8Q,EAAU9Q,EAAI+Q,aAAa,gBAAkBH,EAAOC,EAAOD,EAEjE,OADA5Q,EAAIxN,aAAa,aAAcse,GACxBA,EAET,OAAO,GAGT1d,YA5CW,SA4CCd,EAAW0e,EAAQC,GAC7B,IAAMH,EAAUxe,EAAUye,aAAa,WAAaC,EAASC,EAASD,EAMtE,OAJA1e,EAAUE,aAAa,QAASse,GAC5Bxe,EAAU4e,aAAa,eACzB5e,EAAUE,aAAa,aAAcse,GAEhCA,K,eCnDXxwB,EAAEmH,UAAY,CAEZC,cAFY,SAEEhE,GACZ,IAAIlC,EAAMkC,EAAQjC,KAMlB,OAAe,IAJJD,EACNoD,mBAAmBlB,EAAQiB,UAAU,IACrCwsB,WAAW3vB,EAAIoD,mBAAmBlB,EAAQiB,UAAU,KAEnCjB,EAAQjB,aAAa4E,S,eCT/C/G,EAAEuQ,WAAa,CAGbugB,IAHa,SAGTzM,GACF,MAAO,CACLA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAC3DA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,KAK/D0M,OAZa,SAYNrL,EAAGzF,GACR,IACI/b,EADEE,EAAI,GAGV,IAAKF,EAAI,EAAGA,EAAI,EAAGA,IACjB,IAAK,IAAI+L,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAG1B,IAFA,IAAI+gB,EAAM,EAEDvkB,EAAI,EAAGA,EAAI,EAAGA,IACrBukB,GAAOtL,EAAE,EAAExhB,EAAIuI,GAAGwT,EAAE,EAAExT,EAAIwD,GAG5B7L,EAAE,EAAEF,EAAI+L,GAAK+gB,EAIjB,OAAO5sB,GAIT6sB,OAhCa,SAgCN5M,EAAG6M,GACR,MAAO,CACL7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,GAC/B7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,GAC/B7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,GAAK7M,EAAE,GAAG6M,EAAE,KAKnCC,OAzCa,SAyCN5L,EAAGlB,GAGR,IAFA,IAAMnX,EAAS,GAENhJ,EAAI,EAAGuf,EAAIY,EAAEte,OAAQ7B,EAAIuf,EAAGvf,IACnCgJ,EAAOpJ,KAAKyhB,EAAElB,EAAEngB,IAGlB,OAAOgJ,GAGTkkB,cAnDa,SAmDCC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GACxC,IAAMvN,EAAI,CACRgN,EAAIE,EAAIE,EACRH,EAAIE,EAAIE,EACR,EAAG,EAAG,GAEFR,EAAIlxB,EAAEuQ,WAAW0gB,OAAOjxB,EAAEuQ,WAAWugB,IAAIzM,GAAI,CAACsN,EAAIC,EAAI,IAE5D,OAAO5xB,EAAEuQ,WAAWwgB,OAAO1M,EAAG,CAC5B6M,EAAE,GAAI,EAAG,EACT,EAAGA,EAAE,GAAI,EACT,EAAG,EAAGA,EAAE,MAIZ5mB,QAlEa,SAkEL+Z,EAAGlf,EAAGC,GACZ,IAAM8rB,EAAIlxB,EAAEuQ,WAAW0gB,OAAO5M,EAAG,CAAClf,EAAGC,EAAG,IAExC,MAAO,CAAC8rB,EAAE,GAAGA,EAAE,GAAIA,EAAE,GAAGA,EAAE,KAG5B1gB,oBAxEa,SAyETqhB,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,GAEjB,IAAMrN,EAAIvlB,EAAEuQ,WAAW6gB,cAAcS,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClEjS,EAAIzgB,EAAEuQ,WAAW6gB,cAAcW,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,EAAKG,EAAKC,GAClEvO,EAAIrkB,EAAEuQ,WAAWwgB,OAAOtQ,EAAGzgB,EAAEuQ,WAAWugB,IAAIvL,IAKlD,OAAOvlB,EAAEuQ,WAAW4gB,OAAO,EAAE9M,EAAE,GAAIA,M,eCrFvCrkB,EAAE4N,SAAW,CAEXC,UAFW,SAED1I,EAAGC,GAAiB,IAAd6H,EAAc,uDAAP,MACrB,MAAgB,QAATA,EACHrM,KAAKoN,iBAAiB3B,KAAKwc,MAAMzjB,EAAGD,IACpCkH,KAAKwc,MAAMzjB,EAAGD,IAGpB6I,iBARW,SAQML,GACf,OAAgB,IAARA,EAAetB,KAAKyB,IAG9BS,iBAZW,SAYMZ,GACf,OAAQA,EAAQtB,KAAKyB,GAAM,O,eCb/B9N,EAAEe,MAAQ,CACRC,gBADQ,WAEN,IAAMyO,EAAc,CAClB2Q,YAAa,eACbE,aAAc,gBACdE,aAAc,gBACdG,UAAW,aACXmB,YAAa,eACbC,aAAc,gBACdnC,aAAc,gBACdC,UAAW,aACXqD,gBAAiB,oBACjBG,eAAgB,kBAChBK,SAAU,YACVC,WAAY,cACZmB,gBAAiB,oBACjBC,qBAAsB,yBACtBE,aAAc,wBACdE,YAAa,eACbG,WAAY,cACZE,aAAc,iBACdC,YAAa,gBACbE,aAAc,gBACdoK,mBACE,qEACFE,qBACE,wEAGJ,GAAKrvB,KAAKR,QAAQqP,YAIhB,IAAK,IAAMkF,KAAOlF,EACX7O,KAAKR,QAAQqP,YAAYgP,eAAe9J,KAC3C/T,KAAKR,QAAQqP,YAAYkF,GAAOlF,EAAYkF,SALhD/T,KAAKR,QAAQqP,YAAcA,EAU7BzP,EAAE6C,QAAQ7B,gBAAgBJ,KAAKR,QAAQqP,cAGzC0E,aA3CQ,SA2CKub,EAAK/a,EAAKke,GAErB,MADY,CAACle,EAAKke,GACPltB,QAAO,SAAS+pB,EAAKjjB,GAC9B,OAAOijB,GAAOA,EAAIjjB,KACjBijB,OC7CPoD,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,MACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OACpBA,EAAoB,OAEpBA,EAAoB,O","sources":["webpack://leaflet-distortableimage/./src/DistortableCollection.js","webpack://leaflet-distortableimage/./src/DistortableImageOverlay.js","webpack://leaflet-distortableimage/./src/components/DistortableImage.Keymapper.js","webpack://leaflet-distortableimage/./src/edit/DistortableCollection.Edit.js","webpack://leaflet-distortableimage/./src/edit/DistortableImage.Edit.js","webpack://leaflet-distortableimage/./src/edit/actions/BorderAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DeleteAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DistortAction.js","webpack://leaflet-distortableimage/./src/edit/actions/DragAction.js","webpack://leaflet-distortableimage/./src/edit/actions/EditAction.js","webpack://leaflet-distortableimage/./src/edit/actions/ExportAction.js","webpack://leaflet-distortableimage/./src/edit/actions/FreeRotateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/GeolocateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/LockAction.js","webpack://leaflet-distortableimage/./src/edit/actions/OpacitiesAction.js","webpack://leaflet-distortableimage/./src/edit/actions/OpacityAction.js","webpack://leaflet-distortableimage/./src/edit/actions/RestoreAction.js","webpack://leaflet-distortableimage/./src/edit/actions/RotateAction.js","webpack://leaflet-distortableimage/./src/edit/actions/ScaleAction.js","webpack://leaflet-distortableimage/./src/edit/actions/StackAction.js","webpack://leaflet-distortableimage/./src/edit/actions/UnlockAction.js","webpack://leaflet-distortableimage/./src/edit/getEXIFdata.js","webpack://leaflet-distortableimage/./src/edit/handles/DistortHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/DragHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/EditHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/FreeRotateHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/LockHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/RotateHandle.js","webpack://leaflet-distortableimage/./src/edit/handles/ScaleHandle.js","webpack://leaflet-distortableimage/./src/edit/toolbars/DistortableImage.ControlBar.js","webpack://leaflet-distortableimage/./src/edit/toolbars/DistortableImage.PopupBar.js","webpack://leaflet-distortableimage/./src/iconsets/IconSet.js","webpack://leaflet-distortableimage/./src/iconsets/KeymapperIconSet.js","webpack://leaflet-distortableimage/./src/iconsets/ToolbarIconSet.js","webpack://leaflet-distortableimage/./src/mapmixins/BoxCollector.js","webpack://leaflet-distortableimage/./src/mapmixins/DoubleClickLabels.js","webpack://leaflet-distortableimage/./src/mapmixins/DoubleClickZoom.js","webpack://leaflet-distortableimage/./src/mapmixins/MapMixins.js","webpack://leaflet-distortableimage/./src/util/DomUtil.js","webpack://leaflet-distortableimage/./src/util/IconUtil.js","webpack://leaflet-distortableimage/./src/util/ImageUtil.js","webpack://leaflet-distortableimage/./src/util/MatrixUtil.js","webpack://leaflet-distortableimage/./src/util/TrigUtil.js","webpack://leaflet-distortableimage/./src/util/Utils.js","webpack://leaflet-distortableimage/webpack/startup"],"sourcesContent":["const arr = [];\nL.DistortableCollection = L.FeatureGroup.extend({\n options: {\n editable: true,\n exportOpts: {\n exportStartUrl: '//export.mapknitter.org/export',\n statusUrl: '//export.mapknitter.org',\n exportUrl: 'http://export.mapknitter.org/',\n },\n },\n\n initialize(options) {\n L.setOptions(this, options);\n L.FeatureGroup.prototype.initialize.call(this, options);\n L.Utils.initTranslation.call(this);\n\n this.editable = this.options.editable;\n },\n\n onAdd(map) {\n L.FeatureGroup.prototype.onAdd.call(this, map);\n\n this._map = map;\n\n if (this.editable) { this.editing.enable(); }\n\n /**\n * although we have a DistortableCollection.Edit class that handles collection events to keep our code managable,\n * events that need to be added on individual images are kept here to do so through `layeradd`.\n */\n this.on('layeradd', this._addEvents, this);\n this.on('layerremove', this._removeEvents, this);\n },\n\n onRemove() {\n if (this.editing) { this.editing.disable(); }\n\n this.off('layeradd', this._addEvents, this);\n this.off('layerremove', this._removeEvents, this);\n },\n\n _addEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.on(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.on(layer.getElement(), {\n mousedown: this._deselectOthers,\n /* Enable longpress for multi select for touch devices. */\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _removeEvents(e) {\n const layer = e.layer;\n\n L.DomEvent.off(layer, {\n dragstart: this._dragStartMultiple,\n drag: this._dragMultiple,\n }, this);\n\n L.DomEvent.off(layer.getElement(), {\n mousedown: this._deselectOthers,\n contextmenu: this._longPressMultiSelect,\n }, this);\n },\n\n _longPressMultiSelect(e) {\n if (!this.editable) { return; }\n\n e.preventDefault();\n\n this.eachLayer((layer) => {\n const edit = layer.editing;\n if (layer.getElement() === e.target && edit.enabled()) {\n L.DomUtil.toggleClass(layer.getElement(), 'collected');\n if (this.anyCollected()) {\n layer.deselect();\n this.editing._addToolbar();\n } else {\n this.editing._removeToolbar();\n }\n }\n });\n },\n\n isCollected(overlay) {\n return L.DomUtil.hasClass(overlay.getElement(), 'collected');\n },\n\n anyCollected() {\n const layerArr = this.getLayers();\n return layerArr.some(this.isCollected.bind(this));\n },\n\n _toggleCollected(e, layer) {\n if (e.shiftKey) {\n /* conditional prevents disabled images from flickering multi-select mode */\n if (layer.editing.enabled()) {\n L.DomUtil.toggleClass(e.target, 'collected');\n // re-order layers by _leaflet_id to match their display order in UI\n // add new layer to right position and avoid repitition\n const newArr = arr.every((each) => {\n return each._leaflet_id !== layer._leaflet_id;\n });\n if (newArr) {\n arr.push(layer);\n } else {\n arr.splice(arr.indexOf(layer), 1);\n }\n }\n }\n\n if (this.anyCollected()) { layer.deselect(); }\n else { this.editing._removeToolbar(); }\n },\n\n _deselectOthers(e) {\n if (!this.editable) { return; }\n\n this.eachLayer((layer) => {\n if (layer.getElement() !== e.target) {\n layer.deselect();\n } else {\n this._toggleCollected(e, layer);\n }\n });\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _dragStartMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n let i;\n\n if (!this.isCollected(overlay)) { return; }\n\n this.eachLayer((layer) => {\n layer._dragStartPoints = {};\n layer.deselect();\n for (i = 0; i < 4; i++) {\n const c = layer.getCorner(i);\n layer._dragStartPoints[i] = map.latLngToLayerPoint(c);\n }\n });\n },\n\n _dragMultiple(e) {\n const overlay = e.target;\n const map = this._map;\n\n if (!this.isCollected(overlay)) { return; }\n\n const topLeft = map.latLngToLayerPoint(overlay.getCorner(0));\n const delta = overlay._dragStartPoints[0].subtract(topLeft);\n\n this._updateCollectionFromPoints(delta, overlay);\n },\n\n _toRemove() {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return (this.isCollected(layer) && mode !== 'lock');\n });\n },\n\n _toMove(overlay) {\n const layerArr = this.getLayers();\n\n return layerArr.filter((layer) => {\n const mode = layer.editing._mode;\n return layer !== overlay && this.isCollected(layer) && mode !== 'lock';\n });\n },\n\n _updateCollectionFromPoints(delta, overlay) {\n const layersToMove = this._toMove(overlay);\n const p = new L.Transformation(1, -delta.x, 1, -delta.y);\n let i;\n\n layersToMove.forEach((layer) => {\n const movedPoints = {};\n for (i = 0; i < 4; i++) {\n movedPoints[i] = p.transform(layer._dragStartPoints[i]);\n }\n layer.setCornersFromPoints(movedPoints);\n });\n },\n\n _getAvgCmPerPixel(imgs) {\n const reduce = imgs.reduce(function(sum, img) {\n return sum + img.cm_per_pixel;\n }, 0);\n return reduce / imgs.length;\n },\n\n generateExportJson() {\n const json = {};\n json.images = [];\n\n this.eachLayer(function(layer) {\n if (this.isCollected(layer)) {\n const sections = layer._image.src.split('/');\n const filename = sections[sections.length-1];\n const zc = layer.getCorners();\n const corners = [\n {lat: zc[0].lat, lon: zc[0].lng},\n {lat: zc[1].lat, lon: zc[1].lng},\n {lat: zc[3].lat, lon: zc[3].lng},\n {lat: zc[2].lat, lon: zc[2].lng},\n ];\n json.images.push({\n id: layer._leaflet_id,\n src: layer._image.src,\n width: layer._image.width,\n height: layer._image.height,\n image_file_name: filename,\n nodes: corners,\n cm_per_pixel: L.ImageUtil.getCmPerPixel(layer),\n });\n }\n }, this);\n\n json.images = json.images.reverse();\n json.avg_cm_per_pixel = this._getAvgCmPerPixel(json.images);\n\n return json;\n },\n});\n\nL.distortableCollection = function(id, options) {\n return new L.DistortableCollection(id, options);\n};\n","L.DistortableImageOverlay = L.ImageOverlay.extend({\n\n options: {\n height: 200,\n crossOrigin: true,\n // todo: find ideal number to prevent distortions during RotateScale, and make it dynamic (remove hardcoding)\n edgeMinWidth: 50,\n editable: true,\n mode: 'distort',\n selected: false,\n },\n\n initialize(url, options) {\n L.setOptions(this, options);\n L.Utils.initTranslation.call(this);\n\n this.edgeMinWidth = this.options.edgeMinWidth;\n this.editable = this.options.editable;\n this._selected = this.options.selected;\n this._url = url;\n this.rotation = {};\n },\n\n onAdd(map) {\n this._map = map;\n if (!this.getElement()) { this._initImage(); }\n\n map.on('viewreset', this._reset, this);\n\n if (this.options.corners) {\n this._corners = this.options.corners;\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n // Have to wait for the image to load because need to access its w/h\n L.DomEvent.on(this.getElement(), 'load', () => {\n this.getPane().appendChild(this.getElement());\n this._initImageDimensions();\n\n if (this.options.rotation) {\n const units = this.options.rotation.deg >= 0 ? 'deg' : 'rad';\n this.setAngle(this.options.rotation[units], units);\n } else {\n this.rotation = {deg: 0, rad: 0};\n this._reset();\n }\n\n /* Initialize default corners if not already set */\n if (!this._corners) {\n if (map.options.zoomAnimation && L.Browser.any3d) {\n map.on('zoomanim', this._animateZoom, this);\n }\n }\n\n /** if there is a featureGroup, only its editable option matters */\n const eventParents = this._eventParents;\n if (eventParents) {\n this.eP = eventParents[Object.keys(eventParents)[0]];\n if (this.eP.editable) { this.editing.enable(); }\n } else {\n if (this.editable) { this.editing.enable(); }\n this.eP = null;\n }\n });\n\n L.DomEvent.on(this.getElement(), 'click', this.select, this);\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n\n /**\n * custom events fired from DoubleClickLabels.js. Used to differentiate\n * single / dblclick to not deselect images on map dblclick.\n */\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this.deselect, this);\n }\n\n this.fire('add');\n },\n\n onRemove(map) {\n L.DomEvent.off(this.getElement(), 'click', this.select, this);\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n }, this);\n L.DomEvent.off(map, 'click', this.deselect, this);\n\n if (this.editing) { this.editing.disable(); }\n this.fire('remove');\n\n L.ImageOverlay.prototype.onRemove.call(this, map);\n },\n\n _initImageDimensions() {\n const map = this._map;\n const originalImageWidth = L.DomUtil.getStyle(this.getElement(), 'width');\n const originalImageHeight = L.DomUtil.getStyle(this.getElement(), 'height');\n const aspectRatio =\n parseInt(originalImageWidth) / parseInt(originalImageHeight);\n const imageHeight = this.options.height;\n const imageWidth = parseInt(aspectRatio * imageHeight);\n const center = map.project(map.getCenter());\n const offset = L.point(imageWidth, imageHeight).divideBy(2);\n if (this.options.corners) {\n this._corners = this.options.corners;\n } else {\n this._corners = [\n map.unproject(center.subtract(offset)),\n map.unproject(center.add(L.point(offset.x, -offset.y))),\n map.unproject(center.add(L.point(-offset.x, offset.y))),\n map.unproject(center.add(offset)),\n ];\n }\n\n this._initialDimensions = {\n 'center': center,\n 'offset': offset,\n 'zoom': map.getZoom(),\n };\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this.deselect(); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._map;\n L.DomEvent.off(map, 'click', this.deselect, this);\n L.DomEvent.on(map, 'singleclick', this.deselect, this);\n },\n\n _resetClickListeners() {\n const map = this._map;\n L.DomEvent.on(map, 'click', this.deselect, this);\n L.DomEvent.off(map, 'singleclick', this.deselect, this);\n },\n\n isSelected() {\n return this._selected;\n },\n\n deselect() {\n const edit = this.editing;\n if (!edit.enabled()) { return; }\n\n edit._removeToolbar();\n edit._hideMarkers();\n\n this._selected = false;\n this.fire('deselect');\n return this;\n },\n\n select(e) {\n const edit = this.editing;\n const eP = this.eP;\n\n if (!edit.enabled()) { return; }\n if (e) { L.DomEvent.stopPropagation(e); }\n\n // this ensures deselection of all other images, allowing us to keep collection group optional\n this._programmaticGrouping();\n\n this._selected = true;\n edit._addToolbar();\n edit._showMarkers();\n this.fire('select');\n\n // we run the selection logic 1st anyway because the collection group's _addToolbar method depends on it\n if (eP && eP.anyCollected()) {\n this.deselect();\n return;\n }\n\n return this;\n },\n\n _programmaticGrouping() {\n this._map.eachLayer((layer) => {\n if (layer instanceof L.DistortableImageOverlay) {\n layer.deselect();\n }\n });\n },\n\n setCorner(corner, latlng) {\n const edit = this.editing;\n\n this._corners[corner] = latlng;\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n _cornerExceedsMapLats(zoom, corner, map) {\n if (map.options.crs.Simple == L.CRS.Simple) {\n return false;\n } else {\n let exceedsTop;\n let exceedsBottom;\n if (zoom === 0) {\n exceedsTop = map.project(corner).y < 2;\n exceedsBottom = map.project(corner).y >= 255;\n } else {\n exceedsTop = map.project(corner).y / zoom < 2;\n exceedsBottom = map.project(corner).y / Math.pow(2, zoom) >= 255;\n }\n return (exceedsTop || exceedsBottom);\n }\n },\n\n setCorners(latlngObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n // this is to fix https://github.com/publiclab/Leaflet.DistortableImage/issues/402\n for (const k in latlngObj) {\n if (this._cornerExceedsMapLats(zoom, latlngObj[k], map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in latlngObj) {\n this._corners[i] = latlngObj[k];\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n setCornersFromPoints(pointsObj) {\n const map = this._map;\n const zoom = map.getZoom();\n const edit = this.editing;\n let i = 0;\n\n for (const k in pointsObj) {\n const corner = map.layerPointToLatLng(pointsObj[k]);\n\n if (this._cornerExceedsMapLats(zoom, corner, map)) {\n // calling reset / update w/ the same corners bc it prevents a marker flicker for rotate\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n return;\n }\n }\n\n for (const k in pointsObj) {\n this._corners[i] = map.layerPointToLatLng(pointsObj[k]);\n i += 1;\n }\n\n this.setBounds(L.latLngBounds(this.getCorners()));\n this.fire('update');\n\n if (edit.toolbar && edit.toolbar instanceof L.DistortableImage.PopupBar) {\n edit._updateToolbarPos();\n }\n\n this.edited = true;\n\n return this;\n },\n\n scaleBy(scale) {\n const map = this._map;\n const center = map.project(this.getCenter());\n let i;\n let p;\n const scaledCorners = {};\n\n if (scale === 0) { return; }\n\n for (i = 0; i < 4; i++) {\n p = map\n .project(this.getCorner(i))\n .subtract(center)\n .multiplyBy(scale)\n .add(center);\n scaledCorners[i] = map.unproject(p);\n }\n\n this.setCorners(scaledCorners);\n\n return this;\n },\n\n getAngle(unit = 'deg') {\n const matrix = this.getElement().style[L.DomUtil.TRANSFORM]\n .split('matrix3d')[1]\n .slice(1, -1)\n .split(',');\n\n const row0x = matrix[0];\n const row0y = matrix[1];\n const row1x = matrix[4];\n const row1y = matrix[5];\n\n const determinant = row0x * row1y - row0y * row1x;\n\n let angle = L.TrigUtil.calcAngle(row0x, row0y, 'rad');\n\n if (determinant < 0) {\n angle += angle < 0 ? Math.PI : -Math.PI;\n }\n\n if (angle < 0) {\n angle = 2 * Math.PI + angle;\n }\n\n return unit === 'deg' ?\n Math.round(L.TrigUtil.radiansToDegrees(angle)) :\n L.Util.formatNum(angle, 2);\n },\n\n setAngle(angle, unit = 'deg') {\n const currentAngle = this.getAngle(unit);\n const angleToRotateBy = angle - currentAngle;\n this.rotateBy(angleToRotateBy, unit);\n\n return this;\n },\n\n rotateBy(angle, unit = 'deg') {\n const map = this._map;\n const center = map.project(this.getCenter());\n const corners = {};\n let i;\n let p;\n let q;\n\n if (unit === 'deg') {\n angle = L.TrigUtil.degreesToRadians(angle);\n }\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(center);\n q = L.point(\n Math.cos(angle) * p.x - Math.sin(angle) * p.y,\n Math.sin(angle) * p.x + Math.cos(angle) * p.y\n );\n corners[i] = map.unproject(q.add(center));\n }\n\n this.setCorners(corners);\n\n return this;\n },\n\n dragBy(formerPoint, newPoint) {\n const map = this._map;\n let i;\n let p;\n const transCorners = {};\n const delta = map.project(formerPoint).subtract(map.project(newPoint));\n\n for (i = 0; i < 4; i++) {\n p = map.project(this.getCorner(i)).subtract(delta);\n transCorners[i] = map.unproject(p);\n }\n\n this.setCorners(transCorners);\n },\n\n restore() {\n const map = this._map;\n const center = this._initialDimensions.center;\n const offset = this._initialDimensions.offset;\n const zoom = this._initialDimensions.zoom;\n const corners = [\n center.subtract(offset),\n center.add(L.point(offset.x, -offset.y)),\n center.add(L.point(-offset.x, offset.y)),\n center.add(offset),\n ];\n\n for (let i = 0; i < 4; i++) {\n if (!map.unproject(corners[i], zoom).equals(this.getCorner(i))) {\n this.setCorner(i, map.unproject(corners[i], zoom));\n }\n }\n\n this.edited = false;\n this.fire('restore');\n\n return this;\n },\n\n /* Copied from Leaflet v0.7 https://github.com/Leaflet/Leaflet/blob/66282f14bcb180ec87d9818d9f3c9f75afd01b30/src/dom/DomUtil.js#L189-L199 */\n /* since L.DomUtil.getTranslateString() is deprecated in Leaflet v1.0 */\n _getTranslateString(point) {\n // on WebKit browsers (Chrome/Safari/iOS Safari/Android)\n // using translate3d instead of translate\n // makes animation smoother as it ensures HW accel is used.\n // Firefox 13 doesn't care\n // (same speed either way), Opera 12 doesn't support translate3d\n\n const is3d = L.Browser.webkit3d;\n const open = 'translate' + (is3d ? '3d' : '') + '(';\n const close = (is3d ? ',0' : '') + ')';\n\n return open + point.x + 'px,' + point.y + 'px' + close;\n },\n\n _reset() {\n const map = this._map;\n const image = this.getElement();\n const latLngToLayerPoint = L.bind(map.latLngToLayerPoint, map);\n const transformMatrix = this\n ._calculateProjectiveTransform(latLngToLayerPoint);\n const topLeft = latLngToLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n\n /* Set origin to the upper-left corner rather than\n * the center of the image, which is the default.\n */\n image.style[L.DomUtil.TRANSFORM + '-origin'] = '0 0 0';\n\n this.rotation.deg = this.getAngle();\n this.rotation.rad = this.getAngle('rad');\n },\n\n /*\n * Calculates the transform string that will be\n * correct *at the end* of zooming.\n * Leaflet then generates a CSS3 animation between the current transform and\n * future transform which makes the transition appear smooth.\n */\n _animateZoom(event) {\n const map = this._map;\n const image = this.getElement();\n const latLngToNewLayerPoint = function(latlng) {\n return map._latLngToNewLayerPoint(latlng, event.zoom, event.center);\n };\n const transformMatrix = this._calculateProjectiveTransform(\n latLngToNewLayerPoint\n );\n const topLeft = latLngToNewLayerPoint(this.getCorner(0));\n const warp = L.DomUtil.getMatrixString(transformMatrix);\n const translation = this._getTranslateString(topLeft);\n\n /* See L.DomUtil.setPosition. Mainly for the purposes of L.Draggable. */\n image._leaflet_pos = topLeft;\n\n image.style[L.DomUtil.TRANSFORM] = [translation, warp].join(' ');\n },\n\n getCorners() {\n return this._corners;\n },\n\n getCorner(i) {\n return this._corners[i];\n },\n\n // image (vertex) centroid calculation\n getCenter() {\n const map = this._map;\n const reduce = this.getCorners().reduce(function(agg, corner) {\n return agg.add(map.project(corner));\n }, L.point(0, 0));\n return map.unproject(reduce.divideBy(4));\n },\n\n _calculateProjectiveTransform(latLngToCartesian) {\n /* Setting reasonable but made-up image defaults\n * allow us to place images on the map before\n * they've finished downloading. */\n const offset = latLngToCartesian(this.getCorner(0));\n const w = this.getElement().offsetWidth || 500;\n const h = this.getElement().offsetHeight || 375;\n const c = [];\n let j;\n /* Convert corners to container points (i.e. cartesian coordinates). */\n for (j = 0; j < 4; j++) {\n c.push(latLngToCartesian(this.getCorner(j))._subtract(offset));\n }\n\n /*\n * This matrix describes the action of\n * the CSS transform on each corner of the image.\n * It maps from the coordinate system centered\n * at the upper left corner of the image\n * to the region bounded by the latlngs in this._corners.\n * For example:\n * 0, 0, c[0].x, c[0].y\n * says that the upper-left corner of the image\n * maps to the first latlng in this._corners.\n */\n return L.MatrixUtil.general2DProjection(\n 0, 0, c[0].x, c[0].y,\n w, 0, c[1].x, c[1].y,\n 0, h, c[2].x, c[2].y,\n w, h, c[3].x, c[3].y\n );\n },\n});\n\nL.distortableImageOverlay = function(id, options) {\n return new L.DistortableImageOverlay(id, options);\n};\n\nL.Map.addInitHook(function() {\n if (!L.DomUtil.hasClass(this.getContainer(), 'ldi')) {\n L.DomUtil.addClass(this.getContainer(), 'ldi');\n }\n});\n","L.DomUtil = L.DomUtil || {};\nL.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.Keymapper = L.Handler.extend({\n\n options: {\n position: 'topright',\n },\n\n initialize(map, options) {\n this._map = map;\n L.setOptions(this, options);\n },\n\n addHooks() {\n if (!this._keymapper) {\n this._container = this._buildContainer();\n this._scrollWrapper = this._wrap();\n this._toggler = this._createButton();\n this._setMapper(this._container, this._scrollWrapper, this._toggler);\n\n L.DomEvent.on(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomEvent.disableClickPropagation(this._container);\n L.DomEvent.disableScrollPropagation(this._container);\n }\n },\n\n removeHooks() {\n if (this._keymapper) {\n L.DomEvent.off(this._toggler, 'click', this._toggleKeymapper, this);\n\n L.DomUtil.remove(this._toggler);\n L.DomUtil.remove(this._scrollWrapper);\n L.DomUtil.remove(this._container);\n this._keymapper = false;\n }\n },\n\n _buildContainer() {\n const container = L.DomUtil.create('div', 'ldi-keymapper-hide');\n container.setAttribute('id', 'ldi-keymapper');\n\n const divider = L.DomUtil.create('br', 'divider');\n container.appendChild(divider);\n\n return container;\n },\n\n _createButton() {\n const toggler = L.DomUtil.create('a', '');\n toggler.innerHTML = L.IconUtil.create('keyboard_open');\n\n toggler.setAttribute('id', 'toggle-keymapper');\n toggler.setAttribute('href', '#');\n toggler.setAttribute('title', 'Show keymap');\n // Will force screen readers like VoiceOver to read this as \"Show keymap - button\"\n toggler.setAttribute('role', 'button');\n toggler.setAttribute('aria-label', 'Show keymap');\n\n return toggler;\n },\n\n _wrap() {\n const wrap = L.DomUtil.create('div', '');\n wrap.setAttribute('id', 'keymapper-wrapper');\n wrap.style.display = 'none';\n\n return wrap;\n },\n\n _setMapper(container, wrap, button) {\n this._keymapper = L.control({position: this.options.position});\n\n this._keymapper.onAdd = function() {\n container.appendChild(wrap);\n wrap.insertAdjacentHTML(\n 'beforeend',\n '' +\n '
    ' +\n /* eslint-disable */\n '' +\n '' +\n '' +\n '' +\n '' + \n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
    Rotate Mode
    R
    RotateScale Mode
    r
    Scale Mode
    s
    Distort Mode
    d
    Drag Mode
    D
    Lock (Mode) / Unlock Image
    l\\xa0u
    Stack up / down
    q\\xa0a
    Add / Remove Image Border
    b
    Toggle Opacity
    o
    Deselect All
    esc
    Delete Image(s)
    delete\\xa0backspace
    Export Image(s)
    e
    '\n );\n /* eslint-enable */\n container.appendChild(button);\n return container;\n };\n\n this._keymapper.addTo(this._map);\n },\n\n _toggleKeymapper(e) {\n e.preventDefault();\n\n this._container.className = (\n this._container.className === 'ldi-keymapper leaflet-control' ?\n 'ldi-keymapper-hide leaflet-control' :\n 'ldi-keymapper leaflet-control'\n );\n\n this._scrollWrapper.style.display = (\n this._scrollWrapper.style.display === 'none' ? 'block' : 'none'\n );\n\n this._toggler.innerHTML = (\n this._toggler.innerHTML === 'close' ?\n L.IconUtil.create('keyboard_open') :\n 'close'\n );\n\n L.IconUtil.toggleTitle(this._toggler, 'Show keymap', 'Hide keymap');\n L.DomUtil.toggleClass(this._toggler, 'close-icon');\n },\n\n _injectIconSet() {\n if (document.querySelector('#keymapper-iconset')) { return; }\n\n const el = L.DomUtil.create('div', '');\n el.id = 'keymapper-iconset';\n el.setAttribute('hidden', 'hidden');\n\n this._iconset = new L.KeymapperIconSet().render();\n el.innerHTML = this._iconset;\n\n document.querySelector('.leaflet-control-container').appendChild(el);\n },\n});\n\nL.DistortableImage.Keymapper.addInitHook(() => {\n L.DistortableImage.Keymapper.prototype._n = (\n L.DistortableImage.Keymapper.prototype._n ?\n L.DistortableImage.Keymapper.prototype._n + 1 :\n 1\n );\n // dont enable keymapper for mobile\n if (L.DistortableImage.Keymapper.prototype._n === 1 && !L.Browser.mobile) {\n this.enable();\n this._injectIconSet();\n }\n});\n\nL.distortableImage.keymapper = (map, options) => {\n return new L.DistortableImage.Keymapper(map, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// this class holds the keybindings and toolbar API for an image collection instance\nL.DistortableCollection.Edit = L.Handler.extend({\n options: {\n keymap: L.distortableImage.group_action_map,\n },\n\n initialize(group, options) {\n this._group = group;\n this._exportOpts = group.options.exportOpts;\n\n L.setOptions(this, options);\n\n L.distortableImage.group_action_map.Escape = '_decollectAll';\n },\n\n addHooks() {\n const group = this._group;\n const map = group._map;\n\n this.editActions = this.options.actions;\n this.runExporter =\n L.bind(L.Utils.getNestedVal(this, '_exportOpts', 'exporter') ||\n this.startExport, this);\n\n L.DomEvent.on(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.on(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._group.editable = true;\n this._group.eachLayer(layer => layer.editing.enable());\n },\n\n removeHooks() {\n const group = this._group;\n const map = group._map;\n\n L.DomEvent.off(document, 'keydown', this._onKeyDown, this);\n\n if (!(map.doubleClickZoom.enabled() || map.doubleClickLabels.enabled())) {\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n }\n\n L.DomEvent.off(map, {\n singleclickon: this._singleClickListeners,\n singleclickoff: this._resetClickListeners,\n singleclick: this._singleClick,\n boxcollectend: this._addCollections,\n }, this);\n\n this._decollectAll();\n this._group.editable = false;\n this._group.eachLayer(layer => layer.editing.disable());\n },\n\n enable() {\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n\n if (!this[handlerName]) { return; }\n\n if (this._group.anyCollected()) {\n this[handlerName].call(this);\n }\n },\n\n _singleClick(e) {\n if (e.type === 'singleclick') { this._decollectAll(e); }\n else { return; }\n },\n\n _singleClickListeners() {\n const map = this._group._map;\n L.DomEvent.off(map, 'click', this._decollectAll, this);\n L.DomEvent.on(map, 'singleclick', this._decollectAll, this);\n },\n\n _resetClickListeners() {\n const map = this._group._map;\n L.DomEvent.on(map, 'click', this._decollectAll, this);\n L.DomEvent.off(map, 'singleclick', this._decollectAll, this);\n },\n\n _decollectAll(e) {\n let oe;\n\n if (e) { oe = e.originalEvent; }\n /**\n * prevents image deselection following the 'boxcollectend' event - note 'shift' must not be released until dragging is complete\n * also prevents deselection following a click on a disabled img by differentiating it from the map\n */\n if (oe && (oe.shiftKey || oe.target instanceof HTMLImageElement)) {\n return;\n }\n\n this._group.eachLayer((layer) => {\n L.DomUtil.removeClass(layer.getElement(), 'collected');\n layer.deselect();\n });\n\n this._removeToolbar();\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n _unlockGroup() {\n if (!this.hasTool(L.UnlockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer)) {\n const edit = layer.editing;\n edit._unlock();\n // unlock updates the layer's handles; deselect to ensure they're hidden\n layer.deselect();\n }\n });\n },\n\n _lockGroup() {\n if (!this.hasTool(L.LockAction)) { return; }\n\n this._group.eachLayer((layer) => {\n if (this._group.isCollected(layer) ) {\n const edit = layer.editing;\n edit._lock();\n // map.addLayer also deselects the image, so we reselect here\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _addCollections(e) {\n const box = e.boxCollectBounds;\n const map = this._group._map;\n\n this._group.eachLayer((layer) => {\n const edit = layer.editing;\n\n if (layer.isSelected()) { layer.deselect(); }\n\n const zoom = map.getZoom();\n const center = map.getCenter();\n let imgBounds = L.latLngBounds(layer.getCorner(2), layer.getCorner(1));\n\n imgBounds = map._latLngBoundsToNewLayerBounds(imgBounds, zoom, center);\n if (box.intersects(imgBounds) && edit.enabled()) {\n if (!this.toolbar) { this._addToolbar(); }\n L.DomUtil.addClass(layer.getElement(), 'collected');\n }\n });\n },\n\n _removeGroup(e) {\n if (!this.hasTool(L.DeleteAction)) { return; }\n\n const layersToRemove = this._group._toRemove();\n const n = layersToRemove.length;\n\n if (n === 0) { return; }\n\n const choice = L.DomUtil.confirmDeletes(n);\n\n if (choice) {\n layersToRemove.forEach((layer) => {\n this._group.removeLayer(layer);\n });\n if (!this._group.anyCollected()) {\n this._removeToolbar();\n }\n }\n\n if (e) { L.DomEvent.stopPropagation(e); }\n },\n\n cancelExport() {\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n clearInterval(this.updateInterval);\n },\n\n _addToolbar() {\n const group = this._group;\n const map = group._map;\n\n if (group.options.suppressToolbar || this.toolbar) { return; }\n\n this.toolbar = L.distortableImage.controlBar({\n actions: this.editActions,\n position: 'topleft',\n }).addTo(map, group);\n },\n\n _removeToolbar() {\n const map = this._group._map;\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n } else {\n return false;\n }\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n }\n return this;\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (this.editActions[idx] === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n return true;\n } else {\n return false;\n }\n });\n return this;\n },\n\n startExport() {\n if (!this.hasTool(L.ExportAction)) { return; }\n\n return new Promise((resolve) => {\n const opts = this._exportOpts;\n opts.resolve = resolve; // allow resolving promise in user-defined functions, to stop spinner on completion\n\n let statusUrl;\n this.updateInterval = null;\n\n // this may be overridden to update the UI to show export progress or completion\n const _defaultUpdater = (data) => {\n data = JSON.parse(data);\n // optimization: fetch status directly from google storage:\n if (data.status_url) {\n if (statusUrl !== data.status_url && data.status_url.match('.json')) {\n // if (data.status_url && data.status_url.substr(0,1) === \"/\") {\n // opts.statusUrl = opts.statusUrl + data.status_url;\n // } else {\n statusUrl = data.status_url;\n // }\n }\n\n if (data.status === 'complete') {\n clearInterval(this.updateInterval);\n\n if (!this.customCollection) {\n this._exportOpts.collection = undefined;\n }\n\n resolve();\n if (data.jpg !== null) {\n alert('Export succeeded. ' + opts.exportUrl + data.jpg);\n }\n }\n\n // TODO: update to clearInterval when status == \"failed\" if we update that in this file:\n // https://github.com/publiclab/mapknitter-exporter/blob/main/lib/mapknitterExporter.rb\n console.log(data);\n }\n };\n\n // receives the URL of status.json, and starts running the updater to repeatedly fetch from status.json;\n // this may be overridden to integrate with any UI\n const _defaultHandleStatusRes = (data) => {\n statusUrl = opts.statusUrl + data;\n // repeatedly fetch the status.json\n this.updateInterval = setInterval(() => {\n const reqOpts = {method: 'GET'};\n const req = new Request(`${statusUrl}?${Date.now()}`, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(opts.updater);\n }, opts.frequency);\n };\n\n // initiate the export\n const _defaultFetchStatusUrl = (mergedOpts) => {\n const form = new FormData();\n form.append('collection', JSON.stringify(mergedOpts.collection));\n form.append('scale', mergedOpts.scale);\n form.append('upload', true);\n\n const reqOpts = {method: 'POST', body: form};\n const req = new Request(mergedOpts.exportStartUrl, reqOpts);\n fetch(req).then((res) => {\n if (res.ok) {\n return res.text();\n }\n }).then(mergedOpts.handleStatusRes);\n };\n\n // If the user has passed collection property\n this.customCollection = !!opts.collection;\n if (!this.customCollection) {\n opts.collection = this._group.generateExportJson().images;\n }\n\n opts.frequency = opts.frequency || 3000;\n opts.scale = opts.scale || 100; // switch it to _getAvgCmPerPixel !\n opts.updater = opts.updater || _defaultUpdater;\n opts.handleStatusRes = opts.handleStatusRes || _defaultHandleStatusRes;\n opts.fetchStatusUrl = opts.fetchStatusUrl || _defaultFetchStatusUrl;\n\n opts.fetchStatusUrl(opts);\n });\n },\n});\n\nL.distortableCollection.edit = (group, options) => {\n return new L.DistortableCollection.Edit(group, options);\n};\n","L.DistortableImage = L.DistortableImage || {};\n\n// holds the keybindings & toolbar API for an individual image instance\nL.DistortableImage.Edit = L.Handler.extend({\n options: {\n opacity: 0.5,\n outline: '1px solid red',\n keymap: L.distortableImage.action_map,\n },\n\n initialize(overlay, options) {\n this._overlay = overlay;\n this._toggledImage = false;\n this._mode = overlay.options.mode;\n this._transparent = false;\n this._outlined = false;\n this._opacity = options.opacity;\n\n L.setOptions(this, options);\n\n L.distortableImage.action_map.Escape = '_deselect';\n },\n\n /* Run on image selection. */\n addHooks() {\n const overlay = this._overlay;\n\n this.editActions = this.options.actions;\n\n /* bring the selected image into view */\n overlay.bringToFront();\n this._initModes();\n this._initHandles();\n this._appendHandlesandDragable();\n\n if (overlay.isSelected() && !overlay.options.suppressToolbar) {\n this._addToolbar();\n }\n\n this.parentGroup = overlay.eP ? overlay.eP : false;\n\n L.DomEvent.on(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.on(window, 'keydown', this._onKeyDown, this);\n },\n\n /* Run on image deselection. */\n removeHooks() {\n const overlay = this._overlay;\n const eP = this.parentGroup;\n\n // First, check if dragging exists - it may be off due to locking\n this._disableDragging();\n\n if (this.toolbar) { this._removeToolbar(); }\n\n for (const handle in this._handles) {\n L.DomUtil.remove(handle);\n }\n\n /**\n * ensures if you disable an image while it is multi-selected\n * additional deselection logic is run\n */\n if (L.DomUtil.hasClass(overlay.getElement(), 'collected')) {\n L.DomUtil.removeClass(overlay.getElement(), 'collected');\n }\n\n if (eP && (!eP.anyCollected() && eP.editing.toolbar)) {\n eP.editing._removeToolbar();\n }\n\n L.DomEvent.off(overlay.getElement(), {\n dblclick: this.nextMode,\n }, this);\n\n L.DomEvent.off(window, 'keydown', this._onKeyDown, this);\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._overlay.deselect();\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _initModes() {\n this._modes = {};\n // passed from L.DistortablImage.PopupBar. If the mode is one\n // of the current toolbar actions, adds it to this._modes\n for (const mode in L.DistortableImage.Edit.MODES) {\n const action = L.DistortableImage.Edit.MODES[mode];\n if (this.editActions.indexOf(action) !== -1) {\n this._modes[mode] = action;\n }\n }\n\n // sets the current mode to the 1st available one if the one selected\n // during initialization is not available\n if (!this._modes[this._mode]) {\n this._mode = Object.keys(this._modes)[0];\n }\n },\n\n\n _initHandles() {\n const overlay = this._overlay;\n let i;\n\n this._dragHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._dragHandles.addLayer(L.dragHandle(overlay, i));\n }\n\n this._scaleHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._scaleHandles.addLayer(L.scaleHandle(overlay, i));\n }\n\n this._distortHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._distortHandles.addLayer(L.distortHandle(overlay, i));\n }\n\n this._rotateHandles = L.layerGroup(); // individual rotate\n for (i = 0; i < 4; i++) {\n this._rotateHandles.addLayer(L.rotateHandle(overlay, i));\n }\n\n // handle includes rotate AND scale\n this._freeRotateHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._freeRotateHandles.addLayer(L.freeRotateHandle(overlay, i));\n }\n\n this._lockHandles = L.layerGroup();\n for (i = 0; i < 4; i++) {\n this._lockHandles.addLayer(L.lockHandle(overlay, i, {draggable: false}));\n }\n\n this._handles = {\n drag: this._dragHandles,\n scale: this._scaleHandles,\n distort: this._distortHandles,\n rotate: this._rotateHandles,\n freeRotate: this._freeRotateHandles,\n lock: this._lockHandles,\n };\n },\n\n _appendHandlesandDragable() {\n const ov = this._overlay;\n\n // won't throw error if user adds 0 mode actions to toolbar\n if (!this._mode) {\n this._enableDragging();\n return;\n }\n\n this._updateHandle();\n\n if (!ov.isSelected() && this.currentHandle) {\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n });\n }\n if (!this.isMode('lock')) { this._enableDragging(); }\n },\n\n _onKeyDown(e) {\n const keymap = this.options.keymap;\n const handlerName = keymap[e.key];\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (eP && eP.anyCollected()) { return; }\n\n if (this[handlerName] !== undefined && !ov.options.suppressToolbar) {\n if (ov.isSelected() && this.toolbar) {\n this[handlerName].call(this);\n }\n }\n },\n\n replaceTool(old, next) {\n if (next.baseClass !== 'leaflet-toolbar-icon' || this.hasTool(next)) {\n return this;\n }\n this.editActions.some((item, idx) => {\n if (item === old) {\n this._removeToolbar();\n this.editActions[idx] = next;\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === old) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n } else if (L.DistortableImage.Edit.MODES[mode] === next) {\n this._modes[mode] = next;\n }\n }\n return true;\n }\n });\n return this;\n },\n\n addTool(value) {\n if (value.baseClass === 'leaflet-toolbar-icon' && !this.hasTool(value)) {\n this._removeToolbar();\n this.editActions.push(value);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n this._modes[mode] = value;\n }\n }\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n }\n return this;\n },\n\n hasTool(value) {\n return this.editActions.some(action => action === value);\n },\n\n removeTool(value) {\n this.editActions.some((item, idx) => {\n if (item === value) {\n this._removeToolbar();\n this.editActions.splice(idx, 1);\n this._addToolbar();\n for (const mode in L.DistortableImage.Edit.MODES) {\n if (L.DistortableImage.Edit.MODES[mode] === value) {\n delete this._modes[mode];\n this._nextOrNone(mode);\n }\n }\n return true;\n }\n });\n if (!this._overlay.isSelected()) { this._removeToolbar(); }\n return this;\n },\n\n // set the mode to the next mode or if that was the last one set mode to ''\n _nextOrNone(mode) {\n if (this.isMode(mode)) {\n if (Object.keys(this.getModes()).length >= 1) {\n this.nextMode();\n } else {\n if (mode === 'lock') { this._enableDragging(); }\n this._mode = '';\n this._updateHandle();\n }\n }\n },\n\n _removeToolbar() {\n const ov = this._overlay;\n const map = ov._map;\n\n if (this.toolbar) {\n map.removeLayer(this.toolbar);\n this.toolbar = false;\n }\n },\n\n _enableDragging() {\n const overlay = this._overlay;\n const map = overlay._map;\n\n this.dragging = new L.Draggable(overlay.getElement());\n this.dragging.enable();\n\n /* Hide toolbars and markers while dragging; click will re-show it */\n this.dragging.on('dragstart', () => {\n overlay.fire('dragstart');\n this._removeToolbar();\n });\n\n /*\n * Adjust default behavior of L.Draggable, which overwrites the CSS3\n * distort transformations that we set when it calls L.DomUtil.setPosition.\n */\n this.dragging._updatePosition = function() {\n const topLeft = overlay.getCorner(0);\n const delta = this._newPos.subtract(map.latLngToLayerPoint(topLeft));\n let currentPoint;\n const corners = {};\n let i;\n\n this.fire('predrag');\n\n for (i = 0; i < 4; i++) {\n currentPoint = map.latLngToLayerPoint(overlay.getCorner(i));\n corners[i] = map.layerPointToLatLng(currentPoint.add(delta));\n }\n\n overlay.setCorners(corners);\n overlay.fire('drag');\n\n this.fire('drag');\n };\n\n this.dragging.on('dragend', () => {\n overlay.fire('dragend');\n });\n },\n\n _disableDragging() {\n if (this.dragging) {\n this.dragging.disable();\n delete this.dragging;\n }\n },\n\n _dragMode() {\n this.setMode('drag');\n },\n\n _scaleMode() {\n this.setMode('scale');\n },\n\n _distortMode() {\n this.setMode('distort');\n },\n\n _rotateMode() {\n this.setMode('rotate');\n },\n\n _freeRotateMode() {\n this.setMode('freeRotate');\n },\n\n _toggleLockMode() {\n if (this.isMode('lock')) { this._unlock(); }\n else { this._lock(); }\n },\n\n _toggleOpacity() {\n const image = this._overlay.getElement();\n let opacity;\n\n if (!this.hasTool(L.OpacityAction)) { return; }\n\n this._transparent = !this._transparent;\n opacity = this._transparent ? this.options.opacity : 1;\n\n L.DomUtil.setOpacity(image, opacity);\n image.setAttribute('opacity', opacity);\n\n this._refresh();\n },\n\n _setOpacities(o) {\n const image = this._overlay.getElement();\n this._opacity = o;\n if (!this.hasTool(L.OpacitiesAction)) { return; }\n\n (this._opacity < 1) ? this._transparent = true : this._transparent = false;\n\n L.DomUtil.setOpacity(image, this._opacity);\n image.setAttribute('opacity', this._opacity);\n\n this._refresh();\n },\n\n _toggleBorder() {\n const image = this._overlay.getElement();\n let outline;\n\n if (!this.hasTool(L.BorderAction)) { return; }\n\n this._outlined = !this._outlined;\n outline = this._outlined ? this.options.outline : 'none';\n\n image.style.outline = outline;\n\n this._refresh();\n },\n\n // compare this to using overlay zIndex\n _toggleOrder() {\n if (this._toggledImage) { this._stackUp(); }\n else { this._stackDown(); }\n },\n\n _removeOverlay() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n if (this.isMode('lock') || !this.hasTool(L.DeleteAction)) { return; }\n\n const choice = L.DomUtil.confirmDelete();\n if (!choice) { return; }\n\n this._removeToolbar();\n\n if (eP) { eP.removeLayer(ov); }\n else { ov._map.removeLayer(ov); }\n },\n\n // Based on https://github.com/publiclab/mapknitter/blob/8d94132c81b3040ae0d0b4627e685ff75275b416/app/assets/javascripts/mapknitter/Map.js#L47-L82\n _getExport() {\n const overlay = this._overlay;\n const map = overlay._map;\n const img = overlay.getElement();\n\n if (!this.hasTool(L.ExportAction)) { return; }\n\n // make a new image\n const downloadable = new Image();\n\n downloadable.id = downloadable.id || 'tempId12345';\n document.body.appendChild(downloadable);\n\n downloadable.onload = function onLoadDownloadableImage() {\n const height = downloadable.height;\n const width = downloadable.width;\n const nw = map.latLngToLayerPoint(overlay.getCorner(0));\n const ne = map.latLngToLayerPoint(overlay.getCorner(1));\n const sw = map.latLngToLayerPoint(overlay.getCorner(2));\n const se = map.latLngToLayerPoint(overlay.getCorner(3));\n\n // I think this is to move the image to the upper left corner,\n // eslint-disable-next-line max-len\n // jywarren: i think we may need these or the image goes off the edge of the canvas\n // jywarren: but these seem to break the distortion math...\n\n // jywarren: i think it should be rejiggered so it\n // finds the most negative values of x and y and then\n // adds those to all coordinates\n\n // nw.x -= nw.x;\n // ne.x -= nw.x;\n // se.x -= nw.x;\n // sw.x -= nw.x;\n\n // nw.y -= nw.y;\n // ne.y -= nw.y;\n // se.y -= nw.y;\n // sw.y -= nw.y;\n\n // run once warping is complete\n downloadable.onload = function() {\n L.DomUtil.remove(downloadable);\n };\n\n if (window && window.hasOwnProperty('warpWebGl')) {\n warpWebGl(\n downloadable.id,\n [0, 0, width, 0, width, height, 0, height],\n [nw.x, nw.y, ne.x, ne.y, se.x, se.y, sw.x, sw.y],\n true // trigger download\n );\n }\n };\n\n downloadable.src = overlay.options.fullResolutionSrc || img.src;\n },\n\n _stackUp() {\n const t = this._toggledImage;\n\n if (!t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = false;\n this._overlay.bringToFront();\n this._refresh();\n },\n\n _stackDown() {\n const t = this._toggledImage;\n\n if (t || !this.hasTool(L.StackAction)) { return; }\n\n this._toggledImage = true;\n this._overlay.bringToBack();\n this._refresh();\n },\n\n _unlock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (!this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n if (ov.options.mode === 'lock' || !this.hasMode(ov.options.mode)) {\n this._mode = '';\n this.currentHandle = '';\n } else {\n this._mode = ov.options.mode;\n }\n this._updateHandle();\n this._enableDragging();\n this._refresh();\n },\n\n _lock() {\n const ov = this._overlay;\n const map = ov._map;\n const eP = this.parentGroup;\n\n if (this.isMode('lock')) { return; }\n if ((eP && !eP.isCollected(ov)) || !eP) {\n if (!this.hasTool(L.LockAction)) { return; }\n }\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this._mode = 'lock';\n this._updateHandle();\n this._disableDragging();\n this._refresh();\n },\n\n _deselect() {\n this._overlay.deselect();\n },\n\n _showMarkers(e) {\n const eP = this.parentGroup;\n\n if (!this.currentHandle) { return; }\n // only markers we want in collect interface for now is lock\n if (!this.isMode('lock') && (eP && eP.anyCollected())) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(1);\n if (handle.dragging) { handle.dragging.enable(); }\n L.DomUtil.addClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _hideMarkers() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n\n // workaround for race condition w/ feature group\n if (!this._handles) { this._initHandles(); }\n\n if (!this.currentHandle) { return; }\n if (this.isMode('lock') && (eP && eP.isCollected(ov))) { return; }\n\n this.currentHandle.eachLayer((handle) => {\n handle.setOpacity(0);\n if (handle.dragging) { handle.dragging.disable(); }\n L.DomUtil.removeClass(handle.getElement(), 'leaflet-interactive');\n });\n },\n\n _updateHandle() {\n const ov = this._overlay;\n const map = ov._map;\n const mode = this.getMode();\n\n if (this.currentHandle) { map.removeLayer(this.currentHandle); }\n this.currentHandle = mode === '' ? '' : this._handles[mode];\n if (this.currentHandle !== '') {\n map.addLayer(this.currentHandle);\n }\n },\n\n _addToolbar() {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const map = ov._map;\n // Find the topmost point on the image.\n const corners = ov.getCorners();\n let maxLat = -Infinity;\n\n if (eP && eP.anyCollected()) {\n eP.editing._addToolbar();\n return;\n }\n\n if (ov.options.suppressToolbar || this.toolbar) { return; }\n\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = ov.getCenter();\n raisedPoint.lat = maxLat;\n\n this.toolbar = L.distortableImage.popupBar(raisedPoint, {\n actions: this.editActions,\n }).addTo(map, ov);\n ov.fire('toolbar:created');\n },\n\n _refresh() {\n if (this.toolbar) { this._removeToolbar(); }\n this._addToolbar();\n },\n\n _updateToolbarPos() {\n const overlay = this._overlay;\n // Find the topmost point on the image.\n const corners = overlay.getCorners();\n const toolbar = this.toolbar;\n let maxLat = -Infinity;\n\n if (toolbar && toolbar instanceof L.DistortableImage.PopupBar) {\n for (let i = 0; i < corners.length; i++) {\n if (corners[i].lat > maxLat) {\n maxLat = corners[i].lat;\n }\n }\n\n // Longitude is based on the centroid of the image.\n const raisedPoint = overlay.getCenter();\n raisedPoint.lat = maxLat;\n\n if (!overlay.options.suppressToolbar) {\n this.toolbar.setLatLng(raisedPoint);\n }\n }\n },\n\n hasMode(mode) {\n return !!this._modes[mode];\n },\n\n getMode() {\n if (!this.enabled()) { return; }\n return this._mode;\n },\n\n getModes() {\n return this._modes;\n },\n\n isMode(mode) {\n if (!this.enabled()) { return false; }\n return this._mode === mode;\n },\n\n setMode(newMode) {\n const ov = this._overlay;\n const eP = this.parentGroup;\n const mode = this.getMode();\n\n if (mode === newMode || !this.hasMode(newMode) || !this.enabled()) {\n return;\n }\n\n if (this.toolbar) { this.toolbar.clickTool(newMode); }\n if (this.isMode('lock') && !this.dragging) { this._enableDragging(); }\n this._mode = newMode;\n if (this.isMode('lock')) { this._disableDragging(); }\n this._updateHandle();\n this._refresh();\n\n if (eP && eP.isCollected(ov)) { ov.deselect(); }\n\n return this;\n },\n\n /**\n * need to attach a stop to img dblclick or it will propagate to\n * the map and fire the handler that shows map location labels on map dblclick.\n */\n nextMode(e) {\n const mode = this.getMode();\n const eP = this.parentGroup;\n const modesArray = Object.keys(this.getModes());\n const idx = modesArray.indexOf(mode);\n const nextIdx = (idx + 1) % modesArray.length;\n const newMode = modesArray[nextIdx];\n\n if (e) {\n if (eP && eP.anyCollected()) { return; }\n L.DomEvent.stop(e);\n }\n\n return this.setMode(newMode);\n },\n});\n\nL.distortableImage.edit = (overlay, options) => {\n return new L.DistortableImage.Edit(overlay, options);\n};\n","L.BorderAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._outlined) {\n use = 'border_outer';\n tooltip = overlay.options.translation.removeBorder;\n } else {\n use = 'border_clear';\n tooltip = overlay.options.translation.addBorder;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n // conditional for disabling keybindings for this action when the image is locked.\n L.DistortableImage.action_map.b = mode === 'lock' ? '' : '_toggleBorder';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'border_clear', 'border_outer');\n L.IconUtil.toggleTitle(this._link, 'Remove Border', 'Add Border');\n edit._toggleBorder();\n },\n});\n","L.DeleteAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const use = 'delete_forever';\n let tooltip;\n /**\n * we can tell whether the overlay is an instance of `L.DistortableImageOverlay` or `L.DistortableCollection` bc only\n * the former should have `parentGroup` defined on it. From there we call the apporpriate keybindings and methods.\n */\n if (edit instanceof L.DistortableImage.Edit) {\n tooltip = overlay.options.translation.deleteImage;\n // backspace windows / delete mac\n L.DistortableImage.action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeOverlay'\n );\n } else {\n tooltip = overlay.options.translation.deleteImages;\n L.DistortableImage.group_action_map.Backspace = (\n edit._mode === 'lock' ? '' : '_removeGroup'\n );\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._removeOverlay(); }\n else { edit._removeGroup(); }\n },\n});\n","L.DistortAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'distort',\n tooltip: overlay.options.translation.distortImage,\n className: 'distort',\n };\n\n L.DistortableImage.action_map.d = '_distortMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._distortMode();\n },\n});\n","L.DragAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'drag',\n tooltip: overlay.options.translation.dragImage,\n className: 'drag',\n };\n\n L.DistortableImage.action_map.D = '_dragMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._dragMode();\n },\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.EditAction = L.Toolbar2.Action.extend({\n options: {\n toolbarIcon: {\n svg: false,\n html: '',\n className: '',\n tooltip: '',\n },\n },\n\n initialize(map, overlay, options) {\n this._overlay = overlay;\n this._map = map;\n\n L.setOptions(this, options);\n L.Toolbar2.Action.prototype.initialize.call(this, options);\n\n this._injectIconSet();\n },\n\n _createIcon(toolbar, container, args) {\n const iconOptions = this.options.toolbarIcon;\n const className = iconOptions.className;\n const edit = this._overlay.editing;\n const style = this.options.toolbarIcon.style;\n\n this.toolbar = toolbar;\n this._icon = L.DomUtil.create('li', '', container);\n this._link = L.DomUtil.create('a', '', this._icon);\n\n if (iconOptions.svg) {\n this._link.innerHTML = L.IconUtil.create(iconOptions.html);\n } else {\n this._link.innerHTML = iconOptions.html;\n }\n\n this._link.setAttribute('href', '#');\n this._link.setAttribute('title', iconOptions.tooltip);\n if (style) { this._link.setAttribute('style', style); };\n this._link.setAttribute('role', 'button');\n\n L.DomUtil.addClass(this._link, this.constructor.baseClass);\n\n if (className) {\n L.DomUtil.addClass(this._link, className);\n if (className === 'disabled') {\n L.DomUtil.addClass(this._icon, className);\n }\n if (className === edit._mode) {\n L.DomUtil.addClass(this._link, 'selected-mode');\n } else {\n L.DomUtil.removeClass(this._link, 'selected-mode');\n }\n }\n\n L.DomEvent.on(this._link, 'click', this.enable, this);\n L.DomEvent.on(this._overlay, 'update', () => {\n const match = this._link.innerHTML.match(/xlink:href=\"#restore\"/);\n if (match && match.length === 1) { this._enableAction(); }\n });\n\n /* Add secondary toolbar */\n this._addSubToolbar(toolbar, this._icon, args);\n },\n\n _injectIconSet() {\n if (document.querySelector('#iconset')) {\n return;\n }\n\n const el = document.createElement('div');\n el.id = 'iconset';\n el.setAttribute('hidden', 'hidden');\n el.innerHTML = new L.ToolbarIconSet().render();\n\n document.querySelector('.leaflet-marker-pane').appendChild(el);\n },\n\n _enableAction() {\n L.DomUtil.removeClass(this._link.parentElement, 'disabled');\n L.DomUtil.removeClass(this._link, 'disabled');\n },\n\n _disableAction() {\n L.DomUtil.addClass(this._link.parentElement, 'disabled');\n L.DomUtil.addClass(this._link, 'disabled');\n },\n});\n\nL.editAction = function(map, overlay, options) {\n return new L.EditAction(map, overlay, options);\n};\n","L.ExportAction = L.EditAction.extend({\n // This function is executed every time we select an image\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let tooltip;\n\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n this.isHooksExecuted = false;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.e = '_getExport';\n tooltip = overlay.options.translation.exportImage;\n } else {\n L.DistortableImage.group_action_map.e = 'runExporter';\n tooltip = overlay.options.translation.exportImages;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'get_app',\n tooltip: tooltip,\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) {\n edit._getExport();\n return;\n }\n\n // Make sure that addHooks is executed only once, event listeners will handle the rest\n if (this.isHooksExecuted) {\n return;\n } else {\n this.isHooksExecuted = true;\n }\n\n const exportTool = this._link.parentElement;\n\n this.mouseEnterHandler = this.handleMouseEnter.bind(this);\n this.mouseLeaveHandler = this.handleMouseLeave.bind(this);\n\n L.DomEvent.on(exportTool, 'click', function() {\n if (!this.isExporting) {\n this.isExporting = true;\n this.renderExportIcon();\n\n setTimeout(this.attachMouseEventListeners.bind(this, exportTool), 100);\n edit.runExporter().then(\n function() {\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n }.bind(this)\n );\n } else {\n // Clicking on the export icon after export has started will be ignored\n if (this.mouseLeaveSkip) {\n return;\n }\n\n this.resetState();\n this.detachMouseEventListeners(exportTool);\n edit.cancelExport();\n }\n }, this);\n },\n\n resetState() {\n this.renderDownloadIcon();\n this.isExporting = false;\n this.mouseLeaveSkip = true;\n },\n\n attachMouseEventListeners(element) {\n element.addEventListener('mouseenter', this.mouseEnterHandler);\n element.addEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n detachMouseEventListeners(element) {\n element.removeEventListener('mouseenter', this.mouseEnterHandler);\n element.removeEventListener('mouseleave', this.mouseLeaveHandler);\n },\n\n handleMouseEnter() {\n this.renderCancelIcon();\n },\n\n handleMouseLeave() {\n if (this.mouseLeaveSkip) {\n this.mouseLeaveSkip = false;\n } else {\n this.renderExportIcon();\n }\n },\n\n renderDownloadIcon() {\n L.IconUtil.toggleXlink(this._link, 'get_app', 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n\n renderExportIcon() {\n L.IconUtil.toggleXlink(this._link, 'spinner');\n L.IconUtil.toggleTitle(this._link, 'Export Images', 'Loading...');\n L.IconUtil.addClassToSvg(this._link, 'loader');\n },\n\n renderCancelIcon() {\n L.IconUtil.toggleXlink(this._link, 'cancel');\n L.IconUtil.toggleTitle(this._link, 'Cancel Export', 'Loading...');\n L.DomUtil.removeClass(this._link.firstChild, 'loader');\n },\n});\n","L.FreeRotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'crop_rotate',\n tooltip: overlay.options.translation.freeRotateImage,\n className: 'freeRotate',\n };\n\n L.DistortableImage.action_map.f = '_freeRotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._freeRotateMode();\n },\n});\n","L.GeolocateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'explore',\n tooltip: overlay.options.translation.geolocateImage,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const image = this._overlay.getElement();\n\n EXIF.getData(image, L.EXIF(image));\n },\n});\n","L.LockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit instanceof L.DistortableImage.Edit) {\n L.DistortableImage.action_map.u = '_unlock';\n L.DistortableImage.action_map.l = '_lock';\n tooltip = overlay.options.translation.lockMode;\n\n use = edit.isMode('lock') ? 'lock' : 'unlock';\n } else {\n L.DistortableImage.group_action_map.l = '_lockGroup';\n tooltip = overlay.options.translation.lockImages;\n use = 'lock';\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: 'lock',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n if (edit instanceof L.DistortableImage.Edit) { edit._toggleLockMode(); }\n else { edit._lockGroup(); }\n },\n});\n","let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100.\n\n// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers.\nconst subtoolbarCss = new CSSStyleSheet();\nsubtoolbarCss.replaceSync(\n `.leaflet-toolbar-icon-vertical {\n box-sizing: border-box !important;\n display: block !important;\n width: 30px !important;\n height: 30px !important;\n line-height: 30px !important;\n padding: 0 !important;\n text-align: center !important;\n text-decoration: none !important;\n background-color: #fff;\n border: inset 0.5px lightgray !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color:#0087A8 !important;\n float: none !important;\n margin: auto !important;\n z-index:900 !important;\n }\n `\n);\n\nsubtoolbarCss.insertRule(\n `.leaflet-toolbar-1 li:first-child a {\n border-radius: 4px 4px 0px 0px !important;\n }`\n);\ndocument.adoptedStyleSheets = [subtoolbarCss];\n\nopacities = opacities.map((o) => {\n (isNaN(o) || o > 100) ? o = 100 : o;\n (o < 0) ? o = 0 : o;\n\n return L.EditAction.extend({\n options: {\n toolbarIcon: {\n html: o,\n tooltip: 'Opacity ' + o +'%',\n className: 'leaflet-toolbar-icon-vertical',\n style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);',\n },\n },\n addHooks() {\n this._overlay.editing._setOpacities(o/100);\n },\n });\n});\n\nL.OpacitiesToolbar2 = L.Toolbar2.extend({\n options: {\n className: '',\n filter: function() { return true; },\n actions: [],\n style: `translate(-1px, -${ ((opacities.length + 1) * 30)}px)`,\n },\n\n appendToContainer(container) {\n let baseClass = this.constructor.baseClass + '-' + this._calculateDepth();\n let className = baseClass + ' ' + this.options.className;\n let Action; let action;\n let i; let j; let l; let m;\n\n this._container = container;\n this._ul = L.DomUtil.create('ul', className, container);\n this._ul.style.transform = ( this.options.style ) ? this.options.style : '';\n\n // Ensure that clicks, drags, etc. don't bubble up to the map.\n // These are the map events that the L.Draw.Polyline handler listens for.\n // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but\n // if only 'mouseup' is silenced, then the map gets stuck in a halfway\n // state because it receives a 'mousedown' event and is waiting for the\n // corresponding 'mouseup' event.\n this._disabledEvents = [\n 'click', 'mousemove', 'dblclick',\n 'mousedown', 'mouseup', 'touchstart',\n ];\n\n for (j = 0, m = this._disabledEvents.length; j < m; j++) {\n L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation);\n }\n\n /* Instantiate each toolbar action and add its corresponding toolbar icon. */\n for (i = 0, l = this.options.actions.length; i < l; i++) {\n Action = this._getActionConstructor(this.options.actions[i]);\n\n action = new Action();\n action._createIcon(this, this._ul, this._arguments);\n }\n },\n});\n\n\nL.OpacitiesAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'opacities',\n tooltip: 'Set custom opacity',\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n options.subToolbar = new L.OpacitiesToolbar2({\n actions: opacities,\n });\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const link = this._link;\n if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) {\n L.DomUtil.removeClass(link, 'subtoolbar_enabled');\n setTimeout(() => {\n this.options.subToolbar._hide();\n }, 100);\n } else {\n L.DomUtil.addClass(link, 'subtoolbar_enabled');\n };\n\n L.IconUtil.toggleXlink(link, 'opacities', 'cancel');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel');\n },\n});\n","L.OpacityAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n const mode = edit._mode;\n let use;\n let tooltip;\n\n if (edit._transparent) {\n use = 'opacity_empty';\n tooltip = overlay.options.translation.makeImageOpaque;\n } else {\n use = 'opacity';\n tooltip = overlay.options.translation.makeImageTransparent;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_toggleOpacity';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n const link = this._link;\n\n L.IconUtil.toggleXlink(link, 'opacity', 'opacity_empty');\n L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Make Image Opaque');\n edit._toggleOpacity();\n },\n});\n","L.RestoreAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const mode = L.Utils.getNestedVal(overlay, 'editing', '_mode');\n const edited = overlay.edited;\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'restore',\n tooltip: overlay.options.translation.restoreImage,\n className: edited && mode !== 'lock' ? '' : 'disabled',\n };\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const ov = this._overlay;\n\n L.DomEvent.on(ov, {\n edit: this._enableAction,\n restore: this._disableAction,\n }, this);\n\n ov.restore();\n },\n});\n","L.RotateAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'rotate',\n tooltip: overlay.options.translation.rotateImage,\n className: 'rotate',\n };\n\n L.DistortableImage.action_map.r = '_rotateMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._rotateMode();\n },\n});\n","L.ScaleAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'scale',\n tooltip: overlay.options.translation.scaleImage,\n className: 'scale',\n };\n\n L.DistortableImage.action_map.s = '_scaleMode';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._scaleMode();\n },\n});\n","L.StackAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n const edit = overlay.editing;\n let use;\n let tooltip;\n\n if (edit._toggledImage) {\n use = 'flip_to_back';\n tooltip = overlay.options.translation.stackToFront;\n } else {\n use = 'flip_to_front';\n tooltip = overlay.options.translation.stackToBack;\n }\n\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: use,\n tooltip: tooltip,\n className: edit._mode === 'lock' ? 'disabled' : '',\n };\n\n L.DistortableImage.action_map.q = edit._mode === 'lock' ? '' : '_stackUp';\n L.DistortableImage.action_map.a = edit._mode === 'lock' ? '' : '_stackDown';\n\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n\n L.IconUtil.toggleXlink(this._link, 'flip_to_front', 'flip_to_back');\n L.IconUtil.toggleTitle(this._link, 'Stack to Front', 'Stack to Back');\n edit._toggleOrder();\n },\n});\n","L.UnlockAction = L.EditAction.extend({\n initialize(map, overlay, options) {\n options = options || {};\n options.toolbarIcon = {\n svg: true,\n html: 'unlock',\n tooltip: overlay.options.translation.unlockImages,\n };\n\n L.DistortableImage.group_action_map.u = '_unlockGroup';\n L.EditAction.prototype.initialize.call(this, map, overlay, options);\n },\n\n addHooks() {\n const edit = this._overlay.editing;\n edit._unlockGroup();\n },\n});\n","/* eslint-disable no-unused-vars */\nL.EXIF = function getEXIFdata(img) {\n if (Object.keys(EXIF.getAllTags(img)).length !== 0) {\n console.log(EXIF.getAllTags(img));\n const GPS = EXIF.getAllTags(img);\n let altitude;\n\n /* If the lat/lng is available. */\n if (\n typeof GPS.GPSLatitude !== 'undefined' &&\n typeof GPS.GPSLongitude !== 'undefined'\n ) {\n // sadly, encoded in [degrees,minutes,seconds]\n // primitive value = GPS.GPSLatitude[x].numerator\n let lat =\n GPS.GPSLatitude[0] +\n GPS.GPSLatitude[1] / 60 +\n GPS.GPSLatitude[2] / 3600;\n let lng =\n GPS.GPSLongitude[0] +\n GPS.GPSLongitude[1] / 60 +\n GPS.GPSLongitude[2] / 3600;\n\n if (GPS.GPSLatitudeRef !== 'N') {\n lat = lat * -1;\n }\n if (GPS.GPSLongitudeRef === 'W') {\n lng = lng * -1;\n }\n }\n\n // Attempt to use GPS compass heading; will require\n // some trig to calc corner points, which you can find below:\n\n let angle = 0;\n // \"T\" refers to \"True north\", so -90.\n if (GPS.GPSImgDirectionRef === 'T') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n // \"M\" refers to \"Magnetic north\"\n } else if (GPS.GPSImgDirectionRef === 'M') {\n angle =\n (Math.PI / 180) *\n (GPS.GPSImgDirection.numerator / GPS.GPSImgDirection.denominator - 90);\n } else {\n console.log('No compass data found');\n }\n\n console.log('Orientation:', GPS.Orientation);\n\n /* If there is orientation data -- i.e. landscape/portrait etc */\n if (GPS.Orientation === 6) {\n // CCW\n angle += (Math.PI / 180) * -90;\n } else if (GPS.Orientation === 8) {\n // CW\n angle += (Math.PI / 180) * 90;\n } else if (GPS.Orientation === 3) {\n // 180\n angle += (Math.PI / 180) * 180;\n }\n\n /* If there is altitude data */\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n // Attempt to use GPS altitude:\n // (may eventually need to find EXIF field of view for correction)\n if (\n typeof GPS.GPSAltitude !== 'undefined' &&\n typeof GPS.GPSAltitudeRef !== 'undefined'\n ) {\n altitude =\n GPS.GPSAltitude.numerator / GPS.GPSAltitude.denominator +\n GPS.GPSAltitudeRef;\n } else {\n altitude = 0; // none\n }\n }\n } else {\n alert('EXIF initialized. Press again to view data in console.');\n }\n};\n","L.DistortHandle = L.EditHandle.extend({\n options: {\n TYPE: 'distort',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAChSURBVO3BIU4DURgGwNkvL2B6AkQTLBqP4QCoSm7DDXoBLBZHDbfgICAIZjEV3YTn9uVHdMZZtcnCfI13bIzxg0emg6Nm6QVbYz3jylEsXRrvwommb49X67jFkz80fR9Mb1YxTzqiWBSLYlEsikWxKBbFolgUi2JRLIpFsSgWxaJY03fHHOu40dH07bAzWCx9Ge/TiWbpHgdsjPGNB2f/yS+7xRCyiiZPJQAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n\n overlay.setCorner(this._corner, this.getLatLng());\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.distortHandle = function(overlay, idx, options) {\n return new L.DistortHandle(overlay, idx, options);\n};\n","L.DragHandle = L.EditHandle.extend({\n options: {\n TYPE: 'drag',\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsVJREFUeNrMVztLXEEUvnNVFAVBAhY2aRKbTZEHJNpYabuNjSgYg/GxdsmPSJkUAa/ZdVEX8mgWYVutbHxAHkVskjQBuUUgBISVhCQk3wnfwMlk1rusN1wHPubOzJlzvjlz5sxc01Ma/hUEwQnwDIjqc7uvgv9YYO86qgIwCXQbdNTlQ8kcCBHgBch8TcloF6oJGr6phk6EQAkfdz3zvgDr9Mr7Fg1fptEZoM8jsmrokpfsiIFO4IIjuE2v1EDmR4LRdlR5Gh51hj8D34ABtm8YTtqna0TgklIw5CgQguKxIojEjmFROg/MKQO27NkFAB+4wAPouGUJiIvWKHwbAxX2XyWRKWkqhT+pbJntJZJuUzISW0+5hW+obxrVBsfvoH/dqCCJuU97GBh2VteLSiYvArmErT8EVoAK9Bw7enbpVYmvAQlyowYforrH5jXL2rPHI/TKONDB7u9AlavdaTBPvPmazUeQuy8f7UomUgTEwIJPEQ3sQGE/6ll2l9H/KcEzBcfWn2IclluM3DpddJxSHujlFkscbUPvmB0LHVnLrId7nlaZVkEc6QGXQI1MAwZcWmVRHeNaQwJMMiU2cwy4s7p/RJ2ckpvIQs+cIs+5GzitloLKHUV3MPREuXbTOKO91dX387gGTONxIgEWm+E61FFrpcyqXLHsEwiDjEsjAksqw5XPoL9MHVrn6QR4q+XZrDaR4RoWzq2ymafuRA/Mq1stSsHLVkcbdf9VjOcx8ZH3+SFWcCWlVPyWuUBOwUWdC1wP5NVjYiXFWLO69PZ6CRTUY6KSIoEKdf6T3IzzgHxnsyHctNBEkmn6Oob8ExUDg/ahGybd177cDjzH5xHwgDiSvoS7I/LZyvxJZj0wod7tkX5G0XVC7rEyLhfLJjBGbKoLLEfZWObyKeZ6oY82g+yf5Zn/mJyHX7PMf04z/T3/LcAAu4E6iiyJqf0AAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n\n overlay.dragBy(formerLatLng, newLatLng);\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.dragHandle = function(overlay, idx, options) {\n return new L.DragHandle(overlay, idx, options);\n};\n","L.EditHandle = L.Marker.extend({\n initialize(overlay, corner, options) {\n const latlng = overlay.getCorner(corner);\n\n L.setOptions(this, options);\n\n this._handled = overlay;\n this._corner = corner;\n\n const markerOptions = {\n draggable: true,\n zIndexOffset: 10,\n };\n\n if (options && options.hasOwnProperty('draggable')) {\n markerOptions.draggable = options.draggable;\n }\n\n L.Marker.prototype.initialize.call(this, latlng, markerOptions);\n },\n\n onAdd(map) {\n L.Marker.prototype.onAdd.call(this, map);\n this._bindListeners();\n this.updateHandle();\n },\n\n onRemove(map) {\n this._unbindListeners();\n L.Marker.prototype.onRemove.call(this, map);\n },\n\n _onHandleDragStart() {\n this._handled.fire('editstart');\n },\n\n _onHandleDragEnd() {\n this._fireEdit();\n },\n\n _fireEdit() {\n this._handled.edited = true;\n this._handled.fire('edit');\n },\n\n _bindListeners() {\n this.on({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.on('zoomend', this.updateHandle, this);\n this._handled.on('update', this.updateHandle, this);\n },\n\n _unbindListeners() {\n this.off({\n contextmenu: L.DomEvent.stop,\n dragstart: this._onHandleDragStart,\n drag: this._onHandleDrag,\n dragend: this._onHandleDragEnd,\n }, this);\n\n this._handled._map.off('zoomend', this.updateHandle, this);\n this._handled.off('update', this.updateHandle, this);\n },\n\n /* Takes two latlngs and calculates the scaling difference. */\n _calculateScalingFactor(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n const formerRadiusSquared = this._d2(centerPoint, formerPoint);\n const newRadiusSquared = this._d2(centerPoint, newPoint);\n\n return Math.sqrt(newRadiusSquared / formerRadiusSquared);\n },\n\n /* Distance between two points in cartesian space, squared (distance formula). */\n _d2(a, b) {\n const dx = a.x - b.x;\n const dy = a.y - b.y;\n\n return Math.pow(dx, 2) + Math.pow(dy, 2);\n },\n\n /* Takes two latlngs and calculates the angle between them. */\n calculateAngleDelta(latlngA, latlngB) {\n const overlay = this._handled;\n const map = overlay._map;\n\n\n const centerPoint = map.latLngToLayerPoint(overlay.getCenter());\n const formerPoint = map.latLngToLayerPoint(latlngA);\n const newPoint = map.latLngToLayerPoint(latlngB);\n\n const initialAngle = (\n Math.atan2(centerPoint.y - formerPoint.y, centerPoint.x - formerPoint.x)\n );\n const newAngle = (\n Math.atan2(centerPoint.y - newPoint.y, centerPoint.x - newPoint.x)\n );\n\n return newAngle - initialAngle;\n },\n});\n","L.FreeRotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'freeRotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n if (angle !== 0) { overlay.rotateBy(angle, 'rad'); }\n\n let edgeMinWidth = overlay.edgeMinWidth;\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n\n const corner1 = map.latLngToContainerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToContainerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.freeRotateHandle = (overlay, idx, options) => {\n return new L.FreeRotateHandle(overlay, idx, options);\n};\n","L.LockHandle = L.EditHandle.extend({\n options: {\n TYPE: 'lock',\n interactive: false,\n icon: L.icon({\n // eslint-disable-next-line max-len\n iconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAD8SURBVO3BPU7CYAAA0AdfjIcQlRCQBG7C3gk2uIPG2RC3Dk16Gz0FTO1WZs/gwGCMP/2+xsSl7+n1er1Iz9LtRQjaPeMeO+TinLDCJV78YqjdA04YodKuxhUaPGoRxMmxwRQZSt87Yo4KExGCeAUyLLFB4bMacxywEClIU2KDKXbInTUYo8JCgoFuGoxQO5uiwY1EA91VmDqrcKeDoX8WdNNgjApvmGGLXKIgXY0xGkxQYItrrFFIEKQ5Yo4KEx9yrDFDhlKkIF6NOQ5Y+KpAhiXWKEQI4pxwiwoLPyuxwQw75FoE7fZYocFEuwI7jHCBV39gL92TXq/Xi/AOcmczZmaIMScAAAAASUVORK5CYII=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n onRemove(map) {\n this.unbindTooltip();\n L.EditHandle.prototype.onRemove.call(this, map);\n },\n\n _bindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.on(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.on(document, 'pointerleave', this._tooltipOff, this);\n },\n\n _unbindListeners() {\n const icon = this.getElement();\n\n L.EditHandle.prototype._bindListeners.call(this);\n\n L.DomEvent.off(icon, {\n mousedown: this._tooltipOn,\n mouseup: this._tooltipOff,\n }, this);\n\n L.DomEvent.off(document, 'pointerleave', this._tooltipOff, this);\n },\n\n /* cannot be dragged */\n _onHandleDrag() {\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n\n _tooltipOn(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n this._timer = setTimeout(L.bind(function() {\n if (this._timeout) { clearTimeout(this._timeout); }\n\n if (!this.getTooltip()) {\n this.bindTooltip('Locked!', {permanent: true});\n } else {\n handlesArr.eachLayer(function(handle) {\n if (this !== handle) { handle.closeTooltip(); }\n });\n }\n\n this.openTooltip();\n }, this), 500);\n },\n\n _tooltipOff(e) {\n const eP = this._handled.parentGroup;\n const edit = eP ? eP.editing : this._handled.editing;\n\n if (e.shiftKey) { return; }\n if (!this._handled.isSelected() && (eP && !eP.isCollected(this._handled))) {\n return;\n }\n\n const handlesArr = edit._lockHandles;\n\n if (e.currentTarget === document) {\n handlesArr.eachLayer(function(handle) {\n handle.closeTooltip();\n });\n }\n\n if (this._timer) { clearTimeout(this._timer); }\n\n this._timeout = setTimeout(L.bind(function() {\n this.closeTooltip();\n }, this), 400);\n },\n});\n\nL.lockHandle = function(overlay, idx, options) {\n return new L.LockHandle(overlay, idx, options);\n};\n","L.RotateHandle = L.EditHandle.extend({\n options: {\n TYPE: 'rotate',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAklEQVR4AewaftIAAAHiSURBVMXBa3HbShgA0PMp/1sCCo8oCEpgTaCXgIXAJiDzyCJoAUTm4UVQAns1Y8+snWnTvJyeE16hkjDgDrfoNTMKcpC9UPiLSo8JyetkjEHxjPCMyoS199kFoz8Iv1HpMaN3qWDCHoegOKkkRwnJpRmroHgiPFEZ8IBekzEGxQtUEhKSS/fB7Ew4U+lxcGkVZG9QWWPSFAxBcdK59KApuA+yNwp2uEdx1GN25sZJZULSfAtm77SlbNjju6MvG75u+WHRWVR6rDVjMPsgwYyVZl3pLTpHkyYHOx8syMiayaJzlDTZ9YyaZNFVkiYH2ZUEBcVJJXVImuz6Js3Qofe59pq7DoOTILu+g+a288mCouk7/1iH4qTS+2QdDppbV1ZJmrnDXnPnc5UOs2Z0fUmTuyBr+krvSioJyUmQO0dZM7mepMkWnaNRkyrJB6uskTSjxY3Fll8bvmJwlDb83FJ8gMqAB80uyBY3Trb82PAfvjj6vuHnluIdKgMeNXOwctK5NKBoHitrb1RJeHRp5Ux4ojLg0aWMHGQvUOkxIWkKVsHsTPiNSo8HDC5lZIsgO6n0uMUdRvQuFQxB8UR4RmXC2vvsgtEfhL+o9JiQvE7GGBTPCK9QSUjoMWgKDthjDrIX+h/k0I7gth6N5gAAAABJRU5ErkJggg==',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const angle = this.calculateAngleDelta(formerLatLng, newLatLng);\n\n /*\n * running rotation logic even for an angle delta of 0\n * prevents a small, occasional marker flicker\n */\n overlay.rotateBy(angle, 'rad');\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.rotateHandle = function(overlay, idx, options) {\n return new L.RotateHandle(overlay, idx, options);\n};\n","L.ScaleHandle = L.EditHandle.extend({\n options: {\n TYPE: 'scale',\n icon: L.icon({\n iconUrl:\n // eslint-disable-next-line max-len\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSI0NTkiIGhlaWdodD0iNDY0IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iIj48cmVjdCBpZD0iYmFja2dyb3VuZHJlY3QiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHg9IjAiIHk9IjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgY2xhc3M9IiIgc3R5bGU9IiIvPjxnIGNsYXNzPSJjdXJyZW50TGF5ZXIiIHN0eWxlPSIiPjx0aXRsZT5MYXllciAxPC90aXRsZT48cGF0aCBkPSJNNDU5LjA0OTE1OTUzMDQ3MTM0LDg2LjkyNjIzNDUxMjU1MDAyIFYwIGgtODUuNzE0NTczMzU2MzEyMDkgdjI3LjA0MzcxNzQwMzkwNDQ1MiBIODUuNzE0NTczMzU2MzEyMDMgVjAgSDAgdjg2LjkyNjIzNDUxMjU1MDAyIGgyNS43MTQzNzIwMDY4OTM2MjYgdjI4OS43NTQxMTUwNDE4MzM0IEgwIHY4Ni45MjYyMzQ1MTI1NTAwMiBoODUuNzE0NTczMzU2MzEyMDkgdi0yNy4wNDM3MTc0MDM5MDQ0NTIgaDI4NS43MTUyNDQ1MjEwNDAzIHYyNy4wNDM3MTc0MDM5MDQ0NTIgaDg1LjcxNDU3MzM1NjMxMjA5IHYtODYuOTI2MjM0NTEyNTUwMDIgaC0yMy44MDk2MDM3MTAwODY2OSBWODYuOTI2MjM0NTEyNTUwMDIgSDQ1OS4wNDkxNTk1MzA0NzEzNCB6TTM4NC43NjMxOTU5NTUwMDA5LDEyLjU1NjAxMTY1MTgxMjc4MSBoNjEuOTA0OTY5NjQ2MjI1Mzk2IHY2Mi43ODAwNTgyNTkwNjM5MSBoLTYxLjkwNDk2OTY0NjIyNTM5NiBWMTIuNTU2MDExNjUxODEyNzgxIHpNMTIuMzgwOTkzOTI5MjQ1MDUsMTIuNTU2MDExNjUxODEyNzgxIGg2MS45MDQ5Njk2NDYyMjUzOTYgdjYyLjc4MDA1ODI1OTA2MzkxIEgxMi4zODA5OTM5MjkyNDUwNSBWMTIuNTU2MDExNjUxODEyNzgxIHpNNzQuMjg1OTYzNTc1NDcwNTMsNDUxLjA1MDU3MjQxNTEyMDY2IEgxMi4zODA5OTM5MjkyNDUwNSB2LTYyLjc4MDA1ODI1OTA2MzkxIGg2MS45MDQ5Njk2NDYyMjUzOTYgVjQ1MS4wNTA1NzI0MTUxMjA2NiB6TTQ0NS43MTU3ODE0NTI4MjI3NCw0NTEuMDUwNTcyNDE1MTIwNjYgaC02Mi44NTczNTM3OTQ2Mjg4NjQgdi02Mi43ODAwNTgyNTkwNjM5MSBoNjIuODU3MzUzNzk0NjI4ODY0IFY0NTEuMDUwNTcyNDE1MTIwNjYgek00MDcuNjIwNDE1NTE2Njg0MjYsMzc2LjY4MDM0OTU1NDM4MzQ0IGgtMzYuMTkwNTk3NjM5MzMxNzcgdjMyLjgzODc5OTcwNDc0MTEyIEg4NS43MTQ1NzMzNTYzMTIwMyB2LTMyLjgzODc5OTcwNDc0MTEyIEg0OS41MjM5NzU3MTY5ODAzMiBWODYuOTI2MjM0NTEyNTUwMDIgaDM2LjE5MDU5NzYzOTMzMTc3IFY1MC4yMjQwNDY2MDcyNTExMjUgaDI4Ny42MjAwMTI4MTc4NDcyIHYzNi43MDIxODc5MDUyOTg5IGgzNC4yODU4MjkzNDI1MjQ4MzUgVjM3Ni42ODAzNDk1NTQzODM0NCB6IiBpZD0ic3ZnXzIiIGNsYXNzPSIiIGZpbGw9IiMxYTFhZWIiIGZpbGwtb3BhY2l0eT0iMSIvPjwvZz48L3N2Zz4=',\n iconSize: [32, 32],\n iconAnchor: [16, 16],\n }),\n },\n\n _onHandleDrag() {\n const overlay = this._handled;\n const map = overlay._map;\n let edgeMinWidth = overlay.edgeMinWidth;\n const formerLatLng = overlay.getCorner(this._corner);\n const newLatLng = this.getLatLng();\n const scale = this._calculateScalingFactor(formerLatLng, newLatLng);\n\n /*\n * checks whether the \"edgeMinWidth\" property is set and tracks the minimum edge length;\n * this enables preventing scaling to zero, but we might also add an overall scale limit\n */\n\n if (!edgeMinWidth) { edgeMinWidth = 50; } /* just in case */\n const corner1 = map.latLngToLayerPoint(overlay.getCorner(0));\n const corner2 = map.latLngToLayerPoint(overlay.getCorner(1));\n const w = Math.abs(corner1.x - corner2.x);\n const h = Math.abs(corner1.y - corner2.y);\n const distance = Math.sqrt(w * w + h * h);\n\n if (distance > edgeMinWidth || scale > 1) {\n overlay.scaleBy(scale);\n /*\n * running scale logic even for a scale ratio of 1\n * prevents a small, occasional marker flicker\n */\n } else {\n overlay.scaleBy(1);\n }\n },\n\n updateHandle() {\n this.setLatLng(this._handled.getCorner(this._corner));\n },\n});\n\nL.scaleHandle = function(overlay, idx, options) {\n return new L.ScaleHandle(overlay, idx, options);\n};\n","L.distortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.group_action_map = {};\n\nL.DistortableImage.ControlBar = L.Toolbar2.Control.extend({});\n\nL.distortableImage.controlBar = function(options) {\n return new L.DistortableImage.ControlBar(options);\n};\n\n/** addInitHooks run before onAdd */\nL.DistortableCollection.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.ExportAction,\n L.DeleteAction,\n L.LockAction,\n L.UnlockAction,\n ];\n\n // all possible modes\n L.DistortableCollection.Edit.MODES = {\n lock: L.LockAction,\n unlock: L.UnlockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableCollection.edit(this, {actions: a});\n});\n","L.DistortableImage = L.DistortableImage || {};\nL.distortableImage = L.DistortableImage;\n\nL.DistortableImage.action_map = {};\n\nL.DistortableImage.PopupBar = L.Toolbar2.Popup.extend({\n options: {\n anchor: [0, -10],\n },\n\n initialize(latlng, options) {\n L.setOptions(this, options);\n L.Toolbar2.Popup.prototype.initialize.call(this, latlng, options);\n },\n\n addHooks(map, ov) {\n this.map = map;\n this.ov = ov;\n },\n\n tools() {\n if (this._ul) {\n return this._ul.children;\n }\n },\n\n clickTool(name) {\n let tools = this.tools();\n for (let i = 0; i < tools.length; i++) {\n let tool = tools.item(i).children[0];\n if (L.DomUtil.hasClass(tool, name)) {\n tool.click();\n return tool;\n }\n }\n return false;\n },\n});\n\nL.distortableImage.popupBar = function(latlng, options) {\n return new L.DistortableImage.PopupBar(latlng, options);\n};\n\nL.DistortableImageOverlay.addInitHook(function() {\n /** Default actions */\n this.ACTIONS = [\n L.DragAction,\n L.ScaleAction,\n L.DistortAction,\n L.RotateAction,\n L.FreeRotateAction,\n L.LockAction,\n L.OpacityAction,\n L.OpacitiesAction,\n L.BorderAction,\n L.ExportAction,\n L.DeleteAction,\n ];\n\n // all possible modes\n L.DistortableImage.Edit.MODES = {\n drag: L.DragAction,\n scale: L.ScaleAction,\n distort: L.DistortAction,\n rotate: L.RotateAction,\n freeRotate: L.FreeRotateAction,\n lock: L.LockAction,\n };\n\n const a = this.options.actions ? this.options.actions : this.ACTIONS;\n\n this.editing = L.distortableImage.edit(this, {actions: a});\n});\n","/* this is the baseclass other IconSets inherit from,\n* we don't use it directly */\nL.IconSet = L.Class.extend({\n\n _svg: '',\n\n _symbols: '',\n\n render() {\n this.addSymbols(this._symbols);\n return this._svg;\n },\n\n addSymbols(symbols) {\n this._svg += symbols;\n },\n});\n","L.KeymapperIconSet = L.IconSet.extend({\n\n _symbols:\n // eslint-disable-next-line max-len\n '',\n\n});\n","/* eslint-disable max-len */\nL.ToolbarIconSet = L.IconSet.extend({\n _symbols:\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '',\n});\n","L.Map.mergeOptions({\n boxCollector: true,\n boxZoom: false,\n});\n\n/**\n * primarily Leaflet 1.5.1 source code. Overriden so that it's a collection box used with\n * our `L.DistortableCollection` class instead of a zoom box.\n * */\nL.Map.BoxCollector = L.Map.BoxZoom.extend({\n initialize(map) {\n this._map = map;\n this._container = map._container;\n this._pane = map._panes.overlayPane;\n this._resetStateTimeout = 0;\n map.on('unload', this._destroy, this);\n },\n\n addHooks() {\n L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n removeHooks() {\n L.DomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n },\n\n moved() {\n return this._moved;\n },\n\n _destroy() {\n L.DomUtil.remove(this._pane);\n delete this._pane;\n },\n\n _resetState() {\n this._resetStateTimeout = 0;\n this._moved = false;\n },\n\n _clearDeferredResetState() {\n if (this._resetStateTimeout !== 0) {\n clearTimeout(this._resetStateTimeout);\n this._resetStateTimeout = 0;\n }\n },\n\n _onMouseDown(e) {\n if (!e.shiftKey || (e.which !== 1 && e.button !== 1)) {\n return false;\n }\n\n // Clear the deferred resetState if it hasn't executed yet, otherwise it\n // will interrupt the interaction and orphan a box element in the container.\n this._clearDeferredResetState();\n this._resetState();\n\n L.DomUtil.disableTextSelection();\n L.DomUtil.disableImageDrag();\n\n this._startPoint = this._map.mouseEventToContainerPoint(e);\n\n L.DomEvent.on(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseMove(e) {\n if (!this._moved) {\n this._moved = true;\n\n this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._container);\n L.DomUtil.addClass(this._container, 'leaflet-crosshair');\n\n this._map.fire('boxzoomstart');\n }\n\n this._point = this._map.mouseEventToContainerPoint(e);\n\n this._bounds = L.bounds(this._startPoint, this._point);\n let size = this._bounds.getSize();\n\n L.DomUtil.setPosition(this._box, this._bounds.min);\n\n this._box.style.width = size.x + 'px';\n this._box.style.height = size.y + 'px';\n },\n\n _finish() {\n if (this._moved) {\n L.DomUtil.remove(this._box);\n L.DomUtil.removeClass(this._container, 'leaflet-crosshair');\n }\n\n L.DomUtil.enableTextSelection();\n L.DomUtil.enableImageDrag();\n\n L.DomEvent.off(document, {\n contextmenu: L.DomEvent.stop,\n mousemove: this._onMouseMove,\n mouseup: this._onMouseUp,\n }, this);\n },\n\n _onMouseUp(e) {\n if (e.which !== 1 && e.button !== 1) {\n return;\n }\n\n this._finish();\n\n if (!this._moved) { return; }\n\n // Postpone to next JS tick so internal click event handling\n // still see it as \"moved\".\n this._clearDeferredResetState();\n this._resetStateTimeout = setTimeout(\n L.Util.bind(this._resetState, this), 0);\n\n let bounds = L.latLngBounds(\n this._map.containerPointToLatLng(this._bounds.getBottomLeft()),\n this._map.containerPointToLatLng(this._bounds.getTopRight())\n );\n\n let zoom = this._map.getZoom();\n let center = this._map.getCenter();\n\n // calls the `project` method but 1st updates the pixel origin - see https://github.com/publiclab/Leaflet.DistortableImage/pull/344\n bounds = this._map._latLngBoundsToNewLayerBounds(bounds, zoom, center);\n\n this._map.fire('boxcollectend', {boxCollectBounds: bounds});\n },\n});\n\nL.Map.addInitHook('addHandler', 'boxCollector', L.Map.BoxCollector);\n","L.Map.mergeOptions({\n doubleClickLabels: true,\n});\n\n/**\n * The `doubleClickLabels` handler replaces `doubleClickZoom` by default if `#addGoogleMutant`\n * is used unless the options 'labels: false' or 'doubleClickZoom: false` were passed to it.\n */\nL.Map.DoubleClickLabels = L.Map.DoubleClickZoom.extend({\n enable() {\n const map = this._map;\n\n if (this._enabled) { return this; }\n\n // disable 'doubleClickZoom' if 'doubleClickLabels' is enabled.\n if (map.doubleClickZoom.enabled()) {\n map.doubleClickZoom.disable();\n }\n\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n this._enabled = false;\n this.removeHooks();\n\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n map.fire('dblclick');\n }\n }\n }, 250);\n },\n\n _onDoubleClick() {\n const map = this._map;\n const labels = map._labels;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!labels) { return; }\n\n if (labels.options.opacity === 1) {\n labels.options.opacity = 0;\n labels.setOpacity(0);\n } else {\n labels.options.opacity = 1;\n labels.setOpacity(1);\n }\n },\n});\n\nL.Map.addInitHook('addHandler', 'doubleClickLabels', L.Map.DoubleClickLabels);\n","/**\n * `L.Map.DoubleClickZoom` from leaflet 1.5.1, overrwritten so that it\n * 1) Fires a `singleclick` event to avoid deselecting images on `dblclick`.\n * 2) Maintains a mutually exclusive relationship with the map's `DoubleClickLabels` handler\n */\nL.Map.DoubleClickZoom.include({\n addHooks() {\n this._map.on({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n removeHooks() {\n this._map.off({\n click: this._fireIfSingle,\n dblclick: this._onDoubleClick,\n }, this);\n },\n\n enable() {\n if (this._enabled) { return this; }\n\n // don't enable 'doubleClickZoom' unless 'doubleClickLabels' is disabled first\n if (this._map.doubleClickLabels) {\n if (this._map.doubleClickLabels.enabled()) {\n return this;\n }\n }\n\n // signify to collection/instance classes to turn on 'singleclick' listeners\n this._map.fire('singleclickon');\n\n this._enabled = true;\n this.addHooks();\n return this;\n },\n\n disable() {\n if (!this._enabled) { return this; }\n\n // signify to collection/instance safe to swap 'singleclick' listeners with 'click' listeners.\n this._map.fire('singleclickoff');\n\n this._enabled = false;\n this.removeHooks();\n return this;\n },\n\n _fireIfSingle(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n // prevents deselection in case of box selector\n if (oe && oe.shiftKey) { return; }\n\n map._clicked += 1;\n this._map._clickTimeout = setTimeout(function() {\n if (map._clicked === 1) {\n map._clicked = 0;\n map.fire('singleclick', {type: 'singleclick'});\n } else {\n // manually fire doubleclick event only for touch screens that don't natively fire it\n if (L.Browser.touch && (oe && oe.sourceCapabilities.firesTouchEvents)) {\n /* in `DoubleClickLabels.js`, we just do map.fire('dblclick') bc `_onDoublClick` doesn't use the\n passed \"e\" (for now). To generate a 'real' DOM event that will have all of its corresponding core\n properties (originalEvent, latlng, etc.), use Leaflet's `#map._fireDOMEvent` (Leaflet 1.5.1 source) */\n map._fireDOMEvent(oe, 'dblclick', [map]);\n }\n }\n }, 250);\n },\n\n _onDoubleClick(e) {\n const map = this._map;\n const oe = e.originalEvent;\n\n setTimeout(function() {\n map._clicked = 0;\n clearTimeout(map._clickTimeout);\n }, 0);\n\n if (!oe) { return false; }\n\n const oldZoom = map.getZoom();\n const delta = map.options.zoomDelta;\n const zoom = oe.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n if (map.options.doubleClickZoom === 'center') {\n map.setZoom(zoom);\n } else {\n map.setZoomAround(e.containerPoint, zoom);\n }\n },\n});\n","/* eslint-disable max-len */\nL.Map.include({\n\n _clicked: 0,\n\n addGoogleMutant(opts) {\n const url = 'http://mt0.google.com/vt/lyrs=s&x={x}&y={y}&z={z}';\n\n opts = this.mutantOptions = L.extend({\n mutantOpacity: 0.8,\n maxZoom: 24,\n maxNativeZoom: 20,\n minZoom: 0,\n labels: true,\n labelOpacity: 1,\n doubleClickLabels: true,\n }, opts);\n\n if (!opts.labels) {\n this.mutantOptions = L.extend(this.mutantOptions, {\n labelOpacity: opts.labels ? 1 : undefined,\n doubleClickLabels: opts.labels ? true : undefined,\n });\n }\n\n this._googleMutant = L.tileLayer(url, {\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n opacity: opts.mutantOpacity,\n }).addTo(this);\n\n if (opts.labels) { this._addLabels(opts); }\n // shouldn't have this handler at all if there are no labels to toggle\n else {\n this.doubleClickLabels = undefined;\n }\n\n return this;\n },\n\n _addLabels(opts) {\n const url = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-labels/{z}/{x}/{y}{r}.{ext}';\n\n if (opts.labelOpacity !== 0 && opts.labelOpacity !== 1) {\n opts.labelOpacity = 1;\n }\n\n this._labels = L.tileLayer(url, {\n attribution: 'Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap contributors',\n subdomains: 'abcd',\n interactive: false,\n opacity: opts.labelOpacity,\n maxZoom: opts.maxZoom,\n maxNativeZoom: opts.maxNativeZoom,\n minZoom: opts.minZoom,\n ext: 'png',\n }).addTo(this);\n\n if (this.mutantOptions.doubleClickLabels) {\n this.doubleClickLabels.enable();\n }\n\n return this;\n },\n});\n// start off with doubleClickZoom enabled, doubleClickLabels can later be enabled instead\n// during initialization\nL.Map.addInitHook(function() {\n this.doubleClickLabels.disable();\n this.doubleClickZoom.enable();\n});\n","L.DomUtil = L.extend(L.DomUtil, {\n initTranslation(obj) {\n this.translation = obj;\n },\n\n getMatrixString(m) {\n const is3d = L.Browser.webkit3d || L.Browser.gecko3d || L.Browser.ie3d;\n\n /*\n * Since matrix3d takes a 4*4 matrix, we add in an empty row and column,\n * which act as the identity on the z-axis.\n * See:\n * http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function#M.C3.B6bius'_homogeneous_coordinates_in_projective_geometry\n */\n const matrix = [\n m[0], m[3], 0, m[6],\n m[1], m[4], 0, m[7],\n 0, 0, 1, 0,\n m[2], m[5], 0, m[8],\n ];\n\n const str = is3d ? 'matrix3d(' + matrix.join(',') + ')' : '';\n\n if (!is3d) {\n console\n .log('Your browser must support 3D CSS transforms' +\n 'in order to use DistortableImageOverlay.');\n }\n\n return str;\n },\n\n toggleClass(el, className) {\n const c = className;\n return this.hasClass(el, c) ?\n this.removeClass(el, c) : this.addClass(el, c);\n },\n\n confirmDelete() {\n return window.confirm(this.translation.confirmImageDelete);\n },\n\n confirmDeletes(n) {\n if (n === 1) { return this.confirmDelete(); }\n\n const translation = this.translation.confirmImagesDeletes;\n let warningMsg = '';\n\n if (typeof translation === 'function') {\n warningMsg = translation(n);\n } else {\n warningMsg = translation;\n }\n\n return window.confirm(warningMsg);\n },\n});\n","L.IconUtil = {\n /* creates an svg elemenet with built in accessibility properties\n * and standardized classes for styling, takes in the fragment\n * identifier (id) of the symbol to reference. note for symplicity\n * we allow providing the icon target with or without the '#' prefix\n */\n create(ref) {\n if (/^#/.test(ref)) {\n ref = ref.replace(/^#/, '');\n }\n\n return (\n '' +\n '' +\n ''\n );\n },\n\n addClassToSvg(container, loader) {\n const svg = container.querySelector('svg');\n\n if (svg) {\n L.DomUtil.addClass(svg, loader);\n }\n },\n\n // finds the use element and toggles its icon reference\n toggleXlink(container, ref1, ref2) {\n if (!/^#/.test(ref1)) {\n ref1 = '#' + ref1;\n }\n if (!/^#/.test(ref2)) {\n ref2 = '#' + ref2;\n }\n\n const use = container.querySelector('use');\n if (use) {\n const toggled = use.getAttribute('xlink:href') === ref1 ? ref2 : ref1;\n use.setAttribute('xlink:href', toggled);\n return toggled;\n }\n return false;\n },\n\n toggleTitle(container, title1, title2) {\n const toggled = container.getAttribute('title') === title1 ? title2 : title1;\n\n container.setAttribute('title', toggled);\n if (container.hasAttribute('aria-label')) {\n container.setAttribute('aria-label', toggled);\n }\n return toggled;\n },\n};\n","L.ImageUtil = {\n\n getCmPerPixel(overlay) {\n var map = overlay._map;\n\n var dist = map\n .latLngToLayerPoint(overlay.getCorner(0))\n .distanceTo(map.latLngToLayerPoint(overlay.getCorner(1)));\n\n return (dist * 100) / overlay.getElement().width;\n },\n};\n","L.MatrixUtil = {\n\n // Compute the adjugate of m\n adj(m) {\n return [\n m[4]*m[8]-m[5]*m[7], m[2]*m[7]-m[1]*m[8], m[1]*m[5]-m[2]*m[4],\n m[5]*m[6]-m[3]*m[8], m[0]*m[8]-m[2]*m[6], m[2]*m[3]-m[0]*m[5],\n m[3]*m[7]-m[4]*m[6], m[1]*m[6]-m[0]*m[7], m[0]*m[4]-m[1]*m[3],\n ];\n },\n\n // multiply two 3*3 matrices\n multmm(a, b) {\n const c = [];\n let i;\n\n for (i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n var cij = 0;\n\n for (let k = 0; k < 3; k++) {\n cij += a[3*i + k]*b[3*k + j];\n }\n\n c[3*i + j] = cij;\n }\n }\n\n return c;\n },\n\n // multiply a 3*3 matrix and a 3-vector\n multmv(m, v) {\n return [\n m[0]*v[0] + m[1]*v[1] + m[2]*v[2],\n m[3]*v[0] + m[4]*v[1] + m[5]*v[2],\n m[6]*v[0] + m[7]*v[1] + m[8]*v[2],\n ];\n },\n\n // multiply a scalar and a 3*3 matrix\n multsm(s, m) {\n const matrix = [];\n\n for (let i = 0, l = m.length; i < l; i++) {\n matrix.push(s*m[i]);\n }\n\n return matrix;\n },\n\n basisToPoints(x1, y1, x2, y2, x3, y3, x4, y4) {\n const m = [\n x1, x2, x3,\n y1, y2, y3,\n 1, 1, 1,\n ];\n const v = L.MatrixUtil.multmv(L.MatrixUtil.adj(m), [x4, y4, 1]);\n\n return L.MatrixUtil.multmm(m, [\n v[0], 0, 0,\n 0, v[1], 0,\n 0, 0, v[2],\n ]);\n },\n\n project(m, x, y) {\n const v = L.MatrixUtil.multmv(m, [x, y, 1]);\n\n return [v[0]/v[2], v[1]/v[2]];\n },\n\n general2DProjection(\n x1s, y1s, x1d, y1d,\n x2s, y2s, x2d, y2d,\n x3s, y3s, x3d, y3d,\n x4s, y4s, x4d, y4d\n ) {\n const s = L.MatrixUtil.basisToPoints(x1s, y1s, x2s, y2s, x3s, y3s, x4s, y4s);\n const d = L.MatrixUtil.basisToPoints(x1d, y1d, x2d, y2d, x3d, y3d, x4d, y4d);\n const m = L.MatrixUtil.multmm(d, L.MatrixUtil.adj(s));\n\n // Normalize to the unique matrix with m[8] == 1.\n // See: http://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n\n return L.MatrixUtil.multsm(1/m[8], m);\n },\n};\n","L.TrigUtil = {\n\n calcAngle(x, y, unit = 'deg') {\n return unit === 'deg' ?\n this.radiansToDegrees(Math.atan2(y, x)) :\n Math.atan2(y, x);\n },\n\n radiansToDegrees(angle) {\n return (angle * 180) / Math.PI;\n },\n\n degreesToRadians(angle) {\n return (angle * Math.PI) / 180;\n },\n};\n","L.Utils = {\n initTranslation() {\n const translation = {\n deleteImage: 'Delete Image',\n deleteImages: 'Delete Images',\n distortImage: 'Distort Image',\n dragImage: 'Drag Image',\n exportImage: 'Export Image',\n exportImages: 'Export Images',\n removeBorder: 'Remove Border',\n addBorder: 'Add Border',\n freeRotateImage: 'Free rotate Image',\n geolocateImage: 'Geolocate Image',\n lockMode: 'Lock Mode',\n lockImages: 'Lock Images',\n makeImageOpaque: 'Make Image Opaque',\n makeImageTransparent: 'Make Image Transparent',\n restoreImage: 'Restore Natural Image',\n rotateImage: 'Rotate Image',\n scaleImage: 'Scale Image',\n stackToFront: 'Stack to Front',\n stackToBack: 'Stack to Back',\n unlockImages: 'Unlock Images',\n confirmImageDelete:\n 'Are you sure? This image will be permanently deleted from the map.',\n confirmImagesDeletes:\n 'Are you sure? These images will be permanently deleted from the map.',\n };\n\n if (!this.options.translation) {\n this.options.translation = translation;\n } else {\n // If the translation for a word is not specified, fallback to English.\n for (const key in translation) {\n if (!this.options.translation.hasOwnProperty(key)) {\n this.options.translation[key] = translation[key];\n }\n }\n }\n\n L.DomUtil.initTranslation(this.options.translation);\n },\n\n getNestedVal(obj, key, nestedKey) {\n const dig = [key, nestedKey];\n return dig.reduce(function(obj, k) {\n return obj && obj[k];\n }, obj);\n },\n};\n","// startup\n// Load entry module and return exports\n__webpack_modules__[999]();\n__webpack_modules__[85]();\n__webpack_modules__[351]();\n__webpack_modules__[360]();\n__webpack_modules__[682]();\n__webpack_modules__[866]();\n__webpack_modules__[477]();\n__webpack_modules__[808]();\n__webpack_modules__[743]();\n__webpack_modules__[988]();\n__webpack_modules__[92]();\n__webpack_modules__[194]();\n__webpack_modules__[206]();\n__webpack_modules__[789]();\n__webpack_modules__[337]();\n__webpack_modules__[350]();\n__webpack_modules__[376]();\n__webpack_modules__[261]();\n__webpack_modules__[929]();\n__webpack_modules__[280]();\n__webpack_modules__[426]();\n__webpack_modules__[114]();\n__webpack_modules__[231]();\n__webpack_modules__[541]();\n__webpack_modules__[149]();\n__webpack_modules__[74]();\n__webpack_modules__[691]();\n__webpack_modules__[105]();\n__webpack_modules__[496]();\n__webpack_modules__[944]();\n__webpack_modules__[954]();\n__webpack_modules__[178]();\n__webpack_modules__[547]();\n__webpack_modules__[886]();\n__webpack_modules__[129]();\n__webpack_modules__[93]();\n__webpack_modules__[719]();\n__webpack_modules__[397]();\n__webpack_modules__[428]();\n// This entry module is referenced by other modules so it can't be inlined\n__webpack_modules__[782]();\n__webpack_modules__[752]();\n__webpack_modules__[998]();\n__webpack_modules__[291]();\nvar __webpack_exports__ = {};\n__webpack_modules__[131]();\n"],"names":["arr","L","DistortableCollection","FeatureGroup","extend","options","editable","exportOpts","exportStartUrl","statusUrl","exportUrl","initialize","setOptions","this","prototype","call","Utils","initTranslation","onAdd","map","_map","editing","enable","on","_addEvents","_removeEvents","onRemove","disable","off","e","layer","DomEvent","dragstart","_dragStartMultiple","drag","_dragMultiple","getElement","mousedown","_deselectOthers","contextmenu","_longPressMultiSelect","preventDefault","eachLayer","edit","target","enabled","DomUtil","toggleClass","anyCollected","deselect","_addToolbar","_removeToolbar","isCollected","overlay","hasClass","getLayers","some","bind","_toggleCollected","shiftKey","every","each","_leaflet_id","push","splice","indexOf","stopPropagation","i","_dragStartPoints","c","getCorner","latLngToLayerPoint","topLeft","delta","subtract","_updateCollectionFromPoints","_toRemove","filter","mode","_mode","_toMove","layersToMove","p","Transformation","x","y","forEach","movedPoints","transform","setCornersFromPoints","_getAvgCmPerPixel","imgs","reduce","sum","img","cm_per_pixel","length","generateExportJson","json","sections","_image","src","split","filename","zc","getCorners","corners","lat","lon","lng","images","id","width","height","image_file_name","nodes","ImageUtil","getCmPerPixel","reverse","avg_cm_per_pixel","distortableCollection","DistortableImageOverlay","ImageOverlay","crossOrigin","edgeMinWidth","selected","url","_selected","_url","rotation","_initImage","_reset","_corners","zoomAnimation","Browser","any3d","_animateZoom","getPane","appendChild","_initImageDimensions","units","deg","setAngle","rad","eventParents","_eventParents","eP","Object","keys","select","singleclickon","_singleClickListeners","singleclickoff","_resetClickListeners","singleclick","_singleClick","doubleClickZoom","doubleClickLabels","fire","originalImageWidth","getStyle","originalImageHeight","aspectRatio","parseInt","imageHeight","imageWidth","center","project","getCenter","offset","point","divideBy","unproject","add","_initialDimensions","getZoom","setBounds","latLngBounds","type","isSelected","_hideMarkers","_programmaticGrouping","_showMarkers","setCorner","corner","latlng","toolbar","DistortableImage","PopupBar","_updateToolbarPos","edited","_cornerExceedsMapLats","zoom","crs","Simple","CRS","exceedsTop","exceedsBottom","Math","pow","setCorners","latlngObj","k","pointsObj","layerPointToLatLng","scaleBy","scale","scaledCorners","multiplyBy","getAngle","unit","matrix","style","TRANSFORM","slice","row0x","row0y","row1x","row1y","determinant","angle","TrigUtil","calcAngle","PI","round","radiansToDegrees","Util","formatNum","currentAngle","angleToRotateBy","rotateBy","q","degreesToRadians","cos","sin","dragBy","formerPoint","newPoint","transCorners","restore","equals","_getTranslateString","is3d","webkit3d","close","image","transformMatrix","_calculateProjectiveTransform","warp","getMatrixString","translation","_leaflet_pos","join","event","latLngToNewLayerPoint","_latLngToNewLayerPoint","agg","latLngToCartesian","j","w","offsetWidth","h","offsetHeight","_subtract","MatrixUtil","general2DProjection","distortableImageOverlay","Map","addInitHook","getContainer","addClass","distortableImage","Keymapper","Handler","position","addHooks","_keymapper","_container","_buildContainer","_scrollWrapper","_wrap","_toggler","_createButton","_setMapper","_toggleKeymapper","disableClickPropagation","disableScrollPropagation","removeHooks","remove","container","create","setAttribute","divider","toggler","innerHTML","IconUtil","wrap","display","button","control","insertAdjacentHTML","addTo","className","toggleTitle","_injectIconSet","document","querySelector","el","_iconset","KeymapperIconSet","render","_n","mobile","keymapper","Edit","keymap","group_action_map","group","_group","_exportOpts","Escape","editActions","actions","runExporter","getNestedVal","startExport","_onKeyDown","_decollectAll","boxcollectend","_addCollections","_enabled","handlerName","key","oe","originalEvent","HTMLImageElement","removeClass","_unlockGroup","hasTool","UnlockAction","_unlock","_lockGroup","LockAction","_lock","box","boxCollectBounds","imgBounds","_latLngBoundsToNewLayerBounds","intersects","_removeGroup","DeleteAction","layersToRemove","n","confirmDeletes","removeLayer","cancelExport","customCollection","collection","undefined","clearInterval","updateInterval","suppressToolbar","controlBar","value","action","addTool","baseClass","removeTool","item","idx","ExportAction","Promise","resolve","opts","frequency","updater","data","JSON","parse","status_url","match","status","jpg","alert","console","log","handleStatusRes","setInterval","req","Request","Date","now","method","fetch","then","res","ok","text","fetchStatusUrl","mergedOpts","form","FormData","append","stringify","reqOpts","body","opacity","outline","action_map","_overlay","_toggledImage","_transparent","_outlined","_opacity","bringToFront","_initModes","_initHandles","_appendHandlesandDragable","parentGroup","dblclick","nextMode","window","handle","_disableDragging","_handles","_modes","MODES","_dragHandles","layerGroup","addLayer","dragHandle","_scaleHandles","scaleHandle","_distortHandles","distortHandle","_rotateHandles","rotateHandle","_freeRotateHandles","freeRotateHandle","_lockHandles","lockHandle","draggable","distort","rotate","freeRotate","lock","ov","_updateHandle","currentHandle","setOpacity","dragging","isMode","_enableDragging","replaceTool","old","next","_nextOrNone","getModes","Draggable","_updatePosition","currentPoint","_newPos","_dragMode","setMode","_scaleMode","_distortMode","_rotateMode","_freeRotateMode","_toggleLockMode","_toggleOpacity","OpacityAction","_refresh","_setOpacities","o","OpacitiesAction","_toggleBorder","BorderAction","_toggleOrder","_stackUp","_stackDown","_removeOverlay","confirmDelete","_getExport","downloadable","Image","onload","nw","ne","sw","se","hasOwnProperty","warpWebGl","fullResolutionSrc","StackAction","bringToBack","hasMode","_deselect","getMode","maxLat","raisedPoint","popupBar","setLatLng","newMode","clickTool","modesArray","stop","EditAction","use","tooltip","removeBorder","addBorder","toolbarIcon","svg","html","b","toggleXlink","_link","deleteImage","Backspace","deleteImages","DistortAction","distortImage","d","DragAction","dragImage","D","Toolbar2","Action","_createIcon","args","iconOptions","_icon","constructor","_enableAction","_addSubToolbar","createElement","ToolbarIconSet","parentElement","_disableAction","editAction","isExporting","mouseLeaveSkip","isHooksExecuted","exportImage","exportImages","exportTool","mouseEnterHandler","handleMouseEnter","mouseLeaveHandler","handleMouseLeave","resetState","detachMouseEventListeners","renderExportIcon","setTimeout","attachMouseEventListeners","renderDownloadIcon","element","addEventListener","removeEventListener","renderCancelIcon","firstChild","addClassToSvg","FreeRotateAction","freeRotateImage","f","GeolocateAction","geolocateImage","EXIF","getData","u","l","lockMode","lockImages","opacities","subtoolbarCss","CSSStyleSheet","replaceSync","insertRule","adoptedStyleSheets","isNaN","OpacitiesToolbar2","appendToContainer","m","_calculateDepth","_ul","_disabledEvents","_getActionConstructor","_arguments","subToolbar","link","_hide","makeImageOpaque","makeImageTransparent","RestoreAction","restoreImage","RotateAction","rotateImage","r","ScaleAction","scaleImage","s","stackToFront","stackToBack","a","unlockImages","getAllTags","GPS","GPSLatitude","GPSLongitude","GPSLatitudeRef","GPSLongitudeRef","GPSImgDirectionRef","GPSImgDirection","numerator","denominator","Orientation","GPSAltitude","GPSAltitudeRef","DistortHandle","EditHandle","TYPE","icon","iconUrl","iconSize","iconAnchor","_onHandleDrag","_handled","_corner","getLatLng","updateHandle","DragHandle","formerLatLng","newLatLng","Marker","markerOptions","zIndexOffset","_bindListeners","_unbindListeners","_onHandleDragStart","_onHandleDragEnd","_fireEdit","dragend","_calculateScalingFactor","latlngA","latlngB","centerPoint","formerRadiusSquared","_d2","newRadiusSquared","sqrt","dx","dy","calculateAngleDelta","initialAngle","atan2","FreeRotateHandle","corner1","latLngToContainerPoint","corner2","abs","LockHandle","interactive","unbindTooltip","_tooltipOn","mouseup","_tooltipOff","handlesArr","_timer","_timeout","clearTimeout","getTooltip","closeTooltip","bindTooltip","permanent","openTooltip","currentTarget","RotateHandle","ScaleHandle","ControlBar","Control","ACTIONS","unlock","Popup","anchor","tools","children","name","tool","click","IconSet","Class","_svg","_symbols","addSymbols","symbols","mergeOptions","boxCollector","boxZoom","BoxCollector","BoxZoom","_pane","_panes","overlayPane","_resetStateTimeout","_destroy","_onMouseDown","moved","_moved","_resetState","_clearDeferredResetState","which","disableTextSelection","disableImageDrag","_startPoint","mouseEventToContainerPoint","mousemove","_onMouseMove","_onMouseUp","_box","_point","_bounds","bounds","size","getSize","setPosition","min","_finish","enableTextSelection","enableImageDrag","containerPointToLatLng","getBottomLeft","getTopRight","DoubleClickLabels","DoubleClickZoom","_fireIfSingle","_clicked","_clickTimeout","touch","sourceCapabilities","firesTouchEvents","_onDoubleClick","labels","_labels","include","_fireDOMEvent","oldZoom","zoomDelta","setZoom","setZoomAround","containerPoint","addGoogleMutant","mutantOptions","mutantOpacity","maxZoom","maxNativeZoom","minZoom","labelOpacity","_googleMutant","tileLayer","_addLabels","attribution","subdomains","ext","obj","gecko3d","ie3d","str","confirm","confirmImageDelete","warningMsg","confirmImagesDeletes","ref","test","replace","loader","ref1","ref2","toggled","getAttribute","title1","title2","hasAttribute","distanceTo","adj","multmm","cij","multmv","v","multsm","basisToPoints","x1","y1","x2","y2","x3","y3","x4","y4","x1s","y1s","x1d","y1d","x2s","y2s","x2d","y2d","x3s","y3s","x3d","y3d","x4s","y4s","x4d","y4d","nestedKey","__webpack_modules__"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/vendor.css b/dist/vendor.css new file mode 100644 index 000000000..767cb2bff --- /dev/null +++ b/dist/vendor.css @@ -0,0 +1 @@ +.leaflet-toolbar-0{list-style:none;padding-left:0;border:2px solid rgba(0,0,0,.2);border-radius:4px}.leaflet-toolbar-0>li{position:relative}.leaflet-toolbar-0>li>.leaflet-toolbar-icon{display:block;width:30px;height:30px;line-height:30px;margin-right:0;padding-right:0;border-right:0;text-align:center;text-decoration:none;background-color:#fff}.leaflet-toolbar-0>li>.leaflet-toolbar-icon:hover{background-color:#f4f4f4}.leaflet-toolbar-0 .leaflet-toolbar-1{display:none;list-style:none}.leaflet-toolbar-tip-container{margin:-16px auto 0;height:16px;position:relative;overflow:hidden}.leaflet-toolbar-tip{width:16px;height:16px;margin:-8px auto 0;background-color:#fff;border:2px solid rgba(0,0,0,.2);background-clip:content-box;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);border-radius:4px}.leaflet-control-toolbar .leaflet-toolbar-1>li:last-child>.leaflet-toolbar-icon,.leaflet-popup-toolbar>li:last-child>.leaflet-toolbar-icon{border-top-right-radius:4px;border-bottom-right-radius:4px}.leaflet-control-toolbar>li>.leaflet-toolbar-icon{border-bottom:1px solid #ccc}.leaflet-control-toolbar>li:first-child>.leaflet-toolbar-icon{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-control-toolbar>li:last-child>.leaflet-toolbar-icon{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom-width:0}.leaflet-control-toolbar .leaflet-toolbar-1{margin:0;padding:0;position:absolute;left:30px;top:0;white-space:nowrap;height:30px}.leaflet-control-toolbar .leaflet-toolbar-1>li{display:inline-block}.leaflet-control-toolbar .leaflet-toolbar-1>li>.leaflet-toolbar-icon{display:block;background-color:#919187;border-left:1px solid #aaa;color:#fff;font:11px/19px "Helvetica Neue",Arial,Helvetica,sans-serif;line-height:30px;text-decoration:none;padding-left:10px;padding-right:10px;height:30px}.leaflet-control-toolbar .leaflet-toolbar-1>li>.leaflet-toolbar-icon:hover{background-color:#a0a098}.leaflet-popup-toolbar{position:relative;box-sizing:content-box}.leaflet-popup-toolbar>li{float:left}.leaflet-popup-toolbar>li>.leaflet-toolbar-icon{border-right:1px solid #ccc}.leaflet-popup-toolbar>li:first-child>.leaflet-toolbar-icon{border-top-left-radius:4px;border-bottom-left-radius:4px}.leaflet-popup-toolbar>li:last-child>.leaflet-toolbar-icon{border-bottom-width:0;border-right:none}.leaflet-popup-toolbar .leaflet-toolbar-1{position:absolute;top:30px;left:0;padding-left:0}.leaflet-popup-toolbar .leaflet-toolbar-1>li>.leaflet-toolbar-icon{position:relative;float:left;width:30px;height:30px} \ No newline at end of file diff --git a/dist/vendor.js b/dist/vendor.js new file mode 100644 index 000000000..c23deeffa --- /dev/null +++ b/dist/vendor.js @@ -0,0 +1 @@ +function dataURItoBlob(t){for(var e=(0<=t.split(",")[0].indexOf("base64")?atob:unescape)(t.split(",")[1]),r=(t=t.split(",")[0].split(":")[1].split(";")[0],new Uint8Array(e.length)),o=0;o0.0){color.rgb=(color.rgb-0.5)/(1.0-contrast)+0.5;}else{color.rgb=(color.rgb-0.5)*(1.0+contrast)+0.5;}gl_FragColor=color;}"),a.call(this,N.brightnessContrast,{brightness:t(-1,e,1),contrast:t(-1,r,1)}),this}function b(e){e=new f(e);for(var r=[],o=0;o<256;o++)r.push(t(0,Math.floor(256*e.interpolate(o/255)),255));return r}function y(t,e,r){t=b(t),1==arguments.length?e=r=t:(e=b(e),r=b(r));for(var o=[],i=0;i<256;i++)o.splice(o.length,0,t[i],e[i],r[i],255);return this._.extraTexture.initFromBytes(256,1,o),this._.extraTexture.use(1),N.curves=N.curves||new j(null,"uniform sampler2D texture;uniform sampler2D map;varying vec2 texCoord;void main(){vec4 color=texture2D(texture,texCoord);color.r=texture2D(map,vec2(color.r)).r;color.g=texture2D(map,vec2(color.g)).g;color.b=texture2D(map,vec2(color.b)).b;gl_FragColor=color;}"),N.curves.textures({map:1}),a.call(this,N.curves,{}),this}function _(t,e){return N.unsharpMask=N.unsharpMask||new j(null,"uniform sampler2D blurredTexture;uniform sampler2D originalTexture;uniform float strength;uniform float threshold;varying vec2 texCoord;void main(){vec4 blurred=texture2D(blurredTexture,texCoord);vec4 original=texture2D(originalTexture,texCoord);gl_FragColor=mix(blurred,original,1.0+strength);}"),this._.extraTexture.ensureFormat(this._.texture),this._.texture.use(),this._.extraTexture.drawTo((function(){j.getDefaultShader().drawRect()})),this._.extraTexture.use(1),this.triangleBlur(t),N.unsharpMask.textures({originalTexture:1}),a.call(this,N.unsharpMask,{strength:e}),this._.extraTexture.unuse(1),this}function T(e){return N.sepia=N.sepia||new j(null,"uniform sampler2D texture;uniform float amount;varying vec2 texCoord;void main(){vec4 color=texture2D(texture,texCoord);float r=color.r;float g=color.g;float b=color.b;color.r=min(1.0,(r*(1.0-(0.607*amount)))+(g*(0.769*amount))+(b*(0.189*amount)));color.g=min(1.0,(r*0.349*amount)+(g*(1.0-(0.314*amount)))+(b*0.168*amount));color.b=min(1.0,(r*0.272*amount)+(g*0.534*amount)+(b*(1.0-(0.869*amount))));gl_FragColor=color;}"),a.call(this,N.sepia,{amount:t(0,e,1)}),this}function w(e,r){return N.hueSaturation=N.hueSaturation||new j(null,"uniform sampler2D texture;uniform float hue;uniform float saturation;varying vec2 texCoord;void main(){vec4 color=texture2D(texture,texCoord);float angle=hue*3.14159265;float s=sin(angle),c=cos(angle);vec3 weights=(vec3(2.0*c,-sqrt(3.0)*s-c,sqrt(3.0)*s-c)+1.0)/3.0;float len=length(color.rgb);color.rgb=vec3(dot(color.rgb,weights.xyz),dot(color.rgb,weights.zxy),dot(color.rgb,weights.yzx));float average=(color.r+color.g+color.b)/3.0;if(saturation>0.0){color.rgb+=(average-color.rgb)*(1.0-1.0/(1.001-saturation));}else{color.rgb+=(average-color.rgb)*(-saturation);}gl_FragColor=color;}"),a.call(this,N.hueSaturation,{hue:t(-1,e,1),saturation:t(-1,r,1)}),this}function S(t,e,r){return N.zoomBlur=N.zoomBlur||new j(null,"uniform sampler2D texture;uniform vec2 center;uniform float strength;uniform vec2 texSize;varying vec2 texCoord;"+q+"void main(){vec4 color=vec4(0.0);float total=0.0;vec2 toCenter=center-texCoord*texSize;float offset=random(vec3(12.9898,78.233,151.7182),0.0);for(float t=0.0;t<=40.0;t++){float percent=(t+offset)/40.0;float weight=4.0*(percent-percent*percent);vec4 sample=texture2D(texture,texCoord+toCenter*percent*strength/texSize);sample.rgb*=sample.a;color+=sample*weight;total+=weight;}gl_FragColor=color/total;gl_FragColor.rgb/=gl_FragColor.a+0.00001;}"),a.call(this,N.zoomBlur,{center:[t,e],strength:r,texSize:[this.width,this.height]}),this}function C(t,e,r,o,i,n){N.tiltShift=N.tiltShift||new j(null,"uniform sampler2D texture;uniform float blurRadius;uniform float gradientRadius;uniform vec2 start;uniform vec2 end;uniform vec2 delta;uniform vec2 texSize;varying vec2 texCoord;"+q+"void main(){vec4 color=vec4(0.0);float total=0.0;float offset=random(vec3(12.9898,78.233,151.7182),0.0);vec2 normal=normalize(vec2(start.y-end.y,end.x-start.x));float radius=smoothstep(0.0,1.0,abs(dot(texCoord*texSize-start,normal))/gradientRadius)*blurRadius;for(float t=-30.0;t<=30.0;t++){float percent=(t+offset-0.5)/30.0;float weight=1.0-abs(percent);vec4 sample=texture2D(texture,texCoord+delta/texSize*percent*radius);sample.rgb*=sample.a;color+=sample*weight;total+=weight;}gl_FragColor=color/total;gl_FragColor.rgb/=gl_FragColor.a+0.00001;}");var l=r-t,s=o-e,c=Math.sqrt(l*l+s*s);return a.call(this,N.tiltShift,{blurRadius:i,gradientRadius:n,start:[t,e],end:[r,o],delta:[l/c,s/c],texSize:[this.width,this.height]}),a.call(this,N.tiltShift,{blurRadius:i,gradientRadius:n,start:[t,e],end:[r,o],delta:[-s/c,l/c],texSize:[this.width,this.height]}),this}function E(e,r,o){N.lensBlurPrePass=N.lensBlurPrePass||new j(null,"uniform sampler2D texture;uniform float power;varying vec2 texCoord;void main(){vec4 color=texture2D(texture,texCoord);color=pow(color,vec4(power));gl_FragColor=vec4(color);}");var i="uniform sampler2D texture0;uniform sampler2D texture1;uniform vec2 delta0;uniform vec2 delta1;uniform float power;varying vec2 texCoord;"+q+"vec4 sample(vec2 delta){float offset=random(vec3(delta,151.7182),0.0);vec4 color=vec4(0.0);float total=0.0;for(float t=0.0;t<=30.0;t++){float percent=(t+offset)/30.0;color+=texture2D(texture0,texCoord+delta*percent);total+=1.0;}return color/total;}";N.lensBlur0=N.lensBlur0||new j(null,i+"void main(){gl_FragColor=sample(delta0);}"),N.lensBlur1=N.lensBlur1||new j(null,i+"void main(){gl_FragColor=(sample(delta0)+sample(delta1))*0.5;}"),N.lensBlur2=N.lensBlur2||new j(null,i+"void main(){vec4 color=(sample(delta0)+2.0*texture2D(texture1,texCoord))/3.0;gl_FragColor=pow(color,vec4(power));}").textures({texture1:1}),i=[];for(var n=0;n<3;n++){var l=o+2*n*Math.PI/3;i.push([e*Math.sin(l)/this.width,e*Math.cos(l)/this.height])}return e=Math.pow(10,t(-1,r,1)),a.call(this,N.lensBlurPrePass,{power:e}),this._.extraTexture.ensureFormat(this._.texture),a.call(this,N.lensBlur0,{delta0:i[0]},this._.texture,this._.extraTexture),a.call(this,N.lensBlur1,{delta0:i[1],delta1:i[2]},this._.extraTexture,this._.extraTexture),a.call(this,N.lensBlur0,{delta0:i[1]}),this._.extraTexture.use(1),a.call(this,N.lensBlur2,{power:1/e,delta0:i[2]}),this}function D(t){return N.triangleBlur=N.triangleBlur||new j(null,"uniform sampler2D texture;uniform vec2 delta;varying vec2 texCoord;"+q+"void main(){vec4 color=vec4(0.0);float total=0.0;float offset=random(vec3(12.9898,78.233,151.7182),0.0);for(float t=-30.0;t<=30.0;t++){float percent=(t+offset-0.5)/30.0;float weight=1.0-abs(percent);vec4 sample=texture2D(texture,texCoord+delta*percent);sample.rgb*=sample.a;color+=sample*weight;total+=weight;}gl_FragColor=color/total;gl_FragColor.rgb/=gl_FragColor.a+0.00001;}"),a.call(this,N.triangleBlur,{delta:[t/this.width,0]}),a.call(this,N.triangleBlur,{delta:[0,t/this.height]}),this}function R(t){return N.edgeWork1=N.edgeWork1||new j(null,"uniform sampler2D texture;uniform vec2 delta;varying vec2 texCoord;"+q+"void main(){vec2 color=vec2(0.0);vec2 total=vec2(0.0);float offset=random(vec3(12.9898,78.233,151.7182),0.0);for(float t=-30.0;t<=30.0;t++){float percent=(t+offset-0.5)/30.0;float weight=1.0-abs(percent);vec3 sample=texture2D(texture,texCoord+delta*percent).rgb;float average=(sample.r+sample.g+sample.b)/3.0;color.x+=average*weight;total.x+=weight;if(abs(t)<15.0){weight=weight*2.0-1.0;color.y+=average*weight;total.y+=weight;}}gl_FragColor=vec4(color/total,0.0,1.0);}"),N.edgeWork2=N.edgeWork2||new j(null,"uniform sampler2D texture;uniform vec2 delta;varying vec2 texCoord;"+q+"void main(){vec2 color=vec2(0.0);vec2 total=vec2(0.0);float offset=random(vec3(12.9898,78.233,151.7182),0.0);for(float t=-30.0;t<=30.0;t++){float percent=(t+offset-0.5)/30.0;float weight=1.0-abs(percent);vec2 sample=texture2D(texture,texCoord+delta*percent).xy;color.x+=sample.x*weight;total.x+=weight;if(abs(t)<15.0){weight=weight*2.0-1.0;color.y+=sample.y*weight;total.y+=weight;}}float c=clamp(10000.0*(color.y/total.y-color.x/total.x)+0.5,0.0,1.0);gl_FragColor=vec4(c,c,c,1.0);}"),a.call(this,N.edgeWork1,{delta:[t/this.width,0]}),a.call(this,N.edgeWork2,{delta:[0,t/this.height]}),this}function F(t,e,r){return N.hexagonalPixelate=N.hexagonalPixelate||new j(null,"uniform sampler2D texture;uniform vec2 center;uniform float scale;uniform vec2 texSize;varying vec2 texCoord;void main(){vec2 tex=(texCoord*texSize-center)/scale;tex.y/=0.866025404;tex.x-=tex.y*0.5;vec2 a;if(tex.x+tex.y-floor(tex.x)-floor(tex.y)<1.0)a=vec2(floor(tex.x),floor(tex.y));else a=vec2(ceil(tex.x),ceil(tex.y));vec2 b=vec2(ceil(tex.x),floor(tex.y));vec2 c=vec2(floor(tex.x),ceil(tex.y));vec3 TEX=vec3(tex.x,tex.y,1.0-tex.x-tex.y);vec3 A=vec3(a.x,a.y,1.0-a.x-a.y);vec3 B=vec3(b.x,b.y,1.0-b.x-b.y);vec3 C=vec3(c.x,c.y,1.0-c.x-c.y);float alen=length(TEX-A);float blen=length(TEX-B);float clen=length(TEX-C);vec2 choice;if(alen0.0){coord*=mix(1.0,smoothstep(0.0,radius/distance,percent),strength*0.75);}else{coord*=mix(1.0,pow(percent,1.0+strength*0.75)*radius/distance,1.0-percent);}}coord+=center;"),a.call(this,N.bulgePinch,{radius:o,strength:t(-1,i,1),center:[e,r],texSize:[this.width,this.height]}),this}function G(t,e){return e=u.apply(null,e),t=u.apply(null,t),e=h(e),this.matrixWarp([e[0]*t[0]+e[1]*t[3]+e[2]*t[6],e[0]*t[1]+e[1]*t[4]+e[2]*t[7],e[0]*t[2]+e[1]*t[5]+e[2]*t[8],e[3]*t[0]+e[4]*t[3]+e[5]*t[6],e[3]*t[1]+e[4]*t[4]+e[5]*t[7],e[3]*t[2]+e[4]*t[5]+e[5]*t[8],e[6]*t[0]+e[7]*t[3]+e[8]*t[6],e[6]*t[1]+e[7]*t[4]+e[8]*t[7],e[6]*t[2]+e[7]*t[5]+e[8]*t[8]])}var M,k,N,O={};function X(){}try{var z=document.createElement("canvas").getContext("experimental-webgl")}catch(O){}z&&-1===z.getSupportedExtensions().indexOf("OES_texture_float_linear")&&function(t){var e,r,o,i;if(t.getExtension("OES_texture_float"))return e=t.createFramebuffer(),r=t.createTexture(),t.bindTexture(t.TEXTURE_2D,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,1,1,0,t.RGBA,t.UNSIGNED_BYTE,null),t.bindFramebuffer(t.FRAMEBUFFER,e),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,r,0),e=t.createTexture(),t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,2,2,0,t.RGBA,t.FLOAT,new Float32Array([2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])),r=t.createProgram(),o=t.createShader(t.VERTEX_SHADER),i=t.createShader(t.FRAGMENT_SHADER),t.shaderSource(o,"attribute vec2 vertex;void main(){gl_Position=vec4(vertex,0.0,1.0);}"),t.shaderSource(i,"uniform sampler2D texture;void main(){gl_FragColor=texture2D(texture,vec2(0.5));}"),t.compileShader(o),t.compileShader(i),t.attachShader(r,o),t.attachShader(r,i),t.linkProgram(r),o=t.createBuffer(),t.bindBuffer(t.ARRAY_BUFFER,o),t.bufferData(t.ARRAY_BUFFER,new Float32Array([0,0]),t.STREAM_DRAW),t.enableVertexAttribArray(0),t.vertexAttribPointer(0,2,t.FLOAT,!1,0,0),o=new Uint8Array(4),t.useProgram(r),t.viewport(0,0,1,1),t.bindTexture(t.TEXTURE_2D,e),t.drawArrays(t.POINTS,0,1),t.readPixels(0,0,1,1,t.RGBA,t.UNSIGNED_BYTE,o),127===o[0]||128===o[0]}(z)&&(M=WebGLRenderingContext.prototype.getExtension,k=WebGLRenderingContext.prototype.getSupportedExtensions,WebGLRenderingContext.prototype.getExtension=function(t){return"OES_texture_float_linear"===t?(void 0===this.$OES_texture_float_linear$&&Object.defineProperty(this,"$OES_texture_float_linear$",{enumerable:!1,configurable:!1,writable:!1,value:new X}),this.$OES_texture_float_linear$):M.call(this,t)},WebGLRenderingContext.prototype.getSupportedExtensions=function(){var t=k.call(this);return-1===t.indexOf("OES_texture_float_linear")&&t.push("OES_texture_float_linear"),t}),O.canvas=function(){var t=document.createElement("canvas");try{N=t.getContext("experimental-webgl",{premultipliedAlpha:!1})}catch(t){N=null}if(N)return t._={gl:N,isInitialized:!1,texture:null,spareTexture:null,flippedShader:null},t.texture=c(r),t.draw=c(o),t.update=c(i),t.replace=c(n),t.contents=c(l),t.getPixelArray=c(s),t.brightnessContrast=c(v),t.hexagonalPixelate=c(F),t.hueSaturation=c(w),t.colorHalftone=c(A),t.triangleBlur=c(D),t.unsharpMask=c(_),t.perspective=c(G),t.matrixWarp=c(L),t.bulgePinch=c(B),t.tiltShift=c(C),t.dotScreen=c(U),t.edgeWork=c(R),t.lensBlur=c(E),t.zoomBlur=c(S),t.noise=c(m),t.denoise=c(x),t.curves=c(y),t.swirl=c(I),t.ink=c(P),t.vignette=c(p),t.vibrance=c(g),t.sepia=c(T),t;throw"This browser does not support WebGL"},O.splineInterpolate=b,Y.fromElement=function(t){var e=new Y(0,0,N.RGBA,N.UNSIGNED_BYTE);return e.loadContentsOf(t),e},Y.prototype.loadContentsOf=function(t){this.width=t.width||t.videoWidth,this.height=t.height||t.videoHeight,N.bindTexture(N.TEXTURE_2D,this.id),N.texImage2D(N.TEXTURE_2D,0,this.format,this.format,this.type,t)},Y.prototype.initFromBytes=function(t,e,r){this.width=t,this.height=e,this.format=N.RGBA,this.type=N.UNSIGNED_BYTE,N.bindTexture(N.TEXTURE_2D,this.id),N.texImage2D(N.TEXTURE_2D,0,N.RGBA,t,e,0,N.RGBA,this.type,new Uint8Array(r))},Y.prototype.destroy=function(){N.deleteTexture(this.id),this.id=null},Y.prototype.use=function(t){N.activeTexture(N.TEXTURE0+(t||0)),N.bindTexture(N.TEXTURE_2D,this.id)},Y.prototype.unuse=function(t){N.activeTexture(N.TEXTURE0+(t||0)),N.bindTexture(N.TEXTURE_2D,null)},Y.prototype.ensureFormat=function(t,e,r,o){var i;1==arguments.length&&(t=(i=arguments[0]).width,e=i.height,r=i.format,o=i.type),t==this.width&&e==this.height&&r==this.format&&o==this.type||(this.width=t,this.height=e,this.format=r,this.type=o,N.bindTexture(N.TEXTURE_2D,this.id),N.texImage2D(N.TEXTURE_2D,0,this.format,t,e,0,this.format,this.type,null))},Y.prototype.drawTo=function(t){if(N.framebuffer=N.framebuffer||N.createFramebuffer(),N.bindFramebuffer(N.FRAMEBUFFER,N.framebuffer),N.framebufferTexture2D(N.FRAMEBUFFER,N.COLOR_ATTACHMENT0,N.TEXTURE_2D,this.id,0),N.checkFramebufferStatus(N.FRAMEBUFFER)!==N.FRAMEBUFFER_COMPLETE)throw Error("incomplete framebuffer");N.viewport(0,0,this.width,this.height),t(),N.bindFramebuffer(N.FRAMEBUFFER,null)},W=null,Y.prototype.fillUsingCanvas=function(t){return t(V(this)),this.format=N.RGBA,this.type=N.UNSIGNED_BYTE,N.bindTexture(N.TEXTURE_2D,this.id),N.texImage2D(N.TEXTURE_2D,0,N.RGBA,N.RGBA,N.UNSIGNED_BYTE,W),this},Y.prototype.toImage=function(t){this.use(),j.getDefaultShader().drawRect();var e=4*this.width*this.height,r=new Uint8Array(e),o=V(this),i=o.createImageData(this.width,this.height);N.readPixels(0,0,this.width,this.height,N.RGBA,N.UNSIGNED_BYTE,r);for(var a=0;a>1;this.xa[o]>t?r=o:e=o}o=this.xa[r]-this.xa[e];var i=(this.xa[r]-t)/o;return t=(t-this.xa[e])/o,i*this.ya[e]+t*this.ya[r]+((i*i*i-i)*this.y2[e]+(t*t*t-t)*this.y2[r])*o*o/6},$.prototype.destroy=function(){N.deleteProgram(this.program),this.program=null},$.prototype.uniforms=function(t){for(var e in N.useProgram(this.program),t)if(t.hasOwnProperty(e)){var r=N.getUniformLocation(this.program,e);if(null!==r){var o=t[e];if("[object Array]"==Object.prototype.toString.call(o))switch(o.length){case 1:N.uniform1fv(r,new Float32Array(o));break;case 2:N.uniform2fv(r,new Float32Array(o));break;case 3:N.uniform3fv(r,new Float32Array(o));break;case 4:N.uniform4fv(r,new Float32Array(o));break;case 9:N.uniformMatrix3fv(r,!1,new Float32Array(o));break;case 16:N.uniformMatrix4fv(r,!1,new Float32Array(o));break;default:throw"dont't know how to load uniform \""+e+'" of length '+o.length}else{if("[object Number]"!=Object.prototype.toString.call(o))throw'attempted to set uniform "'+e+'" to invalid value '+(o||"undefined").toString();N.uniform1f(r,o)}}}return this},$.prototype.textures=function(t){for(var e in N.useProgram(this.program),t)t.hasOwnProperty(e)&&N.uniform1i(N.getUniformLocation(this.program,e),t[e]);return this},$.prototype.drawRect=function(t,e,r,o){var i=N.getParameter(N.VIEWPORT);e=void 0!==e?(e-i[1])/i[3]:0,t=void 0!==t?(t-i[0])/i[2]:0,r=void 0!==r?(r-i[0])/i[2]:1,o=void 0!==o?(o-i[1])/i[3]:1,null==N.vertexBuffer&&(N.vertexBuffer=N.createBuffer()),N.bindBuffer(N.ARRAY_BUFFER,N.vertexBuffer),N.bufferData(N.ARRAY_BUFFER,new Float32Array([t,e,t,o,r,e,r,o]),N.STATIC_DRAW),null==N.texCoordBuffer&&(N.texCoordBuffer=N.createBuffer(),N.bindBuffer(N.ARRAY_BUFFER,N.texCoordBuffer),N.bufferData(N.ARRAY_BUFFER,new Float32Array([0,0,0,1,1,0,1,1]),N.STATIC_DRAW)),null==this.vertexAttribute&&(this.vertexAttribute=N.getAttribLocation(this.program,"vertex"),N.enableVertexAttribArray(this.vertexAttribute)),null==this.texCoordAttribute&&(this.texCoordAttribute=N.getAttribLocation(this.program,"_texCoord"),N.enableVertexAttribArray(this.texCoordAttribute)),N.useProgram(this.program),N.bindBuffer(N.ARRAY_BUFFER,N.vertexBuffer),N.vertexAttribPointer(this.vertexAttribute,2,N.FLOAT,!1,0,0),N.bindBuffer(N.ARRAY_BUFFER,N.texCoordBuffer),N.vertexAttribPointer(this.texCoordAttribute,2,N.FLOAT,!1,0,0),N.drawArrays(N.TRIANGLE_STRIP,0,4)},$.getDefaultShader=function(){return N.defaultShader=N.defaultShader||new $,N.defaultShader};var j=$,q="float random(vec3 scale,float seed){return fract(sin(dot(gl_FragCoord.xyz+seed,scale))*43758.5453+seed);}";function J(t,e){if(t=N.createShader(t),N.shaderSource(t,e),N.compileShader(t),N.getShaderParameter(t,N.COMPILE_STATUS))return t;throw"compile error: "+N.getShaderInfoLog(t)}function $(t,e){if(this.texCoordAttribute=this.vertexAttribute=null,this.program=N.createProgram(),e="precision highp float;"+(e=e||"uniform sampler2D texture;varying vec2 texCoord;void main(){gl_FragColor=texture2D(texture,texCoord);}"),N.attachShader(this.program,J(N.VERTEX_SHADER,t=t||"attribute vec2 vertex;attribute vec2 _texCoord;varying vec2 texCoord;void main(){texCoord=_texCoord;gl_Position=vec4(vertex*2.0-1.0,0.0,1.0);}")),N.attachShader(this.program,J(N.FRAGMENT_SHADER,e)),N.linkProgram(this.program),!N.getProgramParameter(this.program,N.LINK_STATUS))throw"link error: "+N.getProgramInfoLog(this.program)}return O}();"object"==typeof module?module.exports=fx:window.fx=fx,function(){function t(e){return e instanceof t?e:this instanceof t?void(this.EXIFwrapped=e):new t(e)}var e=("undefined"!=typeof exports?(exports="undefined"!=typeof module&&module.exports?module.exports=t:exports).EXIF=t:this.EXIF=t,t.Tags={36864:"ExifVersion",40960:"FlashpixVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",37121:"ComponentsConfiguration",37122:"CompressedBitsPerPixel",37500:"MakerNote",37510:"UserComment",40964:"RelatedSoundFile",36867:"DateTimeOriginal",36868:"DateTimeDigitized",37520:"SubsecTime",37521:"SubsecTimeOriginal",37522:"SubsecTimeDigitized",33434:"ExposureTime",33437:"FNumber",34850:"ExposureProgram",34852:"SpectralSensitivity",34855:"ISOSpeedRatings",34856:"OECF",37377:"ShutterSpeedValue",37378:"ApertureValue",37379:"BrightnessValue",37380:"ExposureBias",37381:"MaxApertureValue",37382:"SubjectDistance",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37396:"SubjectArea",37386:"FocalLength",41483:"FlashEnergy",41484:"SpatialFrequencyResponse",41486:"FocalPlaneXResolution",41487:"FocalPlaneYResolution",41488:"FocalPlaneResolutionUnit",41492:"SubjectLocation",41493:"ExposureIndex",41495:"SensingMethod",41728:"FileSource",41729:"SceneType",41730:"CFAPattern",41985:"CustomRendered",41986:"ExposureMode",41987:"WhiteBalance",41988:"DigitalZoomRation",41989:"FocalLengthIn35mmFilm",41990:"SceneCaptureType",41991:"GainControl",41992:"Contrast",41993:"Saturation",41994:"Sharpness",41995:"DeviceSettingDescription",41996:"SubjectDistanceRange",40965:"InteroperabilityIFDPointer",42016:"ImageUniqueID"}),r=t.TiffTags={256:"ImageWidth",257:"ImageHeight",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer",40965:"InteroperabilityIFDPointer",258:"BitsPerSample",259:"Compression",262:"PhotometricInterpretation",274:"Orientation",277:"SamplesPerPixel",284:"PlanarConfiguration",530:"YCbCrSubSampling",531:"YCbCrPositioning",282:"XResolution",283:"YResolution",296:"ResolutionUnit",273:"StripOffsets",278:"RowsPerStrip",279:"StripByteCounts",513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength",301:"TransferFunction",318:"WhitePoint",319:"PrimaryChromaticities",529:"YCbCrCoefficients",532:"ReferenceBlackWhite",306:"DateTime",270:"ImageDescription",271:"Make",272:"Model",305:"Software",315:"Artist",33432:"Copyright"},o=t.GPSTags={0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude",5:"GPSAltitudeRef",6:"GPSAltitude",7:"GPSTimeStamp",8:"GPSSatellites",9:"GPSStatus",10:"GPSMeasureMode",11:"GPSDOP",12:"GPSSpeedRef",13:"GPSSpeed",14:"GPSTrackRef",15:"GPSTrack",16:"GPSImgDirectionRef",17:"GPSImgDirection",18:"GPSMapDatum",19:"GPSDestLatitudeRef",20:"GPSDestLatitude",21:"GPSDestLongitudeRef",22:"GPSDestLongitude",23:"GPSDestBearingRef",24:"GPSDestBearing",25:"GPSDestDistanceRef",26:"GPSDestDistance",27:"GPSProcessingMethod",28:"GPSAreaInformation",29:"GPSDateStamp",30:"GPSDifferential"},i=t.IFD1Tags={256:"ImageWidth",257:"ImageHeight",258:"BitsPerSample",259:"Compression",262:"PhotometricInterpretation",273:"StripOffsets",274:"Orientation",277:"SamplesPerPixel",278:"RowsPerStrip",279:"StripByteCounts",282:"XResolution",283:"YResolution",284:"PlanarConfiguration",296:"ResolutionUnit",513:"JpegIFOffset",514:"JpegIFByteCount",529:"YCbCrCoefficients",530:"YCbCrSubSampling",531:"YCbCrPositioning",532:"ReferenceBlackWhite"},a=t.StringValues={ExposureProgram:{0:"Not defined",1:"Manual",2:"Normal program",3:"Aperture priority",4:"Shutter priority",5:"Creative program",6:"Action program",7:"Portrait mode",8:"Landscape mode"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{0:"Unknown",1:"Daylight",2:"Fluorescent",3:"Tungsten (incandescent light)",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 - 5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},SensingMethod:{1:"Not defined",2:"One-chip color area sensor",3:"Two-chip color area sensor",4:"Three-chip color area sensor",5:"Color sequential area sensor",7:"Trilinear sensor",8:"Color sequential linear sensor"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},SceneType:{1:"Directly photographed"},CustomRendered:{0:"Normal process",1:"Custom process"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},GainControl:{0:"None",1:"Low gain up",2:"High gain up",3:"Low gain down",4:"High gain down"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},SubjectDistanceRange:{0:"Unknown",1:"Macro",2:"Close view",3:"Distant view"},FileSource:{3:"DSC"},Components:{0:"",1:"Y",2:"Cb",3:"Cr",4:"R",5:"G",6:"B"}};function l(t){return t.exifdata}function s(t){var n=new DataView(t);if(255!=n.getUint8(0)||216!=n.getUint8(1))return!1;for(var l=2,s=t.byteLength;lt.byteLength)return{};var a=u(t,e,e+r,i,o);if(a.Compression)switch(a.Compression){case 6:var n,l;a.JpegIFOffset&&a.JpegIFByteCount&&(n=e+a.JpegIFOffset,l=a.JpegIFByteCount,a.blob=new Blob([new Uint8Array(t.buffer,n,l)],{type:"image/jpeg"}));break;case 1:console.log("Thumbnail image format is TIFF, which is not implemented.");break;default:console.log("Unknown thumbnail image format '%s'",a.Compression)}else 2==a.PhotometricInterpretation&&console.log("Thumbnail image format is RGB, which is not implemented.");return a}(p,x,v,c),f}l+=2+n.getUint16(l+2)}}var c={120:"caption",110:"credit",25:"keywords",55:"dateCreated",80:"byline",85:"bylineTitle",122:"captionWriter",105:"headline",116:"copyright",15:"category"};function u(t,e,r,o,i){for(var a,n=t.getUint16(r,!i),l={},s=0;s")+8,o=(r=r.substring(r.indexOf(" - + - + diff --git a/package-lock.json b/package-lock.json index 7fcda3c74..658693384 100644 --- a/package-lock.json +++ b/package-lock.json @@ -86,34 +86,34 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz", + "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==", "dev": true, "dependencies": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/generator": "^7.21.3", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.3", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.3", + "@babel/types": "^7.21.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" }, "engines": { @@ -134,13 +134,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", + "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", "dev": true, "dependencies": { - "@babel/types": "^7.20.5", + "@babel/types": "^7.21.3", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -187,14 +188,15 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.20.0", + "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "engines": { @@ -298,13 +300,13 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dev": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -347,9 +349,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", @@ -357,9 +359,9 @@ "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" }, "engines": { "node": ">=6.9.0" @@ -499,14 +501,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dev": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -527,9 +529,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", + "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1644,33 +1646,33 @@ } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", + "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", + "@babel/generator": "^7.21.3", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/parser": "^7.21.3", + "@babel/types": "^7.21.3", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1679,9 +1681,9 @@ } }, "node_modules/@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", + "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.19.4", @@ -1853,9 +1855,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, "engines": { "node": ">=6.0.0" @@ -1895,19 +1897,19 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "node_modules/@leichtgewicht/ip-codec": { @@ -8638,9 +8640,9 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "bin": { "json5": "lib/cli.js" @@ -9504,6 +9506,15 @@ "get-func-name": "^2.0.0" } }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, "node_modules/make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", @@ -12609,6 +12620,7 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", "dev": true }, "node_modules/stack-trace": { @@ -14597,6 +14609,12 @@ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "node_modules/yargs": { "version": "12.0.5", "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", @@ -14787,31 +14805,31 @@ } }, "@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", "dev": true }, "@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz", + "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==", "dev": true, "requires": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/generator": "^7.21.3", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.3", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.3", + "@babel/types": "^7.21.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" }, "dependencies": { @@ -14824,13 +14842,14 @@ } }, "@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", + "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", "dev": true, "requires": { - "@babel/types": "^7.20.5", + "@babel/types": "^7.21.3", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "dependencies": { @@ -14867,14 +14886,15 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.20.0", + "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "dependencies": { @@ -14949,13 +14969,13 @@ } }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dev": true, "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" } }, "@babel/helper-hoist-variables": { @@ -14986,9 +15006,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", @@ -14996,9 +15016,9 @@ "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" } }, "@babel/helper-optimise-call-expression": { @@ -15099,14 +15119,14 @@ } }, "@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dev": true, "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" } }, "@babel/highlight": { @@ -15121,9 +15141,9 @@ } }, "@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", + "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -15868,38 +15888,38 @@ } }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", + "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", + "@babel/generator": "^7.21.3", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/parser": "^7.21.3", + "@babel/types": "^7.21.3", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", + "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.19.4", @@ -16023,9 +16043,9 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true }, "@jridgewell/set-array": { @@ -16058,19 +16078,19 @@ } }, "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "@leichtgewicht/ip-codec": { @@ -21370,9 +21390,9 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "jsonfile": { @@ -22085,6 +22105,15 @@ "get-func-name": "^2.0.0" } }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, "make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", @@ -26016,6 +26045,12 @@ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "yargs": { "version": "12.0.5", "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", diff --git a/src/edit/DistortableImage.Edit.js b/src/edit/DistortableImage.Edit.js index 678c65b72..67e31ef32 100644 --- a/src/edit/DistortableImage.Edit.js +++ b/src/edit/DistortableImage.Edit.js @@ -3,7 +3,7 @@ L.DistortableImage = L.DistortableImage || {}; // holds the keybindings & toolbar API for an individual image instance L.DistortableImage.Edit = L.Handler.extend({ options: { - opacity: 0.7, + opacity: 0.5, outline: '1px solid red', keymap: L.distortableImage.action_map, }, @@ -14,6 +14,7 @@ L.DistortableImage.Edit = L.Handler.extend({ this._mode = overlay.options.mode; this._transparent = false; this._outlined = false; + this._opacity = options.opacity; L.setOptions(this, options); @@ -32,7 +33,6 @@ L.DistortableImage.Edit = L.Handler.extend({ this._initHandles(); this._appendHandlesandDragable(); - if (overlay.isSelected() && !overlay.options.suppressToolbar) { this._addToolbar(); } @@ -359,6 +359,19 @@ L.DistortableImage.Edit = L.Handler.extend({ this._refresh(); }, + _setOpacities(o) { + const image = this._overlay.getElement(); + this._opacity = o; + if (!this.hasTool(L.OpacitiesAction)) { return; } + + (this._opacity < 1) ? this._transparent = true : this._transparent = false; + + L.DomUtil.setOpacity(image, this._opacity); + image.setAttribute('opacity', this._opacity); + + this._refresh(); + }, + _toggleBorder() { const image = this._overlay.getElement(); diff --git a/src/edit/actions/EditAction.js b/src/edit/actions/EditAction.js index 963f2524f..ed8073575 100644 --- a/src/edit/actions/EditAction.js +++ b/src/edit/actions/EditAction.js @@ -27,6 +27,7 @@ L.EditAction = L.Toolbar2.Action.extend({ const iconOptions = this.options.toolbarIcon; const className = iconOptions.className; const edit = this._overlay.editing; + const style = this.options.toolbarIcon.style; this.toolbar = toolbar; this._icon = L.DomUtil.create('li', '', container); @@ -40,6 +41,7 @@ L.EditAction = L.Toolbar2.Action.extend({ this._link.setAttribute('href', '#'); this._link.setAttribute('title', iconOptions.tooltip); + if (style) { this._link.setAttribute('style', style); }; this._link.setAttribute('role', 'button'); L.DomUtil.addClass(this._link, this.constructor.baseClass); diff --git a/src/edit/actions/OpacitiesAction.js b/src/edit/actions/OpacitiesAction.js new file mode 100644 index 000000000..dbec2cabb --- /dev/null +++ b/src/edit/actions/OpacitiesAction.js @@ -0,0 +1,133 @@ +let opacities = [100, 80, 60, 40, 20, 0]; // Set numeric values from 0 to 100. + +// Add custom CSS scripts and overwrites. Pending for better implementation of CSSStyleSheet in browsers. +const subtoolbarCss = new CSSStyleSheet(); +subtoolbarCss.replaceSync( + `.leaflet-toolbar-icon-vertical { + box-sizing: border-box !important; + display: block !important; + width: 30px !important; + height: 30px !important; + line-height: 30px !important; + padding: 0 !important; + text-align: center !important; + text-decoration: none !important; + background-color: #fff; + border: inset 0.5px lightgray !important; + font-size: 12px !important; + font-weight: bold !important; + color:#0087A8 !important; + float: none !important; + margin: auto !important; + z-index:900 !important; + } + ` +); + +subtoolbarCss.insertRule( + `.leaflet-toolbar-1 li:first-child a { + border-radius: 4px 4px 0px 0px !important; + }` +); +document.adoptedStyleSheets = [subtoolbarCss]; + +opacities = opacities.map((o) => { + (isNaN(o) || o > 100) ? o = 100 : o; + (o < 0) ? o = 0 : o; + + return L.EditAction.extend({ + options: { + toolbarIcon: { + html: o, + tooltip: 'Opacity ' + o +'%', + className: 'leaflet-toolbar-icon-vertical', + style: 'background-color:rgb(' + (100 - o) + '%,' + (100 - o) + '%,' + (100 - o) + '%);', + }, + }, + addHooks() { + this._overlay.editing._setOpacities(o/100); + }, + }); +}); + +L.OpacitiesToolbar2 = L.Toolbar2.extend({ + options: { + className: '', + filter: function() { return true; }, + actions: [], + style: `translate(-1px, -${ ((opacities.length + 1) * 30)}px)`, + }, + + appendToContainer(container) { + let baseClass = this.constructor.baseClass + '-' + this._calculateDepth(); + let className = baseClass + ' ' + this.options.className; + let Action; let action; + let i; let j; let l; let m; + + this._container = container; + this._ul = L.DomUtil.create('ul', className, container); + this._ul.style.transform = ( this.options.style ) ? this.options.style : ''; + + // Ensure that clicks, drags, etc. don't bubble up to the map. + // These are the map events that the L.Draw.Polyline handler listens for. + // Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but + // if only 'mouseup' is silenced, then the map gets stuck in a halfway + // state because it receives a 'mousedown' event and is waiting for the + // corresponding 'mouseup' event. + this._disabledEvents = [ + 'click', 'mousemove', 'dblclick', + 'mousedown', 'mouseup', 'touchstart', + ]; + + for (j = 0, m = this._disabledEvents.length; j < m; j++) { + L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation); + } + + /* Instantiate each toolbar action and add its corresponding toolbar icon. */ + for (i = 0, l = this.options.actions.length; i < l; i++) { + Action = this._getActionConstructor(this.options.actions[i]); + + action = new Action(); + action._createIcon(this, this._ul, this._arguments); + } + }, +}); + + +L.OpacitiesAction = L.EditAction.extend({ + initialize(map, overlay, options) { + const edit = overlay.editing; + const mode = edit._mode; + + options = options || {}; + options.toolbarIcon = { + svg: true, + html: 'opacities', + tooltip: 'Set custom opacity', + className: mode === 'lock' ? 'disabled' : '', + }; + + options.subToolbar = new L.OpacitiesToolbar2({ + actions: opacities, + }); + + L.DistortableImage.action_map.o = mode === 'lock' ? '' : '_setOpacities'; + + L.EditAction.prototype.initialize.call(this, map, overlay, options); + }, + + addHooks() { + const link = this._link; + if (L.DomUtil.hasClass(link, 'subtoolbar_enabled')) { + L.DomUtil.removeClass(link, 'subtoolbar_enabled'); + setTimeout(() => { + this.options.subToolbar._hide(); + }, 100); + } else { + L.DomUtil.addClass(link, 'subtoolbar_enabled'); + }; + + L.IconUtil.toggleXlink(link, 'opacities', 'cancel'); + L.IconUtil.toggleTitle(link, 'Make Image Transparent', 'Cancel'); + }, +}); diff --git a/src/edit/toolbars/DistortableImage.PopupBar.js b/src/edit/toolbars/DistortableImage.PopupBar.js index b99b5438d..070eaa9d2 100644 --- a/src/edit/toolbars/DistortableImage.PopupBar.js +++ b/src/edit/toolbars/DistortableImage.PopupBar.js @@ -51,6 +51,7 @@ L.DistortableImageOverlay.addInitHook(function() { L.FreeRotateAction, L.LockAction, L.OpacityAction, + L.OpacitiesAction, L.BorderAction, L.ExportAction, L.DeleteAction, diff --git a/src/iconsets/ToolbarIconSet.js b/src/iconsets/ToolbarIconSet.js index 343cbc732..83e4bc4fe 100644 --- a/src/iconsets/ToolbarIconSet.js +++ b/src/iconsets/ToolbarIconSet.js @@ -14,6 +14,7 @@ L.ToolbarIconSet = L.IconSet.extend({ '' + '' + '' + + '' + '' + '' + '' + diff --git a/src/iconsets/llagrima.ai b/src/iconsets/llagrima.ai new file mode 100644 index 000000000..1b5b07fdd --- /dev/null +++ b/src/iconsets/llagrima.ai @@ -0,0 +1,399 @@ +%PDF-1.6 % +1 0 obj <>/OCGs[18 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + Adobe Illustrator 25.4 (Windows) + 2022-10-22T05:13:13+02:00 + 2022-10-22T05:13:14+02:00 + 2022-10-22T05:13:14+02:00 + + + + 212 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADUAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FWCfmf+Z9l5Ssja2pW4124WtvbndYlO3qy07fyr3+WZ2j0Zymz9Lq+0e0Y4I0N5n8W XkPkD83tZ0LWZZNXnl1DTdQl9S+VzydHbrLHXv4r0I+jNrqtDGcfTsRydBoe1Z4pnjPFGXP9b6Ss L+y1CyhvbKZbi0uFDwzIaqynOelExNHm9hCcZxEomwVfIs3Yq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FWCfmf8AmfZeUrI2tqVuNduFrb253WJTt6stO38q9/lmdo9Gcps/ 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 + + + + 1 + True + False + + 14.000000 + 18.000000 + Points + + + + Cyan + Magenta + Yellow + Black + + + + + + Grupo de muestras por defecto + 0 + + + + R=6 G=120 B=168 + PROCESS + 100.000000 + RGB + 6 + 120 + 168 + + + + + + + application/pdf + + + llagrima + + + xmp.did:5539dff8-b785-b64d-83d2-ab79bf59d339 + uuid:66a5025e-d329-404f-93fe-0c9f2da6e353 + xmp.did:29f60696-e474-ae48-b3b4-af29e598b11d + proof:pdf + + xmp.iid:29f60696-e474-ae48-b3b4-af29e598b11d + xmp.did:29f60696-e474-ae48-b3b4-af29e598b11d + xmp.did:29f60696-e474-ae48-b3b4-af29e598b11d + + + + + saved + xmp.iid:29f60696-e474-ae48-b3b4-af29e598b11d + 2022-10-22T05:12:56+02:00 + Adobe Illustrator 25.4 (Windows) + / + + + saved + xmp.iid:5539dff8-b785-b64d-83d2-ab79bf59d339 + 2022-10-22T05:13:06+02:00 + Adobe Illustrator 25.4 (Windows) + / + + + + Document + AIRobin + Adobe PDF library 16.00 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 3 0 obj <> endobj 5 0 obj <>/Resources<>/Properties<>/XObject<>>>/Thumb 29 0 R/TrimBox[0.0 0.0 14.0 18.0]/Type/Page>> endobj 20 0 obj <>stream +HRN0+:~^i*TT-p;!ʕ;띝]G6j@,y;awtxb~8l?au ++O1ŊǝqFmblWONqi0JP +r+*;Ěp2skI&rJ- w#l$SU:Džoܼ:'?"j.ZД4 ?jQ[{9ʪ+Y.i$Z8w+i*շ=` +endstream endobj 21 0 obj <> endobj 29 0 obj <>stream +8;Ru>#7*!`!'L +endstream endobj 30 0 obj [/Indexed/DeviceRGB 255 31 0 R] endobj 31 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> +endstream endobj 26 0 obj <>>>/Subtype/Form>>stream +0.024 0.471 0.659 rg +/GS0 gs +q 1 0 0 1 2.1031 7.1455 cm +0 0 m +0.198 -0.978 0.677 -1.886 1.389 -2.605 c +1.393 -2.609 1.397 -2.614 1.401 -2.617 c +2.396 -3.609 3.698 -4.104 5 -4.103 c +5.011 -4.103 l +6.313 -4.099 7.613 -3.6 8.605 -2.605 c +9.339 -1.872 9.798 -0.947 9.99 0 c +h +f +Q + +endstream endobj 27 0 obj <>>>/Subtype/Form>>stream +0.024 0.471 0.659 rg +/GS0 gs +q 1 0 0 1 2 8.154 cm +0 0 m +0.001 -0.341 0.036 -0.679 0.103 -1.008 c +10.093 -1.008 l +10.162 -0.672 10.2 -0.334 10.2 0 c +10.197 1.13 9.801 2.209 9.118 3.095 c +1.084 3.095 l +0.376 2.176 0 1.076 0 0 c +f +Q + +endstream endobj 28 0 obj <>>>/Subtype/Form>>stream +0.024 0.471 0.659 rg +/GS0 gs +q 1 0 0 1 3.0844 11.249 cm +0 0 m +8.034 0 l +7.902 0.171 7.777 0.347 7.624 0.501 c +4.016 4.103 l +0.408 0.501 l +0.252 0.346 0.131 0.17 0 0 c +f +Q + +endstream endobj 34 0 obj <> endobj 25 0 obj <> endobj 33 0 obj <> endobj 32 0 obj <> endobj 18 0 obj <> endobj 35 0 obj [/View/Design] endobj 36 0 obj <>>> endobj 22 0 obj <> endobj 23 0 obj <> endobj 24 0 obj <> endobj 8 0 obj <> endobj 14 0 obj <> endobj 15 0 obj <>stream +%!PS-Adobe-3.0 +%%Creator: Adobe Illustrator(R) 24.0 +%%AI8_CreatorVersion: 25.4.1 +%%For: (Themacboy .....) () +%%Title: (llagrima.svg) +%%CreationDate: 10/22/2022 5:13 AM +%%Canvassize: 16383 +%%BoundingBox: 1 2 14 17 +%%HiResBoundingBox: 1.14999997615814 2.1920086345981 13.049999833107 16.5530971036842 +%%DocumentProcessColors: Cyan Magenta Yellow Black +%AI5_FileFormat 14.0 +%AI12_BuildNumber: 498 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%RGBProcessColor: 0.023529412224889 0.470588237047195 0.658823549747467 (R=6 G=120 B=168) +%%+ 0 0 0 ([Registro]) +%AI3_Cropmarks: 0 0 14 18.0000000000009 +%AI3_TemplateBox: 7.5 8.61000000000058 7.5 8.61000000000058 +%AI3_TileBox: -290.637786865234 -411.97509765625 304.682220458984 429.944885253906 +%AI3_DocumentPreview: None +%AI5_ArtSize: 14400 14400 +%AI5_RulerUnits: 2 +%AI24_LargeCanvasScale: 1 +%AI9_ColorModel: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI17_Begin_Content_if_version_gt:24 4 +%AI10_OpenToVie: -3.62237656226807 16.8687671258258 67.0482495121669 0 8197.14167034691 8192.85371350848 2256 1274 18 0 0 46 121 0 0 0 1 1 0 1 1 0 1 +%AI17_Alternate_Content +%AI9_OpenToView: -3.62237656226807 16.8687671258258 67.0482495121669 2256 1274 18 0 0 46 121 0 0 0 1 1 0 1 1 0 1 +%AI17_End_Versioned_Content +%AI5_OpenViewLayers: 7 +%AI17_Begin_Content_if_version_gt:24 4 +%AI17_Alternate_Content +%AI17_End_Versioned_Content +%%PageOrigin:-290 -411.889999999999 +%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 +%AI9_Flatten: 1 +%AI12_CMSettings: 00.MS +%%EndComments + +endstream endobj 16 0 obj <>stream +%AI24_ZStandard_Data(/X`;:E|8Z~|PYJTx|W1j`8nZnRNTYW+)((-7_'ݺ-Je\V&XGeM\; 6uu[E@4V[UQnj7xx˴qNT۲-r 6X2^V H4lqj>뺤޴uR4aYG'^7dN,cN,2L5U6|-eZܮi2HӚ2HJ GZ@5-cY"-c(2;_;{^s]| =]2,hYe]aDS[ATQv- VO4I,I &=iòIڴiZۚ@ߡ2?PC0go{y.k9P;/IڴNXF;IJOH'ye`&&y3hiX~v_b(~tDQ Y&e&xhua?Xk,'3zcF0DLfRs{p$D_Iͦ o~s$4|S<bx'yhF5GG? I4`\˲!yntg Dz%7QgG{o??Dzo/$3C jp?C#H%h'9yC~!bYp ɰ 0?~GG>яq$r4sDG,ˤ&7Nz#A2$?9$Y&y(K]WeXr,ɲ,,2&7M, o&ii&jSg?O,OQ]jGe_5ukif,3K2uyew~s>f';b9Q~%?Ayy\3G7>mnwyP}R,5IQ?}|k5ef4gL`ƲYX ~7M,&7ͭlf-,,˲,ɒ,r,a `e/y]R%JIbIdI$IH~! IOvܤ&5Ito_PzӗX6C{=k=n}쿃_u=$!;|̱ 67wm[>KMC OwYda=l Ej[Ar[]aEUCĭӒL|K>*{Z7kjy> ҂W5 +M Qʶ +.xE>j;XcUvڃO /W=iiu^ծUvXMXSWIc +~vZWU,XmSXSqj۵m¦u:׍WԩǩIuyhjܪXw@j*JknJ5DSߔE!5UUikTش|hB4 +uz`j5bUb;Ti]zGiW +ǭj%= >.gNIڭ)ajD/0O(ZUv6pu yJB_Ucv$Zo}=Z>0{Anjg]wס}zk{O _~u|Q5&뀔u*Rj%ŭnIjWJ@ j2ª'VUo@)*|QT6=}T՛nH}ok zUɹO$F@]_owu=s}u~!O5Y]TuԄPk]S`֛\ qp^U5.tU< :e >þowF!15ՏJ[QTU +H<]2@$mEUvEI^3nX:, ಬ:ҸUU)GkJ.0ܷjurmòÏg ̽>YskMw9ﯻuz`ճf @umMk\Rծۆe<(*VN)gԸxm]5fK[JYQT6^  u]iSRW azFi~)Ԍۆe[xo XVi׍S- ˴jrQIl(ѱlXb,bak v8S*k /N`1.7ID rG0e|X%"wEpevF?!ƒE8R +jUq_ 7ej +#8":CW2 %ԁi[ZnsZhJ((R/d $~T!k$_#2yji}h2)U3 %UdB:@x8AOrkJߗ(() ^2.O +SdlDv "~%!8K\i[ir@7" HTI)MC!:v$,@ DIJ7,;'bb3F DC\ +x9l@Q~4)rB>Rh^aUo 1 !>z@ LV@H;D8|@Q,p ]57,  (ltK&|LF"ްl>Tǘ1PI騗->얇P 4F%?/$1SibD"o ܓjP)?dSJ\n*j^C5NY'ZuYR_u ~W]ǭ*lz}4˪yC!5܄Ium:I0y3 }cԦ1v@]CacG58M`uZW +*ܷRMrL`}fY+ܼƩ喨ف_5V[v4#+ Ռ)up*uR7:atUR)u_eQ0] 8㔺z-YV-rߋҙHIRlXv[y%rw $!+$a@ D8;9q%6oظ"$#bnIN\/@_#Ǡ1 c{ut Z?FtqHCxXP3~B jaNxyP/Gp3adU0d$/S `R& +-9zcẺxU=)Jn+jizn<px}ޯ +3Z,K yHr"+]2ό ͂eSxRS" J_f\\H9 Fpܑjk%rF%RGM'Bq9^6xFAa<`tJ,F[Y2E3"Q\ 71"70Adwܰ,.."g)0iD/Gx*X2Yr][)ёR%Q(3^ƋB]gKƋ\ x!QKé!{/wpXY"@14B-L. ܦp 8bQk%$#C\07/D>Pޓ}l\m'ݝ 8nXɸvrEI!_>:vvR&{ ?6x[2[DQHș(TB4e[;x{(D.;xeK2 ߂`1X&_XvI/-x艴}-s/r +^ & +^y%YnET8'//]RP(3/rZ8W3Ğl {ò4VnRQu,X {En'xI-JX E.XNC"+&9 +8i SFyMbr/rch V=/ ` Y2k;"irAQ- @4[h4LLF3K[?F}><]1+f.zt*($&#|8ņS x&ɰM4 m=Ɔ1ɕ?m P %DM8\MXaT0a,])ň3G]-iN$Ь!ЅQ_|AIWz lE4nX` J)It'.qXI +Ib O0Iץ%)UGJUR|_B" +E(Ж38L-W^h!IBcJZ MIb2X3_ރ߻w>g:4Ϳzs5?ϻ;;k!|sm~9_y[o0ԛ9w]ۛЇ˹gqο{50 ﶶ{}`JMkw__:w;}/y5:0w9 9;k:\;gu~>tu>kq }Zu7_ 9;{~wYC,{EL\j^k|?{NNk/x{6X>ov]&<DzsiZwZko`:a{w0}?}ï{sƲ}< 3Ϻ첖Qla@L(m8"QXn4HjL-kkY~knPI =͗L6{b Sl ,3x héb5CŮ^d$eaIXT驐ђOű#ꁗ[NkG`|Ys"9 AaRSB9I!4P:hOˍ.\,y~2yP+S"6q ,K(erGewkLefE&$&/=]XHJP~RT hU@ꙓfqA/KAf=4UV/vL/ 2ŅS R V$**P$1m@uyHe +;l;d'% iOXV=hx/rI_Y~JLBNui2NZ]2m& aYF{=2d #Q\IWa%{0:`4˄D_#35hA5 Rn#VJt$m VΗJo6,{%ZNiąHם.0Y8; qJkƈPHAnG9tG\&'c23{Pp-ػ0p ԗ♱$p(zAtۜ#uR(T>77H7,۰lò78$D+Ib!4 % \& @D'4 IkY9P:-8fz<ҚP7̒ \2EN51d r9L%Ed0v P鈱؍ +Ѣ 8^CdrEV9 #i;E@U_E ,h9Pb\r>xFFx]@  n69KG|hU$;LJ."\9. )"]6\R P*5!-M*O.>AI"{U#Z{/`)$!@j mjéIO#r=o;͆eb: `M!<[!f{ym( +%S@ J)y^aI["]H^WsRȹ^Ě'Sk)x*sKXd6(Y :H^7/</v qևqH3,2EnI#x1A"7. 1`*b + ˸ Bl7v\(P(*;/ٯ I|}s: @gC\a%Nʥss0H@6 AH ʄdqR. ƆemXψ C"p`rxOWBꢰJ_fe, L弸/|̗~>ȖP."~߁>D1\Hb26G=ʆe!P,}ΆIbkqEZpFcū߇sTH +1S9: +E*aᶜ/aÄ,υ5a/R:Z3:x.@Mɀ6͕2*PAij"ҙ)81q]wGvTڪWNKpVznC;5a7~yRظ`zť/IwNڀ*b2H^.\sLyE-0ߺ-ߺ)4'FϹFs-Bq7E{>Xy#of&9jv JZ<f[ݕ >w6(4sLtl8Ⱥ7X[(DF(%ltWgП=%+3I&=GM<*wuZ"ΫyDq&.OF QG(fx.|US0DbL]!eIQ?i G@1"0-@(WQwVFQ7yD|6$I5*T/Qbim_OLAѥ{؆6@ Y*ؠ%ېZ NؐJAQ5YZT8Kd|ԁ26A#/W=!7C1u)KZ̽tLYC5 O8'ћC^t0c!0^9~h_l " |B|G8חB44t,"C6.J/+j* 1=5`r8xd +-vQ[3;hV +Gŧ|viMK.Np3ʝQH"]hA]6u8OM[K(UОFqjc\t "l<}_vtWj_TzW'|TBq\=VGq?b#\*&I=:O-SO?NIᶽ\2dX),(qeG$=6'CU~곸Q + `@6= +Fp( $ J0"/T%[V}Kob'*i%C^vnd-[2IXMҵ'&C EQ޴B2 b qXUƹ>M\41풪V^ D. Z-hJ'6n%f*SlAkTӯ vέ&upib UqIkGh 7\8&/̶a5Kz FTL_2KJ^5䎹5 +b`3_s4Պ݃?q!q*P>.Q#tc)'$G^ +ˍIB8}+?R=7U=^ O&͇kÜ$ +4ZQƑ"Wy[#pRc +˕ #+F9GB-{~b>(:VϦF6$q|.! y^5iI. #pʨRDm]1'}Xy/ʢA] }JE Yxņ/zZ \ӕ b`ceBu d$5՝IxzD=9Kȏ-uғ>h- pjL3!j`` +Yxm"1DShi 쉂|p:Wc P*TÔ1$6&Sw"3݊Z8F_ZNB'J( E(9ov?Š֏ ɔ0c~&ܘ;d8Na?$p[X:CaW$v]? *aNڮŵМ`YI  .ה Q!Ij|"ݻ i2`CxW~\Hڰ!.5(R'I ΥA/TWyKO +9;#Tn$DZI \0-7?Tܡu6ϥz:[9ۅڈЦ/ㄨR +i_hRjh~ Da2ئ_Dm᝺"SyMH\S4;Q(νPb @:tzhR}DOH?2@v[ğr1yO _}@z)˸@c5)ދLa ` AjX:4#/^?!uABY2f O9J-)m0+f WC2SM|n`>;K[/H)p~>da߅r-&ذh2v\J>ѿ>=Qٟ/]4ۣˡ3Di$z}hy@BwpKlBkvTUMn^KA.Ơ][L$h(ϐhxT>dh+ E$@,B=DGKL5V6;KAȽ[r*K4 P<(=6$_ \=c1&Ws<&-nϹ¾8rGXPGShAu !=u ٌ_=A<Íۻ HXk{RiA^֛;#8ҭu:6~k`+,N%TpbJ8@Y`"@BnYiuh-ܦ*9(VX +ڌF~cj6/C? :&_ +.!GHQzaM=O]=zN5m ++D1ŤfinnmO]8%'M 9Θ|$~գK_s-1{=ȷZ˂B.X<];ѕ)8Q& l i?}ɢJ7wI,m9_I"]);WE y8A@vT+|FΤ ~LOZ&Z h~ &{?է,[ʅr{_AJl1v)Z?Rko]q'F8F1Ig+f|unvT.C&ٱ;KCΉO*TYyRJf6VيA +|;I9TXzr1]lsP1'LMP}آ"cv] Y? ё'g ʪ9nFWmb Aj_Wys|3gTSY[´ό}Z#8@7L:2hd36~k˧Hi ^ExN'JgvzN]sk'BqiptAG,3'J&x"VtFM\bèB>8⏌OC+UWHcܑRzwj6a7NNXлlt*~zG7# s4LG=h'T•9+Vx6Kc{Iŗ(X9!mJv.2JׅM7ѢV-5p'RX|'ӿ #UHĿ81! +8OY'sIKvi?KʗuP10#ɒ;Yx>m %kg'pU|I)0uHiLh֨P;'6zWC}ý5]~fxĢ&D8CG >4fQZ#Eb ++|r*#v{\w9 숑# XUǿS&+ B8{&8RLEKȬ,hQ +ɱ&EK@B]ڰh}4)yljy\Gaϰ\7& ~W0/ ;*&V(&E*~e<&%E3MELE" +et4 GSy= QqҴI9p &XDCeq(Y(D)rA!.Q$43x"'j%,~O&2o + B65#16&7m ~|+\1ΨfaaFp*m5?V#* +5 +Bl +y`2G[{6 3VUW& 1Yojpy)0?lr%ZWbCAob VW,f(`>uo4p{N?)Wcw4_k{z:l`%H'CӘꌫ 7HPLpd Bv^qe3;蒮FpS7.sIAbŰKlrbxLj&èEry!_. ? +aXl3Ã6 +2=.@D3WlaE/[.u.;/pɌ_" _b< iyEkIb}zNOBR|ԏDr\#lj |yqPsEw0zQW8`BI5w~2D0BASQDJt,=D J&gbl~t!Fqג!'a` +kQvB.G#uvbY^(*9sOD9!a)!Tqӆ(GDbQ61QR+46jB,pT(Z}Ѭ;XY9!2? P6 1x%U! H +7b=bS'jԓrU)i +̅Or=!!޶h"!S=?lP82laȇ SzMC♲ 鋁pgB:LtsjvRB]T Lh`Ak8(z7|s!Ls%wčo&J@4Y .]lԸPq.m-9k; ʆW71&8:\X˾ |(m>dYӡa:etXȕ8ES,kL)Hr+A38lQ| SچʂmXև4uf5ޖ!qV R]rZLcsU]3*kR#%Ѻthtx ķ\+;A.c!լ-hf\Z) +}\N65L0ۧ}-d$F3 AunlΙ_PmQR̭n +(C{m}u[#ؓ>`n4Z(ʂFePU8yYޥ H F^|Dɕ"9GG46+,j5,UUe/iM~4s#}>ǏJS$,+Z~/h`@UDB\FulվZjۨ5" ́! u%L?Fst!b E嶛%P )]v[&CSk<+?p:C-C\RPA")&Zb=k0)oJ?}4L=\7pl#B9ae)w`/N)ޕxYpf!`^{b6e,@Eu<?OImCkjU[8 9[ O  8Jl+R'1]xCi1?.!&x9R{4NCW[ +2C&@Os/EHik(^RKlBr2glq©P}rІfh4PwN>n͎#q~4AP~Q]gd B4A!0GLh`}9Y@+VԎfcg\mޟTu ^!4o:e|[ ԇ)?pKS0i&oPc#ljd +tv71ZAlv܈j!&kGN{E%+o&*m{!}3L\C |" C*6D>AZ:„8,2\Bو 9x\~D}STm ~.i* j:Àt/PwhåG"V۷ȠJܿ2 mY=*;E~I0 SFHM,w=_ (ɓs ZgQTyP~| ^[ %!Z#}eBliBS<] +(Lo+~ sI\-|S83`# +1Ԣsm$O&4-A]Y4h #នa@Mu`J]vj^|D?[yr"rZ/F2a6 9&?N>9 31- .2tQ]j- &;, *iJ!4K <{ޓ$2f'4 mރk_> spqh/vX]@YM\.Uf\"&J|7Jr2\Q+%b(TYߓ.pC +[ +-#N>5l`:tHĕ0֍(4%c5–)AXB J#X"aQ3OQIn|zZ{:PM,WD1h^4՝` =W;,DFrxu}NSў m%V>yM}{L\_95w}SX7?'꫱oi.\z^&g|iP*y3C}v1p} 9_΅:_/\ Y?\#p6!V5 /L^s%'( +HR; +3Y'86_Ɂḁc"w+L %׺Lݹ(ƙa8{.o3%:,j_R!e]F* B#haQO6h`oHR6Bɪ| oINSHDjqk7h/M@ȈmQ  +le‡%XbI||mQjbCpOy>&C?rj`·-GB$@Ұ ccߤѣ|&.< e!9 nwGL@VE7*onf5VY/Dn>ioA6bU'oiN)\ƧyL]vu 1AQ==PI%vS[%1L+}8Yirԃߺ^ow_ΕPE.kœQo7LT7T$Y~ \]wevPΕ[vnBآ9M}:%(! ÎK뗷ΆV,TѰ5`1xC%Y=kjfGF!"\Oֱ9f:yTqh7/:HvI}RZݗ[/UN)UnO@'`( gvG. RU8m_&p8+)qp'tKJ;Yc]ak}_@x,T;P#_ qHkΘpHuF>@qvPꍏz5ǯri΂o$;5RW^gY08>D~ ( Q .]zVP$7Dn8@+ :=сlt̩a>0l QcEv׮6FԠ+&d0)#Ч +aF 嘲fr;DT4gmIH :Ͻ9EoS"y WC֎-[Ht.|d∦q0%p]#~̕6 4 +@ +1ac,@=`GbL6b~z+| LDwZ>P|u@#m<"9+{%xI*2b ]n N/Kȃ@\{P=a-6(ZkЁM(Cà]OjW7b) +oH)ZiM8 NQR_|J7k O'x/iȂ0vJ1crX䴚PEp%~U@x+nzk%nV fO},~w-RMm2pЧp?*.>d^:= 2U')U551ì|Y-cxVGf?VpbPaBm=[YjDAB(='fu*Ԉ$%l \3qWP_4He:y3v*z{-?<:_Ŋ""D}5Os +'^A4xkɀR;!6͐-ӯ:fU24+4ٝXFsf?AŇP%2 +Y>j̄&FߖȺ#^ta.mY4/[XZqyiH RꔎҨ.(T$¤&;&Ж %UX R|lYA\~LƽkbKF +$@.7֗9&,XU8%LI`.`u 7[j ?YLxC_ W``e(A*óy!DQ`x?p1Pg'۱d.Wr5EYMP'`*v7\LY.{?Ł&D@!йGcH5Eń}țzC + {/2\J@vE!z2#^̺&ՠOrkzj\u'.gkf ~]X,hdR?Ym lfd*2JZf NAj;cMZDR4.<_[63ЄM[oҳCUPg|1qEysgU-C\XQi*m{F&-^|L4'R)%*eڵ|F^zÒ_!jD>╸pÝ[h)5af?}[A-y`c|[g䦍L5[w3iG]`WJP)"I8DS6ήgao}h]50Jwfʯէz OeV|CZM?j`9.AѱuYNrZ=SL 980fh/hSORu*!Gʗ7-XSF&=@E{`Un'[/\^ey6ѬЏV)CHֽ!_&t`HWByjnjp֗`VaKՕe ,іΫ[ædՄ /+l8EK!fʚ]vkȃ,-̣1vZ-'.?t%`ڶrt[pju*Sa&@x8dU/ɸH0ՠڤώr$3l& .5&BA+ϳ^6i'u+Ŵ~.߸h"'>;ݤԼZ'LICki|FB!! 2Nt"8TOu'Y'@@#y̠8"h}qe JԊ:?Ǎ th: K.Bߙ9mVxf3G;F΍~cź[w"?bfl@]&E'o6?唗1Y)QpgYJbKe|-nmAQiS"iƈ>OnB 58X^,I;O^W]TF(!Ke:vziXaꃕwi<[6<޳\mB8B4L1^$n+윦`>8 ~G2f|QnX6wB ƙ&׀h h|.-@S$o7do Kh(2|[vFCl  p4]-G@sm0 ,ש'LE>"D<א(Xyi`0Ms]LUdg˾1ZqP+bk9.~li;Y' mC$u1 Z3z!ah-R~}hz%{Gͤ=lMs}&~8"1e6${; )X#KBg)P kPa,~`y7e6M^8KsBmZ~ YᐨDž/u< ?³;e0 +`F;/ݭ!K",G$,+9ڇHHm%[Z_[g"nj ݁Oon,ar>#p#nST,À,Ο6O.NEfnMo2WYG֒,-AJp39ͮNͅO3HM r#Q0k}wCCYք`ӆЫGr8#tI 5[o &+7jlõVA ʀF$tIc`[O)- 9wқ jެ0< +O J%UD8iî_Lvzsץ蛗bQsZb&5(NDXAB8-;ԙKm@& +H_R(؛g:zF4,tț9懶 :VVKϠ8nKl1`Wpl/Fiֵڋȟt՟[~\'vhq>/=sLYUO6Ѐ/ |Y3jtlCI{ kUI%"UlkPZ޿]`)M a\/V;Ɨ/՞-b&~ˢvF + 9w*RLgu0%^IRYK'k!g\M}(󝵾+hk [.2uK=(Rln/&' Q# wc/wۋإ=0 s"ՋJ߷]>^ D^FX:\>cOЋhMmCݱ8P`KQ 9< Rˈ1Yǔ5>ԈAPgiIWYUQZijc^% +/)RT{fH~وiVHmO@Mδh7^m;˴}iY ~dIԚ$тGr1?GwQt1EWV= 䙖 W&]уyi]"aj=DY$#qäJ1XXSAaT&3hE:ڨDմ場}|ʷNG$8FYn/9HqR}$l3VĐ@ EV(:em{o /ў|6A%<ؑ-AqQv6> endobj xref +0 38 +0000000004 65535 f +0000000016 00000 n +0000000147 00000 n +0000020374 00000 n +0000000000 00000 f +0000020425 00000 n +0000000000 00000 f +0000000000 00000 f +0000024054 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000024127 00000 n +0000024268 00000 n +0000025991 00000 n +0000000000 00000 f +0000023518 00000 n +0000053741 00000 n +0000020869 00000 n +0000021207 00000 n +0000023711 00000 n +0000023826 00000 n +0000023939 00000 n +0000023279 00000 n +0000021990 00000 n +0000022452 00000 n +0000022861 00000 n +0000021272 00000 n +0000021428 00000 n +0000021476 00000 n +0000023455 00000 n +0000023392 00000 n +0000023216 00000 n +0000023595 00000 n +0000023626 00000 n +0000053766 00000 n +trailer +<<878FE88CB9DEC14794440AC3A8F563F9>]>> +startxref +53952 +%%EOF diff --git a/src/iconsets/llagrima.svg b/src/iconsets/llagrima.svg new file mode 100644 index 000000000..e869ec836 --- /dev/null +++ b/src/iconsets/llagrima.svg @@ -0,0 +1,21 @@ + + + + + + + + + + diff --git a/test/src/DistortableImageOverlaySpec.js b/test/src/DistortableImageOverlaySpec.js index 3818e3ae9..2710685b6 100644 --- a/test/src/DistortableImageOverlaySpec.js +++ b/test/src/DistortableImageOverlaySpec.js @@ -51,7 +51,7 @@ describe('L.DistortableImageOverlay', function() { const ov2 = L.distortableImageOverlay('/examples/example.jpg', {}).addTo(map); L.DomEvent.on(ov2.getElement(), 'load', function() { - expect(ov2.editing.editActions.length).to.eq(10); + expect(ov2.editing.editActions.length).to.eq(11); done(); }); });