From ece8bbf0a281b27ab5900ebfbe3d29e4219ebae8 Mon Sep 17 00:00:00 2001 From: Ted Blackman Date: Tue, 12 Jan 2021 19:10:11 -0500 Subject: [PATCH 001/338] clay: WIP static mark and cast builds --- pkg/arvo/sys/lull.hoon | 15 ++- pkg/arvo/sys/vane/clay.hoon | 246 +++++++++++++++++++++--------------- 2 files changed, 157 insertions(+), 104 deletions(-) diff --git a/pkg/arvo/sys/lull.hoon b/pkg/arvo/sys/lull.hoon index 92f45dfa2a..236830c5eb 100644 --- a/pkg/arvo/sys/lull.hoon +++ b/pkg/arvo/sys/lull.hoon @@ -945,6 +945,20 @@ :: +$ mars [a=mark b=mark] +$ tube $-(vase vase) + +$ nave + |$ [typ dif] + $_ + |% + ++ bunt *typ + ++ diff |~([old=typ new=typ] *dif) + ++ form *mark + ++ join |~([a=dif b=dif] *(unit (unit dif))) + ++ mash + |~ [a=[ship desk dif] b=[ship desk dif]] + *(unit dif) + ++ pact |~([typ dif] *typ) + ++ vale typ + -- :: $dais: processed mark core :: +$ dais @@ -959,7 +973,6 @@ *(unit vase) ++ pact |~(diff=vase sam) ++ vale |~(noun sam) - ++ volt |~(noun sam) -- :: ++ get-fit diff --git a/pkg/arvo/sys/vane/clay.hoon b/pkg/arvo/sys/vane/clay.hoon index d665c5fb91..c45f0ed5a6 100644 --- a/pkg/arvo/sys/vane/clay.hoon +++ b/pkg/arvo/sys/vane/clay.hoon @@ -119,8 +119,10 @@ :: +$ ford-cache $: vases=(map path [res=vase dez=(set path)]) + naves=(map mark [res=vase dez=(set path)]) marks=(map mark [res=dais dez=(set path)]) - casts=(map mars [res=tube dez=(set path)]) + casts=(map mars [res=vase dez=(set path)]) + tubes=(map mars [res=tube dez=(set path)]) == :: $reef-cache: built system files :: @@ -462,7 +464,9 @@ +$ build $% [%file =path] [%mark =mark] + [%dais =mark] [%cast =mars] + [%tube =mars] [%vale =path] == +$ state @@ -519,13 +523,13 @@ ?< (~(has in deletes) path) ~| %file-not-found^path :_(nub (need (~(get an ankh) path))) - :: +get-mark: build a mark definition + :: +get-nave: build a statically typed mark core :: - ++ get-mark + ++ get-nave |= mak=mark - ^- [dais state] + ^- [nave state] ~| %error-building-mark^mak - ?^ got=(~(get by marks.cache.nub) mak) + ?^ got=(~(get by naves.cache.nub) mak) =? stack.nub ?=(^ stack.nub) stack.nub(i (~(uni in i.stack.nub) dez.u.got)) [res.u.got nub] @@ -533,99 +537,125 @@ ~|(cycle+mark+mak^stack.nub !!) =. cycle.nub (~(put in cycle.nub) mark+mak) =. stack.nub [~ stack.nub] + =; res=[=vase nub=state] + =. nub nub.res + =^ top stack.nub pop-stack + =. naves.cache.nub (~(put by naves.cache.nub) mak [vase.res top]) + [vase.res nub] + =^ cor=vase nub (build-fit %mar mak) + =/ gad=vase (slap cor %limb %grad) + ?@ q.gad + =+ !<(mok=mark gad) + =^ deg=vase nub $(mak mok) + =^ tub=vase nub (get-cast mak mok) + =^ but=vase nub (get-cast mok mak) + :_ nub + ^- vase :: vase of nave + %+ slap + (with-faces deg+deg tub+tub but+but cor+cor nave+!>(nave) ~) + !, *hoon + =/ typ=mold _+<.cor + =/ dif=mold vale:deg + ^- (nave typ dif) + |% + ++ bunt +<.cor + ++ diff + |= [old=typ new=typ] + ^- dif + (diff:deg (tub old) (tub new)) + ++ form form:deg + ++ join join:deg + ++ mash mash:deg + ++ pact + |= [v=typ d=dif] + ^- typ + (but (pact:deg (tub v) d)) + ++ vale noun:grab:cor + -- + :_ nub + =+ !<(fom=mark (slap gad %limb %form)) + ^- vase :: vase of nave + %+ slap + (with-faces cor+cor nave+!>(nave) ~) + !, *hoon + =/ typ=mold _+<.cor + =/ dif=mold diff:grad:cor + ^- (nave typ dif) + |% + ++ bunt +<.cor + ++ diff |=([old=typ new=typ] (diff:~(grad cor old) new)) + ++ form form:grad:cor + ++ join join:grad:cor + ++ mash + |= [a=[=ship =desk =dif] b=[=ship =desk =dif]] + ^- (unit dif) + ?: =(dif.a dif.b) + ~ + `(mash:grad:cor a b) + ++ pact |=([v=typ d=dif] (pact:~(grad cor v) d)) + ++ vale noun:grab:cor + -- + :: +get-mark: build a dynamically typed mark definition + :: + ++ get-mark + |= mak=mark + ^- [dais state] + ~| %error-building-dais^mak + ?^ got=(~(get by marks.cache.nub) mak) + =? stack.nub ?=(^ stack.nub) + stack.nub(i (~(uni in i.stack.nub) dez.u.got)) + [res.u.got nub] + ?: (~(has in cycle.nub) dais+mak) + ~|(cycle+dais+mak^stack.nub !!) + =. cycle.nub (~(put in cycle.nub) dais+mak) + =. stack.nub [~ stack.nub] =; res=[=dais nub=state] =. nub nub.res =^ top stack.nub pop-stack =. marks.cache.nub (~(put by marks.cache.nub) mak [dais.res top]) [dais.res nub] - =^ cor=vase nub (build-fit %mar mak) - =/ gad=vase (slap cor %limb %grad) - ?@ q.gad - =+ !<(mok=mark gad) - =^ deg=dais nub $(mak mok) - =^ tub=tube nub (get-cast mak mok) - =^ but=tube nub (get-cast mok mak) - :_ nub - ^- dais - |_ sam=vase - ++ bunt (slap cor $+6) - ++ diff - |= new=vase - ^- vase - (~(diff deg (tub sam)) (tub new)) - ++ form form:deg - ++ join join:deg - ++ mash mash:deg - ++ pact - |= diff=vase - ^+ sam - (but (~(pact deg (tub sam)) diff)) - ++ vale - |= =noun - ^+ sam - (slam (slap cor !,(*hoon noun:grab)) !>(noun)) - ++ volt - |= =noun - ^+ sam - [p:bunt noun] - -- + =^ nav=vase nub (get-nave mak) :_ nub - =+ !<(fom=mark (slap gad %limb %form)) ^- dais |_ sam=vase - ++ bunt (slap cor $+6) + ++ bunt (slap nav limb/%bunt) ++ diff |= new=vase - ^- vase - %+ slap - (with-faces cor+cor sam+sam new+new ~) - !, *hoon - (diff:~(grad cor sam) new) - ++ form fom + (slam (slap nav limb/%diff) (slop sam new)) + ++ form !<(mark (slap nav limb/%form)) ++ join |= [a=vase b=vase] ^- (unit (unit vase)) - ?: =(q.a q.b) - ~ - =; res `?~(q.res ~ `(slap res !,(*hoon ?~(. !! u)))) - (slam (slap cor !,(*hoon join:grad)) (slop a b)) + =/ res=vase (slam (slap nav limb/%join) (slop a b)) + ?~ q.res ~ + ?~ +.q.res [~ ~] + ``(slap res wing/u/u/~) ++ mash |= [a=[=ship =desk diff=vase] b=[=ship =desk diff=vase]] ^- (unit vase) - ?: =(q.diff.a q.diff.b) + =/ res=vase + %+ slam (slap nav limb/%mash) + %+ slop + :(slop !>(ship.a) !>(desk.a) diff.a) + :(slop !>(ship.b) !>(desk.b) diff.b) + ?~ q.res ~ - :- ~ - %+ slam (slap cor !,(*hoon mash:grad)) - %+ slop - :(slop !>(ship.a) !>(desk.a) diff.a) - :(slop !>(ship.b) !>(desk.b) diff.b) + `(slap res limb/%u) ++ pact |= diff=vase - ^+ sam - %+ slap - (with-faces cor+cor sam+sam diff+diff ~) - !, *hoon - (pact:~(grad cor sam) diff) + (slam (slap nav limb/%pact) (slop sam diff)) ++ vale |= =noun - ^+ sam - (slam (slap cor !,(*hoon noun:grab)) !>(noun)) - ++ volt - |= =noun - ^+ sam - [p:bunt noun] + (slam (slap nav limb/%vale) noun/noun) -- - :: +get-cast: produce a $tube mark conversion gate from .a to .b + :: +get-cast: produce gate to convert mark .a to, statically typed :: ++ get-cast |= [a=mark b=mark] - ^- [tube state] + ^- [vase state] ~| error-building-cast+[a b] ?: =([%mime %hoon] [a b]) - :_ nub - |= sam=vase - =+ !<(=mime sam) - !>(q.q.mime) + :_(nub !>(|=(m=mime q.q.m))) ?^ got=(~(get by casts.cache.nub) [a b]) =? stack.nub ?=(^ stack.nub) stack.nub(i (~(uni in i.stack.nub) dez.u.got)) @@ -633,11 +663,11 @@ ?: (~(has in cycle.nub) cast+[a b]) ~|(cycle+cast+[a b]^stack.nub !!) =. stack.nub [~ stack.nub] - =; res=[=tube nub=state] + =; res=[=vase nub=state] =. nub nub.res =^ top stack.nub pop-stack - =. casts.cache.nub (~(put by casts.cache.nub) [a b] [tube.res top]) - [tube.res nub] + =. casts.cache.nub (~(put by casts.cache.nub) [a b] [vase.res top]) + [vase.res nub] :: try +grow; is there a +grow core with a .b arm? :: =^ old=vase nub (build-fit %mar a) @@ -649,47 +679,55 @@ :: +grow core has .b arm; use that :: :_ nub - ^- tube - |= sam=vase - ^- vase - %+ slap - (with-faces old+old sam+sam ~) - :+ %sgzp !,(*hoon old=old) - :+ %sgzp !,(*hoon sam=sam) - :+ %tsgl [%limb b] - !, *hoon - ~(grow old sam) + %+ slap (with-faces cor+old ~) + ^- hoon + :+ %brts !,(*hoon $=(v bunt:cor)) + :+ %tsgl limb/b + !,(*hoon ~(grow cor v)) :: try direct +grab :: =^ new=vase nub (build-fit %mar b) - =/ rab - %- mule |. - %+ slap new - :+ %tsgl [%limb a] - [%limb %grab] + =/ rab (mule |.((slap new tsgl/[limb/a limb/%grab]))) ?: &(?=(%& -.rab) ?=(^ q.p.rab)) - :_(nub |=(sam=vase ~|([%grab a b] (slam p.rab sam)))) + :_(nub p.rab) :: try +jump :: - =/ jum - %- mule |. - %+ slap old - :+ %tsgl [%limb b] - [%limb %jump] + =/ jum (mule |.((slap old tsgl/[limb/b limb/%jump]))) ?: ?=(%& -.jum) (compose-casts a !<(mark p.jum) b) - :: try indirect +grab - :: ?: ?=(%& -.rab) (compose-casts a !<(mark p.rab) b) ~|(no-cast-from+[a b] !!) :: ++ compose-casts |= [x=mark y=mark z=mark] + ^- [vase state] + =^ uno=vase nub (get-cast x y) + =^ dos=vase nub (get-cast y z) + :_ nub + %+ slam + (with-faces uno+uno dos+dos cork+cork ~) + !,(*hoon (cork uno dos)) + :: +get-tube: produce a $tube mark conversion gate from .a to .b + :: + ++ get-tube + |= [a=mark b=mark] ^- [tube state] - =^ uno=tube nub (get-cast x y) - =^ dos=tube nub (get-cast y z) - :_(nub |=(sam=vase (dos (uno sam)))) + ~| error-building-tube+[a b] + ?^ got=(~(get by tubes.cache.nub) [a b]) + =? stack.nub ?=(^ stack.nub) + stack.nub(i (~(uni in i.stack.nub) dez.u.got)) + [res.u.got nub] + ?: (~(has in cycle.nub) tube+[a b]) + ~|(cycle+tube+[a b]^stack.nub !!) + =. stack.nub [~ stack.nub] + =; res=[=tube nub=state] + =. nub nub.res + =^ top stack.nub pop-stack + =. tubes.cache.nub (~(put by tubes.cache.nub) [a b] [tube.res top]) + [tube.res nub] + =^ gat=vase nub (get-cast a b) + :_(nub |=(v=vase (slap gat v))) :: ++ lobe-to-page |= =lobe @@ -1528,8 +1566,10 @@ |=(c=@tD `@tD`?:(=('/' c) '-' c)) :: convert '/' to '-' :: :* ((invalidate path vase) vases.ford-cache invalid) + ((invalidate mark vase) naves.ford-cache invalid) ((invalidate mark dais) marks.ford-cache invalid) - ((invalidate mars tube) casts.ford-cache invalid) + ((invalidate mars vase) casts.ford-cache invalid) + ((invalidate mars tube) tubes.ford-cache invalid) == :: ++ invalidate @@ -4164,7 +4204,7 @@ dos.rom %- ~(run by dos.rom.ruf) |= =dojo - dojo(fod.dom [~ ~ ~]) + dojo(fod.dom [~ ~ ~ ~ ~]) :: hoy %- ~(run by hoy.ruf) @@ -4173,7 +4213,7 @@ rus %- ~(run by rus.rung) |= =rede - rede(fod.dom [~ ~ ~]) + rede(fod.dom [~ ~ ~ ~ ~]) == == :: From f469dbf8bc83bb0e12b4ae7b242aa25b24290388 Mon Sep 17 00:00:00 2001 From: Ted Blackman Date: Wed, 13 Jan 2021 15:20:58 -0500 Subject: [PATCH 002/338] clay,lull: compiles with static marks --- bin/solid.pill | 4 ++-- pkg/arvo/sys/lull.hoon | 3 ++- pkg/arvo/sys/vane/clay.hoon | 20 ++++++++++---------- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/bin/solid.pill b/bin/solid.pill index 0d3ceab763..af2fc68fa4 100644 --- a/bin/solid.pill +++ b/bin/solid.pill @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c512d0c3da3ce7f0ac25babcbbceba04a9e62975e9d92aec56ab00e1c2fc6224 -size 8618963 +oid sha256:b38b016c4bcb23818328073e2b81fd09522699c9800e0744adbdbc15bb092795 +size 8749007 diff --git a/pkg/arvo/sys/lull.hoon b/pkg/arvo/sys/lull.hoon index 236830c5eb..98bebfa049 100644 --- a/pkg/arvo/sys/lull.hoon +++ b/pkg/arvo/sys/lull.hoon @@ -942,10 +942,11 @@ +$ taut [face=(unit term) pax=term] :: $mars: mark conversion request :: $tube: mark conversion gate + :: $nave: typed mark core :: +$ mars [a=mark b=mark] +$ tube $-(vase vase) - +$ nave + ++ nave |$ [typ dif] $_ |% diff --git a/pkg/arvo/sys/vane/clay.hoon b/pkg/arvo/sys/vane/clay.hoon index c45f0ed5a6..7cf3c4c62b 100644 --- a/pkg/arvo/sys/vane/clay.hoon +++ b/pkg/arvo/sys/vane/clay.hoon @@ -459,7 +459,7 @@ [+<- +<+>-] :: cache.state :: ++ ford - !. + ::!. :: TODO: reinstate => |% +$ build $% [%file =path] @@ -527,7 +527,7 @@ :: ++ get-nave |= mak=mark - ^- [nave state] + ^- [vase state] ~| %error-building-mark^mak ?^ got=(~(get by naves.cache.nub) mak) =? stack.nub ?=(^ stack.nub) @@ -681,7 +681,7 @@ :_ nub %+ slap (with-faces cor+old ~) ^- hoon - :+ %brts !,(*hoon $=(v bunt:cor)) + :+ %brts bcts/[%v like/[bunt/~ ~[cor/~]]] :+ %tsgl limb/b !,(*hoon ~(grow cor v)) :: try direct +grab @@ -705,8 +705,8 @@ =^ uno=vase nub (get-cast x y) =^ dos=vase nub (get-cast y z) :_ nub - %+ slam - (with-faces uno+uno dos+dos cork+cork ~) + %+ slap + (with-faces uno+uno dos+dos cork+!>(cork) ~) !,(*hoon (cork uno dos)) :: +get-tube: produce a $tube mark conversion gate from .a to .b :: @@ -727,7 +727,7 @@ =. tubes.cache.nub (~(put by tubes.cache.nub) [a b] [tube.res top]) [tube.res nub] =^ gat=vase nub (get-cast a b) - :_(nub |=(v=vase (slap gat v))) + :_(nub |=(v=vase (slam gat v))) :: ++ lobe-to-page |= =lobe @@ -751,7 +751,7 @@ ?: =(mak p.page) (page-to-cage page) =^ [mark vax=vase] nub (page-to-cage page) - =^ =tube nub (get-cast p.page mak) + =^ =tube nub (get-tube p.page mak) :_(nub [mak (tube vax)]) :: ++ page-to-cage @@ -772,7 +772,7 @@ =^ cag=cage nub (get-value path) ?: =(mok mak) [cag nub] - =^ =tube nub (get-cast mok mak) + =^ =tube nub (get-tube mok mak) ~| error-running-cast+[path mok mak] :_(nub [mak (tube q.cag)]) :: @@ -3498,12 +3498,12 @@ [~ fod.dom] ?. ?=([@ @ ~] path) [[~ ~] fod.dom] - =/ cached=(unit [=tube *]) (~(get by casts.fod.dom) [i i.t]:path) + =/ cached=(unit [=tube *]) (~(get by tubes.fod.dom) [i i.t]:path) ?^ cached :_(fod.dom [~ ~ %& %tube !>(tube.u.cached)]) =^ =tube fod.dom %- wrap:fusion - (get-cast:(ford:fusion static-ford-args) [i i.t]:path) + (get-tube:(ford:fusion static-ford-args) [i i.t]:path) :_(fod.dom [~ ~ %& %tube !>(tube)]) :: :: Gets the permissions that apply to a particular node. From 6be1ebc41ac70ee7a604a30e1591785bfe288510 Mon Sep 17 00:00:00 2001 From: Ted Blackman Date: Tue, 26 Jan 2021 15:59:36 -0500 Subject: [PATCH 003/338] clay,lull: +test-mar-mime passes --- pkg/arvo/mar/mime.hoon | 4 +-- pkg/arvo/sys/lull.hoon | 3 +- pkg/arvo/sys/vane/clay.hoon | 34 ++++++++++++--------- pkg/arvo/tests/sys/vane/clay.hoon | 51 ++++++++++++++++++++++++------- 4 files changed, 63 insertions(+), 29 deletions(-) diff --git a/pkg/arvo/mar/mime.hoon b/pkg/arvo/mar/mime.hoon index 87e920250b..72737153e5 100644 --- a/pkg/arvo/mar/mime.hoon +++ b/pkg/arvo/mar/mime.hoon @@ -3,7 +3,6 @@ :: /? 310 :: -^| |_ own=mime ++ grow ^? @@ -14,7 +13,7 @@ ++ grab :: convert from ^? |% - +$ noun mime :: clam from %noun + ++ noun mime :: clam from %noun ++ tape |=(a=_"" [/application/x-urb-unknown (as-octt:mimes:html a)]) -- @@ -25,5 +24,6 @@ ++ diff |=(mime +<) ++ pact |=(mime +<) ++ join |=([mime mime] `(unit mime)`~) + ++ mash |=([[ship desk mime] [ship desk mime]] ~|(%mime-mash !!)) -- -- diff --git a/pkg/arvo/sys/lull.hoon b/pkg/arvo/sys/lull.hoon index 98bebfa049..9796356dd2 100644 --- a/pkg/arvo/sys/lull.hoon +++ b/pkg/arvo/sys/lull.hoon @@ -949,6 +949,7 @@ ++ nave |$ [typ dif] $_ + ^? |% ++ bunt *typ ++ diff |~([old=typ new=typ] *dif) @@ -958,7 +959,7 @@ |~ [a=[ship desk dif] b=[ship desk dif]] *(unit dif) ++ pact |~([typ dif] *typ) - ++ vale typ + ++ vale |~(noun *typ) -- :: $dais: processed mark core :: diff --git a/pkg/arvo/sys/vane/clay.hoon b/pkg/arvo/sys/vane/clay.hoon index 7cf3c4c62b..2511940ba9 100644 --- a/pkg/arvo/sys/vane/clay.hoon +++ b/pkg/arvo/sys/vane/clay.hoon @@ -543,7 +543,7 @@ =. naves.cache.nub (~(put by naves.cache.nub) mak [vase.res top]) [vase.res nub] =^ cor=vase nub (build-fit %mar mak) - =/ gad=vase (slap cor %limb %grad) + =/ gad=vase (slap cor limb/%grad) ?@ q.gad =+ !<(mok=mark gad) =^ deg=vase nub $(mak mok) @@ -575,23 +575,27 @@ :_ nub =+ !<(fom=mark (slap gad %limb %form)) ^- vase :: vase of nave - %+ slap - (with-faces cor+cor nave+!>(nave) ~) + %+ slap (slop (with-face cor+cor) bud) !, *hoon - =/ typ=mold _+<.cor - =/ dif=mold diff:grad:cor - ^- (nave typ dif) + =/ typ _+<.cor + =/ dif _*diff:grad:cor + ^- (nave:clay typ dif) |% ++ bunt +<.cor ++ diff |=([old=typ new=typ] (diff:~(grad cor old) new)) ++ form form:grad:cor - ++ join join:grad:cor + ++ join + |= [a=dif b=dif] + ^- (unit (unit dif)) + ?: =(a b) + ~ + `(join:grad:cor a b) ++ mash |= [a=[=ship =desk =dif] b=[=ship =desk =dif]] ^- (unit dif) ?: =(dif.a dif.b) ~ - `(mash:grad:cor a b) + (mash:grad:cor a b) ++ pact |=([v=typ d=dif] (pact:~(grad cor v) d)) ++ vale noun:grab:cor -- @@ -629,7 +633,7 @@ =/ res=vase (slam (slap nav limb/%join) (slop a b)) ?~ q.res ~ ?~ +.q.res [~ ~] - ``(slap res wing/u/u/~) + ``(slap res !,(*hoon ?>(?=([~ ~ *] .) u.u))) ++ mash |= [a=[=ship =desk diff=vase] b=[=ship =desk diff=vase]] ^- (unit vase) @@ -640,7 +644,7 @@ :(slop !>(ship.b) !>(desk.b) diff.b) ?~ q.res ~ - `(slap res limb/%u) + `(slap res !,(*hoon ?>((^ .) u))) ++ pact |= diff=vase (slam (slap nav limb/%pact) (slop sam diff)) @@ -681,7 +685,7 @@ :_ nub %+ slap (with-faces cor+old ~) ^- hoon - :+ %brts bcts/[%v like/[bunt/~ ~[cor/~]]] + :+ %brcl tsgr/[limb/%cor limb/%bunt] :+ %tsgl limb/b !,(*hoon ~(grow cor v)) :: try direct +grab @@ -3453,7 +3457,7 @@ :: ford :: ++ read-a - !. + ::!. TODO reinstate |= [=aeon =path] ^- [(unit (unit (each cage lobe))) ford-cache] ?. =(aeon let.dom) @@ -3475,7 +3479,7 @@ :_(fod.dom [~ ~ %& %vase !>(vase)]) :: ++ read-b - !. + ::!. TODO reinstate |= [=aeon =path] ^- [(unit (unit (each cage lobe))) ford-cache] ?. =(aeon let.dom) @@ -3491,7 +3495,7 @@ :_(fod.dom [~ ~ %& %dais !>(dais)]) :: ++ read-c - !. + ::!. TODO reinstate |= [=aeon =path] ^- [(unit (unit (each cage lobe))) ford-cache] ?. =(aeon let.dom) @@ -3849,7 +3853,7 @@ [~ fod] :: virtualize to catch and produce deterministic failures :: - !. + ::!. TODO reinstate =- ?:(?=(%& -<) p.- ((slog p.-) [[~ ~] fod])) %- mule |. ?- care.mun diff --git a/pkg/arvo/tests/sys/vane/clay.hoon b/pkg/arvo/tests/sys/vane/clay.hoon index 376b7466e4..5b5b4a7514 100644 --- a/pkg/arvo/tests/sys/vane/clay.hoon +++ b/pkg/arvo/tests/sys/vane/clay.hoon @@ -1,9 +1,10 @@ /+ *test /= clay-raw /sys/vane/clay -/* hello-gen %hoon /gen/hello/hoon -/* strandio-lib %hoon /lib/strandio/hoon -/* strand-lib %hoon /lib/strand/hoon -/* spider-sur %hoon /sur/spider/hoon +/* gen-hello %hoon /gen/hello/hoon +/* lib-strandio %hoon /lib/strandio/hoon +/* lib-strand %hoon /lib/strand/hoon +/* sur-spider %hoon /sur/spider/hoon +/* mar-mime %hoon /mar/mime/hoon :: !: =, format @@ -89,7 +90,35 @@ %- expect-fail |. (parse-pile:(ford):fusion /sur/foo/hoon "[") :: -++ test-hello-gen ^- tang +++ test-mar-mime ^- tang + =/ =ankh:clay + :- fil=~ + %- ~(gas by *(map @tas ankh:clay)) + :~ :+ %mar fil=~ + %- ~(gas by *(map @tas ankh:clay)) + :~ :+ %hoon fil=`[*lobe:clay hoon+!>(mar-mime)] dir=~ + == == + =/ ford + %: ford:fusion + bud + ankh + deletes=~ + changes=(my [/mar/mime/hoon &+hoon+mar-mime]~) + file-store=~ + *ford-cache:fusion + == + =/ [res=vase nub=state:ford:fusion] (get-nave:ford %mime) + ;: weld + %+ expect-eq + !>(*mime) + (slap res limb/%bunt) + :: + %+ expect-eq + !> (~(gas in *(set path)) /mar/mime/hoon ~) + !> dez:(~(got by vases.cache.nub) /mar/mime/hoon) + == +:: +++ test-gen-hello ^- tang =/ =ankh:clay :- fil=~ %- ~(gas by *(map @tas ankh:clay)) @@ -97,14 +126,14 @@ %- ~(gas by *(map @tas ankh:clay)) :~ :+ %hello fil=~ %- ~(gas by *(map @tas ankh:clay)) - :~ :+ %hoon fil=`[*lobe:clay hoon+!>(hello-gen)] dir=~ + :~ :+ %hoon fil=`[*lobe:clay hoon+!>(gen-hello)] dir=~ == == == =/ ford %: ford:fusion bud ankh deletes=~ - changes=(my [/gen/hello/hoon &+hoon+hello-gen]~) + changes=(my [/gen/hello/hoon &+hoon+gen-hello]~) file-store=~ *ford-cache:fusion == @@ -119,7 +148,7 @@ !> dez:(~(got by vases.cache.nub) /gen/hello/hoon) == :: -++ test-strandio-lib ^- tang +++ test-lib-strandio ^- tang =/ =ankh:clay :- fil=~ %- ~(gas by *(map @tas ankh:clay)) @@ -127,19 +156,19 @@ %- ~(gas by *(map @tas ankh:clay)) :~ :+ %strandio fil=~ %- ~(gas by *(map @tas ankh:clay)) - :~ :+ %hoon fil=`[*lobe:clay hoon+!>(strandio-lib)] dir=~ + :~ :+ %hoon fil=`[*lobe:clay hoon+!>(lib-strandio)] dir=~ == :: :+ %strand fil=~ %- ~(gas by *(map @tas ankh:clay)) - :~ :+ %hoon fil=`[*lobe:clay hoon+!>(strand-lib)] dir=~ + :~ :+ %hoon fil=`[*lobe:clay hoon+!>(lib-strand)] dir=~ == == :: :+ %sur fil=~ %- ~(gas by *(map @tas ankh:clay)) :~ :+ %spider fil=~ %- ~(gas by *(map @tas ankh:clay)) - :~ :+ %hoon fil=`[*lobe:clay hoon+!>(spider-sur)] dir=~ + :~ :+ %hoon fil=`[*lobe:clay hoon+!>(sur-spider)] dir=~ == == == =/ ford %: ford:fusion From ce9f1eb3dac411d89ae24ebda2a261509258e610 Mon Sep 17 00:00:00 2001 From: Ted Blackman Date: Tue, 26 Jan 2021 20:43:23 -0500 Subject: [PATCH 004/338] clay: fix +grow in mark casting --- pkg/arvo/mar/html.hoon | 1 - pkg/arvo/sys/vane/clay.hoon | 2 +- pkg/arvo/tests/sys/vane/clay.hoon | 30 ++++++++++++++++++++++-------- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/pkg/arvo/mar/html.hoon b/pkg/arvo/mar/html.hoon index 4e161fae16..203d75f612 100644 --- a/pkg/arvo/mar/html.hoon +++ b/pkg/arvo/mar/html.hoon @@ -6,7 +6,6 @@ :::: compute :: =, html -^| |_ htm=@t ++ grow :: convert to ^? diff --git a/pkg/arvo/sys/vane/clay.hoon b/pkg/arvo/sys/vane/clay.hoon index 2511940ba9..bebcb7e0a9 100644 --- a/pkg/arvo/sys/vane/clay.hoon +++ b/pkg/arvo/sys/vane/clay.hoon @@ -685,7 +685,7 @@ :_ nub %+ slap (with-faces cor+old ~) ^- hoon - :+ %brcl tsgr/[limb/%cor limb/%bunt] + :+ %brcl !,(*hoon v=+<.cor) :+ %tsgl limb/b !,(*hoon ~(grow cor v)) :: try direct +grab diff --git a/pkg/arvo/tests/sys/vane/clay.hoon b/pkg/arvo/tests/sys/vane/clay.hoon index 5b5b4a7514..6d5289cec6 100644 --- a/pkg/arvo/tests/sys/vane/clay.hoon +++ b/pkg/arvo/tests/sys/vane/clay.hoon @@ -5,6 +5,7 @@ /* lib-strand %hoon /lib/strand/hoon /* sur-spider %hoon /sur/spider/hoon /* mar-mime %hoon /mar/mime/hoon +/* mar-html %hoon /mar/html/hoon :: !: =, format @@ -91,17 +92,10 @@ |. (parse-pile:(ford):fusion /sur/foo/hoon "[") :: ++ test-mar-mime ^- tang - =/ =ankh:clay - :- fil=~ - %- ~(gas by *(map @tas ankh:clay)) - :~ :+ %mar fil=~ - %- ~(gas by *(map @tas ankh:clay)) - :~ :+ %hoon fil=`[*lobe:clay hoon+!>(mar-mime)] dir=~ - == == =/ ford %: ford:fusion bud - ankh + *ankh:clay deletes=~ changes=(my [/mar/mime/hoon &+hoon+mar-mime]~) file-store=~ @@ -118,6 +112,26 @@ !> dez:(~(got by vases.cache.nub) /mar/mime/hoon) == :: +++ test-cast-html-mime ^- tang + =/ changes + %- my + :~ [/mar/mime/hoon &+hoon+mar-mime] + [/mar/html/hoon &+hoon+mar-html] + == + =/ ford + %: ford:fusion + bud + *ankh:clay + deletes=~ + changes + file-store=~ + *ford-cache:fusion + == + =/ [res=vase nub=state:ford:fusion] (get-cast:ford %html %mime) + %+ expect-eq + (slam res !>('')) + !> `mime`[/text/html 13 ''] +:: ++ test-gen-hello ^- tang =/ =ankh:clay :- fil=~ From ca1585c841080776b22228cfec75c53eea9b1ea6 Mon Sep 17 00:00:00 2001 From: Ted Blackman Date: Tue, 26 Jan 2021 22:51:52 -0500 Subject: [PATCH 005/338] clay: static clay boots --- bin/solid.pill | 4 ++-- pkg/arvo/mar/mime.hoon | 5 ++++- pkg/arvo/sys/vane/clay.hoon | 7 +++---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/bin/solid.pill b/bin/solid.pill index af2fc68fa4..d86bb9efd4 100644 --- a/bin/solid.pill +++ b/bin/solid.pill @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b38b016c4bcb23818328073e2b81fd09522699c9800e0744adbdbc15bb092795 -size 8749007 +oid sha256:fd51d827ed2bd4823a87caa953ce9a508d6a390442246198b093b0c39fa4e5ed +size 8763109 diff --git a/pkg/arvo/mar/mime.hoon b/pkg/arvo/mar/mime.hoon index 72737153e5..83b4daeb5e 100644 --- a/pkg/arvo/mar/mime.hoon +++ b/pkg/arvo/mar/mime.hoon @@ -24,6 +24,9 @@ ++ diff |=(mime +<) ++ pact |=(mime +<) ++ join |=([mime mime] `(unit mime)`~) - ++ mash |=([[ship desk mime] [ship desk mime]] ~|(%mime-mash !!)) + ++ mash + |= [[ship desk mime] [ship desk mime]] + ^- mime + ~|(%mime-mash !!) -- -- diff --git a/pkg/arvo/sys/vane/clay.hoon b/pkg/arvo/sys/vane/clay.hoon index bebcb7e0a9..c69e6af08a 100644 --- a/pkg/arvo/sys/vane/clay.hoon +++ b/pkg/arvo/sys/vane/clay.hoon @@ -554,8 +554,8 @@ %+ slap (with-faces deg+deg tub+tub but+but cor+cor nave+!>(nave) ~) !, *hoon - =/ typ=mold _+<.cor - =/ dif=mold vale:deg + =/ typ _+<.cor + =/ dif vale:deg ^- (nave typ dif) |% ++ bunt +<.cor @@ -573,7 +573,6 @@ ++ vale noun:grab:cor -- :_ nub - =+ !<(fom=mark (slap gad %limb %form)) ^- vase :: vase of nave %+ slap (slop (with-face cor+cor) bud) !, *hoon @@ -595,7 +594,7 @@ ^- (unit dif) ?: =(dif.a dif.b) ~ - (mash:grad:cor a b) + `(mash:grad:cor a b) ++ pact |=([v=typ d=dif] (pact:~(grad cor v) d)) ++ vale noun:grab:cor -- From 41ebbcc82f04b932ad4a99e90a23602684953861 Mon Sep 17 00:00:00 2001 From: Tyler Brown Cifu Shuster Date: Tue, 26 Jan 2021 21:45:18 -0800 Subject: [PATCH 006/338] added NPM packages --- pkg/npm/README.md | 1 + pkg/npm/api/.eslintrc.js | 3 + pkg/npm/api/contacts/index.d.ts | 85 + pkg/npm/api/contacts/index.ts | 83 + pkg/npm/api/graph/index.d.ts | 47 + pkg/npm/api/graph/index.ts | 364 ++ pkg/npm/api/groups/index.d.ts | 177 + pkg/npm/api/groups/index.ts | 108 + pkg/npm/api/hark/index.d.ts | 78 + pkg/npm/api/hark/index.ts | 0 pkg/npm/api/index.d.ts | 67 + pkg/npm/api/index.js | 5 + pkg/npm/api/invite/index.d.ts | 85 + pkg/npm/api/invite/index.ts | 28 + pkg/npm/api/lib/BigIntOrderedMap.ts | 233 + pkg/npm/api/lib/util.ts | 211 + pkg/npm/api/metadata/index.d.ts | 55 + pkg/npm/api/metadata/index.ts | 55 + pkg/npm/api/package-lock.json | 31 + pkg/npm/api/package.json | 18 + pkg/npm/api/tsconfig.json | 27 + pkg/npm/eslint-config/index.js | 186 + pkg/npm/eslint-config/package-lock.json | 5 + pkg/npm/eslint-config/package.json | 14 + pkg/npm/http-api/.github/workflows/main.yml | 42 + pkg/npm/http-api/.gitignore | 0 pkg/npm/http-api/.vscode/settings.json | 5 + pkg/npm/http-api/LICENSE | 21 + pkg/npm/http-api/README.md | 21 + pkg/npm/http-api/example/browser.js | 17 + pkg/npm/http-api/example/index.html | 98 + pkg/npm/http-api/example/node.js | 17 + pkg/npm/http-api/index.js | 2 + pkg/npm/http-api/package-lock.json | 5591 +++++++++++++++++++ pkg/npm/http-api/package.json | 64 + pkg/npm/http-api/src/app/base.ts | 40 + pkg/npm/http-api/src/example/browser.js | 3 + pkg/npm/http-api/src/example/node.js | 14 + pkg/npm/http-api/src/index.ts | 456 ++ pkg/npm/http-api/src/types/index.d.ts | 45 + pkg/npm/http-api/src/utils.ts | 82 + pkg/npm/http-api/test/default.test.ts | 8 + pkg/npm/http-api/tsconfig-cjs.json | 7 + pkg/npm/http-api/tsconfig.json | 18 + pkg/npm/http-api/webpack.prod.js | 109 + 45 files changed, 8626 insertions(+) create mode 100644 pkg/npm/README.md create mode 100644 pkg/npm/api/.eslintrc.js create mode 100644 pkg/npm/api/contacts/index.d.ts create mode 100644 pkg/npm/api/contacts/index.ts create mode 100644 pkg/npm/api/graph/index.d.ts create mode 100644 pkg/npm/api/graph/index.ts create mode 100644 pkg/npm/api/groups/index.d.ts create mode 100644 pkg/npm/api/groups/index.ts create mode 100644 pkg/npm/api/hark/index.d.ts create mode 100644 pkg/npm/api/hark/index.ts create mode 100644 pkg/npm/api/index.d.ts create mode 100644 pkg/npm/api/index.js create mode 100644 pkg/npm/api/invite/index.d.ts create mode 100644 pkg/npm/api/invite/index.ts create mode 100644 pkg/npm/api/lib/BigIntOrderedMap.ts create mode 100644 pkg/npm/api/lib/util.ts create mode 100644 pkg/npm/api/metadata/index.d.ts create mode 100644 pkg/npm/api/metadata/index.ts create mode 100644 pkg/npm/api/package-lock.json create mode 100644 pkg/npm/api/package.json create mode 100644 pkg/npm/api/tsconfig.json create mode 100644 pkg/npm/eslint-config/index.js create mode 100644 pkg/npm/eslint-config/package-lock.json create mode 100644 pkg/npm/eslint-config/package.json create mode 100644 pkg/npm/http-api/.github/workflows/main.yml create mode 100644 pkg/npm/http-api/.gitignore create mode 100644 pkg/npm/http-api/.vscode/settings.json create mode 100644 pkg/npm/http-api/LICENSE create mode 100644 pkg/npm/http-api/README.md create mode 100644 pkg/npm/http-api/example/browser.js create mode 100644 pkg/npm/http-api/example/index.html create mode 100644 pkg/npm/http-api/example/node.js create mode 100644 pkg/npm/http-api/index.js create mode 100644 pkg/npm/http-api/package-lock.json create mode 100644 pkg/npm/http-api/package.json create mode 100644 pkg/npm/http-api/src/app/base.ts create mode 100644 pkg/npm/http-api/src/example/browser.js create mode 100644 pkg/npm/http-api/src/example/node.js create mode 100644 pkg/npm/http-api/src/index.ts create mode 100644 pkg/npm/http-api/src/types/index.d.ts create mode 100644 pkg/npm/http-api/src/utils.ts create mode 100644 pkg/npm/http-api/test/default.test.ts create mode 100644 pkg/npm/http-api/tsconfig-cjs.json create mode 100644 pkg/npm/http-api/tsconfig.json create mode 100644 pkg/npm/http-api/webpack.prod.js diff --git a/pkg/npm/README.md b/pkg/npm/README.md new file mode 100644 index 0000000000..ba1f6d01a1 --- /dev/null +++ b/pkg/npm/README.md @@ -0,0 +1 @@ +Each one of the folders in this directory is published at `@urbit/{folder name}` \ No newline at end of file diff --git a/pkg/npm/api/.eslintrc.js b/pkg/npm/api/.eslintrc.js new file mode 100644 index 0000000000..fba1ccabcc --- /dev/null +++ b/pkg/npm/api/.eslintrc.js @@ -0,0 +1,3 @@ +module.exports = { + extends: "@urbit" +}; \ No newline at end of file diff --git a/pkg/npm/api/contacts/index.d.ts b/pkg/npm/api/contacts/index.d.ts new file mode 100644 index 0000000000..d29331be83 --- /dev/null +++ b/pkg/npm/api/contacts/index.d.ts @@ -0,0 +1,85 @@ +import { Path, Patp } from ".."; + +export type ContactUpdate = + | ContactUpdateCreate + | ContactUpdateDelete + | ContactUpdateAdd + | ContactUpdateRemove + | ContactUpdateEdit + | ContactUpdateInitial + | ContactUpdateContacts; + +interface ContactUpdateCreate { + create: Path; +} + +interface ContactUpdateDelete { + delete: Path; +} + +interface ContactUpdateAdd { + add: { + path: Path; + ship: Patp; + contact: Contact; + }; +} + +interface ContactUpdateRemove { + remove: { + path: Path; + ship: Patp; + }; +} + +interface ContactUpdateEdit { + edit: { + path: Path; + ship: Patp; + "edit-field": ContactEdit; + }; +} + +interface ContactUpdateInitial { + initial: Rolodex; +} + +interface ContactUpdateContacts { + contacts: { + path: Path; + contacts: Contacts; + }; +} + +// + +type ContactAvatar = ContactAvatarUrl | ContactAvatarOcts; + +export type Rolodex = { + [p in Path]: Contacts; +}; + +export type Contacts = { + [p in Patp]: Contact; +}; + +interface ContactAvatarUrl { + url: string; +} + +interface ContactAvatarOcts { + octs: string; +} +export interface Contact { + nickname: string; + email: string; + phone: string; + website: string; + notes: string; + color: string; + avatar: string | null; +} + +export type ContactEdit = { + [k in keyof Contact]: Contact[k]; +}; diff --git a/pkg/npm/api/contacts/index.ts b/pkg/npm/api/contacts/index.ts new file mode 100644 index 0000000000..f952fffaac --- /dev/null +++ b/pkg/npm/api/contacts/index.ts @@ -0,0 +1,83 @@ +import { Enc, Path, Patp, Poke } from ".."; +import { Contact, ContactEdit, ContactUpdateCreate, ContactUpdateEdit, ContactUpdateRemove } from "./index.d"; +import { GroupPolicy, Resource } from "../groups/index.d" + +export const viewAction = (data: T): Poke => ({ + app: 'contact-view', + mark: 'json', + json: data +}); + +export const hookAction = (data: T): Poke => ({ + app: 'contact-hook', + mark: 'contact-action', + json: data +}); + +export const create = ( + name: string, + policy: Enc, + title: string, + description: string +): Poke => viewAction({ // TODO which type is correct? + create: { + name, + policy, + title, + description + } +}); + +export const share = ( + recipient: Patp, + path: Patp, + ship: Patp, + contact: Contact +): Poke => viewAction({ // TODO type + share: { + recipient, + path, + ship, + contact + } +}); + +export const remove = ( + path: Path, + ship: Patp +): Poke => viewAction({ + remove: { + path, + ship + } +}); + +export const edit = ( + path: Path, + ship: Patp, + editField: ContactEdit +): Poke => hookAction({ + edit: { + path, + ship, + 'edit-field': editField + } +}); + +export const invite = ( + resource: Resource, + ship: Patp, + text: string = '' +): Poke => viewAction({ // TODO type + invite: { + resource, + ship, + text + } +}); + +export const join = ( + resource: Resource +): Poke => viewAction({ // TODO type + join: resource +}); \ No newline at end of file diff --git a/pkg/npm/api/graph/index.d.ts b/pkg/npm/api/graph/index.d.ts new file mode 100644 index 0000000000..17abee3cb4 --- /dev/null +++ b/pkg/npm/api/graph/index.d.ts @@ -0,0 +1,47 @@ +import { Patp } from ".."; +import BigIntOrderedMap from "../lib/BigIntOrderedMap"; + +export interface TextContent { + text: string; +} +export interface UrlContent { + url: string; +} +export interface CodeContent { + code: { + expresssion: string; + output: string | undefined; + } +} + +export interface ReferenceContent { + uid: string; +} +export interface MentionContent { + mention: string; +} +export type Content = + | TextContent + | UrlContent + | CodeContent + | ReferenceContent + | MentionContent; + +export interface Post { + author: Patp; + contents: Content[]; + hash: string | null; + index: string; + pending?: boolean; + signatures: string[]; + "time-sent": number; +} + +export interface GraphNode { + children: Graph; + post: Post; +} + +export type Graph = BigIntOrderedMap; + +export type Graphs = { [rid: string]: Graph }; diff --git a/pkg/npm/api/graph/index.ts b/pkg/npm/api/graph/index.ts new file mode 100644 index 0000000000..cbadbb3f6b --- /dev/null +++ b/pkg/npm/api/graph/index.ts @@ -0,0 +1,364 @@ +import _ from 'lodash'; +import { PatpNoSig, Patp, Poke, Thread, Path, Enc } from '..'; +import { Content, GraphNode, Post } from './index.d'; +import { deSig, unixToDa } from '../lib/util'; +import { makeResource, resourceFromPath } from '../groups/index'; +import { GroupPolicy } from '../groups'; + +export const createBlankNodeWithChildPost = ( + ship: PatpNoSig, + parentIndex: string = '', + childIndex: string = '', + contents: Content[] +): GraphNode => { + const date = unixToDa(Date.now()).toString(); + const nodeIndex = parentIndex + '/' + date; + + const childGraph = {}; + childGraph[childIndex] = { + post: { + author: `~${ship}`, + index: nodeIndex + '/' + childIndex, + 'time-sent': Date.now(), + contents, + hash: null, + signatures: [] + }, + children: null + }; + + return { + post: { + author: `~${ship}`, + index: nodeIndex, + 'time-sent': Date.now(), + contents: [], + hash: null, + signatures: [] + }, + children: childGraph + }; +}; + +function markPending(nodes: any) { + _.forEach(nodes, node => { + node.post.author = deSig(node.post.author); + node.post.pending = true; + markPending(node.children || {}); + }); +} + +export const createPost = ( + ship: PatpNoSig, + contents: Content[], + parentIndex: string = '', + childIndex:string = 'DATE_PLACEHOLDER' +): Post => { + if (childIndex === 'DATE_PLACEHOLDER') { + childIndex = unixToDa(Date.now()).toString(); + } + return { + author: `~${ship}`, + index: parentIndex + '/' + childIndex, + 'time-sent': Date.now(), + contents, + hash: null, + signatures: [] + }; +}; + +function moduleToMark(mod: string): string | undefined { + if(mod === 'link') { + return 'graph-validator-link'; + } + if(mod === 'publish') { + return 'graph-validator-publish'; + } + if(mod === 'chat') { + return 'graph-validator-chat'; + } + return undefined; +} + +export const storeAction = (data: T): Poke => ({ + app: 'graph-store', + mark: 'graph-update', + json: data +}); + +export const viewAction = (threadName: string, action: T): Thread => ({ + inputMark: 'graph-view-action', + outputMark: 'json', + threadName, + body: action +}); + +export const hookAction = (data: T): Poke => ({ + app: 'graph-push-hook', + mark: 'graph-update', + json: data +}); + + +export const createManagedGraph = ( + ship: PatpNoSig, + name: string, + title: string, + description: string, + group: Path, + mod: string +): Thread => { + const associated = { group: resourceFromPath(group) }; + const resource = makeResource(`~${ship}`, name); + + return viewAction('graph-create', { + create: { + resource, + title, + description, + associated, + module: mod, + mark: moduleToMark(mod) + } + }); +} + +export const createUnmanagedGraph = ( + ship: PatpNoSig, + name: string, + title: string, + description: string, + policy: Enc, + mod: string +): Thread => { + const resource = makeResource(`~${ship}`, name); + + return viewAction('graph-create', { + create: { + resource, + title, + description, + associated: { policy }, + module: mod, + mark: moduleToMark(mod) + } + }); +} + +export const joinGraph = ( + ship: Patp, + name: string +): Thread => { + const resource = makeResource(ship, name); + return viewAction('graph-join', { + join: { + resource, + ship, + } + }); +} + +export const deleteGraph = ( + ship: PatpNoSig, + name: string +): Thread => { + const resource = makeResource(`~${ship}`, name); + return viewAction('graph-delete', { + "delete": { + resource + } + }); +} + +export const leaveGraph = ( + ship: Patp, + name: string +): Thread => { + const resource = makeResource(ship, name); + return viewAction('graph-leave', { + "leave": { + resource + } + }); +} + +export const groupifyGraph = ( + ship: Patp, + name: string, + toPath?: string +): Thread => { + const resource = makeResource(ship, name); + const to = toPath && resourceFromPath(toPath); + + return viewAction('graph-groupify', { + groupify: { + resource, + to + } + }); +} + +export const evalCord = ( + cord: string +): Thread => { + return ({ + inputMark: 'graph-view-action', + outputMark: 'tang', + threadName: 'graph-eval', + body: { + eval: cord + } + }); +} + +export const addGraph = ( + ship: Patp, + name: string, + graph: any, + mark: any +): Poke => { + return storeAction({ + 'add-graph': { + resource: { ship, name }, + graph, + mark + } + }); +} + +export const addPost = ( + ship: Patp, + name: string, + post: Post +) => { + let nodes = {}; + nodes[post.index] = { + post, + children: null + }; + return addNodes(ship, name, nodes); +} + +export const addNode = ( + ship: Patp, + name: string, + node: GraphNode +) => { + let nodes = {}; + nodes[node.post.index] = node; + + return this.addNodes(ship, name, nodes); +} + +export const addNodes = ( + ship: Patp, + name: string, + nodes: Object +): Poke => { + const action = { + 'add-nodes': { + resource: { ship, name }, + nodes + } + }; + + markPending(action['add-nodes'].nodes); + action['add-nodes'].resource.ship = action['add-nodes'].resource.ship.slice(1); + // this.store.handleEvent({ data: { 'graph-update': action } });// TODO address this.store + return hookAction(action); +} + +export const removeNodes = ( + ship: Patp, + name: string, + indices: string[] +): Poke => { + return hookAction({ + 'remove-nodes': { + resource: { ship, name }, + indices + } + }); +} + +// TODO these abominations +// getKeys() { +// return this.scry('graph-store', '/keys') +// .then((keys) => { +// this.store.handleEvent({ +// data: keys +// }); +// }); +// } + +// getTags() { +// return this.scry('graph-store', '/tags') +// .then((tags) => { +// this.store.handleEvent({ +// data: tags +// }); +// }); +// } + +// getTagQueries() { +// return this.scry('graph-store', '/tag-queries') +// .then((tagQueries) => { +// this.store.handleEvent({ +// data: tagQueries +// }); +// }); +// } + +// getGraph(ship: string, resource: string) { +// return this.scry('graph-store', `/graph/${ship}/${resource}`) +// .then((graph) => { +// this.store.handleEvent({ +// data: graph +// }); +// }); +// } + +// async getNewest(ship: string, resource: string, count: number, index = '') { +// const data = await this.scry('graph-store', `/newest/${ship}/${resource}/${count}${index}`); +// this.store.handleEvent({ data }); +// } + +// async getOlderSiblings(ship: string, resource: string, count: number, index = '') { +// const idx = index.split('/').map(decToUd).join('/'); +// const data = await this.scry('graph-store', +// `/node-siblings/older/${ship}/${resource}/${count}${idx}` +// ); +// this.store.handleEvent({ data }); +// } + +// async getYoungerSiblings(ship: string, resource: string, count: number, index = '') { +// const idx = index.split('/').map(decToUd).join('/'); +// const data = await this.scry('graph-store', +// `/node-siblings/younger/${ship}/${resource}/${count}${idx}` +// ); +// this.store.handleEvent({ data }); +// } + + +// getGraphSubset(ship: string, resource: string, start: string, end: string) { +// return this.scry( +// 'graph-store', +// `/graph-subset/${ship}/${resource}/${end}/${start}` +// ).then((subset) => { +// this.store.handleEvent({ +// data: subset +// }); +// }); +// } + +// getNode(ship: string, resource: string, index: string) { +// const idx = index.split('/').map(numToUd).join('/'); +// return this.scry( +// 'graph-store', +// `/node/${ship}/${resource}${idx}` +// ).then((node) => { +// this.store.handleEvent({ +// data: node +// }); +// }); +// } \ No newline at end of file diff --git a/pkg/npm/api/groups/index.d.ts b/pkg/npm/api/groups/index.d.ts new file mode 100644 index 0000000000..f4c0486dea --- /dev/null +++ b/pkg/npm/api/groups/index.d.ts @@ -0,0 +1,177 @@ +import { PatpNoSig, Path, Jug, ShipRank, Enc } from '..'; + +export interface RoleTag { + tag: 'admin' | 'moderator' | 'janitor'; +} + +export interface AppTag { + app: string; + tag: string; +} + +export type Tag = AppTag | RoleTag; + +export interface InvitePolicy { + invite: { + pending: Set; + }; +} + +export interface OpenPolicy { + open: { + banned: Set; + banRanks: Set; + }; +} + +export interface Resource { + name: string; + ship: PatpNoSig; // TODO different declaration than in metadata? +} + +export type OpenPolicyDiff = + | AllowRanksDiff + | BanRanksDiff + | AllowShipsDiff + | BanShipsDiff; + +export interface AllowRanksDiff { + allowRanks: ShipRank[]; +} + +export interface BanRanksDiff { + banRanks: ShipRank[]; +} + +export interface AllowShipsDiff { + allowShips: PatpNoSig[]; +} + +export interface BanShipsDiff { + banShips: PatpNoSig[]; +} + +export type InvitePolicyDiff = AddInvitesDiff | RemoveInvitesDiff; + +export interface AddInvitesDiff { + addInvites: PatpNoSig[]; +} + +export interface RemoveInvitesDiff { + removeInvites: PatpNoSig[]; +} + +export interface ReplacePolicyDiff { + replace: GroupPolicy; +} + +export type GroupPolicyDiff = + | { open: OpenPolicyDiff } + | { invite: InvitePolicyDiff } + | ReplacePolicyDiff; + +export type GroupPolicy = OpenPolicy | InvitePolicy; + +export interface TaggedShips { + [tag: string]: Set; +} + +export interface Tags { + role: TaggedShips; + [app: string]: TaggedShips; +} + +export interface Group { + members: Set; + tags: Tags; + policy: GroupPolicy; + hidden: boolean; +} + +export type Groups = { + [p in Path]: Group; +}; + +export interface GroupUpdateInitial { + initial: Enc; +} + +export interface GroupUpdateAddGroup { + addGroup: { + resource: Resource; + policy: Enc; + hidden: boolean; + }; +} + +export interface GroupUpdateAddMembers { + addMembers: { + ships: PatpNoSig[]; + resource: Resource; + }; +} + +export interface GroupUpdateRemoveMembers { + removeMembers: { + ships: PatpNoSig[]; + resource: Resource; + }; +} + +export interface GroupUpdateAddTag { + addTag: { + tag: Tag; + resource: Resource; + ships: PatpNoSig[]; + }; +} + +export interface GroupUpdateRemoveTag { + removeTag: { + tag: Tag; + resource: Resource; + ships: PatpNoSig[]; + }; +} + +export interface GroupUpdateChangePolicy { + changePolicy: { resource: Resource; diff: GroupPolicyDiff }; +} + +export interface GroupUpdateRemoveGroup { + removeGroup: { + resource: Resource; + }; +} + +export interface GroupUpdateExpose { + expose: { + resource: Resource; + }; +} + +export interface GroupUpdateInitialGroup { + initialGroup: { + resource: Resource; + group: Enc; + }; +} + +export type GroupUpdate = + | GroupUpdateInitial + | GroupUpdateAddGroup + | GroupUpdateAddMembers + | GroupUpdateRemoveMembers + | GroupUpdateAddTag + | GroupUpdateRemoveTag + | GroupUpdateChangePolicy + | GroupUpdateRemoveGroup + | GroupUpdateExpose + | GroupUpdateInitialGroup; + +export type GroupAction = Omit; + +export const groupBunts = { + group: (): Group => ({ members: new Set(), tags: { role: {} }, hidden: false, policy: groupBunts.policy() }), + policy: (): GroupPolicy => ({ open: { banned: new Set(), banRanks: new Set() } }) +}; diff --git a/pkg/npm/api/groups/index.ts b/pkg/npm/api/groups/index.ts new file mode 100644 index 0000000000..03ea4e2894 --- /dev/null +++ b/pkg/npm/api/groups/index.ts @@ -0,0 +1,108 @@ +import { Enc, Path, Patp, PatpNoSig, Poke } from ".."; +import { + Group, + GroupAction, + GroupPolicyDiff, + GroupUpdateAddMembers, + GroupUpdateAddTag, + GroupUpdateChangePolicy, + GroupUpdateRemoveGroup, + GroupUpdateRemoveMembers, + GroupUpdateRemoveTag, + Resource, + Tag +} from "./index.d"; + +export const proxyAction = (data: T): Poke => ({ + app: 'group-push-hook', + mark: 'group-update', + json: data +}); + +export const storeAction = (data: T): Poke => ({ + app: 'group-store', + mark: 'group-update', + json: data +}); + +export const remove = ( + resource: Resource, + ships: PatpNoSig[] +): Poke => proxyAction({ + removeMembers: { + resource, + ships + } +}); + +export const addTag = ( + resource: Resource, + tag: Tag, + ships: Patp[] +): Poke => proxyAction({ + addTag: { + resource, + tag, + ships + } +}); + +export const removeTag = ( + tag: Tag, + resource: Resource, + ships: PatpNoSig[] +): Poke => proxyAction({ + removeTag: { + tag, + resource, + ships + } +}); + +export const add = ( + resource: Resource, + ships: PatpNoSig[] +): Poke => proxyAction({ + addMembers: { + resource, + ships + } +}); + +export const removeGroup = ( + resource: Resource +): Poke => storeAction({ + removeGroup: { + resource + } +}); + +export const changePolicy = ( + resource: Resource, + diff: GroupPolicyDiff +): Poke => proxyAction({ + changePolicy: { + resource, + diff + } +}); + +const roleTags = ['janitor', 'moderator', 'admin']; +// TODO make this type better? + +export function roleForShip(group: Group, ship: PatpNoSig): string | undefined { + return roleTags.reduce((currRole, role) => { + const roleShips = group?.tags?.role?.[role]; + return roleShips && roleShips.has(ship) ? role : currRole; + }, undefined as string | undefined); +} + +export function resourceFromPath(path: Path): Resource { + const [, , ship, name] = path.split('/'); + return { ship, name } +} + +export function makeResource(ship: string, name:string) { + return { ship, name }; +} + diff --git a/pkg/npm/api/hark/index.d.ts b/pkg/npm/api/hark/index.d.ts new file mode 100644 index 0000000000..7759d9bae7 --- /dev/null +++ b/pkg/npm/api/hark/index.d.ts @@ -0,0 +1,78 @@ +import { Content, Post } from "../graph/index.d"; +import { GroupUpdate } from "../groups/index.d"; +import BigIntOrderedMap from "../lib/BigIntOrderedMap"; + +export type GraphNotifDescription = "link" | "comment" | "note" | "mention"; + +export interface UnreadStats { + unreads: Set | number; + notifications: number; + last: number; +} + +export interface GraphNotifIndex { + graph: string; + group: string; + description: GraphNotifDescription; + module: string; + index: string; +} + +export interface GroupNotifIndex { + group: string; + description: string; +} + +export interface ChatNotifIndex { + chat: string; + mention: boolean; +} + +export type NotifIndex = + | { graph: GraphNotifIndex } + | { group: GroupNotifIndex } + | { chat: ChatNotifIndex }; + +export type GraphNotificationContents = Post[]; + +export type GroupNotificationContents = GroupUpdate[]; + +export type ChatNotificationContents = Content[]; + +export type NotificationContents = + | { graph: GraphNotificationContents } + | { group: GroupNotificationContents } + | { chat: ChatNotificationContents }; + +export interface Notification { + read: boolean; + time: number; + contents: NotificationContents; +} + +export interface IndexedNotification { + index: NotifIndex; + notification: Notification; +} + +export type Timebox = IndexedNotification[]; + +export type Notifications = BigIntOrderedMap; + +export interface NotificationGraphConfig { + watchOnSelf: boolean; + mentions: boolean; + watching: WatchedIndex[] +} + +export interface Unreads { + chat: Record; + graph: Record>; + group: Record; +} + +interface WatchedIndex { + graph: string; + index: string; +} +export type GroupNotificationsConfig = string[]; diff --git a/pkg/npm/api/hark/index.ts b/pkg/npm/api/hark/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pkg/npm/api/index.d.ts b/pkg/npm/api/index.d.ts new file mode 100644 index 0000000000..d92065375a --- /dev/null +++ b/pkg/npm/api/index.d.ts @@ -0,0 +1,67 @@ +/** + * Martian embassy + */ + +// an urbit style path rendered as string +export type Path = string; + +// patp including leading sig +export type Patp = string; + +// patp excluding leading sig +export type PatpNoSig = string; + +// @uvH encoded string +export type Serial = string; + +// jug from hoon +export type Jug = Map>; + +// name of app +export type AppName = 'chat' | 'link' | 'contacts' | 'publish' | 'graph'; + +export function getTagFromFrond(frond: O): keyof O { + const tags = Object.keys(frond) as Array; + const tag = tags[0]; + if(!tag) { + throw new Error("bad frond"); + } + return tag; +} + +export type ShipRank = 'czar' | 'king' | 'duke' | 'earl' | 'pawn'; + +export type Action = 'poke' | 'subscribe' | 'ack' | 'unsubscribe' | 'delete'; + + +export type SetElement = S extends Set<(infer T)> ? T : never; +export type MapKey = M extends Map<(infer K), any> ? K : never; +export type MapValue = M extends Map ? V : never; + +/** + * Turns sets into arrays and maps into objects so we can send them over the wire + */ +export type Enc = + S extends Set ? + Enc>[] : + S extends Map ? + { [s: string]: Enc> } : + S extends object ? + { [K in keyof S]: Enc } : + S; + +export type Mark = string; + +export interface Poke { + ship?: string; // This should be handled by the http library, but is part of the spec + app: string; + mark: Mark; + json: Action; +} + +export interface Thread { + inputMark: string; + outputMark: string; + threadName: string; + body: Action; +} \ No newline at end of file diff --git a/pkg/npm/api/index.js b/pkg/npm/api/index.js new file mode 100644 index 0000000000..b8ddcbc8a2 --- /dev/null +++ b/pkg/npm/api/index.js @@ -0,0 +1,5 @@ +import BigIntOrderedMap from './lib/BigIntOrderedMap'; + +export { + BigIntOrderedMap +}; \ No newline at end of file diff --git a/pkg/npm/api/invite/index.d.ts b/pkg/npm/api/invite/index.d.ts new file mode 100644 index 0000000000..91b986aa5b --- /dev/null +++ b/pkg/npm/api/invite/index.d.ts @@ -0,0 +1,85 @@ +import { Serial, PatpNoSig, Path } from '..'; + +export type InviteUpdate = + InviteUpdateInitial +| InviteUpdateCreate +| InviteUpdateDelete +| InviteUpdateInvite +| InviteUpdateAccepted +| InviteUpdateDecline; + +export interface InviteUpdateInitial { + initial: Invites; +} + +export interface InviteUpdateCreate { + create: { + path: Path; + }; +} + +export interface InviteUpdateDelete { + delete: { + path: Path; + }; +} + +export interface InviteUpdateInvite { + invite: { + path: Path; + uid: Serial; + invite: Invite; + }; +} + +export interface InviteUpdateAccepted { + accepted: { + path: Path; + uid: Serial; + }; +} + +export interface InviteUpdateDecline { + decline: { + path: Path; + uid: Serial; + }; +} + +export type InviteAction = + InviteActionAccept +| InviteActionDecline; + +export interface InviteActionAccept { + accept: { + term: string, + uid: Serial + } +} + +export interface InviteActionDecline { + decline: { + term: string, + uid: Serial + } +} + + +// actual datastructures + + +export type Invites = { + [p in Path]: AppInvites; +}; + +export type AppInvites = { + [s in Serial]: Invite; +}; + +export interface Invite { + app: string; + path: Path; + recipient: PatpNoSig; + ship: PatpNoSig; + text: string; +} diff --git a/pkg/npm/api/invite/index.ts b/pkg/npm/api/invite/index.ts new file mode 100644 index 0000000000..4960073842 --- /dev/null +++ b/pkg/npm/api/invite/index.ts @@ -0,0 +1,28 @@ +import { InviteAction, InviteActionAccept, InviteActionDecline } from "./index.d"; +import { Poke, Serial } from ".."; + +export const action = (data: T): Poke => ({ + app: 'invite-store', + mark: 'invite-action', + json: data +}); + +export const accept = ( + app: string, + uid: Serial +): Poke => action({ + accept: { + term: app, + uid + } +}); + +export const decline = ( + app: string, + uid: Serial +): Poke => action({ + decline: { + term: app, + uid + } +}); \ No newline at end of file diff --git a/pkg/npm/api/lib/BigIntOrderedMap.ts b/pkg/npm/api/lib/BigIntOrderedMap.ts new file mode 100644 index 0000000000..e13ee45da3 --- /dev/null +++ b/pkg/npm/api/lib/BigIntOrderedMap.ts @@ -0,0 +1,233 @@ +import { BigInteger } from "big-integer"; + +interface NonemptyNode { + n: [BigInteger, V]; + l: MapNode; + r: MapNode; +} + +type MapNode = NonemptyNode | null; + +/** + * An implementation of ordered maps for JS + * Plagiarised wholesale from sys/zuse + */ +export default class BigIntOrderedMap implements Iterable<[BigInteger, V]> { + private root: MapNode = null; + size: number = 0; + + constructor(initial: [BigInteger, V][] = []) { + initial.forEach(([key, val]) => { + this.set(key, val); + }); + } + + /** + * Retrieve an value for a key + */ + get(key: BigInteger): V | null { + const inner = (node: MapNode) => { + if (!node) { + return node; + } + const [k, v] = node.n; + if (key.eq(k)) { + return v; + } + if (key.gt(k)) { + return inner(node.l); + } else { + return inner(node.r); + } + }; + + return inner(this.root); + } + + /** + * Put an item by a key + */ + set(key: BigInteger, value: V): void { + + const inner = (node: MapNode) => { + if (!node) { + return { + n: [key, value], + l: null, + r: null, + }; + } + const [k] = node.n; + if (key.eq(k)) { + this.size--; + return { + ...node, + n: [k, value], + }; + } + if (key.gt(k)) { + const l = inner(node.l); + if (!l) { + throw new Error("invariant violation"); + } + return { + ...node, + l, + }; + } + const r = inner(node.r); + if (!r) { + throw new Error("invariant violation"); + } + + return { ...node, r }; + }; + this.size++; + this.root = inner(this.root); + } + + /** + * Remove all entries + */ + clear() { + this.root = null; + } + + /** + * Predicate testing if map contains key + */ + has(key: BigInteger): boolean { + const inner = (node: MapNode) => { + if (!node) { + return false; + } + const [k] = node.n; + + if (k.eq(key)) { + return true; + } + if (key.gt(k)) { + return inner(node.l); + } + return inner(node.r); + }; + return inner(this.root); + } + + /** + * Remove value associated with key, returning whether that key + * existed in the first place + */ + delete(key: BigInteger) { + const inner = (node: MapNode): [boolean, MapNode] => { + if (!node) { + return [false, null]; + } + const [k] = node.n; + if (k.eq(key)) { + return [true, this.nip(node)]; + } + if (key.gt(k)) { + const [bool, l] = inner(node.l); + return [ + bool, + { + ...node, + l, + }, + ]; + } + + const [bool, r] = inner(node.r); + return [ + bool, + { + ...node, + r, + }, + ]; + }; + const [ret, newRoot] = inner(this.root); + if(ret) { + this.size--; + } + this.root = newRoot; + return ret; + } + + private nip(nod: NonemptyNode): MapNode { + const inner = (node: NonemptyNode) => { + if (!node.l) { + return node.r; + } + if (!node.r) { + return node.l; + } + return { + ...node.l, + r: inner(node.r), + }; + }; + return inner(nod); + } + + peekLargest(): [BigInteger, V] | undefined { + const inner = (node: MapNode) => { + if(!node) { + return undefined; + } + if(node.l) { + return inner(node.l); + } + return node.n; + } + return inner(this.root); + } + + peekSmallest(): [BigInteger, V] | undefined { + const inner = (node: MapNode) => { + if(!node) { + return undefined; + } + if(node.r) { + return inner(node.r); + } + return node.n; + } + return inner(this.root); + } + + keys(): BigInteger[] { + const list = Array.from(this); + return list.map(([key]) => key); + } + + forEach(f: (value: V, key: BigInteger) => void) { + const list = Array.from(this); + return list.forEach(([k,v]) => f(v,k)); + } + + [Symbol.iterator](): IterableIterator<[BigInteger, V]> { + let result: [BigInteger, V][] = []; + const inner = (node: MapNode) => { + if (!node) { + return; + } + inner(node.l); + result.push(node.n); + inner(node.r); + }; + inner(this.root); + + let idx = 0; + return { + [Symbol.iterator]: this[Symbol.iterator], + next: (): IteratorResult<[BigInteger, V]> => { + if (idx < result.length) { + return { value: result[idx++], done: false }; + } + return { done: true, value: null }; + }, + }; + } +} diff --git a/pkg/npm/api/lib/util.ts b/pkg/npm/api/lib/util.ts new file mode 100644 index 0000000000..2a6ba82261 --- /dev/null +++ b/pkg/npm/api/lib/util.ts @@ -0,0 +1,211 @@ +import _ from "lodash"; +import f from "lodash/fp"; +import bigInt, { BigInteger } from "big-integer"; +import { Resource } from "../groups/index.d"; + +const DA_UNIX_EPOCH = bigInt("170141184475152167957503069145530368000"); // `@ud` ~1970.1.1 + +const DA_SECOND = bigInt("18446744073709551616"); // `@ud` ~s1 + +/** + * Returns true if an app uses a graph backend + * + * @param {string} app The name of the app + * + * @return {boolean} Whether or not it uses a graph backend + */ +export function appIsGraph(app: string): boolean { + return app === 'publish' || app == 'link'; +} + +/** + * Given a bigint representing an urbit date, returns a unix timestamp. + * + * @param {BigInteger} da The urbit date + * + * @return {number} The unix timestamp + */ +export function daToUnix(da: BigInteger): number { + // ported from +time:enjs:format in hoon.hoon + const offset = DA_SECOND.divide(bigInt(2000)); + const epochAdjusted = offset.add(da.subtract(DA_UNIX_EPOCH)); + + return Math.round( + epochAdjusted.multiply(bigInt(1000)).divide(DA_SECOND).toJSNumber() + ); +} + +/** + * Given a unix timestamp, returns a bigint representing an urbit date + * + * @param {number} unix The unix timestamp + * + * @return {BigInteger} The urbit date + */ +export function unixToDa(unix: number): BigInteger { + const timeSinceEpoch = bigInt(unix).multiply(DA_SECOND).divide(bigInt(1000)); + return DA_UNIX_EPOCH.add(timeSinceEpoch); +} + + +export function makePatDa(patda: string): BigInteger { + return bigInt(udToDec(patda)); +} + +export function udToDec(ud: string): string { + return ud.replace(/\./g, ""); +} + +export function decToUd(str: string): string { + return _.trimStart( + f.flow( + f.split(""), + f.reverse, + f.chunk(3), + f.map(f.flow(f.reverse, f.join(""))), + f.reverse, + f.join(".") + )(str), + "0." + ); +} + +export function resourceAsPath(resource: Resource): string { + const { name, ship } = resource; + return `/ship/~${ship}/${name}`; +} + +export function uuid(): string { + let str = "0v"; + str += Math.ceil(Math.random() * 8) + "."; + for (let i = 0; i < 5; i++) { + let _str = Math.ceil(Math.random() * 10000000).toString(32); + _str = ("00000" + _str).substr(-5, 5); + str += _str + "."; + } + + return str.slice(0, -1); +} + +/* + Goes from: + ~2018.7.17..23.15.09..5be5 // urbit @da + To: + (javascript Date object) +*/ +export function daToDate(st: string): Date { + const dub = function (n: string) { + return parseInt(n) < 10 ? "0" + parseInt(n) : n.toString(); + }; + const da = st.split(".."); + const bigEnd = da[0].split("."); + const lilEnd = da[1].split("."); + const ds = `${bigEnd[0].slice(1)}-${dub(bigEnd[1])}-${dub(bigEnd[2])}T${dub( + lilEnd[0] + )}:${dub(lilEnd[1])}:${dub(lilEnd[2])}Z`; + return new Date(ds); +} + +/* + Goes from: + (javascript Date object) + To: + ~2018.7.17..23.15.09..5be5 // urbit @da +*/ + +export function dateToDa(d: Date, mil: boolean = false): string { + const fil = function (n: number) { + return n >= 10 ? n : "0" + n; + }; + return ( + `~${d.getUTCFullYear()}.` + + `${d.getUTCMonth() + 1}.` + + `${fil(d.getUTCDate())}..` + + `${fil(d.getUTCHours())}.` + + `${fil(d.getUTCMinutes())}.` + + `${fil(d.getUTCSeconds())}` + + `${mil ? "..0000" : ""}` + ); +} + +export function deSig(ship: string): string | null { + if (!ship) { + return null; + } + return ship.replace("~", ""); +} + +// trim patps to match dojo, chat-cli +export function cite(ship: string): string { + let patp = ship, + shortened = ""; + if (patp === null || patp === "") { + return null; + } + if (patp.startsWith("~")) { + patp = patp.substr(1); + } + // comet + if (patp.length === 56) { + shortened = "~" + patp.slice(0, 6) + "_" + patp.slice(50, 56); + return shortened; + } + // moon + if (patp.length === 27) { + shortened = "~" + patp.slice(14, 20) + "^" + patp.slice(21, 27); + return shortened; + } + return `~${patp}`; +} + +// encode the string into @ta-safe format, using logic from +wood. +// for example, 'some Chars!' becomes '~.some.~43.hars~21.' +// +export function stringToTa(str: string): string { + let out = ""; + for (let i = 0; i < str.length; i++) { + const char = str[i]; + let add = ""; + switch (char) { + case " ": + add = "."; + break; + case ".": + add = "~."; + break; + case "~": + add = "~~"; + break; + default: + const charCode = str.charCodeAt(i); + if ( + (charCode >= 97 && charCode <= 122) || // a-z + (charCode >= 48 && charCode <= 57) || // 0-9 + char === "-" + ) { + add = char; + } else { + // TODO behavior for unicode doesn't match +wood's, + // but we can probably get away with that for now. + add = "~" + charCode.toString(16) + "."; + } + } + out = out + add; + } + return "~." + out; +} + + +/** + * Formats a numbers as a `@ud` inserting dot where needed + */ +export function numToUd(num: number): string { + return f.flow( + f.split(''), + f.reverse, + f.chunk(3), + f.reverse, + f.map(s => s.join('')), + f.join('.') + )(num.toString()) +} \ No newline at end of file diff --git a/pkg/npm/api/metadata/index.d.ts b/pkg/npm/api/metadata/index.d.ts new file mode 100644 index 0000000000..7fccfb979e --- /dev/null +++ b/pkg/npm/api/metadata/index.d.ts @@ -0,0 +1,55 @@ +import { AppName, Path, Patp } from '..'; + + +export type MetadataUpdate = + MetadataUpdateInitial +| MetadataUpdateAdd +| MetadataUpdateUpdate +| MetadataUpdateRemove; + +export interface MetadataUpdateInitial { + associations: ResourceAssociations; +} + +export type ResourceAssociations = { + [p in Path]: Association; +} + +export type MetadataUpdateAdd = { + add: Association; +} + +export type MetadataUpdateUpdate = { + update: Association; +} + +export type MetadataUpdateRemove = { + remove: Resource & { + 'group-path': Path; + } +} + +export type Associations = Record; + +export type AppAssociations = { + [p in Path]: Association; +} + +export interface Resource { + 'app-path': Path; + 'app-name': AppName; +} + +export type Association = Resource & { + 'group-path': Path; + metadata: Metadata; +}; + +export interface Metadata { + color: string; + creator: Patp; + 'date-created': string; + description: string; + title: string; + module: string; +} diff --git a/pkg/npm/api/metadata/index.ts b/pkg/npm/api/metadata/index.ts new file mode 100644 index 0000000000..126c48e0cc --- /dev/null +++ b/pkg/npm/api/metadata/index.ts @@ -0,0 +1,55 @@ +import { AppName, Path, PatpNoSig, Poke } from ".."; +import { Association, Metadata, MetadataUpdateAdd, MetadataUpdateUpdate } from './index.d'; + +export const action = (data: T): Poke => ({ + app: 'metadata-hook', + mark: 'metadata-action', + json: data +}); + +export const add = ( + ship: PatpNoSig, + appName: AppName, + appPath: Path, + groupPath: Path, + title: string, + description: string, + dateCreated: string, + color: string, + moduleName: string +): Poke => { + const creator = `~${ship}`; + return action({ + add: { + 'group-path': groupPath, + resource: { + 'app-path': appPath, + 'app-name': appName + }, + metadata: { + title, + description, + color, + 'date-created': dateCreated, + creator, + 'module': moduleName + } + } + }); +} + +export const update = ( + association: Association, + newMetadata: Partial +): Poke => { + return action({ + add: { + 'group-path': association['group-path'], + resource: { + 'app-path': association['app-path'], + 'app-name': association['app-name'], + }, + metadata: {...association.metadata, ...newMetadata } + } + }); +} \ No newline at end of file diff --git a/pkg/npm/api/package-lock.json b/pkg/npm/api/package-lock.json new file mode 100644 index 0000000000..e4855e4ecb --- /dev/null +++ b/pkg/npm/api/package-lock.json @@ -0,0 +1,31 @@ +{ + "name": "@urbit/api", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/runtime": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } + } +} diff --git a/pkg/npm/api/package.json b/pkg/npm/api/package.json new file mode 100644 index 0000000000..368c1d2e5e --- /dev/null +++ b/pkg/npm/api/package.json @@ -0,0 +1,18 @@ +{ + "name": "@urbit/api", + "version": "1.0.0", + "description": "", + "main": "index.js", + "types": "index.d.ts", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Tyler Brown Cifu Shuster", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@urbit/eslint-config": "^1.0.0", + "big-integer": "^1.6.48", + "lodash": "^4.17.20" + } +} diff --git a/pkg/npm/api/tsconfig.json b/pkg/npm/api/tsconfig.json new file mode 100644 index 0000000000..ca67462754 --- /dev/null +++ b/pkg/npm/api/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "noFallthroughCasesInSwitch": true, + "noUnusedParameters": false, + "noImplicitReturns": true, + "moduleResolution": "node", + "esModuleInterop": true, + "noUnusedLocals": false, + "noImplicitAny": false, + "noEmit": true, + "target": "es2015", + "module": "es2015", + "strict": true, + "jsx": "react", + "baseUrl": ".", + "paths": { + "~/*": ["src/*"] + } + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "node_modules", + ] +} diff --git a/pkg/npm/eslint-config/index.js b/pkg/npm/eslint-config/index.js new file mode 100644 index 0000000000..0f63724ca8 --- /dev/null +++ b/pkg/npm/eslint-config/index.js @@ -0,0 +1,186 @@ +const env = { + "browser": true, + "es6": true, + "node": true +}; + +const rules = { + "array-bracket-spacing": ["error", "never"], + "arrow-parens": [ + "error", + "as-needed", + { + "requireForBlockBody": true + } + ], + "arrow-spacing": "error", + "block-spacing": ["error", "always"], + "brace-style": ["error", "1tbs"], + "camelcase": [ + "error", + { + "properties": "never" + } + ], + "comma-dangle": ["error", "never"], + "eol-last": ["error", "always"], + "func-name-matching": "error", + "indent": [ + "off", + 2, + { + "ArrayExpression": "off", + "SwitchCase": 1, + "CallExpression": { + "arguments": "off" + }, + "FunctionDeclaration": { + "parameters": "off" + }, + "FunctionExpression": { + "parameters": "off" + }, + "MemberExpression": "off", + "ObjectExpression": "off", + "ImportDeclaration": "off" + } + ], + "handle-callback-err": "off", + "linebreak-style": ["error", "unix"], + "max-lines": [ + "error", + { + "max": 300, + "skipBlankLines": true, + "skipComments": true + } + ], + "max-lines-per-function": [ + "warn", + { + "skipBlankLines": true, + "skipComments": true + } + ], + "max-statements-per-line": [ + "error", + { + "max": 1 + } + ], + "new-cap": [ + "error", + { + "newIsCap": true, + "capIsNew": false + } + ], + "new-parens": "error", + "no-buffer-constructor": "error", + "no-console": "off", + "no-extra-semi": "off", + "no-fallthrough": "off", + "no-func-assign": "off", + "no-implicit-coercion": "error", + "no-multi-assign": "error", + "no-multiple-empty-lines": [ + "error", + { + "max": 1 + } + ], + "no-nested-ternary": "error", + "no-param-reassign": "off", + "no-return-assign": "error", + "no-return-await": "off", + "no-shadow-restricted-names": "error", + "no-tabs": "error", + "no-trailing-spaces": "error", + "no-unused-vars": [ + "error", + { + "vars": "all", + "args": "none", + "ignoreRestSiblings": false + } + ], + "no-use-before-define": [ + "error", + { + "functions": false, + "classes": false + } + ], + "no-useless-escape": "off", + "no-var": "error", + "nonblock-statement-body-position": ["error", "below"], + "object-curly-spacing": ["error", "always"], + "padded-blocks": ["error", "never"], + "prefer-arrow-callback": "error", + "prefer-const": [ + "error", + { + "destructuring": "all", + "ignoreReadBeforeAssign": true + } + ], + "prefer-template": "off", + "quotes": ["error", "single"], + "semi": ["error", "always"], + "spaced-comment": [ + "error", + "always", + { + "exceptions": ["!"] + } + ], + "space-before-blocks": "error", + "unicode-bom": ["error", "never"], + "valid-jsdoc": "error", + "wrap-iife": ["error", "inside"], + "react/jsx-closing-bracket-location": 1, + "react/jsx-tag-spacing": 1, + "react/jsx-max-props-per-line": ["error", { "maximum": 2, "when": "multiline" }], + "react/prop-types": 0 +}; + +module.exports = { + "env": env, + "extends": [ + "plugin:react/recommended", + "eslint:recommended", + ], + "settings": { + "react": { + "version": "^16.5.2" + } + }, + "parser": "babel-eslint", + "parserOptions": { + "ecmaVersion": 10, + "requireConfigFile": false, + "sourceType": "module" + }, + "root": true, + "rules": rules, + "overrides": [ + { + "files": ["**/*.ts", "**/*.tsx"], + "env": env, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaFeatures": { "jsx": true }, + "ecmaVersion": 10, + "requireConfigFile": false, + "sourceType": "module" + }, + "plugins": ["@typescript-eslint"], + "rules": rules + } + ] +}; diff --git a/pkg/npm/eslint-config/package-lock.json b/pkg/npm/eslint-config/package-lock.json new file mode 100644 index 0000000000..0fe4c446f9 --- /dev/null +++ b/pkg/npm/eslint-config/package-lock.json @@ -0,0 +1,5 @@ +{ + "name": "@urbit/eslint-config", + "version": "1.0.0", + "lockfileVersion": 1 +} diff --git a/pkg/npm/eslint-config/package.json b/pkg/npm/eslint-config/package.json new file mode 100644 index 0000000000..4df8fac798 --- /dev/null +++ b/pkg/npm/eslint-config/package.json @@ -0,0 +1,14 @@ +{ + "name": "@urbit/eslint-config", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Tyler Brown Cifu Shuster", + "license": "MIT", + "peerDependencies": { + "eslint": ">= 3" + } +} diff --git a/pkg/npm/http-api/.github/workflows/main.yml b/pkg/npm/http-api/.github/workflows/main.yml new file mode 100644 index 0000000000..11023c28f5 --- /dev/null +++ b/pkg/npm/http-api/.github/workflows/main.yml @@ -0,0 +1,42 @@ +name: CI +on: [push] +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Begin CI... + uses: actions/checkout@v2 + + - name: Use Node 12 + uses: actions/setup-node@v1 + with: + node-version: 12.x + + - name: Use cached node_modules + uses: actions/cache@v1 + with: + path: node_modules + key: nodeModules-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + nodeModules- + + - name: Install dependencies + run: yarn install --frozen-lockfile + env: + CI: true + + - name: Lint + run: yarn lint + env: + CI: true + + - name: Test + run: yarn test --ci --coverage --maxWorkers=2 + env: + CI: true + + - name: Build + run: yarn build + env: + CI: true diff --git a/pkg/npm/http-api/.gitignore b/pkg/npm/http-api/.gitignore new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pkg/npm/http-api/.vscode/settings.json b/pkg/npm/http-api/.vscode/settings.json new file mode 100644 index 0000000000..cd44658026 --- /dev/null +++ b/pkg/npm/http-api/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.watcherExclude": { + "**/node_modules/**": false + } +} \ No newline at end of file diff --git a/pkg/npm/http-api/LICENSE b/pkg/npm/http-api/LICENSE new file mode 100644 index 0000000000..a079e905ad --- /dev/null +++ b/pkg/npm/http-api/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Tyler Brown Cifu Shuster + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/pkg/npm/http-api/README.md b/pkg/npm/http-api/README.md new file mode 100644 index 0000000000..f82185bbc8 --- /dev/null +++ b/pkg/npm/http-api/README.md @@ -0,0 +1,21 @@ +# Urbit Connector + +This project allows you to connect to an [Urbit](https://urbit.org) ship via a JavaScript application. + +## Example + +Check out the `example` directory for examples of how to use this code. + +1. Open `example/index.html` in your browser and follow the instructions there, or +2. With a ship running in the same fashion as indicated in the file above, run `node example/index.js` + +The code for either of these can be found in `src/example/browser.js` or `src/example/node.js`, depending on your context. + +## Design + +This library is designed to be useful for node applications that communicate with an urbit running either on the local computer or on a remote one. + +The majority of its methods are asynchronous and return Promises. This is due to the non-blocking nature of JavaScript. If used in a React app, response handlers should be bound with `this` to `setState` after a message is received. + +## NOTE +You must enable CORS requests on your urbit for this library to work in browser context. Use `+cors-registry` to see domains which have made requests to your urbit, and then approve the needed one, e.g. `|cors-approve http://zod.arvo.network`. diff --git a/pkg/npm/http-api/example/browser.js b/pkg/npm/http-api/example/browser.js new file mode 100644 index 0000000000..9ec2eea57f --- /dev/null +++ b/pkg/npm/http-api/example/browser.js @@ -0,0 +1,17 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is not neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/*!********************************!*\ + !*** ./src/example/browser.js ***! + \********************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: */ +eval("// import Urbit from '../../dist/browser';\n// window.Urbit = Urbit;\n\n//# sourceURL=webpack://@urbit/http-api/./src/example/browser.js?"); +/******/ })() +; \ No newline at end of file diff --git a/pkg/npm/http-api/example/index.html b/pkg/npm/http-api/example/index.html new file mode 100644 index 0000000000..cbe00460ff --- /dev/null +++ b/pkg/npm/http-api/example/index.html @@ -0,0 +1,98 @@ + + + + + + Demo + + + + +
+ Show instructions +

Assuming you are running a fakezod on port 8080, run

+ |cors-approve '{window.location.origin}' +

in its dojo.

+

Press the button to run the code below. Output will be logged. You should see < ~zod: opening airlock in your dojo. Create a chat and send a message to see the events logged.

+
window.airlock = await Urbit.authenticate({
+    ship: 'zod',
+    url: 'localhost:8080',
+    code: 'lidlut-tabwed-pillex-ridrup',
+    verbose: true
+});
+window.airlock.subscribe('chat-view', '/primary', { event: console.log });
+
+ + +
+
+    
+ + + \ No newline at end of file diff --git a/pkg/npm/http-api/example/node.js b/pkg/npm/http-api/example/node.js new file mode 100644 index 0000000000..4dc1b5b034 --- /dev/null +++ b/pkg/npm/http-api/example/node.js @@ -0,0 +1,17 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is not neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/*!*****************************!*\ + !*** ./src/example/node.js ***! + \*****************************/ +/*! unknown exports (runtime-defined) */ +/*! runtime requirements: */ +eval("// import Urbit from '../../dist/index';\n// async function blastOff() {\n// const airlock = await Urbit.authenticate({\n// ship: 'zod',\n// url: 'localhost:8080',\n// code: 'lidlut-tabwed-pillex-ridrup',\n// verbose: true\n// });\n// airlock.subscribe('chat-view', '/primary');\n// }\n// blastOff();\n\n//# sourceURL=webpack://@urbit/http-api/./src/example/node.js?"); +/******/ })() +; \ No newline at end of file diff --git a/pkg/npm/http-api/index.js b/pkg/npm/http-api/index.js new file mode 100644 index 0000000000..351a32475c --- /dev/null +++ b/pkg/npm/http-api/index.js @@ -0,0 +1,2 @@ +import Urbit from './dist'; +export { Urbit as default, Urbit }; \ No newline at end of file diff --git a/pkg/npm/http-api/package-lock.json b/pkg/npm/http-api/package-lock.json new file mode 100644 index 0000000000..0b03dfdd46 --- /dev/null +++ b/pkg/npm/http-api/package-lock.json @@ -0,0 +1,5591 @@ +{ + "name": "@urbit/http-api", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/core": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", + "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.1", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.1", + "@babel/parser": "^7.12.3", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", + "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "dev": true, + "requires": { + "@babel/types": "^7.12.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", + "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", + "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", + "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "dev": true, + "requires": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + } + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", + "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==", + "dev": true + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", + "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz", + "integrity": "sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz", + "integrity": "sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-typescript": "^7.12.1" + } + }, + "@babel/preset-typescript": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz", + "integrity": "sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.12.1" + } + }, + "@babel/runtime": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", + "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.5", + "@babel/types": "^7.12.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.12.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", + "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, + "@types/anymatch": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", + "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", + "dev": true + }, + "@types/browser-or-node": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/browser-or-node/-/browser-or-node-1.2.0.tgz", + "integrity": "sha512-hLn4jvpZ804yQDu71YW7qNQDm045XmODoEOZohkH4jWb23AaPodhVM5qztG+XM54Oqw8X1dA4A7z49iNFGbrxA==", + "dev": true + }, + "@types/eslint": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.4.tgz", + "integrity": "sha512-YCY4kzHMsHoyKspQH+nwSe+70Kep7Vjt2X+dZe5Vs2vkRudqtoFoUIv1RlJmZB8Hbp7McneupoZij4PadxsK5Q==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.45", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz", + "integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==", + "dev": true + }, + "@types/eventsource": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/eventsource/-/eventsource-1.1.5.tgz", + "integrity": "sha512-BA9q9uC2PAMkUS7DunHTxWZZaVpeNzDG8lkBxcKwzKJClfDQ4Z59/Csx7HSH/SIqFN2JWh0tAKAM6k/wRR0OZg==", + "dev": true + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "14.0.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.14.tgz", + "integrity": "sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", + "dev": true + }, + "@types/react": { + "version": "16.9.56", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.56.tgz", + "integrity": "sha512-gIkl4J44G/qxbuC6r2Xh+D3CGZpJ+NdWTItAPmZbR5mUS+JQ8Zvzpl0ea5qT/ZT3ZNTUcDKUVqV3xBE8wv/DyQ==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/tapable": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", + "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.3.tgz", + "integrity": "sha512-KswB5C7Kwduwjj04Ykz+AjvPcfgv/37Za24O2EDzYNbwyzOo8+ydtvzUfZ5UMguiVu29Gx44l1A6VsPPcmYu9w==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "@types/webpack": { + "version": "4.41.22", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.22.tgz", + "integrity": "sha512-JQDJK6pj8OMV9gWOnN1dcLCyU9Hzs6lux0wBO4lr1+gyEhIBR9U3FMrz12t2GPkg110XAxEAw2WHF6g7nZIbRQ==", + "dev": true, + "requires": { + "@types/anymatch": "*", + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "source-map": "^0.6.0" + } + }, + "@types/webpack-sources": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-1.4.2.tgz", + "integrity": "sha512-77T++JyKow4BQB/m9O96n9d/UUHWLQHlcqXb9Vsf4F1+wKNrrlWNFPDLKNT92RJnCSL6CieTc+NDXtCVZswdTw==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.7.0.tgz", + "integrity": "sha512-li9aiSVBBd7kU5VlQlT1AqP0uWGDK6JYKUQ9cVDnOg34VNnd9t4jr0Yqc/bKxJr/tDCPDaB4KzoSFN9fgVxe/Q==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.7.0", + "@typescript-eslint/scope-manager": "4.7.0", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.7.0.tgz", + "integrity": "sha512-cymzovXAiD4EF+YoHAB5Oh02MpnXjvyaOb+v+BdpY7lsJXZQN34oIETeUwVT2XfV9rSNpXaIcknDLfupO/tUoA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.7.0", + "@typescript-eslint/types": "4.7.0", + "@typescript-eslint/typescript-estree": "4.7.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.7.0.tgz", + "integrity": "sha512-+meGV8bMP1sJHBI2AFq1GeTwofcGiur8LoIr6v+rEmD9knyCqDlrQcFHR0KDDfldHIFDU/enZ53fla6ReF4wRw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.7.0", + "@typescript-eslint/types": "4.7.0", + "@typescript-eslint/typescript-estree": "4.7.0", + "debug": "^4.1.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.7.0.tgz", + "integrity": "sha512-ILITvqwDJYbcDCROj6+Ob0oCKNg3SH46iWcNcTIT9B5aiVssoTYkhKjxOMNzR1F7WSJkik4zmuqve5MdnA0DyA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.7.0", + "@typescript-eslint/visitor-keys": "4.7.0" + } + }, + "@typescript-eslint/types": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.7.0.tgz", + "integrity": "sha512-uLszFe0wExJc+I7q0Z/+BnP7wao/kzX0hB5vJn4LIgrfrMLgnB2UXoReV19lkJQS1a1mHWGGODSxnBx6JQC3Sg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.7.0.tgz", + "integrity": "sha512-5XZRQznD1MfUmxu1t8/j2Af4OxbA7EFU2rbo0No7meb46eHgGkSieFdfV6omiC/DGIBhH9H9gXn7okBbVOm8jw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.7.0", + "@typescript-eslint/visitor-keys": "4.7.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.7.0.tgz", + "integrity": "sha512-aDJDWuCRsf1lXOtignlfiPODkzSxxop7D0rZ91L6ZuMlcMCSh0YyK+gAfo5zN/ih6WxMwhoXgJWC3cWQdaKC+A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.7.0", + "eslint-visitor-keys": "^2.0.0" + } + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", + "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", + "dev": true + }, + "ajv": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", + "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", + "requires": { + "array-filter": "^1.0.0" + } + }, + "babel-loader": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.1.tgz", + "integrity": "sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw==", + "dev": true, + "requires": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.0.tgz", + "integrity": "sha512-Jrdy04F2EKcNggUDfubMUPNAZg2vMquLQSm8sKLYJvz40ClFL1S8GKyDshGkNsbNNE5Z+fQavzU7nSK1I9JUGA==" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "browser-or-node": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", + "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.14.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz", + "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001157", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.591", + "escalade": "^3.1.1", + "node-releases": "^1.1.66" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001157", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001157.tgz", + "integrity": "sha512-gOerH9Wz2IRZ2ZPdMfBvyOi3cjaz4O4dgNwPGzx8EhqAs4+2IL/O+fJsbt+znSigujoZG8bVcIAUM/I/E5K3MA==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + } + } + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", + "dev": true, + "requires": { + "@types/webpack": "^4.4.31", + "del": "^4.1.1" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "csstype": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.4.tgz", + "integrity": "sha512-xc8DUsCLmjvCfoD7LTGE0ou2MIWLx0K9RCZwSHMOdynqRsP4MtUcLeqh1HcQ2dInwDTqn+3CE0/FZh1et+p4jA==", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "dependencies": { + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + } + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.592", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.592.tgz", + "integrity": "sha512-kGNowksvqQiPb1pUSQKpd8JFoGPLxYOwduNRCqCxGh/2Q1qE2JdmwouCW41lUzDxOb/2RIV4lR0tVIfboWlO9A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "requires": { + "original": "^1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fastq": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", + "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "dev": true, + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + } + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-entities": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" + }, + "is-core-module": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", + "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-generator-function": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", + "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typed-array": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.3.tgz", + "integrity": "sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ==", + "requires": { + "available-typed-arrays": "^1.0.0", + "es-abstract": "^1.17.4", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "loader-runner": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.1.0.tgz", + "integrity": "sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==", + "dev": true + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "loglevel": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", + "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==", + "dev": true + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-releases": { + "version": "1.1.66", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.66.tgz", + "integrity": "sha512-JHEQ1iWPGK+38VLB2H9ef2otU4l8s3yAMt9Xf934r6+ojCYDMHPMqvCc9TnzfeFSP1QEOeU6YZEd3+De0LTCgg==", + "dev": true + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" + }, + "object-is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", + "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "requires": { + "url-parse": "^1.4.3" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" + }, + "dependencies": { + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "dev": true, + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "requires": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stream-http": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz", + "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.8.tgz", + "integrity": "sha512-zVotuHoIfnYjtlurOouTazciEfL7V38QMAOhGqpXDEg6yT13cF4+fEP9b0rrCEQTn+tT46uxgFsTZzhygk+CzQ==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ==", + "dev": true, + "requires": { + "jest-worker": "^26.6.1", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.8" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "p-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", + "dev": true + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typescript": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", + "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", + "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "watchpack": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.0.1.tgz", + "integrity": "sha512-vO8AKGX22ZRo6PiOFM9dC0re8IcKh8Kd/aH2zeqUc6w4/jBGlTy2P7fTC6ekT0NjVeGjgU2dGC5rNstKkeLEQg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webpack": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.4.0.tgz", + "integrity": "sha512-udpYTyqz8toTTdaOsL2QKPLeZLt2IEm9qY7yTXuFEQhKu5bk0yQD9BtAdVQksmz4jFbbWOiWmm3NHarO0zr/ng==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.45", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^8.0.4", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.3.1", + "eslint-scope": "^5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "pkg-dir": "^4.2.0", + "schema-utils": "^3.0.0", + "tapable": "^2.0.0", + "terser-webpack-plugin": "^5.0.3", + "watchpack": "^2.0.0", + "webpack-sources": "^2.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "enhanced-resolve": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.3.1.tgz", + "integrity": "sha512-G1XD3MRGrGfNcf6Hg0LVZG7GIKcYkbfHa5QMxt1HDUTdYoXH0JR1xXyg+MaKLF73E9A27uWNVxvFivNRYeUB6w==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.0.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "tapable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.1.1.tgz", + "integrity": "sha512-Wib1S8m2wdpLbmQz0RBEVosIyvb/ykfKXf3ZIDqvWoMg/zTNm6G/tDSuUM61J1kNCDXWJrLHGSFeMhAG+gAGpQ==", + "dev": true + } + } + }, + "webpack-cli": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", + "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.1", + "findup-sync": "^3.0.0", + "global-modules": "^2.0.0", + "import-local": "^2.0.0", + "interpret": "^1.4.0", + "loader-utils": "^1.4.0", + "supports-color": "^6.1.0", + "v8-compile-cache": "^2.1.1", + "yargs": "^13.3.2" + } + }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-sources": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", + "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + } + }, + "websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dev": true, + "requires": { + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "which-typed-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.2.tgz", + "integrity": "sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ==", + "requires": { + "available-typed-arrays": "^1.0.2", + "es-abstract": "^1.17.5", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" + }, + "xmlhttprequest-ssl": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.0.tgz", + "integrity": "sha512-z59ztoKPjoFdK6uki5DRiMwPCYtHgp42vCamEpirB9j6zqnbNYBp/2GfrTEOG6IcS9OoMWmIiauU6d2RQNcdbA==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } +} diff --git a/pkg/npm/http-api/package.json b/pkg/npm/http-api/package.json new file mode 100644 index 0000000000..3d963dd76e --- /dev/null +++ b/pkg/npm/http-api/package.json @@ -0,0 +1,64 @@ +{ + "name": "@urbit/http-api", + "version": "1.1.0", + "license": "MIT", + "description": "Library to interact with an Urbit ship over HTTP", + "repository": "github:tylershuster/urbit", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "browser": "dist/esm/index.js", + "types": "dist/esm/index.d.ts", + "files": [ + "dist", + "src" + ], + "engines": { + "node": ">=13" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "npm run clean && webpack --config webpack.prod.js && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json", + "clean": "rm -rf dist/*" + }, + "peerDependencies": {}, + "prettier": { + "printWidth": 80, + "semi": true, + "singleQuote": true, + "trailingComma": "es5" + }, + "author": "Tyler Brown Cifu Shuster", + "devDependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/preset-typescript": "^7.12.1", + "@types/eventsource": "^1.1.5", + "@types/react": "^16.9.56", + "@typescript-eslint/eslint-plugin": "^4.7.0", + "@typescript-eslint/parser": "^4.7.0", + "@types/browser-or-node": "^1.2.0", + "babel-loader": "^8.2.1", + "clean-webpack-plugin": "^3.0.0", + "tslib": "^2.0.3", + "typescript": "^3.9.7", + "webpack": "^5.4.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" + }, + "dependencies": { + "@babel/runtime": "^7.12.5", + "browser-or-node": "^1.3.0", + "browserify-zlib": "^0.2.0", + "buffer": "^5.7.1", + "encoding": "^0.1.13", + "eventsource": "^1.0.7", + "node-fetch": "^2.6.1", + "stream-browserify": "^3.0.0", + "stream-http": "^3.1.1", + "util": "^0.12.3", + "xmlhttprequest": "^1.8.0", + "xmlhttprequest-ssl": "^1.6.0" + } +} diff --git a/pkg/npm/http-api/src/app/base.ts b/pkg/npm/http-api/src/app/base.ts new file mode 100644 index 0000000000..9324004653 --- /dev/null +++ b/pkg/npm/http-api/src/app/base.ts @@ -0,0 +1,40 @@ +import Urbit from '..'; + +export interface UrbitAppInterface { + airlock: Urbit; + app: string; +} + +export default class UrbitApp implements UrbitAppInterface { + airlock: Urbit; + + get app(): string { + throw new Error('Access app property on base UrbitApp'); + } + + constructor(airlock: Urbit) { + this.airlock = airlock; + } + + /** + * Getter that barfs if no ship has been passed + */ + get ship(): string { + if (!this.airlock.ship) { + throw new Error('No ship specified'); + } + return this.airlock.ship; + } + + /** + * Helper to allow any app to handle subscriptions. + * + * @param path Path on app to subscribe to + */ + subscribe(path: string) { + const ship = this.ship; + const app = this.app; + return this.airlock.subscribe(app, path); + } + // TODO handle methods that don't exist +} diff --git a/pkg/npm/http-api/src/example/browser.js b/pkg/npm/http-api/src/example/browser.js new file mode 100644 index 0000000000..2dfc71410a --- /dev/null +++ b/pkg/npm/http-api/src/example/browser.js @@ -0,0 +1,3 @@ +// import Urbit from '../../dist/browser'; + +// window.Urbit = Urbit; \ No newline at end of file diff --git a/pkg/npm/http-api/src/example/node.js b/pkg/npm/http-api/src/example/node.js new file mode 100644 index 0000000000..bbceb0c7b5 --- /dev/null +++ b/pkg/npm/http-api/src/example/node.js @@ -0,0 +1,14 @@ +// import Urbit from '../../dist/index'; + +// async function blastOff() { +// const airlock = await Urbit.authenticate({ +// ship: 'zod', +// url: 'localhost:8080', +// code: 'lidlut-tabwed-pillex-ridrup', +// verbose: true +// }); + +// airlock.subscribe('chat-view', '/primary'); +// } + +// blastOff(); diff --git a/pkg/npm/http-api/src/index.ts b/pkg/npm/http-api/src/index.ts new file mode 100644 index 0000000000..44c490c699 --- /dev/null +++ b/pkg/npm/http-api/src/index.ts @@ -0,0 +1,456 @@ +import { isBrowser, isNode } from 'browser-or-node'; +import { Action, Thread } from '../../api'; + +import { AuthenticationInterface, SubscriptionInterface, CustomEventHandler, PokeInterface, SubscriptionRequestInterface, headers, UrbitInterface, SSEOptions, ThreadInterface } from './types'; +import UrbitApp from './app/base'; +import { uncamelize, hexString } from './utils'; + +/** + * A class for interacting with an urbit ship, given its URL and code + */ +export class Urbit implements UrbitInterface { + /** + * UID will be used for the channel: The current unix time plus a random hex string + */ + uid: string = `${Math.floor(Date.now() / 1000)}-${hexString(6)}`; + + /** + * Last Event ID is an auto-updated index of which events have been sent over this channel + */ + lastEventId: number = 0; + + lastAcknowledgedEventId: number = 0; + + /** + * SSE Client is null for now; we don't want to start polling until it the channel exists + */ + sseClient: EventSource | null = null; + + /** + * Cookie gets set when we log in. + */ + cookie?: string | undefined; + + /** + * A registry of requestId to successFunc/failureFunc + * + * These functions are registered during a +poke and are executed + * in the onServerEvent()/onServerError() callbacks. Only one of + * the functions will be called, and the outstanding poke will be + * removed after calling the success or failure function. + */ + + outstandingPokes: Map = new Map(); + + /** + * A registry of requestId to subscription functions. + * + * These functions are registered during a +subscribe and are + * executed in the onServerEvent()/onServerError() callbacks. The + * event function will be called whenever a new piece of data on this + * subscription is available, which may be 0, 1, or many times. The + * disconnect function may be called exactly once. + */ + + outstandingSubscriptions: Map = new Map(); + + /** + * Ship can be set, in which case we can do some magic stuff like send chats + */ + ship?: string | null; + + /** + * If verbose, logs output eagerly. + */ + verbose?: boolean; + + /** + * All registered apps, keyed by name + */ + static apps: Map = new Map(); + + /** This is basic interpolation to get the channel URL of an instantiated Urbit connection. */ + get channelUrl(): string { + return `${this.url}/~/channel/${this.uid}`; + } + + get fetchOptions(): any { + const headers: headers = { + 'Content-Type': 'application/json', + }; + if (!isBrowser) { + headers.Cookie = this.cookie; + } + return { + credentials: 'include', + headers + }; + } + + /** + * Constructs a new Urbit connection. + * + * @param url The URL (with protocol and port) of the ship to be accessed + * @param code The access code for the ship at that address + */ + constructor( + public url: string, + public code: string + ) { + return this; + // We return a proxy so we can set dynamic properties like `Urbit.onChatHook` + return new Proxy(this, { + get(target: Urbit, property: string) { + // First check if this is a regular property + if (property in target) { + return (target as any)[property]; + } + + // Then check if it's a registered app + const app = Urbit.apps.get(uncamelize(property)); + if (app) { + return new app(target); + } + + // Then check to see if we're trying to register an EventSource watcher + if (property.startsWith('on')) { + const on = uncamelize(property.replace('on', '')).toLowerCase(); + return ((action: CustomEventHandler) => { + target.eventSource().addEventListener('message', (event: MessageEvent) => { + if (target.verbose) { + console.log(`Received SSE from ${on}: `, event); + } + if (event.data && JSON.parse(event.data)) { + const data: any = JSON.parse(event.data); + if (data.json.hasOwnProperty(on)) { + action(data.json[on], data.json.response); + } + } + }); + }); + } + + return undefined; + } + }) + } + + /** + * All-in-one hook-me-up. + * + * Given a ship, url, and code, this returns an airlock connection + * that is ready to go. It `|hi`s itself to create the channel, + * then opens the channel via EventSource. + * + * @param AuthenticationInterface + */ + static async authenticate({ ship, url, code, verbose = false }: AuthenticationInterface) { + const airlock = new Urbit(`http://${url}`, code); + airlock.verbose = verbose; + airlock.ship = ship; + await airlock.connect(); + await airlock.poke({ app: 'hood', mark: 'helm-hi', json: 'opening airlock' }); + await airlock.eventSource(); + return airlock; + } + + /** + * Connects to the Urbit ship. Nothing can be done until this is called. + * That's why we roll it into this.authenticate + */ + async connect(): Promise { + if (this.verbose) { + console.log(`password=${this.code} `, isBrowser ? "Connecting in browser context at " + `${this.url}/~/login` : "Connecting from node context"); + } + return fetch(`${this.url}/~/login`, { + method: 'post', + body: `password=${this.code}`, + credentials: 'include', + }).then(response => { + if (this.verbose) { + console.log('Received authentication response', response); + } + const cookie = response.headers.get('set-cookie'); + if (!this.ship) { + this.ship = new RegExp(/urbauth-~([\w-]+)/).exec(cookie)[1]; + } + if (!isBrowser) { + this.cookie = cookie; + } + }).catch(error => { + console.log(XMLHttpRequest); + console.log('errored') + console.log(error); + }); + } + + + /** + * Returns (and initializes, if necessary) the SSE pipe for the appropriate channel. + */ + eventSource(): EventSource { + if (!this.sseClient || this.sseClient.readyState === this.sseClient.CLOSED) { + const sseOptions: SSEOptions = { + headers: {} + }; + if (isBrowser) { + sseOptions.withCredentials = true; + } else if (isNode) { + sseOptions.headers.Cookie = this.cookie; + } + this.sseClient = new EventSource(this.channelUrl, { + withCredentials: true + }); + this.sseClient!.addEventListener('message', (event: MessageEvent) => { + if (this.verbose) { + console.log('Received SSE: ', event); + } + this.ack(Number(event.lastEventId)); + if (event.data && JSON.parse(event.data)) { + const data: any = JSON.parse(event.data); + if (data.response === 'poke' && this.outstandingPokes.has(data.id)) { + const funcs = this.outstandingPokes.get(data.id); + if (data.hasOwnProperty('ok')) { + funcs.success(); + } else if (data.hasOwnProperty('err')) { + funcs.fail(data.err); + } else { + console.error('Invalid poke response', data); + } + this.outstandingPokes.delete(data.id); + } else if (data.response === 'subscribe' || + (data.response === 'poke' && this.outstandingSubscriptions.has(data.id))) { + const funcs = this.outstandingSubscriptions.get(data.id); + if (data.hasOwnProperty('err')) { + funcs.err(data.err); + this.outstandingSubscriptions.delete(data.id); + } + } else if (data.response === 'diff' && this.outstandingSubscriptions.has(data.id)) { + const funcs = this.outstandingSubscriptions.get(data.id); + funcs.event(data.json); + } else if (data.response === 'quit' && this.outstandingSubscriptions.has(data.id)) { + const funcs = this.outstandingSubscriptions.get(data.id); + funcs.quit(data); + this.outstandingSubscriptions.delete(data.id); + } else { + console.log('Unrecognized response', data); + } + // An incoming message, for example: + // { + // id: 10, + // json: { + // 'chat-update' : { // This is where we hook our "on" handlers like "onChatUpdate" + // message: { + // envelope: { + // author: 'zod', + // letter: { + // text: 'hi' + // }, + // number: 10, + // uid: 'saludhafhsdf', + // when: 124459 + // }, + // path: '/~zod/mailbox' + // } + // } + // } + // } + } + }); + this.sseClient!.addEventListener('error', function(event: Event) { + console.error('pipe error', event); + }); + + } + return this.sseClient; + } + + addEventListener(callback: (data: any) => void) { + return this.eventSource().addEventListener('message', (event: MessageEvent) => { + if (event.data && JSON.parse(event.data)) { + callback(JSON.parse(event.data)); + } + }); + } + + /** + * Autoincrements the next event ID for the appropriate channel. + */ + getEventId(): number { + this.lastEventId = Number(this.lastEventId) + 1; + return this.lastEventId; + } + + /** + * Acknowledges an event. + * + * @param eventId The event to acknowledge. + */ + ack(eventId: number): Promise { + return this.sendMessage('ack', { 'event-id': eventId }); + } + + /** + * This is a wrapper method that can be used to send any action with data. + * + * Every message sent has some common parameters, like method, headers, and data + * structure, so this method exists to prevent duplication. + * + * @param action The action to send + * @param data The data to send with the action + * + * @returns void | number If successful, returns the number of the message that was sent + */ + async sendMessage(action: Action, data?: object): Promise { + + const id = this.getEventId(); + if (this.verbose) { + console.log(`Sending message ${id}:`, action, data,); + } + let response: Response | undefined; + try { + response = await fetch(this.channelUrl, { + ...this.fetchOptions, + method: 'put', + body: JSON.stringify([{ + id, + action, + ...data, + }]), + }); + } catch (error) { + console.error('message error', error); + response = undefined; + } + if (this.verbose) { + console.log(`Received from message ${id}: `, response); + } + return id; + } + + /** + * Pokes a ship with data. + * + * @param app The app to poke + * @param mark The mark of the data being sent + * @param json The data to send + */ + poke(params: PokeInterface): Promise { + const { app, mark, json, onSuccess, onError } = {onSuccess: () => {}, onError: () => {}, ...params}; + return new Promise((resolve, reject) => { + this + .sendMessage('poke', { ship: this.ship, app, mark, json }) + .then(pokeId => { + if (!pokeId) { + return reject('Poke failed'); + } + if (!this.sseClient) resolve(pokeId); // A poke may occur before a listener has been opened + this.outstandingPokes.set(pokeId, { + success: () => { + onSuccess(); + resolve(pokeId); + }, + fail: (event) => { + onError(); + reject(event.err); + } + }); + }).catch(error => { + console.error(error); + }); + }); + } + + /** + * Subscribes to a path on an app on a ship. + * + * @param app The app to subsribe to + * @param path The path to which to subscribe + * @param handlers Handlers to deal with various events of the subscription + */ + async subscribe(params: SubscriptionRequestInterface): Promise { + const { app, path, err, event, quit } = { err: () => {}, event: () => {}, quit: () => {}, ...params }; + + const subscriptionId = await this.sendMessage('subscribe', { ship: this.ship, app, path }); + console.log('subscribed', subscriptionId); + + if (!subscriptionId) return; + + this.outstandingSubscriptions.set(subscriptionId, { + err, event, quit + }); + + return subscriptionId; + } + + /** + * Unsubscribes to a given subscription. + * + * @param subscription + */ + unsubscribe(subscription: string): Promise { + return this.sendMessage('unsubscribe', { subscription }); + } + + /** + * Deletes the connection to a channel. + */ + delete(): Promise { + return this.sendMessage('delete'); + } + + /** + * + * @param app The app into which to scry + * @param path The path at which to scry + */ + async scry(app: string, path: string): Promise { + const response = await fetch(`/~/scry/${app}${path}.json`, this.fetchOptions); + return await response.json(); + } + + /** + * + * @param inputMark The mark of the data being sent + * @param outputMark The mark of the data being returned + * @param threadName The thread to run + * @param body The data to send to the thread + */ + async spider(params: Thread): Promise { + const { inputMark, outputMark, threadName, body } = params; + const res = await fetch(`/spider/${inputMark}/${threadName}/${outputMark}.json`, { + ...this.fetchOptions, + method: 'POST', + body: JSON.stringify(body) + }); + + return res.json(); + } + + app(appName: string): UrbitApp { + const appClass = Urbit.apps.get(appName); + if (!appClass) { + throw new Error(`App ${appName} not found`); + } + return new appClass(this); + } + + /** + * Utility function to connect to a ship that has its *.arvo.network domain configured. + * + * @param name Name of the ship e.g. zod + * @param code Code to log in + */ + static async onArvoNetwork(ship: string, code: string): Promise { + const url = `https://${ship}.arvo.network`; + return await Urbit.authenticate({ ship, url, code }); + } + + static extend(appClass: any): void { + Urbit.apps.set(appClass.app, appClass); + } +} + + + +export default Urbit; diff --git a/pkg/npm/http-api/src/types/index.d.ts b/pkg/npm/http-api/src/types/index.d.ts new file mode 100644 index 0000000000..36b63c1733 --- /dev/null +++ b/pkg/npm/http-api/src/types/index.d.ts @@ -0,0 +1,45 @@ +import { Action, Mark, Poke } from '../../../api/index'; + +export interface PokeInterface extends Poke { + onSuccess?: () => void; + onError?: () => void; +} + + +export interface AuthenticationInterface { + ship: string; + url: string; + code: string; + verbose?: boolean; +} + +export interface SubscriptionInterface { + err?(error: any): void; + event?(data: any): void; + quit?(data: any): void; +} + +export type SubscriptionRequestInterface = SubscriptionInterface & { + app: string; + path: string; +} + +export interface headers { + 'Content-Type': string; + Cookie?: string; +} + +export interface UrbitInterface { + connect(): void; +} + +export interface CustomEventHandler { + (data: any, response: string): void; +} + +export interface SSEOptions { + headers?: { + Cookie?: string + }; + withCredentials?: boolean; +} \ No newline at end of file diff --git a/pkg/npm/http-api/src/utils.ts b/pkg/npm/http-api/src/utils.ts new file mode 100644 index 0000000000..94c0998cb0 --- /dev/null +++ b/pkg/npm/http-api/src/utils.ts @@ -0,0 +1,82 @@ +import * as http from 'http'; + +interface HttpResponse { + req: http.ClientRequest; + res: http.IncomingMessage; + data: string; +} + +export function request( + url: string, + options: http.ClientRequestArgs, + body?: string +): Promise { + return new Promise((resolve, reject) => { + const req = http.request(url, options, res => { + let data = ""; + res.on("data", chunk => { + data += chunk; + }); + res.on("end", () => { + resolve({ req, res, data }); + }); + res.on("error", e => { + reject(e); + }); + }); + if (body) { + req.write(body); + } + req.end(); + }); +} + +export function camelize(str: string) { + return str + .replace(/\s(.)/g, function($1: string) { return $1.toUpperCase(); }) + .replace(/\s/g, '') + .replace(/^(.)/, function($1: string) { return $1.toLowerCase(); }); +} + +export function uncamelize(str: string, separator = '-') { + // Replace all capital letters by separator followed by lowercase one + var str = str.replace(/[A-Z]/g, function (letter: string) { + return separator + letter.toLowerCase(); + }); + return str.replace(new RegExp('^' + separator), ''); +} + +/** + * Returns a hex string of given length. + * + * Poached from StackOverflow. + * + * @param len Length of hex string to return. + */ +export function hexString(len: number): string { + const maxlen = 8; + const min = Math.pow(16, Math.min(len, maxlen) - 1); + const max = Math.pow(16, Math.min(len, maxlen)) - 1; + const n = Math.floor(Math.random() * (max - min + 1)) + min; + let r = n.toString(16); + while (r.length < len) { + r = r + hexString(len - maxlen); + } + return r; +} + +/** + * Generates a random UID. + * + * Copied from https://github.com/urbit/urbit/blob/137e4428f617c13f28ed31e520eff98d251ed3e9/pkg/interface/src/lib/util.js#L3 + */ +export function uid(): string { + let str = '0v'; + str += Math.ceil(Math.random() * 8) + '.'; + for (let i = 0; i < 5; i++) { + let _str = Math.ceil(Math.random() * 10000000).toString(32); + _str = ('00000' + _str).substr(-5, 5); + str += _str + '.'; + } + return str.slice(0, -1); +} \ No newline at end of file diff --git a/pkg/npm/http-api/test/default.test.ts b/pkg/npm/http-api/test/default.test.ts new file mode 100644 index 0000000000..719f10efbe --- /dev/null +++ b/pkg/npm/http-api/test/default.test.ts @@ -0,0 +1,8 @@ +import Urbit from '../src'; + +describe('blah', () => { + it('works', () => { + const connection = new Urbit('~sampel-palnet', '+code'); + expect(connection).toEqual(2); + }); +}); diff --git a/pkg/npm/http-api/tsconfig-cjs.json b/pkg/npm/http-api/tsconfig-cjs.json new file mode 100644 index 0000000000..ec2ee62835 --- /dev/null +++ b/pkg/npm/http-api/tsconfig-cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "CommonJS", + "outDir": "./dist/cjs" + }, +} \ No newline at end of file diff --git a/pkg/npm/http-api/tsconfig.json b/pkg/npm/http-api/tsconfig.json new file mode 100644 index 0000000000..b5703e6ed0 --- /dev/null +++ b/pkg/npm/http-api/tsconfig.json @@ -0,0 +1,18 @@ +{ + "include": ["src/**/*.ts"], + "exclude": ["node_modules", "dist", "@types"], + "compilerOptions": { + "outDir": "./dist/esm", + "module": "ES2020", + "noImplicitAny": true, + "target": "ES2020", + "pretty": true, + "moduleResolution": "node", + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "declaration": true, + "sourceMap": true, + "strict": false + // "lib": ["ES2020"], + } +} \ No newline at end of file diff --git a/pkg/npm/http-api/webpack.prod.js b/pkg/npm/http-api/webpack.prod.js new file mode 100644 index 0000000000..aab72b662f --- /dev/null +++ b/pkg/npm/http-api/webpack.prod.js @@ -0,0 +1,109 @@ +const path = require('path'); +const webpack = require('webpack'); + +const shared = { + mode: 'production', + entry: { + app: './src/index.ts' + }, + module: { + rules: [ + { + test: /\.(j|t)s$/, + use: { + loader: 'babel-loader', + options: { + presets: ['@babel/typescript'], + plugins: [ + '@babel/plugin-proposal-class-properties', + '@babel/plugin-proposal-object-rest-spread', + '@babel/plugin-proposal-optional-chaining', + ], + } + }, + exclude: /node_modules/ + } + ] + }, + resolve: { + extensions: ['.js', '.ts', '.ts'], + fallback: { + fs: false, + child_process: false, + util: require.resolve("util/"), + buffer: require.resolve('buffer/'), + assert: false, + http: require.resolve('stream-http'), + https: require.resolve('stream-http'), + stream: require.resolve('stream-browserify'), + zlib: require.resolve("browserify-zlib"), + } + }, + + optimization: { + minimize: false, + usedExports: true + } +}; + +const serverConfig = { + ...shared, + target: 'node', + output: { + filename: 'index.js', + path: path.resolve(__dirname, 'dist'), + library: 'Urbit', + libraryExport: 'default' + }, + plugins: [ + new webpack.ProvidePlugin({ + XMLHttpRequest: ['xmlhttprequest-ssl', 'XMLHttpRequest'], + EventSource: 'eventsource', + fetch: ['node-fetch', 'default'], + }), + ], +}; + +const browserConfig = { + ...shared, + target: 'web', + output: { + filename: 'browser.js', + path: path.resolve(__dirname, 'dist'), + library: 'Urbit', + libraryExport: 'default' + }, + plugins: [ + new webpack.ProvidePlugin({ + Buffer: 'buffer', + }), + ], +}; + + +const exampleBrowserConfig = { + ...shared, + mode: 'development', + entry: { + app: './src/example/browser.js' + }, + output: { + filename: 'browser.js', + path: path.resolve(__dirname, 'example'), + } +}; + +const exampleNodeConfig = { + ...shared, + mode: 'development', + target: 'node', + entry: { + app: './src/example/node.js' + }, + output: { + filename: 'node.js', + path: path.resolve(__dirname, 'example'), + } +}; + +module.exports = [ serverConfig, browserConfig, exampleBrowserConfig, exampleNodeConfig ]; \ No newline at end of file From 353e0f7395049fe51844b5f1047850976db3238f Mon Sep 17 00:00:00 2001 From: fang Date: Thu, 24 Dec 2020 13:03:56 +0100 Subject: [PATCH 007/338] clay: condense +pile-rule Rewrites the `+pile-rule` parsing rule for compactness and legibility. This is a purely stylistic change. --- pkg/arvo/sys/vane/clay.hoon | 102 ++++++++++++++---------------------- 1 file changed, 38 insertions(+), 64 deletions(-) diff --git a/pkg/arvo/sys/vane/clay.hoon b/pkg/arvo/sys/vane/clay.hoon index c69e6af08a..5ec3065d9c 100644 --- a/pkg/arvo/sys/vane/clay.hoon +++ b/pkg/arvo/sys/vane/clay.hoon @@ -848,75 +848,49 @@ ++ pile-rule |= pax=path %- full - %+ ifix [gay gay] - %+ cook |=(pile +<) - ;~ pfix + %+ ifix + :_ gay :: parse optional /? and ignore :: - ;~ pose - (cold ~ ;~(plug fas wut gap dem gap)) - (easy ~) + ;~(plug gay (punt ;~(plug fas wut gap dem gap))) + |^ + ;~ plug + %+ cook (bake zing (list (list taut))) + %+ rune hep + (most ;~(plug com gaw) taut-rule) + :: + %+ cook (bake zing (list (list taut))) + %+ rune lus + (most ;~(plug com gaw) taut-rule) + :: + %+ rune tis + ;~(plug sym ;~(pfix gap fas (more fas urs:ab))) + :: + %+ rune tar + ;~ (glue gap) + sym + ;~(pfix cen sym) + ;~(pfix fas (more fas urs:ab)) == :: - ;~ plug - ;~ pose - ;~ sfix - %+ cook |=((list (list taut)) (zing +<)) - %+ more gap - ;~ pfix ;~(plug fas hep gap) - (most ;~(plug com gaw) taut-rule) - == - gap - == - (easy ~) - == - :: - ;~ pose - ;~ sfix - %+ cook |=((list (list taut)) (zing +<)) - %+ more gap - ;~ pfix ;~(plug fas lus gap) - (most ;~(plug com gaw) taut-rule) - == - gap - == - (easy ~) - == - :: - ;~ pose - ;~ sfix - %+ cook |=((list [face=term =path]) +<) - %+ more gap - ;~ pfix ;~(plug fas tis gap) - %+ cook |=([term path] +<) - ;~(plug sym ;~(pfix ;~(plug gap fas) (more fas urs:ab))) - == - gap - == - (easy ~) - == - :: - ;~ pose - ;~ sfix - %+ cook |=((list [face=term =mark =path]) +<) - %+ more gap - ;~ pfix ;~(plug fas tar gap) - %+ cook |=([term mark path] +<) - ;~ plug - sym - ;~(pfix ;~(plug gap cen) sym) - ;~(pfix ;~(plug gap fas) (more fas urs:ab)) - == - == - gap - == - (easy ~) - == - :: - %+ cook |=(huz=(list hoon) `hoon`tssg+huz) - (most gap tall:(vang & pax)) - == + %+ stag %tssg + (most gap tall:(vang & pax)) == + :: + ++ pant + |* fel=^rule + ;~(pose fel (easy ~)) + :: + ++ mast + |* [bus=^rule fel=^rule] + ;~(sfix (more bus fel) bus) + :: + ++ rune + |* [bus=^rule fel=^rule] + %- pant + %+ mast gap + ;~(pfix fas bus gap fel) + -- :: ++ taut-rule %+ cook |=(taut +<) From fc179eac7d57eb8fd6d448ff39f60c20eb7afefd Mon Sep 17 00:00:00 2001 From: Tyler Brown Cifu Shuster Date: Wed, 27 Jan 2021 21:30:48 -0800 Subject: [PATCH 008/338] interface: adds serviceworker --- pkg/arvo/app/landscape/index.html | 7 +++ pkg/interface/config/webpack.dev.js | 18 +++++-- pkg/interface/config/webpack.prod.js | 7 ++- pkg/interface/package-lock.json | 60 ++++++++++++++++++++++++ pkg/interface/package.json | 4 ++ pkg/interface/src/serviceworker.js | 70 ++++++++++++++++++++++++++++ 6 files changed, 160 insertions(+), 6 deletions(-) create mode 100644 pkg/interface/src/serviceworker.js diff --git a/pkg/arvo/app/landscape/index.html b/pkg/arvo/app/landscape/index.html index 51923fbaa5..7ee1362832 100644 --- a/pkg/arvo/app/landscape/index.html +++ b/pkg/arvo/app/landscape/index.html @@ -24,6 +24,13 @@
+ diff --git a/pkg/interface/config/webpack.dev.js b/pkg/interface/config/webpack.dev.js index fe97e7c078..89e005ba2f 100644 --- a/pkg/interface/config/webpack.dev.js +++ b/pkg/interface/config/webpack.dev.js @@ -63,6 +63,12 @@ if(urbitrc.URL) { return '/index.js' } }, + '/~landscape/js/serviceworker.js': { + target: 'http://localhost:9000', + pathRewrite: (req, path) => { + return '/serviceworker.js' + } + }, '**': { changeOrigin: true, target: urbitrc.URL, @@ -77,7 +83,8 @@ if(urbitrc.URL) { module.exports = { mode: 'development', entry: { - app: './src/index.js' + app: './src/index.js', + serviceworker: './src/serviceworker.js' }, module: { rules: [ @@ -126,10 +133,13 @@ module.exports = { ], watch: true, output: { - filename: 'index.js', - chunkFilename: 'index.js', + filename: (pathData) => { + return pathData.chunk.name === 'app' ? 'index.js' : '[name].js'; + }, + chunkFilename: '[name].js', path: path.resolve(__dirname, '../dist'), - publicPath: '/' + publicPath: '/', + globalObject: 'this' }, optimization: { minimize: false, diff --git a/pkg/interface/config/webpack.prod.js b/pkg/interface/config/webpack.prod.js index 005e4cad58..b69e63624e 100644 --- a/pkg/interface/config/webpack.prod.js +++ b/pkg/interface/config/webpack.prod.js @@ -7,7 +7,8 @@ const webpack = require('webpack'); module.exports = { mode: 'production', entry: { - app: './src/index.js' + app: './src/index.js', + serviceworker: './src/serviceworker.js' }, module: { rules: [ @@ -64,7 +65,9 @@ module.exports = { // }), ], output: { - filename: 'index.[contenthash].js', + filename: (pathData) => { + return pathData.chunk.name === 'app' ? 'index.[contenthash].js' : '[name].js'; + }, path: path.resolve(__dirname, '../../arvo/app/landscape/js/bundle'), publicPath: '/' }, diff --git a/pkg/interface/package-lock.json b/pkg/interface/package-lock.json index d4a06d132a..374debb537 100644 --- a/pkg/interface/package-lock.json +++ b/pkg/interface/package-lock.json @@ -10407,6 +10407,66 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "workbox-cacheable-response": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.0.2.tgz", + "integrity": "sha512-OrgFiYWkmFXDIbNRYSu+fchcfoZqyJ4yZbdc8WKUjr9v/MghKHfR9u7UI077xBkjno5J3YNpbwx73/no3HkrzA==", + "requires": { + "workbox-core": "^6.0.2" + } + }, + "workbox-core": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.0.2.tgz", + "integrity": "sha512-Ksl6qeikGb+BOCILoCUJGxwlEQOeeqdpOnpOr9UDt3NtacPYbfYBmpYpKArw5DFWK+5geBsFqgUUlXThlCYfKQ==" + }, + "workbox-expiration": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.0.2.tgz", + "integrity": "sha512-6+nbR18cklAdI3BPT675ytftXPwnVbXGR8mPWNWTJtl5y2urRYv56ZOJLD7FBFVkZ8EjWiRhNP/A0fkxgdKtWQ==", + "requires": { + "workbox-core": "^6.0.2" + } + }, + "workbox-precaching": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.0.2.tgz", + "integrity": "sha512-sqKWL2emzmGnfJpna+9RjUkUiqQO++AKfwljCbgkHg8wBbVLy/rnui3eelKgAI7D8R31LJFfiZkY/kXmwkjtlQ==", + "requires": { + "workbox-core": "^6.0.2", + "workbox-routing": "^6.0.2", + "workbox-strategies": "^6.0.2" + } + }, + "workbox-recipes": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.0.2.tgz", + "integrity": "sha512-ewZIHO4jYE6bnEeUIYS6joQy3l+MydpOsVr2F6EpE8ps++z1ScbSdLtJU+yu6WuO3lH44HFZLeFxYQqYm50QAA==", + "requires": { + "workbox-cacheable-response": "^6.0.2", + "workbox-core": "^6.0.2", + "workbox-expiration": "^6.0.2", + "workbox-precaching": "^6.0.2", + "workbox-routing": "^6.0.2", + "workbox-strategies": "^6.0.2" + } + }, + "workbox-routing": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.0.2.tgz", + "integrity": "sha512-iQ9ch3fL1YpztDLfHNURaHQ0ispgPCdzWmZZhtSHUyy/+YkTlIiDVTbOQCIpHIrWlKQiim6X3K2ItIy1FW9+wA==", + "requires": { + "workbox-core": "^6.0.2" + } + }, + "workbox-strategies": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.0.2.tgz", + "integrity": "sha512-HjLnYCVS60U7OKhl5NIq8NAQXrotJQRDakmIONnRlQIlP2If/kAiQSUP3QCHMq4EeXGiF+/CdlR1/bhYBHZzZg==", + "requires": { + "workbox-core": "^6.0.2" + } + }, "worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", diff --git a/pkg/interface/package.json b/pkg/interface/package.json index a65578c438..b454e5dc4a 100644 --- a/pkg/interface/package.json +++ b/pkg/interface/package.json @@ -44,6 +44,10 @@ "styled-system": "^5.1.5", "suncalc": "^1.8.0", "urbit-ob": "^5.0.1", + "workbox-core": "^6.0.2", + "workbox-precaching": "^6.0.2", + "workbox-recipes": "^6.0.2", + "workbox-routing": "^6.0.2", "yup": "^0.29.3", "zustand": "^3.3.1" }, diff --git a/pkg/interface/src/serviceworker.js b/pkg/interface/src/serviceworker.js new file mode 100644 index 0000000000..3b7a97ee85 --- /dev/null +++ b/pkg/interface/src/serviceworker.js @@ -0,0 +1,70 @@ +import { registerRoute } from 'workbox-routing'; +import { + NetworkFirst, + StaleWhileRevalidate, + CacheFirst, +} from 'workbox-strategies'; + +// Used for filtering matches based on status code, header, or both +import { CacheableResponsePlugin } from 'workbox-cacheable-response'; +// Used to limit entries in cache, remove entries after a certain period of time +import { ExpirationPlugin } from 'workbox-expiration'; + +// Cache page navigations (html) with a Network First strategy +registerRoute( + // Check to see if the request is a navigation to a new page + ({ request }) => request.mode === 'navigate', + // Use a Network First caching strategy + new NetworkFirst({ + // Put all cached files in a cache named 'pages' + cacheName: 'pages', + plugins: [ + // Ensure that only requests that result in a 200 status are cached + new CacheableResponsePlugin({ + statuses: [200], + }), + ], + }), +); + +// Cache CSS, JS, and Web Worker requests with a Stale While Revalidate strategy +registerRoute( + // Check to see if the request's destination is style for stylesheets, script for JavaScript, or worker for web worker + ({ request }) => + request.destination === 'style' || + request.destination === 'script' || + request.destination === 'worker', + // Use a Stale While Revalidate caching strategy + new StaleWhileRevalidate({ + // Put all cached files in a cache named 'assets' + cacheName: 'assets', + plugins: [ + // Ensure that only requests that result in a 200 status are cached + new CacheableResponsePlugin({ + statuses: [200], + }), + ], + }), +); + +// Cache images with a Cache First strategy +registerRoute( + // Check to see if the request's destination is style for an image + ({ request }) => request.destination === 'image', + // Use a Cache First caching strategy + new CacheFirst({ + // Put all cached files in a cache named 'images' + cacheName: 'images', + plugins: [ + // Ensure that only requests that result in a 200 status are cached + new CacheableResponsePlugin({ + statuses: [200], + }), + // Don't cache more than 50 items, and expire them after 30 days + new ExpirationPlugin({ + maxEntries: 50, + maxAgeSeconds: 60 * 60 * 24 * 30, // 30 Days + }), + ], + }), +); From 3c8e73cbc81ee1ca09132269574f9f800c9eeb79 Mon Sep 17 00:00:00 2001 From: Liam Fitzgerald Date: Fri, 29 Jan 2021 10:09:52 +1000 Subject: [PATCH 009/338] Revert "language-server: parse commands permissively" This reverts commit 8f8ec8bcc5b413e7bed66a5f747ac4e76ba3ab44. --- pkg/arvo/lib/language-server/complete.hoon | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pkg/arvo/lib/language-server/complete.hoon b/pkg/arvo/lib/language-server/complete.hoon index 6e352e8196..18f16c1687 100644 --- a/pkg/arvo/lib/language-server/complete.hoon +++ b/pkg/arvo/lib/language-server/complete.hoon @@ -247,15 +247,15 @@ :: ++ get-id |= [pos=@ud txt=tape] - ^- [forward=(unit @t) backward=(unit @t) id=(unit @t)] - =/ seek - ;~(sfix (punt (cook crip (star prn))) (star ;~(pose prn (just `@`10)))) - =/ forward=(unit @t) - (scan (slag pos txt) seek) - =/ backward=(unit @t) + ^- [forward=(unit term) backward=(unit term) id=(unit term)] + =/ forward=(unit term) + %+ scan `tape`(slag pos txt) + ;~(sfix (punt sym) (star ;~(pose prn (just `@`10)))) + =/ backward=(unit term) %- (lift |=(t=@tas (swp 3 t))) - (scan (flop (scag pos txt)) seek) - =/ id=(unit @t) + %+ scan `tape`(flop (scag pos txt)) + ;~(sfix (punt sym) (star ;~(pose prn (just `@`10)))) + =/ id=(unit term) ?~ forward ?~ backward ~ From 410fe58975754dbeb8cd6e3525f4aa31f62a0ddf Mon Sep 17 00:00:00 2001 From: Liam Fitzgerald Date: Fri, 29 Jan 2021 11:43:40 +1000 Subject: [PATCH 010/338] language-server: ignore /sys files --- pkg/arvo/app/language-server.hoon | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/arvo/app/language-server.hoon b/pkg/arvo/app/language-server.hoon index 88b249157f..6ba8704913 100644 --- a/pkg/arvo/app/language-server.hoon +++ b/pkg/arvo/app/language-server.hoon @@ -275,12 +275,14 @@ ++ handle-did-open |= item=text-document-item:lsp-sur ^- (quip card _state) + =/ =path + (uri-to-path:build uri.item) + ?: ?=(%sys -.path) + `state =/ buf=wall (to-wall (trip text.item)) =. bufs (~(put by bufs) uri.item buf) - =/ =path - (uri-to-path:build uri.item) :_ state %+ weld (give-rpc-notification (get-diagnostics uri.item)) From b4cbe7b5ebf86fc6a5ec408b39a8f01794a4f69a Mon Sep 17 00:00:00 2001 From: Liam Fitzgerald Date: Fri, 29 Jan 2021 11:44:13 +1000 Subject: [PATCH 011/338] language-server: prettier hover format --- pkg/arvo/app/language-server.hoon | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/arvo/app/language-server.hoon b/pkg/arvo/app/language-server.hoon index 6ba8704913..921cc20513 100644 --- a/pkg/arvo/app/language-server.hoon +++ b/pkg/arvo/app/language-server.hoon @@ -320,12 +320,12 @@ ?~ p.tab-list ~ ?~ u.p.tab-list ~ :- ~ - %- crip - ;: weld - "`" - ~(ram re ~(duck easy-print detail.i.u.p.tab-list)) - "`" - == + =- (crip :(weld "```hoon\0a" tape "\0a```")) + ^- =tape + %- zing + %+ join "\0a" + %+ scag 20 + (~(win re ~(duck easy-print detail.i.u.p.tab-list)) 2 80) :: ++ sync-buf |= [buf=wall changes=(list change:lsp-sur)] From 377b2cd10ca2db9cf0103bee9be9f85438315aa0 Mon Sep 17 00:00:00 2001 From: Liam Fitzgerald Date: Fri, 29 Jan 2021 11:44:37 +1000 Subject: [PATCH 012/338] language-server: prevent %play-open on %zpgl --- pkg/arvo/lib/language-server/complete.hoon | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/arvo/lib/language-server/complete.hoon b/pkg/arvo/lib/language-server/complete.hoon index 18f16c1687..1a2a6c1f1e 100644 --- a/pkg/arvo/lib/language-server/complete.hoon +++ b/pkg/arvo/lib/language-server/complete.hoon @@ -185,6 +185,7 @@ [%zpmc *] (both p.gen q.gen) [%zpts *] loop(gen p.gen) [%zppt *] (both q.gen r.gen) + [%zpgl *] (spec-and-hoon p.gen q.gen) [%zpzp *] ~ * =+ doz=~(open ap gen) From 7b46b8bfed104f0c019ec143eba73c12dd1904f5 Mon Sep 17 00:00:00 2001 From: Liam Fitzgerald Date: Fri, 29 Jan 2021 12:01:33 +1000 Subject: [PATCH 013/338] language-server: break up parser from shoe --- pkg/arvo/lib/language-server/complete.hoon | 32 ++++++++++++++-------- pkg/arvo/lib/shoe.hoon | 2 +- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/pkg/arvo/lib/language-server/complete.hoon b/pkg/arvo/lib/language-server/complete.hoon index 1a2a6c1f1e..e2beefcc0f 100644 --- a/pkg/arvo/lib/language-server/complete.hoon +++ b/pkg/arvo/lib/language-server/complete.hoon @@ -246,17 +246,27 @@ ^- (unit [term type]) ~ :: +++ get-id-sym + |= [pos=@ud =tape] + %^ get-id pos tape + ^- $-(nail (like (unit @t))) + ;~(sfix (punt sym) (star ;~(pose prn (just `@`10)))) +:: +++ get-id-cord + |= [pos=@ud =tape] + %^ get-id pos tape + ^- $-(nail (like (unit @t))) + ;~(sfix (punt (cook crip (star prn))) (star ;~(pose prn (just `@`10)))) +:: ++ get-id - |= [pos=@ud txt=tape] - ^- [forward=(unit term) backward=(unit term) id=(unit term)] - =/ forward=(unit term) - %+ scan `tape`(slag pos txt) - ;~(sfix (punt sym) (star ;~(pose prn (just `@`10)))) - =/ backward=(unit term) - %- (lift |=(t=@tas (swp 3 t))) - %+ scan `tape`(flop (scag pos txt)) - ;~(sfix (punt sym) (star ;~(pose prn (just `@`10)))) - =/ id=(unit term) + |= [pos=@ud txt=tape seek=$-(nail (like (unit @t)))] + ^- [forward=(unit @t) backward=(unit @t) id=(unit @t)] + =/ forward=(unit @t) + (scan (slag pos txt) seek) + =/ backward=(unit @t) + %- (lift |=(t=@t (swp 3 t))) + (scan (flop (scag pos txt)) seek) + =/ id=(unit @t) ?~ forward ?~ backward ~ @@ -273,7 +283,7 @@ ^- [back-pos=@ud fore-pos=@ud txt=tape] :: Find beg-pos by searching backward to where the current term :: begins - =+ (get-id pos txt) + =+ (get-id-sym pos txt) =/ back-pos ?~ backward pos diff --git a/pkg/arvo/lib/shoe.hoon b/pkg/arvo/lib/shoe.hoon index d3769ad00f..0348e10e52 100644 --- a/pkg/arvo/lib/shoe.hoon +++ b/pkg/arvo/lib/shoe.hoon @@ -291,7 +291,7 @@ ++ tab |= pos=@ud ^- (quip card _cli-state) - =+ (get-id:auto pos (tufa buf.cli-state)) + =+ (get-id-cord:auto pos (tufa buf.cli-state)) =/ needle=term (fall id %$) :: autocomplete empty command iff user at start of command From ac7aa12dd76b5e95a15ee7ec7563d65f311ab5dd Mon Sep 17 00:00:00 2001 From: Liam Fitzgerald Date: Sat, 30 Jan 2021 12:09:59 +1000 Subject: [PATCH 014/338] language-server: retain state on reload --- pkg/arvo/app/language-server.hoon | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pkg/arvo/app/language-server.hoon b/pkg/arvo/app/language-server.hoon index 921cc20513..a93e57c7fc 100644 --- a/pkg/arvo/app/language-server.hoon +++ b/pkg/arvo/app/language-server.hoon @@ -5,7 +5,7 @@ easy-print=language-server-easy-print, rune-snippet=language-server-rune-snippet, build=language-server-build, - default-agent + default-agent, verb |% +$ card card:agent:gall +$ lsp-req @@ -44,6 +44,7 @@ == -- ^- agent:gall +%+ verb | =| state-zero =* state - =< @@ -69,7 +70,7 @@ |= old-state=vase ^- (quip card _this) ~& > %lsp-upgrade - [~ this(state *state-zero)] + [~ this(state !<(state-zero old-state))] :: ++ on-poke ^+ on-poke:*agent:gall @@ -324,8 +325,8 @@ ^- =tape %- zing %+ join "\0a" - %+ scag 20 - (~(win re ~(duck easy-print detail.i.u.p.tab-list)) 2 80) + %+ scag 40 + (~(win re ~(duck easy-print detail.i.u.p.tab-list)) 0 140) :: ++ sync-buf |= [buf=wall changes=(list change:lsp-sur)] From e06311b3d1271e52d1767d6589464f7f7732ad1a Mon Sep 17 00:00:00 2001 From: Liam Fitzgerald Date: Thu, 4 Feb 2021 15:23:28 +1000 Subject: [PATCH 015/338] RemoteContent: add crossOrigin attribute to images to enable cache --- pkg/interface/src/views/components/RemoteContent.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/interface/src/views/components/RemoteContent.tsx b/pkg/interface/src/views/components/RemoteContent.tsx index b09f2cf7f4..bbc8844eff 100644 --- a/pkg/interface/src/views/components/RemoteContent.tsx +++ b/pkg/interface/src/views/components/RemoteContent.tsx @@ -109,6 +109,7 @@ class RemoteContent extends PureComponent Date: Thu, 4 Feb 2021 15:26:59 +1000 Subject: [PATCH 016/338] file-server: add Service-Worker-Allowed header --- pkg/arvo/app/file-server.hoon | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkg/arvo/app/file-server.hoon b/pkg/arvo/app/file-server.hoon index 363545d673..fb58ef12bc 100644 --- a/pkg/arvo/app/file-server.hoon +++ b/pkg/arvo/app/file-server.hoon @@ -237,7 +237,12 @@ =/ mime-type=@t (rsh 3 (crip )) :: Should maybe inspect to see how long cache should hold :: - [[200 ['content-type' mime-type] max-1-da:gen ~] `q.u.data] + =/ headers + :~ content-type+mime-type + max-1-da:gen + 'Service-Worker-Allowed'^'/' + == + [[200 headers] `q.u.data] == :: ++ lowercase From 90b8ae0065e14f59bd23ed152c315ca422f317ad Mon Sep 17 00:00:00 2001 From: Liam Fitzgerald Date: Thu, 4 Feb 2021 15:28:14 +1000 Subject: [PATCH 017/338] glob: add service-worker to glob --- pkg/arvo/app/glob.hoon | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/arvo/app/glob.hoon b/pkg/arvo/app/glob.hoon index 09b64b5874..83dda96803 100644 --- a/pkg/arvo/app/glob.hoon +++ b/pkg/arvo/app/glob.hoon @@ -105,12 +105,15 @@ (cat 3 js-name '.js') =+ .^(js=@t %cx :(weld home /app/landscape/js/bundle /[js-name]/js)) =+ .^(map=@t %cx :(weld home /app/landscape/js/bundle /[map-name]/map)) + =+ .^(sw=@t %cx :(weld home /app/landscape/js/bundle /serviceworker/js)) =+ !<(=js=mime (js-tube !>(js))) + =+ !<(=sw=mime (js-tube !>(sw))) =+ !<(=map=mime (map-tube !>(map))) =/ =glob:glob %- ~(gas by *glob:glob) :~ /[js-name]/js^js-mime /[map-name]/map^map-mime + /serviceworker/js^sw-mime == =/ =path /(cat 3 'glob-' (scot %uv (sham glob)))/glob [%pass /make %agent [our.bowl %hood] %poke %drum-put !>([path (jam glob)])]~ From 1445acdb99bea33d76d571484c23d51673b77b5d Mon Sep 17 00:00:00 2001 From: Liam Fitzgerald Date: Thu, 4 Feb 2021 15:30:59 +1000 Subject: [PATCH 018/338] landscape: register serviceworker at root --- pkg/arvo/app/landscape/index.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/arvo/app/landscape/index.html b/pkg/arvo/app/landscape/index.html index 7ee1362832..5d888d6fc0 100644 --- a/pkg/arvo/app/landscape/index.html +++ b/pkg/arvo/app/landscape/index.html @@ -27,7 +27,10 @@ From 1b19a95fea42627a1006b3bd9271eeee42625f61 Mon Sep 17 00:00:00 2001 From: Tyler Brown Cifu Shuster Date: Sun, 14 Feb 2021 14:11:27 -0800 Subject: [PATCH 019/338] interface: cleaning up imports --- pkg/interface/src/logic/api/base.ts | 18 +- pkg/interface/src/logic/api/contacts.ts | 11 +- pkg/interface/src/logic/api/global.ts | 4 +- pkg/interface/src/logic/api/graph.ts | 42 ++-- pkg/interface/src/logic/api/groups.ts | 12 +- pkg/interface/src/logic/api/hark.ts | 43 ++--- pkg/interface/src/logic/api/invite.ts | 6 +- pkg/interface/src/logic/api/launch.ts | 4 +- pkg/interface/src/logic/api/local.ts | 7 +- pkg/interface/src/logic/api/metadata.ts | 22 +-- pkg/interface/src/logic/api/s3.ts | 5 +- pkg/interface/src/logic/api/settings.ts | 56 +++--- .../src/logic/lib/BigIntOrderedMap.ts | 35 ++-- pkg/interface/src/logic/lib/OrderedMap.ts | 3 +- pkg/interface/src/logic/lib/bigInt.ts | 2 +- pkg/interface/src/logic/lib/group.ts | 22 +-- pkg/interface/src/logic/lib/hark.ts | 10 +- pkg/interface/src/logic/lib/notification.ts | 18 +- pkg/interface/src/logic/lib/post.ts | 4 +- pkg/interface/src/logic/lib/publish.ts | 47 +++-- .../src/logic/lib/relativePosition.tsx | 18 +- pkg/interface/src/logic/lib/tutorialModal.ts | 136 ++++++------- pkg/interface/src/logic/lib/useDrag.ts | 10 +- pkg/interface/src/logic/lib/useDropdown.ts | 14 +- pkg/interface/src/logic/lib/useHashLink.ts | 6 +- pkg/interface/src/logic/lib/useLazyScroll.ts | 12 +- .../src/logic/lib/useLocalStorageState.ts | 4 +- pkg/interface/src/logic/lib/useModal.tsx | 22 +-- .../src/logic/lib/useOutsideClick.ts | 15 +- .../src/logic/lib/usePreviousValue.ts | 6 +- pkg/interface/src/logic/lib/useQuery.ts | 6 +- pkg/interface/src/logic/lib/useS3.ts | 27 ++- .../logic/lib/useStatelessAsyncClickable.ts | 16 +- .../src/logic/lib/useWaitForProps.ts | 7 +- pkg/interface/src/logic/lib/util.ts | 172 +++++++++-------- pkg/interface/src/logic/lib/workspace.ts | 16 +- .../src/logic/reducers/contact-update.ts | 9 +- .../src/logic/reducers/group-update.ts | 13 +- .../src/logic/reducers/group-view.ts | 11 +- .../src/logic/reducers/hark-update.ts | 90 +++++---- .../src/logic/reducers/invite-update.ts | 5 +- .../src/logic/reducers/launch-update.ts | 3 +- .../src/logic/reducers/metadata-update.ts | 38 ++-- .../src/logic/reducers/settings-update.ts | 22 +-- pkg/interface/src/logic/state/local.tsx | 27 ++- pkg/interface/src/logic/store/base.ts | 4 +- pkg/interface/src/logic/store/store.ts | 15 +- pkg/interface/src/logic/store/type.ts | 17 +- pkg/interface/src/logic/subscription/base.ts | 16 +- .../src/logic/subscription/global.ts | 5 +- pkg/interface/src/types/cage.ts | 24 +-- pkg/interface/src/types/connection.ts | 1 - pkg/interface/src/types/contact-update.ts | 85 --------- pkg/interface/src/types/global.ts | 2 +- pkg/interface/src/types/graph-update.ts | 47 ----- pkg/interface/src/types/group-update.ts | 180 ------------------ pkg/interface/src/types/group-view.ts | 11 -- pkg/interface/src/types/hark-update.ts | 68 ------- pkg/interface/src/types/index.ts | 8 - pkg/interface/src/types/invite-update.ts | 68 ------- pkg/interface/src/types/launch-update.ts | 2 - pkg/interface/src/types/metadata-update.ts | 68 ------- pkg/interface/src/types/noun.ts | 49 ----- pkg/interface/src/types/s3-update.ts | 5 +- pkg/interface/src/types/settings.ts | 55 ------ pkg/interface/src/types/util.ts | 2 +- pkg/interface/src/types/workspace.ts | 2 - .../src/views/apps/chat/ChatResource.tsx | 20 +- .../views/apps/chat/components/ChatInput.tsx | 18 +- .../apps/chat/components/ChatMessage.tsx | 14 +- .../views/apps/chat/components/ChatWindow.tsx | 53 +++--- .../views/apps/launch/components/Groups.tsx | 26 ++- .../apps/launch/components/ModalButton.tsx | 9 +- .../src/views/apps/links/LinkResource.tsx | 37 ++-- .../src/views/apps/links/LinkWindow.tsx | 36 ++-- .../views/apps/links/components/LinkItem.tsx | 26 +-- .../apps/links/components/LinkSubmit.tsx | 30 +-- .../src/views/apps/notifications/graph.tsx | 123 ++++++------ .../src/views/apps/notifications/group.tsx | 44 ++--- .../src/views/apps/notifications/header.tsx | 34 ++-- .../src/views/apps/notifications/inbox.tsx | 76 ++++---- .../src/views/apps/notifications/invites.tsx | 71 ++----- .../src/views/apps/notifications/joining.tsx | 27 ++- .../src/views/apps/notifications/metadata.tsx | 32 ++-- .../views/apps/notifications/notification.tsx | 40 ++-- .../apps/notifications/notifications.tsx | 47 ++--- .../views/apps/notifications/preferences.tsx | 25 ++- .../apps/profile/components/EditProfile.tsx | 49 ++--- .../views/apps/profile/components/Profile.tsx | 53 +++--- .../apps/profile/components/SetStatus.tsx | 14 +- .../apps/profile/components/ViewProfile.tsx | 39 ++-- .../src/views/apps/profile/profile.tsx | 22 +-- .../views/apps/publish/PublishResource.tsx | 16 +- .../apps/publish/components/EditPost.tsx | 30 +-- .../publish/components/MarkdownEditor.tsx | 38 ++-- .../apps/publish/components/MarkdownField.tsx | 18 +- .../apps/publish/components/MetadataForm.tsx | 4 +- .../views/apps/publish/components/Note.tsx | 37 ++-- .../apps/publish/components/NoteForm.tsx | 13 +- .../publish/components/NoteNavigation.tsx | 30 +-- .../apps/publish/components/NotePreview.tsx | 10 +- .../apps/publish/components/NoteRoutes.tsx | 25 +-- .../apps/publish/components/Notebook.tsx | 19 +- .../apps/publish/components/NotebookPosts.tsx | 8 +- .../publish/components/NotebookRoutes.tsx | 26 ++- .../views/apps/publish/components/Writers.js | 4 +- .../apps/publish/components/new-post.tsx | 32 ++-- .../components/lib/BackgroundPicker.tsx | 30 ++- .../settings/components/lib/BucketList.tsx | 19 +- .../settings/components/lib/DisplayForm.tsx | 2 +- .../settings/components/lib/RemoteContent.tsx | 22 +-- .../apps/settings/components/lib/S3Form.tsx | 20 +- .../apps/settings/components/lib/Security.tsx | 6 +- .../src/views/apps/settings/settings.tsx | 25 ++- .../src/views/components/AsyncButton.tsx | 16 +- pkg/interface/src/views/components/Author.tsx | 14 +- pkg/interface/src/views/components/Body.tsx | 6 +- .../src/views/components/ChipInput.tsx | 38 ++-- .../src/views/components/ColorInput.tsx | 22 +-- .../src/views/components/CommentInput.tsx | 22 +-- .../src/views/components/CommentItem.tsx | 23 +-- .../src/views/components/Comments.tsx | 4 +- .../src/views/components/Dropdown.tsx | 29 +-- .../src/views/components/DropdownSearch.tsx | 45 ++--- .../src/views/components/ErrorBoundary.tsx | 4 +- .../src/views/components/FormError.tsx | 12 +- .../src/views/components/FormSubmit.tsx | 11 +- .../src/views/components/FormikOnBlur.tsx | 6 +- .../src/views/components/GroupLink.tsx | 24 +-- .../src/views/components/GroupSearch.tsx | 26 +-- .../src/views/components/HoverBox.tsx | 14 +- .../src/views/components/IconRadio.tsx | 71 +++---- .../src/views/components/ImageInput.tsx | 23 +-- .../src/views/components/Invite/Group.tsx | 20 +- .../components/Invite/InviteSkeleton.tsx | 10 +- .../views/components/Invite/JoinSkeleton.tsx | 11 +- .../src/views/components/Invite/index.tsx | 46 +++-- .../src/views/components/Loading.tsx | 8 +- .../src/views/components/MentionText.tsx | 2 +- .../src/views/components/ModalOverlay.tsx | 12 +- .../src/views/components/OverlaySigil.tsx | 4 +- pkg/interface/src/views/components/Portal.tsx | 8 +- .../src/views/components/ProfileOverlay.tsx | 9 +- .../src/views/components/RemoteContent.tsx | 14 +- .../src/views/components/ShipSearch.tsx | 55 +++--- .../views/components/StatelessAsyncAction.tsx | 21 +- .../views/components/StatelessAsyncButton.tsx | 27 ++- .../views/components/StatelessAsyncToggle.tsx | 21 +- .../src/views/components/StatusBarItem.tsx | 6 +- .../src/views/components/SubmitDragger.tsx | 11 +- pkg/interface/src/views/components/Tab.tsx | 8 +- .../src/views/components/Triangle.tsx | 36 ++-- .../src/views/components/UnjoinedResource.tsx | 30 +-- .../src/views/components/VirtualScroller.tsx | 48 +++-- .../src/views/components/leap/Omnibox.tsx | 53 +++--- .../src/views/components/useTutorialModal.tsx | 8 +- pkg/interface/src/views/components/withS3.tsx | 6 +- .../ChannelPermissions.tsx | 82 ++++---- .../ChannelPopoverRoutes/Details.tsx | 33 ++-- .../ChannelPopoverRoutes/Notifications.tsx | 19 +- .../ChannelPopoverRoutes/Sidebar.tsx | 21 +- .../components/ChannelPopoverRoutes/index.tsx | 42 ++-- .../components/ChannelWritePerms.tsx | 16 +- .../landscape/components/DeleteGroup.tsx | 36 ++-- .../components/GroupSettings/Admin.tsx | 48 +++-- .../components/GroupSettings/Channels.tsx | 24 +-- .../GroupSettings/GroupSettings.tsx | 29 +-- .../components/GroupSettings/Personal.tsx | 33 +--- .../landscape/components/GroupSummary.tsx | 22 ++- .../landscape/components/GroupSwitcher.tsx | 9 +- .../landscape/components/GroupifyForm.tsx | 23 +-- .../views/landscape/components/GroupsPane.tsx | 73 ++++--- .../landscape/components/InvitePopover.tsx | 37 ++-- .../views/landscape/components/JoinGroup.tsx | 71 ++++--- .../landscape/components/MetadataIcon.tsx | 10 +- .../views/landscape/components/NewChannel.tsx | 15 +- .../views/landscape/components/NewGroup.tsx | 43 +++-- .../landscape/components/Participants.tsx | 16 +- .../landscape/components/PopoverRoutes.tsx | 65 +++---- .../views/landscape/components/Resource.tsx | 43 ++--- .../landscape/components/ResourceSkeleton.tsx | 59 +++--- .../landscape/components/Sidebar/Apps.tsx | 11 +- .../landscape/components/Sidebar/Sidebar.tsx | 8 +- .../components/Sidebar/SidebarItem.tsx | 62 +++--- .../components/Sidebar/SidebarList.tsx | 24 +-- .../components/Sidebar/SidebarListHeader.tsx | 55 +++--- .../landscape/components/Sidebar/types.ts | 14 +- .../landscape/components/SidebarItem.tsx | 14 +- .../views/landscape/components/Skeleton.tsx | 19 +- .../landscape/components/TutorialModal.tsx | 67 ++++--- pkg/interface/src/views/landscape/index.tsx | 38 ++-- 191 files changed, 2245 insertions(+), 3029 deletions(-) delete mode 100644 pkg/interface/src/types/contact-update.ts delete mode 100644 pkg/interface/src/types/graph-update.ts delete mode 100644 pkg/interface/src/types/group-update.ts delete mode 100644 pkg/interface/src/types/group-view.ts delete mode 100644 pkg/interface/src/types/hark-update.ts delete mode 100644 pkg/interface/src/types/invite-update.ts delete mode 100644 pkg/interface/src/types/metadata-update.ts delete mode 100644 pkg/interface/src/types/noun.ts delete mode 100644 pkg/interface/src/types/settings.ts diff --git a/pkg/interface/src/logic/api/base.ts b/pkg/interface/src/logic/api/base.ts index 085c4cc326..01b70fabc2 100644 --- a/pkg/interface/src/logic/api/base.ts +++ b/pkg/interface/src/logic/api/base.ts @@ -1,6 +1,5 @@ -import _ from "lodash"; -import { uuid } from "../lib/util"; -import { Patp, Path } from "~/types/noun"; +import _ from 'lodash'; +import { Patp, Path } from '@urbit/api'; import BaseStore from '../store/base'; export default class BaseApi { @@ -26,8 +25,8 @@ export default class BaseApi { data: event, from: { ship, - path, - }, + path + } }); }, (qui) => { @@ -50,8 +49,12 @@ export default class BaseApi { appl, mark, data, - (json) => { resolve(json); }, - (err) => { reject(err); } + (json) => { + resolve(json); +}, + (err) => { + reject(err); +} ); }); } @@ -69,5 +72,4 @@ export default class BaseApi { return res.json(); } - } diff --git a/pkg/interface/src/logic/api/contacts.ts b/pkg/interface/src/logic/api/contacts.ts index ca1f0a338a..ae6a6972a0 100644 --- a/pkg/interface/src/logic/api/contacts.ts +++ b/pkg/interface/src/logic/api/contacts.ts @@ -1,8 +1,7 @@ import BaseApi from './base'; import { StoreState } from '../store/type'; -import { Patp, Path, Enc } from '~/types/noun'; -import { Contact, ContactEdit } from '~/types/contact-update'; -import { GroupPolicy, Resource } from '~/types/group-update'; +import { Patp } from '@urbit/api'; +import { ContactEdit } from '@urbit/api/contacts'; export default class ContactsApi extends BaseApi { add(ship: Patp, contact: any) { @@ -31,7 +30,7 @@ export default class ContactsApi extends BaseApi { ship, 'edit-field': editField, timestamp: Date.now() - }, + } }); } @@ -62,7 +61,7 @@ export default class ContactsApi extends BaseApi { return this.action( 'contact-push-hook', 'contact-share', - { share: recipient }, + { share: recipient } ); } @@ -85,7 +84,7 @@ export default class ContactsApi extends BaseApi { } private storeAction(action: any): Promise { - return this.action('contact-store', 'contact-update', action) + return this.action('contact-store', 'contact-update', action); } private viewAction(threadName: string, action: any) { diff --git a/pkg/interface/src/logic/api/global.ts b/pkg/interface/src/logic/api/global.ts index 8ed02020b4..cc7c1291c3 100644 --- a/pkg/interface/src/logic/api/global.ts +++ b/pkg/interface/src/logic/api/global.ts @@ -1,4 +1,4 @@ -import { Patp } from '~/types/noun'; +import { Patp } from '@urbit/api'; import BaseApi from './base'; import { StoreState } from '../store/type'; import GlobalStore from '../store/store'; @@ -10,7 +10,7 @@ import GroupsApi from './groups'; import LaunchApi from './launch'; import GraphApi from './graph'; import S3Api from './s3'; -import {HarkApi} from './hark'; +import { HarkApi } from './hark'; import SettingsApi from './settings'; export default class GlobalApi extends BaseApi { diff --git a/pkg/interface/src/logic/api/graph.ts b/pkg/interface/src/logic/api/graph.ts index 0606a2c1e8..58b330da1e 100644 --- a/pkg/interface/src/logic/api/graph.ts +++ b/pkg/interface/src/logic/api/graph.ts @@ -1,14 +1,14 @@ import BaseApi from './base'; import { StoreState } from '../store/type'; -import { Patp, Path, PatpNoSig } from '~/types/noun'; +import { Patp, Path } from '@urbit/api'; import _ from 'lodash'; -import {makeResource, resourceFromPath} from '../lib/group'; -import {GroupPolicy, Enc, Post, NodeMap, Content, Resource} from '~/types'; +import { makeResource, resourceFromPath } from '../lib/group'; +import { GroupPolicy, Enc, Post, Content } from '@urbit/api'; import { numToUd, unixToDa, decToUd, deSig, resourceAsPath } from '~/logic/lib/util'; export const createBlankNodeWithChildPost = ( - parentIndex: string = '', - childIndex: string = '', + parentIndex = '', + childIndex = '', contents: Content[] ) => { const date = unixToDa(Date.now()).toString(); @@ -37,11 +37,11 @@ export const createBlankNodeWithChildPost = ( signatures: [] }, children: childGraph - }; + }; }; function markPending(nodes: any) { - _.forEach(nodes, node => { + _.forEach(nodes, (node) => { node.post.author = deSig(node.post.author); node.post.pending = true; markPending(node.children || {}); @@ -50,8 +50,8 @@ function markPending(nodes: any) { export const createPost = ( contents: Content[], - parentIndex: string = '', - childIndex:string = 'DATE_PLACEHOLDER' + parentIndex = '', + childIndex = 'DATE_PLACEHOLDER' ) => { if (childIndex === 'DATE_PLACEHOLDER') { childIndex = unixToDa(Date.now()).toString(); @@ -80,11 +80,10 @@ function moduleToMark(mod: string): string | undefined { } export default class GraphApi extends BaseApi { - joiningGraphs = new Set(); private storeAction(action: any): Promise { - return this.action('graph-store', 'graph-update', action) + return this.action('graph-store', 'graph-update', action); } private viewAction(threadName: string, action: any) { @@ -106,12 +105,12 @@ export default class GraphApi extends BaseApi { const resource = makeResource(`~${window.ship}`, name); return this.viewAction('graph-create', { - "create": { + 'create': { resource, title, description, associated, - "module": mod, + 'module': mod, mark: moduleToMark(mod) } }); @@ -127,12 +126,12 @@ export default class GraphApi extends BaseApi { const resource = makeResource(`~${window.ship}`, name); return this.viewAction('graph-create', { - "create": { + 'create': { resource, title, description, associated: { policy }, - "module": mod, + 'module': mod, mark: moduleToMark(mod) } }); @@ -148,9 +147,9 @@ export default class GraphApi extends BaseApi { return this.viewAction('graph-join', { join: { resource, - ship, + ship } - }).then(res => { + }).then((res) => { this.joiningGraphs.delete(rid); return res; }); @@ -159,7 +158,7 @@ export default class GraphApi extends BaseApi { deleteGraph(name: string) { const resource = makeResource(`~${window.ship}`, name); return this.viewAction('graph-delete', { - "delete": { + 'delete': { resource } }); @@ -168,7 +167,7 @@ export default class GraphApi extends BaseApi { leaveGraph(ship: Patp, name: string) { const resource = makeResource(ship, name); return this.viewAction('graph-leave', { - "leave": { + 'leave': { resource } }); @@ -203,7 +202,7 @@ export default class GraphApi extends BaseApi { } addPost(ship: Patp, name: string, post: Post) { - let nodes = {}; + const nodes = {}; nodes[post.index] = { post, children: null @@ -212,7 +211,7 @@ export default class GraphApi extends BaseApi { } addNode(ship: Patp, name: string, node: Object) { - let nodes = {}; + const nodes = {}; nodes[node.post.index] = node; return this.addNodes(ship, name, nodes); @@ -300,7 +299,6 @@ export default class GraphApi extends BaseApi { this.store.handleEvent({ data }); } - getGraphSubset(ship: string, resource: string, start: string, end: string) { return this.scry( 'graph-store', diff --git a/pkg/interface/src/logic/api/groups.ts b/pkg/interface/src/logic/api/groups.ts index de2f4b488f..f0bab91f0b 100644 --- a/pkg/interface/src/logic/api/groups.ts +++ b/pkg/interface/src/logic/api/groups.ts @@ -1,14 +1,14 @@ import BaseApi from './base'; import { StoreState } from '../store/type'; -import { Path, Patp, Enc } from '~/types/noun'; +import { Path, Patp, Enc } from '@urbit/api'; import { GroupAction, GroupPolicy, Resource, Tag, - GroupPolicyDiff, -} from '~/types/group-update'; -import {makeResource} from '../lib/group'; + GroupPolicyDiff +} from '@urbit/api/groups'; +import { makeResource } from '../lib/group'; export default class GroupsApi extends BaseApi { remove(resource: Resource, ships: Patp[]) { @@ -38,7 +38,7 @@ export default class GroupsApi extends BaseApi { join(ship: string, name: string) { const resource = makeResource(ship, name); - return this.viewAction({ join: { resource, ship }}); + return this.viewAction({ join: { resource, ship } }); } create(name: string, policy: Enc, title: string, description: string) { @@ -76,7 +76,6 @@ export default class GroupsApi extends BaseApi { description } }); - } private proxyAction(action: GroupAction) { @@ -93,6 +92,5 @@ export default class GroupsApi extends BaseApi { private viewAction(action: any) { return this.action('group-view', 'group-view-action', action); - } } diff --git a/pkg/interface/src/logic/api/hark.ts b/pkg/interface/src/logic/api/hark.ts index 4dadeb1690..b807201a1a 100644 --- a/pkg/interface/src/logic/api/hark.ts +++ b/pkg/interface/src/logic/api/hark.ts @@ -1,24 +1,23 @@ -import BaseApi from "./base"; -import { StoreState } from "../store/type"; -import { dateToDa, decToUd } from "../lib/util"; -import {NotifIndex, IndexedNotification, Association, GraphNotifDescription} from "~/types"; +import BaseApi from './base'; +import { StoreState } from '../store/type'; +import { dateToDa, decToUd } from '../lib/util'; +import { NotifIndex, IndexedNotification, Association, GraphNotifDescription } from '@urbit/api'; import { BigInteger } from 'big-integer'; -import {getParentIndex} from "../lib/notification"; +import { getParentIndex } from '../lib/notification'; export class HarkApi extends BaseApi { private harkAction(action: any): Promise { - return this.action("hark-store", "hark-action", action); + return this.action('hark-store', 'hark-action', action); } private graphHookAction(action: any) { - return this.action("hark-graph-hook", "hark-graph-hook-action", action); + return this.action('hark-graph-hook', 'hark-graph-hook-action', action); } private groupHookAction(action: any) { - return this.action("hark-group-hook", "hark-group-hook-action", action); + return this.action('hark-group-hook', 'hark-group-hook-action', action); } - private actOnNotification(frond: string, intTime: BigInteger, index: NotifIndex) { const time = decToUd(intTime.toString()); return this.harkAction({ @@ -74,12 +73,10 @@ export class HarkApi extends BaseApi { module: association.metadata.module, description, index: parent - } }, + } } }); } - - markEachAsRead(association: Association, parent: string, child: string, description: GraphNotifDescription, mod: string) { return this.harkAction({ 'read-each': { @@ -116,7 +113,7 @@ export class HarkApi extends BaseApi { mute(notif: IndexedNotification) { if('graph' in notif.index && 'graph' in notif.notification.contents) { const { index } = notif; - const parentIndex = getParentIndex(index.graph, notif.notification.contents.graph) + const parentIndex = getParentIndex(index.graph, notif.notification.contents.graph); if(!parentIndex) { return Promise.resolve(); } @@ -132,7 +129,7 @@ export class HarkApi extends BaseApi { unmute(notif: IndexedNotification) { if('graph' in notif.index && 'graph' in notif.notification.contents) { const { index } = notif; - const parentIndex = getParentIndex(index.graph, notif.notification.contents.graph) + const parentIndex = getParentIndex(index.graph, notif.notification.contents.graph); if(!parentIndex) { return Promise.resolve(); } @@ -147,7 +144,7 @@ export class HarkApi extends BaseApi { ignoreGroup(group: string) { return this.groupHookAction({ ignore: group - }) + }); } ignoreGraph(graph: string, index: string) { @@ -156,13 +153,13 @@ export class HarkApi extends BaseApi { graph, index } - }) + }); } listenGroup(group: string) { return this.groupHookAction({ listen: group - }) + }); } listenGraph(graph: string, index: string) { @@ -171,7 +168,7 @@ export class HarkApi extends BaseApi { graph, index } - }) + }); } async getMore(): Promise { @@ -183,16 +180,16 @@ export class HarkApi extends BaseApi { async getSubset(offset:number, count:number, isArchive: boolean) { const where = isArchive ? 'archive' : 'inbox'; - const data = await this.scry("hark-store", `/recent/${where}/${offset}/${count}`); + const data = await this.scry('hark-store', `/recent/${where}/${offset}/${count}`); this.store.handleEvent({ data }); } async getTimeSubset(start?: Date, end?: Date) { - const s = start ? dateToDa(start) : "-"; - const e = end ? dateToDa(end) : "-"; - const result = await this.scry("hark-hook", `/recent/${s}/${e}`); + const s = start ? dateToDa(start) : '-'; + const e = end ? dateToDa(end) : '-'; + const result = await this.scry('hark-hook', `/recent/${s}/${e}`); this.store.handleEvent({ - data: result, + data: result }); } } diff --git a/pkg/interface/src/logic/api/invite.ts b/pkg/interface/src/logic/api/invite.ts index 89a7307688..dc390d12d1 100644 --- a/pkg/interface/src/logic/api/invite.ts +++ b/pkg/interface/src/logic/api/invite.ts @@ -1,6 +1,6 @@ -import BaseApi from "./base"; -import { StoreState } from "../store/type"; -import { Serial, Path } from "~/types/noun"; +import BaseApi from './base'; +import { StoreState } from '../store/type'; +import { Serial, Path } from '@urbit/api'; export default class InviteApi extends BaseApi { accept(app: string, uid: Serial) { diff --git a/pkg/interface/src/logic/api/launch.ts b/pkg/interface/src/logic/api/launch.ts index ce0a09a1c0..3bba3b3cc0 100644 --- a/pkg/interface/src/logic/api/launch.ts +++ b/pkg/interface/src/logic/api/launch.ts @@ -2,7 +2,7 @@ import BaseApi from './base'; import { StoreState } from '../store/type'; export default class LaunchApi extends BaseApi { - add(name: string, tile = { basic : { title: '', linkedUrl: '', iconUrl: '' }}) { + add(name: string, tile = { basic : { title: '', linkedUrl: '', iconUrl: '' } }) { return this.launchAction({ add: { name, tile } }); } @@ -15,7 +15,7 @@ export default class LaunchApi extends BaseApi { } changeIsShown(name: string, isShown = true) { - return this.launchAction({ 'change-is-shown': { name, isShown }}); + return this.launchAction({ 'change-is-shown': { name, isShown } }); } weather(location: string) { diff --git a/pkg/interface/src/logic/api/local.ts b/pkg/interface/src/logic/api/local.ts index 8446f27ce3..e5bad49a3f 100644 --- a/pkg/interface/src/logic/api/local.ts +++ b/pkg/interface/src/logic/api/local.ts @@ -1,9 +1,9 @@ -import BaseApi from "./base"; -import { StoreState } from "../store/type"; +import BaseApi from './base'; +import { StoreState } from '../store/type'; export default class LocalApi extends BaseApi { getBaseHash() { - this.scry('file-server', '/clay/base/hash').then(baseHash => { + this.scry('file-server', '/clay/base/hash').then((baseHash) => { this.store.handleEvent({ data: { local: { baseHash } } }); }); } @@ -11,5 +11,4 @@ export default class LocalApi extends BaseApi { dehydrate() { this.store.dehydrate(); } - } diff --git a/pkg/interface/src/logic/api/metadata.ts b/pkg/interface/src/logic/api/metadata.ts index c4e20ae2f1..c2d388dfc3 100644 --- a/pkg/interface/src/logic/api/metadata.ts +++ b/pkg/interface/src/logic/api/metadata.ts @@ -1,12 +1,10 @@ import BaseApi from './base'; import { StoreState } from '../store/type'; -import { Path, Patp, Association, Metadata, MetadataUpdatePreview } from '~/types'; -import {uxToHex} from '../lib/util'; +import { Path, Patp, Association, Metadata, MetadataUpdatePreview } from '@urbit/api'; +import { uxToHex } from '../lib/util'; export default class MetadataApi extends BaseApi { - - metadataAdd(appName: string, resource: Path, group: Path, title: string, description: string, dateCreated: string, color: string, moduleName: string) { const creator = `~${this.ship}`; return this.metadataAction({ @@ -44,9 +42,9 @@ export default class MetadataApi extends BaseApi { } update(association: Association, newMetadata: Partial) { - const metadata = {...association.metadata, ...newMetadata }; + const metadata = { ...association.metadata, ...newMetadata }; metadata.color = uxToHex(metadata.color); - return this.metadataAction({ + return this.metadataAction({ add: { group: association.group, resource: { @@ -69,10 +67,10 @@ export default class MetadataApi extends BaseApi { } done = true; tempChannel.delete(); - reject(new Error("offline")) + reject(new Error('offline')); }, 15000); - tempChannel.subscribe(window.ship, "metadata-pull-hook", `/preview${group}`, + tempChannel.subscribe(window.ship, 'metadata-pull-hook', `/preview${group}`, (err) => { console.error(err); reject(err); @@ -88,24 +86,22 @@ export default class MetadataApi extends BaseApi { } else { done = true; tempChannel.delete(); - reject(new Error("no-permissions")); + reject(new Error('no-permissions')); } }, (quit) => { tempChannel.delete(); if(!done) { - reject(new Error("offline")) + reject(new Error('offline')); } }, (a) => { console.log(a); } ); - }) + }); } - - private metadataAction(data) { return this.action('metadata-push-hook', 'metadata-update', data); } diff --git a/pkg/interface/src/logic/api/s3.ts b/pkg/interface/src/logic/api/s3.ts index 834cc6ffe1..1d775ef775 100644 --- a/pkg/interface/src/logic/api/s3.ts +++ b/pkg/interface/src/logic/api/s3.ts @@ -1,10 +1,8 @@ import BaseApi from './base'; import { StoreState } from '../store/type'; -import {S3Update} from '../../types/s3-update'; - +import { S3Update } from '../../types/s3-update'; export default class S3Api extends BaseApi { - setCurrentBucket(bucket: string) { return this.s3Action({ 'set-current-bucket': bucket }); } @@ -32,6 +30,5 @@ export default class S3Api extends BaseApi { private s3Action(data: any) { return this.action('s3-store', 's3-action', data); } - } diff --git a/pkg/interface/src/logic/api/settings.ts b/pkg/interface/src/logic/api/settings.ts index cd0cd736ff..3f98d801ca 100644 --- a/pkg/interface/src/logic/api/settings.ts +++ b/pkg/interface/src/logic/api/settings.ts @@ -1,13 +1,9 @@ import BaseApi from './base'; import { StoreState } from '../store/type'; -import { - SettingsUpdate, - SettingsData, - Key, +import { Key, Value, - Bucket, -} from '~/types/settings'; - + Bucket +} from '@urbit/api/settings'; export default class SettingsApi extends BaseApi { private storeAction(action: SettingsEvent): Promise { @@ -16,59 +12,59 @@ export default class SettingsApi extends BaseApi { putBucket(key: Key, bucket: Bucket) { this.storeAction({ - "put-bucket": { - "bucket-key": key, - "bucket": bucket, + 'put-bucket': { + 'bucket-key': key, + 'bucket': bucket } }); } delBucket(key: Key) { this.storeAction({ - "del-bucket": { - "bucket-key": key, + 'del-bucket': { + 'bucket-key': key } }); } putEntry(buc: Key, key: Key, val: Value) { return this.storeAction({ - "put-entry": { - "bucket-key": buc, - "entry-key": key, - "value": val, + 'put-entry': { + 'bucket-key': buc, + 'entry-key': key, + 'value': val } }); } delEntry(buc: Key, key: Key) { this.storeAction({ - "put-entry": { - "bucket-key": buc, - "entry-key": key, + 'put-entry': { + 'bucket-key': buc, + 'entry-key': key } }); } async getAll() { - const data = await this.scry("settings-store", "/all"); - this.store.handleEvent({data: {"settings-data": data.all}}); + const data = await this.scry('settings-store', '/all'); + this.store.handleEvent({ data: { 'settings-data': data.all } }); } async getBucket(bucket: Key) { const data = await this.scry('settings-store', `/bucket/${bucket}`); - this.store.handleEvent({data: {"settings-data": { - "bucket-key": bucket, - "bucket": data.bucket, - }}}); + this.store.handleEvent({ data: { 'settings-data': { + 'bucket-key': bucket, + 'bucket': data.bucket + } } }); } async getEntry(bucket: Key, entry: Key) { const data = await this.scry('settings-store', `/entry/${bucket}/${entry}`); - this.store.handleEvent({data: {"settings-data": { - "bucket-key": bucket, - "entry-key": entry, - "entry": data.entry, - }}}); + this.store.handleEvent({ data: { 'settings-data': { + 'bucket-key': bucket, + 'entry-key': entry, + 'entry': data.entry + } } }); } } diff --git a/pkg/interface/src/logic/lib/BigIntOrderedMap.ts b/pkg/interface/src/logic/lib/BigIntOrderedMap.ts index 069d520020..21fc1c8cac 100644 --- a/pkg/interface/src/logic/lib/BigIntOrderedMap.ts +++ b/pkg/interface/src/logic/lib/BigIntOrderedMap.ts @@ -1,4 +1,4 @@ -import bigInt, { BigInteger } from "big-integer"; +import bigInt, { BigInteger } from 'big-integer'; interface NonemptyNode { n: [BigInteger, V]; @@ -14,7 +14,7 @@ type MapNode = NonemptyNode | null; */ export class BigIntOrderedMap implements Iterable<[BigInteger, V]> { private root: MapNode = null; - size: number = 0; + size = 0; constructor(initial: [BigInteger, V][] = []) { initial.forEach(([key, val]) => { @@ -48,13 +48,12 @@ export class BigIntOrderedMap implements Iterable<[BigInteger, V]> { * Put an item by a key */ set(key: BigInteger, value: V): void { - const inner = (node: MapNode) => { if (!node) { return { n: [key, value], l: null, - r: null, + r: null }; } const [k] = node.n; @@ -62,22 +61,22 @@ export class BigIntOrderedMap implements Iterable<[BigInteger, V]> { this.size--; return { ...node, - n: [k, value], + n: [k, value] }; } if (key.gt(k)) { const l = inner(node.l); if (!l) { - throw new Error("invariant violation"); + throw new Error('invariant violation'); } return { ...node, - l, + l }; } const r = inner(node.r); if (!r) { - throw new Error("invariant violation"); + throw new Error('invariant violation'); } return { ...node, r }; @@ -133,8 +132,8 @@ export class BigIntOrderedMap implements Iterable<[BigInteger, V]> { bool, { ...node, - l, - }, + l + } ]; } @@ -143,8 +142,8 @@ export class BigIntOrderedMap implements Iterable<[BigInteger, V]> { bool, { ...node, - r, - }, + r + } ]; }; const [ret, newRoot] = inner(this.root); @@ -165,12 +164,12 @@ export class BigIntOrderedMap implements Iterable<[BigInteger, V]> { } return { ...node.l, - r: inner(node.r), + r: inner(node.r) }; }; return inner(nod); } - + peekLargest(): [BigInteger, V] | undefined { const inner = (node: MapNode) => { if(!node) { @@ -180,7 +179,7 @@ export class BigIntOrderedMap implements Iterable<[BigInteger, V]> { return inner(node.l); } return node.n; - } + }; return inner(this.root); } @@ -193,7 +192,7 @@ export class BigIntOrderedMap implements Iterable<[BigInteger, V]> { return inner(node.r); } return node.n; - } + }; return inner(this.root); } @@ -208,7 +207,7 @@ export class BigIntOrderedMap implements Iterable<[BigInteger, V]> { } [Symbol.iterator](): IterableIterator<[BigInteger, V]> { - let result: [BigInteger, V][] = []; + const result: [BigInteger, V][] = []; const inner = (node: MapNode) => { if (!node) { return; @@ -227,7 +226,7 @@ export class BigIntOrderedMap implements Iterable<[BigInteger, V]> { return { value: result[idx++], done: false }; } return { done: true, value: null }; - }, + } }; } } diff --git a/pkg/interface/src/logic/lib/OrderedMap.ts b/pkg/interface/src/logic/lib/OrderedMap.ts index d66346ff61..91ec52b783 100644 --- a/pkg/interface/src/logic/lib/OrderedMap.ts +++ b/pkg/interface/src/logic/lib/OrderedMap.ts @@ -1,7 +1,6 @@ export class OrderedMap extends Map implements Iterable<[number, V]> { - [Symbol.iterator](): IterableIterator<[number, V]> { const sorted = Array.from(super[Symbol.iterator]()).sort( ([a], [b]) => b - a @@ -15,7 +14,7 @@ export class OrderedMap extends Map } else { return { done: true, value: null }; } - }, + } }; } } diff --git a/pkg/interface/src/logic/lib/bigInt.ts b/pkg/interface/src/logic/lib/bigInt.ts index ecc6dda0af..01da28b455 100644 --- a/pkg/interface/src/logic/lib/bigInt.ts +++ b/pkg/interface/src/logic/lib/bigInt.ts @@ -1,4 +1,4 @@ -import bigInt, { BigInteger } from "big-integer"; +import bigInt, { BigInteger } from 'big-integer'; export function max(a: BigInteger, b: BigInteger) { return a.gt(b) ? a : b; diff --git a/pkg/interface/src/logic/lib/group.ts b/pkg/interface/src/logic/lib/group.ts index edc525d89b..2eb81e015b 100644 --- a/pkg/interface/src/logic/lib/group.ts +++ b/pkg/interface/src/logic/lib/group.ts @@ -1,7 +1,7 @@ -import _ from "lodash"; -import { roleTags, RoleTags, Group, Resource } from "~/types/group-update"; -import { PatpNoSig, Path } from "~/types/noun"; -import {deSig} from "./util"; +import _ from 'lodash'; +import { roleTags, RoleTags, Group, Resource } from '@urbit/api/groups'; +import { PatpNoSig, Path } from '@urbit/api'; +import { deSig } from './util'; export function roleForShip( group: Group, @@ -14,7 +14,7 @@ export function roleForShip( } export function resourceFromPath(path: Path): Resource { - const [, , ship, name] = path.split("/"); + const [, , ship, name] = path.split('/'); return { ship, name }; } @@ -25,7 +25,7 @@ export function makeResource(ship: string, name: string) { export function isWriter(group: Group, resource: string) { const writers: Set | undefined = _.get( group, - ["tags", "graph", resource, "writers"], + ['tags', 'graph', resource, 'writers'], undefined ); const admins = group?.tags?.role?.admin ?? new Set(); @@ -36,18 +36,18 @@ export function isWriter(group: Group, resource: string) { } } -export function isChannelAdmin(group: Group, resource: string, ship: string = `~${window.ship}`) { +export function isChannelAdmin(group: Group, resource: string, ship = `~${window.ship}`) { const role = roleForShip(group, ship.slice(1)); return ( isHost(resource, ship) || - role === "admin" || - role === "moderator" + role === 'admin' || + role === 'moderator' ); } -export function isHost(resource: string, ship: string = `~${window.ship}`) { - const [, , host] = resource.split("/"); +export function isHost(resource: string, ship = `~${window.ship}`) { + const [, , host] = resource.split('/'); return ship === host; } diff --git a/pkg/interface/src/logic/lib/hark.ts b/pkg/interface/src/logic/lib/hark.ts index ee5ecd7618..b65a09603d 100644 --- a/pkg/interface/src/logic/lib/hark.ts +++ b/pkg/interface/src/logic/lib/hark.ts @@ -1,6 +1,6 @@ -import bigInt, { BigInteger } from "big-integer"; -import f from "lodash/fp"; -import { Unreads } from "~/types"; +import bigInt, { BigInteger } from 'big-integer'; +import f from 'lodash/fp'; +import { Unreads } from '@urbit/api'; export function getLastSeen( unreads: Unreads, @@ -8,10 +8,10 @@ export function getLastSeen( index: string ): BigInteger | undefined { const lastSeenIdx = unreads.graph?.[path]?.[index]?.unreads; - if (!(typeof lastSeenIdx === "string")) { + if (!(typeof lastSeenIdx === 'string')) { return bigInt.zero; } - return f.flow(f.split("/"), f.last, (x) => (!!x ? bigInt(x) : undefined))( + return f.flow(f.split('/'), f.last, x => (x ? bigInt(x) : undefined))( lastSeenIdx ); } diff --git a/pkg/interface/src/logic/lib/notification.ts b/pkg/interface/src/logic/lib/notification.ts index 87288d83d2..bd2979f409 100644 --- a/pkg/interface/src/logic/lib/notification.ts +++ b/pkg/interface/src/logic/lib/notification.ts @@ -1,19 +1,19 @@ -import { GraphNotifIndex, GraphNotificationContents } from "~/types"; +import { GraphNotifIndex, GraphNotificationContents } from '@urbit/api'; export function getParentIndex( idx: GraphNotifIndex, contents: GraphNotificationContents ) { - const origIndex = contents[0].index.slice(1).split("/"); - const ret = (i: string[]) => `/${i.join("/")}`; + const origIndex = contents[0].index.slice(1).split('/'); + const ret = (i: string[]) => `/${i.join('/')}`; switch (idx.description) { - case "link": - return "/"; - case "comment": + case 'link': + return '/'; + case 'comment': return ret(origIndex.slice(0, 1)); - case "note": - return "/"; - case "mention": + case 'note': + return '/'; + case 'mention': return undefined; default: return undefined; diff --git a/pkg/interface/src/logic/lib/post.ts b/pkg/interface/src/logic/lib/post.ts index 1a311de55c..397563283a 100644 --- a/pkg/interface/src/logic/lib/post.ts +++ b/pkg/interface/src/logic/lib/post.ts @@ -1,4 +1,4 @@ -import { Post, GraphNode } from "~/types"; +import { Post, GraphNode } from '@urbit/api'; export const buntPost = (): Post => ({ author: '', @@ -10,7 +10,7 @@ export const buntPost = (): Post => ({ }); export function makeNodeMap(posts: Post[]): Record { - let nodes = {}; + const nodes = {}; posts.forEach((p) => { nodes[p.index] = { children: { empty: null }, post: p }; }); diff --git a/pkg/interface/src/logic/lib/publish.ts b/pkg/interface/src/logic/lib/publish.ts index 10c64aecf3..ce616b3cf5 100644 --- a/pkg/interface/src/logic/lib/publish.ts +++ b/pkg/interface/src/logic/lib/publish.ts @@ -1,8 +1,8 @@ -import { Post, GraphNode, TextContent, Graph, NodeMap } from "~/types"; +import { Post, GraphNode, TextContent, Graph, NodeMap } from '@urbit/api'; import { buntPost } from '~/logic/lib/post'; -import { unixToDa } from "~/logic/lib/util"; -import {BigIntOrderedMap} from "./BigIntOrderedMap"; -import bigInt, {BigInteger} from 'big-integer'; +import { unixToDa } from '~/logic/lib/util'; +import { BigIntOrderedMap } from './BigIntOrderedMap'; +import bigInt, { BigInteger } from 'big-integer'; export function newPost( title: string, @@ -12,20 +12,20 @@ export function newPost( const nowDa = unixToDa(now); const root: Post = { author: `~${window.ship}`, - index: "/" + nowDa.toString(), - "time-sent": now, + index: '/' + nowDa.toString(), + 'time-sent': now, contents: [], hash: null, - signatures: [], + signatures: [] }; - const revContainer: Post = { ...root, index: root.index + "/1" }; - const commentsContainer = { ...root, index: root.index + "/2" }; + const revContainer: Post = { ...root, index: root.index + '/1' }; + const commentsContainer = { ...root, index: root.index + '/2' }; const firstRevision: Post = { ...revContainer, - index: revContainer.index + "/1", - contents: [{ text: title }, { text: body }], + index: revContainer.index + '/1', + contents: [{ text: title }, { text: body }] }; const nodes = { @@ -37,16 +37,16 @@ export function newPost( children: { 1: { post: firstRevision, - children: null, - }, - }, + children: null + } + } }, 2: { post: commentsContainer, children: null - }, - }, - }, + } + } + } }; return [nowDa, nodes]; @@ -57,15 +57,15 @@ export function editPost(rev: number, noteId: BigInteger, title: string, body: s const newRev: Post = { author: `~${window.ship}`, index: `/${noteId.toString()}/1/${rev}`, - "time-sent": now, + 'time-sent': now, contents: [{ text: title }, { text: body }], hash: null, - signatures: [], + signatures: [] }; const nodes = { [newRev.index]: { post: newRev, - children: null + children: null } }; @@ -74,7 +74,7 @@ export function editPost(rev: number, noteId: BigInteger, title: string, body: s export function getLatestRevision(node: GraphNode): [number, string, string, Post] { const revs = node.children.get(bigInt(1)); - const empty = [1, "", "", buntPost()] as [number, string, string, Post]; + const empty = [1, '', '', buntPost()] as [number, string, string, Post]; if(!revs) { return empty; } @@ -98,17 +98,16 @@ export function getLatestCommentRevision(node: GraphNode): [number, Post] { return [revNum.toJSNumber(), rev.post]; } - export function getComments(node: GraphNode): GraphNode { const comments = node.children.get(bigInt(2)); if(!comments) { - return { post: buntPost(), children: new BigIntOrderedMap() } + return { post: buntPost(), children: new BigIntOrderedMap() }; } return comments; } export function getSnippet(body: string) { const start = body.slice(0, body.indexOf('\n', 2)); - return (start === body || start.startsWith("![")) ? start : `${start}...`; + return (start === body || start.startsWith('![')) ? start : `${start}...`; } diff --git a/pkg/interface/src/logic/lib/relativePosition.tsx b/pkg/interface/src/logic/lib/relativePosition.tsx index 8ad1618e53..b2c4b751e5 100644 --- a/pkg/interface/src/logic/lib/relativePosition.tsx +++ b/pkg/interface/src/logic/lib/relativePosition.tsx @@ -1,16 +1,16 @@ -import _ from "lodash"; +import _ from 'lodash'; -export const alignY = ["top", "bottom"] as const; +export const alignY = ['top', 'bottom'] as const; export type AlignY = typeof alignY[number]; -export const alignX = ["left", "right"] as const; +export const alignX = ['left', 'right'] as const; export type AlignX = typeof alignX[number]; export function getRelativePosition( relativeTo: HTMLElement | null, alignX: AlignX | AlignX[], alignY: AlignY | AlignY[], - offsetX: number = 0, - offsetY: number = 0 + offsetX = 0, + offsetY = 0 ) { const rect = relativeTo?.getBoundingClientRect(); if (!rect) { @@ -20,7 +20,7 @@ export function getRelativePosition( top: rect.top - offsetY, left: rect.left - offsetX, bottom: document.documentElement.clientHeight - rect.bottom - offsetY, - right: document.documentElement.clientWidth - rect.right - offsetX, + right: document.documentElement.clientWidth - rect.right - offsetX }; const alignXArr = _.isArray(alignX) ? alignX : [alignX]; const alignYArr = _.isArray(alignY) ? alignY : [alignY]; @@ -34,7 +34,7 @@ export function getRelativePosition( [...Array(idx), `${bounds[a]}px`], acc[a] || [], (a, b) => a || b || null - ), + ) }), {} ), @@ -46,10 +46,10 @@ export function getRelativePosition( [...Array(idx), `${bounds[a]}px`], acc[a] || [], (a, b) => a || b || null - ), + ) }), {} - ), + ) } as Record; } diff --git a/pkg/interface/src/logic/lib/tutorialModal.ts b/pkg/interface/src/logic/lib/tutorialModal.ts index ef1d753b1e..53e759838a 100644 --- a/pkg/interface/src/logic/lib/tutorialModal.ts +++ b/pkg/interface/src/logic/lib/tutorialModal.ts @@ -1,6 +1,6 @@ -import { TutorialProgress, Associations } from "~/types"; -import { AlignX, AlignY } from "~/logic/lib/relativePosition"; -import { Direction } from "~/views/components/Triangle"; +import { TutorialProgress, Associations } from '@urbit/api'; +import { AlignX, AlignY } from '~/logic/lib/relativePosition'; +import { Direction } from '~/views/components/Triangle'; export const MODAL_WIDTH = 256; export const MODAL_HEIGHT = 256; @@ -43,7 +43,7 @@ export const getTrianglePosition = (dir: Direction) => { return { top: midY, left: '-32px' - } + }; case 'North': return { top: '-32px', @@ -55,117 +55,117 @@ export const getTrianglePosition = (dir: Direction) => { left: midX }; } -} +}; export const progressDetails: Record = { hidden: {} as any, exit: {} as any, done: { - title: "End", + title: 'End', description: - "This tutorial is finished. Would you like to leave Beginner Island?", - url: "/", - alignX: "right", - alignY: "top", + 'This tutorial is finished. Would you like to leave Beginner Island?', + url: '/', + alignX: 'right', + alignY: 'top', offsetX: MODAL_WIDTH + 8, - offsetY: 0, + offsetY: 0 }, start: { - title: "New Group added", + title: 'New Group added', description: - "We just added you to the Beginner island group to show you around. This group is public, but other groups can be private", - url: "/", - alignX: "right", - alignY: "top", - arrow: "West", + 'We just added you to the Beginner island group to show you around. This group is public, but other groups can be private', + url: '/', + alignX: 'right', + alignY: 'top', + arrow: 'West', offsetX: MODAL_WIDTH + 24, - offsetY: 64, + offsetY: 64 }, - "group-desc": { - title: "What's a group", + 'group-desc': { + title: 'What\'s a group', description: - "A group contains members and tends to be centered around a topic or multiple topics.", + 'A group contains members and tends to be centered around a topic or multiple topics.', url: `/~landscape/ship/${TUTORIAL_HOST}/${TUTORIAL_GROUP}`, - alignX: "left", - alignY: "top", - arrow: "East", + alignX: 'left', + alignY: 'top', + arrow: 'East', offsetX: MODAL_WIDTH + 24, - offsetY: MODAL_HEIGHT / 2 - 8, + offsetY: MODAL_HEIGHT / 2 - 8 }, channels: { - title: "Channels", + title: 'Channels', description: - "Inside a group you have three types of Channels: Chat, Collection, or Notebook. Mix and match these depending on your group context!", + 'Inside a group you have three types of Channels: Chat, Collection, or Notebook. Mix and match these depending on your group context!', url: `/~landscape/ship/${TUTORIAL_HOST}/${TUTORIAL_GROUP}`, - alignY: "top", - alignX: "right", - arrow: "West", + alignY: 'top', + alignX: 'right', + arrow: 'West', offsetX: MODAL_WIDTH + 24, - offsetY: -8, + offsetY: -8 }, chat: { - title: "Chat", + title: 'Chat', description: - "Chat channels are for messaging within your group. Direct Messages are also supported, and are accessible from the “DMs” tile on the homescreen", + 'Chat channels are for messaging within your group. Direct Messages are also supported, and are accessible from the “DMs” tile on the homescreen', url: `/~landscape/ship/${TUTORIAL_HOST}/${TUTORIAL_GROUP}/resource/chat/ship/${TUTORIAL_HOST}/${TUTORIAL_CHAT}`, - alignY: "top", - arrow: "North", - alignX: "right", + alignY: 'top', + arrow: 'North', + alignX: 'right', offsetY: -56, - offsetX: -8, + offsetX: -8 }, link: { - title: "Collection", + title: 'Collection', description: - "A collection is where you can share and view links, images, and other media within your group. Every item in a Collection can have it’s own comment thread.", + 'A collection is where you can share and view links, images, and other media within your group. Every item in a Collection can have it’s own comment thread.', url: `/~landscape/ship/${TUTORIAL_HOST}/${TUTORIAL_GROUP}/resource/link/ship/${TUTORIAL_HOST}/${TUTORIAL_LINKS}`, - alignY: "top", - alignX: "right", - arrow: "North", + alignY: 'top', + alignX: 'right', + arrow: 'North', offsetX: -8, - offsetY: -56, + offsetY: -56 }, publish: { - title: "Notebook", + title: 'Notebook', description: - "Notebooks are for creating long-form content within your group. Use markdown to create rich posts with headers, lists and images.", + 'Notebooks are for creating long-form content within your group. Use markdown to create rich posts with headers, lists and images.', url: `/~landscape/ship/${TUTORIAL_HOST}/${TUTORIAL_GROUP}/resource/publish/ship/${TUTORIAL_HOST}/${TUTORIAL_BOOK}`, - alignY: "top", - alignX: "right", - arrow: "North", + alignY: 'top', + alignX: 'right', + arrow: 'North', offsetX: -8, - offsetY: -56, + offsetY: -56 }, notifications: { - title: "Notifications", - description: "You will get updates from subscribed channels and mentions here. You can access Notifications through Leap.", + title: 'Notifications', + description: 'You will get updates from subscribed channels and mentions here. You can access Notifications through Leap.', url: '/~notifications', - alignY: "top", - alignX: "left", - arrow: "North", + alignY: 'top', + alignX: 'left', + arrow: 'North', offsetX: (MODAL_WIDTH / 2) - 16, - offsetY: -48, + offsetY: -48 }, profile: { - title: "Profile", + title: 'Profile', description: - "Your profile is customizable and can be shared with other ships. Enter as much or as little information as you’d like.", + 'Your profile is customizable and can be shared with other ships. Enter as much or as little information as you’d like.', url: `/~profile/~${window.ship}`, - alignY: "top", - alignX: "right", - arrow: "South", + alignY: 'top', + alignX: 'right', + arrow: 'South', offsetX: -300 + MODAL_WIDTH / 2, - offsetY: -120 + MODAL_HEIGHT / 2, + offsetY: -120 + MODAL_HEIGHT / 2 }, leap: { - title: "Leap", + title: 'Leap', description: - "Leap allows you to go to a specific channel, message, collection, profile or group simply by typing in a command or selecting a shortcut from the dropdown menu.", + 'Leap allows you to go to a specific channel, message, collection, profile or group simply by typing in a command or selecting a shortcut from the dropdown menu.', url: `/~profile/~${window.ship}`, - alignY: "top", - alignX: "left", - arrow: "North", + alignY: 'top', + alignX: 'left', + arrow: 'North', offsetX: 0.3 *MODAL_HEIGHT, - offsetY: -48, - }, + offsetY: -48 + } }; diff --git a/pkg/interface/src/logic/lib/useDrag.ts b/pkg/interface/src/logic/lib/useDrag.ts index e2aa496a88..fb17928e96 100644 --- a/pkg/interface/src/logic/lib/useDrag.ts +++ b/pkg/interface/src/logic/lib/useDrag.ts @@ -1,4 +1,4 @@ -import { useState, useCallback, useMemo, useEffect } from "react"; +import { useState, useCallback, useMemo, useEffect } from 'react'; function validateDragEvent(e: DragEvent): FileList | File[] | true | null { const files: File[] = []; @@ -8,8 +8,8 @@ function validateDragEvent(e: DragEvent): FileList | File[] | true | null { } if (e.dataTransfer?.items) { Array.from(e.dataTransfer.items || []) - .filter((i) => i.kind === 'file') - .forEach(f => { + .filter(i => i.kind === 'file') + .forEach((f) => { valid = true; // Valid if file exists, but on DragOver, won't reveal its contents for security const data = f.getAsFile(); if (data) { @@ -89,14 +89,14 @@ export function useFileDrag(dragged: (f: FileList | File[], e: DragEvent) => voi document.body.addEventListener('mouseout', mouseleave); return () => { document.body.removeEventListener('mouseout', mouseleave); - } + }; }, []); const bind = { onDragLeave, onDragOver, onDrop, - onDragEnter, + onDragEnter }; return { bind, dragging }; diff --git a/pkg/interface/src/logic/lib/useDropdown.ts b/pkg/interface/src/logic/lib/useDropdown.ts index 0e0b37e0dc..98a7359f32 100644 --- a/pkg/interface/src/logic/lib/useDropdown.ts +++ b/pkg/interface/src/logic/lib/useDropdown.ts @@ -1,4 +1,4 @@ -import { useState, useEffect, useMemo, useCallback } from "react"; +import { useState, useEffect, useMemo, useCallback } from 'react'; export function useDropdown( candidates: C[], @@ -12,10 +12,10 @@ export function useDropdown( (s: string) => { const exactMatch = isExact(s); const exact = exactMatch ? [exactMatch] : []; - const opts = [...new Set([...exact, ...candidates.filter((c) => searchPred(s, c))])]; + const opts = [...new Set([...exact, ...candidates.filter(c => searchPred(s, c))])]; setOptions(opts); if (selected) { - const idx = opts.findIndex((c) => key(c) === key(selected)); + const idx = opts.findIndex(c => key(c) === key(selected)); if (idx < 0) { setSelected(undefined); } @@ -29,9 +29,11 @@ export function useDropdown( const select = (idx: number) => { setSelected(options[idx]); }; - if(!selected) { select(0); return false; } + if(!selected) { + select(0); return false; +} - const idx = options.findIndex((c) => key(c) === key(selected)); + const idx = options.findIndex(c => key(c) === key(selected)); if ( idx === -1 || (options.length - 1 <= idx && !backward) @@ -55,6 +57,6 @@ export function useDropdown( back, search, selected, - options, + options }; } diff --git a/pkg/interface/src/logic/lib/useHashLink.ts b/pkg/interface/src/logic/lib/useHashLink.ts index 77c91be2e2..7d93ce5d42 100644 --- a/pkg/interface/src/logic/lib/useHashLink.ts +++ b/pkg/interface/src/logic/lib/useHashLink.ts @@ -1,6 +1,5 @@ import { useEffect } from 'react'; -import {useLocation} from "react-router-dom"; - +import { useLocation } from 'react-router-dom'; export function useHashLink() { const location = useLocation(); @@ -10,8 +9,5 @@ export function useHashLink() { return; } document.querySelector(location.hash)?.scrollIntoView({ behavior: 'smooth', block: 'start' }); - }, [location.hash]); - - } diff --git a/pkg/interface/src/logic/lib/useLazyScroll.ts b/pkg/interface/src/logic/lib/useLazyScroll.ts index bd1c31a328..03a3ce432d 100644 --- a/pkg/interface/src/logic/lib/useLazyScroll.ts +++ b/pkg/interface/src/logic/lib/useLazyScroll.ts @@ -1,6 +1,6 @@ -import { useEffect, RefObject, useRef, useState } from "react"; -import _ from "lodash"; -import usePreviousValue from "./usePreviousValue"; +import { useEffect, RefObject, useRef, useState } from 'react'; +import _ from 'lodash'; +import usePreviousValue from './usePreviousValue'; export function distanceToBottom(el: HTMLElement) { const { scrollTop, scrollHeight, clientHeight } = el; @@ -40,7 +40,6 @@ export function useLazyScroll( } }, [count]); - useEffect(() => { if (!ref.current) { return; @@ -54,13 +53,12 @@ export function useLazyScroll( loadUntil(el); }; - ref.current.addEventListener("scroll", onScroll, { passive: true }); + ref.current.addEventListener('scroll', onScroll, { passive: true }); return () => { - ref.current?.removeEventListener("scroll", onScroll); + ref.current?.removeEventListener('scroll', onScroll); }; }, [ref?.current, count]); - return { isDone, isLoading }; } diff --git a/pkg/interface/src/logic/lib/useLocalStorageState.ts b/pkg/interface/src/logic/lib/useLocalStorageState.ts index b81214a677..13de71afe3 100644 --- a/pkg/interface/src/logic/lib/useLocalStorageState.ts +++ b/pkg/interface/src/logic/lib/useLocalStorageState.ts @@ -1,4 +1,4 @@ -import { useState, useCallback, useEffect } from "react"; +import { useState, useCallback, useEffect } from 'react'; function retrieve(key: string, initial: T): T { const s = localStorage.getItem(key); @@ -25,7 +25,7 @@ export function useLocalStorageState(key: string, initial: T) { const setState = useCallback( (s: SetState) => { - const updated = typeof s === "function" ? s(state) : s; + const updated = typeof s === 'function' ? s(state) : s; _setState(updated); localStorage.setItem(key, JSON.stringify(updated)); }, diff --git a/pkg/interface/src/logic/lib/useModal.tsx b/pkg/interface/src/logic/lib/useModal.tsx index c7cb9be7d4..3d19343cd7 100644 --- a/pkg/interface/src/logic/lib/useModal.tsx +++ b/pkg/interface/src/logic/lib/useModal.tsx @@ -5,15 +5,15 @@ import React, { SyntheticEvent, useMemo, useEffect, - useRef, -} from "react"; + useRef +} from 'react'; -import { Box } from "@tlon/indigo-react"; -import { useOutsideClick } from "./useOutsideClick"; -import { ModalOverlay } from "~/views/components/ModalOverlay"; -import {Portal} from "~/views/components/Portal"; -import {ModalPortal} from "~/views/components/ModalPortal"; -import {PropFunc} from "~/types"; +import { Box } from '@tlon/indigo-react'; +import { useOutsideClick } from './useOutsideClick'; +import { ModalOverlay } from '~/views/components/ModalOverlay'; +import { Portal } from '~/views/components/Portal'; +import { ModalPortal } from '~/views/components/ModalPortal'; +import { PropFunc } from '@urbit/api'; type ModalFunc = (dismiss: () => void) => JSX.Element; interface UseModalProps { @@ -42,7 +42,7 @@ export function useModal(props: UseModalProps & PropFunc): UseModalR () => !modalShown ? null - : typeof modal === "function" + : typeof modal === 'function' ? modal(dismiss) : modal, [modalShown, modal, dismiss] @@ -59,7 +59,7 @@ export function useModal(props: UseModalProps & PropFunc): UseModalR bg="white" borderRadius={2} border={[0, 1]} - borderColor={["washedGray", "washedGray"]} + borderColor={['washedGray', 'washedGray']} display="flex" alignItems="stretch" flexDirection="column" @@ -76,6 +76,6 @@ export function useModal(props: UseModalProps & PropFunc): UseModalR return { showModal, - modal: modalComponent, + modal: modalComponent }; } diff --git a/pkg/interface/src/logic/lib/useOutsideClick.ts b/pkg/interface/src/logic/lib/useOutsideClick.ts index 4d4f95ca6a..481fa2a904 100644 --- a/pkg/interface/src/logic/lib/useOutsideClick.ts +++ b/pkg/interface/src/logic/lib/useOutsideClick.ts @@ -1,8 +1,8 @@ -import { useEffect, RefObject } from "react"; +import { useEffect, RefObject } from 'react'; export function useOutsideClick( ref: RefObject, - onClick: () => void, + onClick: () => void ) { useEffect(() => { function handleClick(event: MouseEvent) { @@ -16,17 +16,16 @@ export function useOutsideClick( } function handleKeyDown(ev) { - if(ev.key === "Escape") { + if(ev.key === 'Escape') { onClick(); - } } - document.addEventListener("mousedown", handleClick); - document.addEventListener("keydown", handleKeyDown); + document.addEventListener('mousedown', handleClick); + document.addEventListener('keydown', handleKeyDown); return () => { - document.removeEventListener("mousedown", handleClick); - document.removeEventListener("keydown", handleKeyDown); + document.removeEventListener('mousedown', handleClick); + document.removeEventListener('keydown', handleKeyDown); }; }, [ref.current, onClick]); } diff --git a/pkg/interface/src/logic/lib/usePreviousValue.ts b/pkg/interface/src/logic/lib/usePreviousValue.ts index e240978108..109f9ffa86 100644 --- a/pkg/interface/src/logic/lib/usePreviousValue.ts +++ b/pkg/interface/src/logic/lib/usePreviousValue.ts @@ -1,7 +1,5 @@ -import { useRef } from "react"; -import { Primitive } from "~/types"; - - +import { useRef } from 'react'; +import { Primitive } from '@urbit/api'; export default function usePreviousValue(value: T): T { const prev = useRef(null); diff --git a/pkg/interface/src/logic/lib/useQuery.ts b/pkg/interface/src/logic/lib/useQuery.ts index 0957ca0988..735060a2da 100644 --- a/pkg/interface/src/logic/lib/useQuery.ts +++ b/pkg/interface/src/logic/lib/useQuery.ts @@ -1,5 +1,5 @@ -import { useMemo, useCallback } from "react"; -import { useLocation } from "react-router-dom"; +import { useMemo, useCallback } from 'react'; +import { useLocation } from 'react-router-dom'; import _ from 'lodash'; export function useQuery() { @@ -25,6 +25,6 @@ export function useQuery() { return { query, - appendQuery, + appendQuery }; } diff --git a/pkg/interface/src/logic/lib/useS3.ts b/pkg/interface/src/logic/lib/useS3.ts index 0717d52f7f..418e4594fa 100644 --- a/pkg/interface/src/logic/lib/useS3.ts +++ b/pkg/interface/src/logic/lib/useS3.ts @@ -1,7 +1,7 @@ -import { useCallback, useMemo, useEffect, useRef, useState } from "react"; -import { S3State } from "../../types/s3-update"; -import S3 from "aws-sdk/clients/s3"; -import { dateToDa, deSig } from "./util"; +import { useCallback, useMemo, useEffect, useRef, useState } from 'react'; +import { S3State } from '../../types/s3-update'; +import S3 from 'aws-sdk/clients/s3'; +import { dateToDa, deSig } from './util'; export interface IuseS3 { canUpload: boolean; @@ -28,14 +28,14 @@ const useS3 = (s3: S3State, { accept = '*' } = { accept: '*' }): IuseS3 => { const canUpload = useMemo( () => - (client && s3.credentials && s3.configuration.currentBucket !== "") || false, + (client && s3.credentials && s3.configuration.currentBucket !== '') || false, [s3.credentials, s3.configuration.currentBucket, client] ); const upload = useCallback( async (file: File, bucket: string) => { if (!client.current) { - throw new Error("S3 not ready"); + throw new Error('S3 not ready'); } const fileParts = file.name.split('.'); @@ -47,8 +47,8 @@ const useS3 = (s3: S3State, { accept = '*' } = { accept: '*' }): IuseS3 => { Bucket: bucket, Key: `${window.ship}/${timestamp}-${fileName}.${fileExtension}`, Body: file, - ACL: "public-read", - ContentType: file.type, + ACL: 'public-read', + ContentType: file.type }; setUploading(true); @@ -63,8 +63,8 @@ const useS3 = (s3: S3State, { accept = '*' } = { accept: '*' }): IuseS3 => { ); const uploadDefault = useCallback(async (file: File) => { - if (s3.configuration.currentBucket === "") { - throw new Error("current bucket not set"); + if (s3.configuration.currentBucket === '') { + throw new Error('current bucket not set'); } return upload(file, s3.configuration.currentBucket); }, [s3]); @@ -84,11 +84,10 @@ const useS3 = (s3: S3State, { accept = '*' } = { accept: '*' }): IuseS3 => { } uploadDefault(files[0]).then(resolve); document.body.removeChild(fileSelector); - }) + }); document.body.appendChild(fileSelector); fileSelector.click(); - }) - + }); }, [uploadDefault] ); @@ -96,4 +95,4 @@ const useS3 = (s3: S3State, { accept = '*' } = { accept: '*' }): IuseS3 => { return { canUpload, upload, uploadDefault, uploading, promptUpload }; }; -export default useS3; \ No newline at end of file +export default useS3; diff --git a/pkg/interface/src/logic/lib/useStatelessAsyncClickable.ts b/pkg/interface/src/logic/lib/useStatelessAsyncClickable.ts index b92fdaa03c..154f903baa 100644 --- a/pkg/interface/src/logic/lib/useStatelessAsyncClickable.ts +++ b/pkg/interface/src/logic/lib/useStatelessAsyncClickable.ts @@ -1,23 +1,23 @@ -import { MouseEvent, useCallback, useState, useEffect } from "react"; -export type AsyncClickableState = "waiting" | "error" | "loading" | "success"; +import { MouseEvent, useCallback, useState, useEffect } from 'react'; +export type AsyncClickableState = 'waiting' | 'error' | 'loading' | 'success'; export function useStatelessAsyncClickable( onClick: (e: MouseEvent) => Promise, name: string ) { - const [state, setState] = useState("waiting"); + const [state, setState] = useState('waiting'); const handleClick = useCallback( async (e: MouseEvent) => { try { - setState("loading"); + setState('loading'); await onClick(e); - setState("success"); + setState('success'); } catch (e) { console.error(e); - setState("error"); + setState('error'); } finally { setTimeout(() => { - setState("waiting"); + setState('waiting'); }, 3000); } }, @@ -26,7 +26,7 @@ export function useStatelessAsyncClickable( // When name changes, reset button useEffect(() => { - setState("waiting"); + setState('waiting'); }, [name]); return { buttonState: state, onClick: handleClick }; diff --git a/pkg/interface/src/logic/lib/useWaitForProps.ts b/pkg/interface/src/logic/lib/useWaitForProps.ts index 80e92e92a8..8a81b0b0ae 100644 --- a/pkg/interface/src/logic/lib/useWaitForProps.ts +++ b/pkg/interface/src/logic/lib/useWaitForProps.ts @@ -1,12 +1,11 @@ import { useState, useEffect, useCallback } from 'react'; - -export function useWaitForProps

(props: P, timeout: number = 0) { +export function useWaitForProps

(props: P, timeout = 0) { const [resolve, setResolve] = useState<() => void>(() => () => {}); const [ready, setReady] = useState<(p: P) => boolean | undefined>(); useEffect(() => { - if (typeof ready === "function" && ready(props)) { + if (typeof ready === 'function' && ready(props)) { resolve(); } }, [props, ready, resolve]); @@ -26,7 +25,7 @@ export function useWaitForProps

(props: P, timeout: number = 0) { setResolve(() => resolve); if(timeout > 0) { setTimeout(() => { - reject(new Error("Timed out")); + reject(new Error('Timed out')); }, timeout); } }); diff --git a/pkg/interface/src/logic/lib/util.ts b/pkg/interface/src/logic/lib/util.ts index 670c83d430..8cc6969d9e 100644 --- a/pkg/interface/src/logic/lib/util.ts +++ b/pkg/interface/src/logic/lib/util.ts @@ -1,27 +1,27 @@ import { useEffect, useState } from 'react'; -import _ from "lodash"; -import f, { memoize } from "lodash/fp"; -import bigInt, { BigInteger } from "big-integer"; -import { Contact } from '~/types'; +import _ from 'lodash'; +import f, { memoize } from 'lodash/fp'; +import bigInt, { BigInteger } from 'big-integer'; +import { Contact } from '@urbit/api'; import useLocalState from '../state/local'; export const MOBILE_BROWSER_REGEX = /Android|webOS|iPhone|iPad|iPod|BlackBerry/i; export const MOMENT_CALENDAR_DATE = { - sameDay: "[Today]", - nextDay: "[Tomorrow]", - nextWeek: "dddd", - lastDay: "[Yesterday]", - lastWeek: "[Last] dddd", - sameElse: "~YYYY.M.D", + sameDay: '[Today]', + nextDay: '[Tomorrow]', + nextWeek: 'dddd', + lastDay: '[Yesterday]', + lastWeek: '[Last] dddd', + sameElse: '~YYYY.M.D' }; export const getModuleIcon = (mod: string) => { - if (mod === "link") { - return "Collection"; + if (mod === 'link') { + return 'Collection'; } return _.capitalize(mod); -} +}; export function wait(ms: number) { return new Promise((resolve, reject) => { @@ -37,8 +37,8 @@ export function parentPath(path: string) { return _.dropRight(path.split('/'), 1).join('/'); } -const DA_UNIX_EPOCH = bigInt("170141184475152167957503069145530368000"); // `@ud` ~1970.1.1 -const DA_SECOND = bigInt("18446744073709551616"); // `@ud` ~s1 +const DA_UNIX_EPOCH = bigInt('170141184475152167957503069145530368000'); // `@ud` ~1970.1.1 +const DA_SECOND = bigInt('18446744073709551616'); // `@ud` ~s1 export function daToUnix(da: BigInteger) { // ported from +time:enjs:format in hoon.hoon const offset = DA_SECOND.divide(bigInt(2000)); @@ -59,20 +59,20 @@ export function makePatDa(patda: string) { } export function udToDec(ud: string): string { - return ud.replace(/\./g, ""); + return ud.replace(/\./g, ''); } export function decToUd(str: string): string { return _.trimStart( f.flow( - f.split(""), + f.split(''), f.reverse, f.chunk(3), - f.map(f.flow(f.reverse, f.join(""))), + f.map(f.flow(f.reverse, f.join(''))), f.reverse, - f.join(".") + f.join('.') )(str), - "0." + '0.' ); } @@ -86,12 +86,12 @@ export function clamp(x: number, min: number, max: number) { // color is a #000000 color export function adjustHex(color: string, amount: number): string { return f.flow( - f.split(""), + f.split(''), f.chunk(2), // get RGB channels - f.map((c) => parseInt(c.join(""), 16)), // as hex - f.map((c) => clamp(c + amount, 0, 255).toString(16)), // adjust - f.join(""), - (res) => `#${res}` //format + f.map(c => parseInt(c.join(''), 16)), // as hex + f.map(c => clamp(c + amount, 0, 255).toString(16)), // adjust + f.join(''), + res => `#${res}` // format )(color.slice(1)); } @@ -101,12 +101,12 @@ export function resourceAsPath(resource: any) { } export function uuid() { - let str = "0v"; - str += Math.ceil(Math.random() * 8) + "."; + let str = '0v'; + str += Math.ceil(Math.random() * 8) + '.'; for (let i = 0; i < 5; i++) { let _str = Math.ceil(Math.random() * 10000000).toString(32); - _str = ("00000" + _str).substr(-5, 5); - str += _str + "."; + _str = ('00000' + _str).substr(-5, 5); + str += _str + '.'; } return str.slice(0, -1); @@ -120,11 +120,11 @@ export function uuid() { */ export function daToDate(st: string) { const dub = function (n: string) { - return parseInt(n) < 10 ? "0" + parseInt(n) : n.toString(); + return parseInt(n) < 10 ? '0' + parseInt(n) : n.toString(); }; - const da = st.split(".."); - const bigEnd = da[0].split("."); - const lilEnd = da[1].split("."); + const da = st.split('..'); + const bigEnd = da[0].split('.'); + const lilEnd = da[1].split('.'); const ds = `${bigEnd[0].slice(1)}-${dub(bigEnd[1])}-${dub(bigEnd[2])}T${dub( lilEnd[0] )}:${dub(lilEnd[1])}:${dub(lilEnd[2])}Z`; @@ -138,9 +138,9 @@ export function daToDate(st: string) { ~2018.7.17..23.15.09..5be5 // urbit @da */ -export function dateToDa(d: Date, mil: boolean = false) { +export function dateToDa(d: Date, mil = false) { const fil = function (n: number) { - return n >= 10 ? n : "0" + n; + return n >= 10 ? n : '0' + n; }; return ( `~${d.getUTCFullYear()}.` + @@ -149,7 +149,7 @@ export function dateToDa(d: Date, mil: boolean = false) { `${fil(d.getUTCHours())}.` + `${fil(d.getUTCMinutes())}.` + `${fil(d.getUTCSeconds())}` + - `${mil ? "..0000" : ""}` + `${mil ? '..0000' : ''}` ); } @@ -157,16 +157,16 @@ export function deSig(ship: string) { if (!ship) { return null; } - return ship.replace("~", ""); + return ship.replace('~', ''); } export function uxToHex(ux: string) { - if (ux.length > 2 && ux.substr(0, 2) === "0x") { - const value = ux.substr(2).replace(".", "").padStart(6, "0"); + if (ux.length > 2 && ux.substr(0, 2) === '0x') { + const value = ux.substr(2).replace('.', '').padStart(6, '0'); return value; } - const value = ux.replace(".", "").padStart(6, "0"); + const value = ux.replace('.', '').padStart(6, '0'); return value; } @@ -187,13 +187,13 @@ export function writeText(str: string) { let success = false; function listener(e) { - e.clipboardData.setData("text/plain", str); + e.clipboardData.setData('text/plain', str); e.preventDefault(); success = true; } - document.addEventListener("copy", listener); - document.execCommand("copy"); - document.removeEventListener("copy", listener); + document.addEventListener('copy', listener); + document.execCommand('copy'); + document.removeEventListener('copy', listener); document?.getSelection()?.removeAllRanges(); @@ -206,21 +206,21 @@ export function writeText(str: string) { // trim patps to match dojo, chat-cli export function cite(ship: string) { let patp = ship, - shortened = ""; - if (patp === null || patp === "") { + shortened = ''; + if (patp === null || patp === '') { return null; } - if (patp.startsWith("~")) { + if (patp.startsWith('~')) { patp = patp.substr(1); } // comet if (patp.length === 56) { - shortened = "~" + patp.slice(0, 6) + "_" + patp.slice(50, 56); + shortened = '~' + patp.slice(0, 6) + '_' + patp.slice(50, 56); return shortened; } // moon if (patp.length === 27) { - shortened = "~" + patp.slice(14, 20) + "^" + patp.slice(21, 27); + shortened = '~' + patp.slice(14, 20) + '^' + patp.slice(21, 27); return shortened; } return `~${patp}`; @@ -232,7 +232,6 @@ export function alphabeticalOrder(a: string, b: string) { export function lengthOrder(a: string, b: string) { return b.length - a.length; - } // TODO: deprecated @@ -244,13 +243,13 @@ export function alphabetiseAssociations(associations: any) { let bName = b.substr(1); if (associations[a].metadata && associations[a].metadata.title) { aName = - associations[a].metadata.title !== "" + associations[a].metadata.title !== '' ? associations[a].metadata.title : a.substr(1); } if (associations[b].metadata && associations[b].metadata.title) { bName = - associations[b].metadata.title !== "" + associations[b].metadata.title !== '' ? associations[b].metadata.title : b.substr(1); } @@ -266,41 +265,42 @@ export function alphabetiseAssociations(associations: any) { // for example, 'some Chars!' becomes '~.some.~43.hars~21.' // export function stringToTa(str: string) { - let out = ""; + let out = ''; for (let i = 0; i < str.length; i++) { const char = str[i]; - let add = ""; + let add = ''; switch (char) { - case " ": - add = "."; + case ' ': + add = '.'; break; - case ".": - add = "~."; + case '.': + add = '~.'; break; - case "~": - add = "~~"; + case '~': + add = '~~'; break; default: const charCode = str.charCodeAt(i); if ( (charCode >= 97 && charCode <= 122) || // a-z (charCode >= 48 && charCode <= 57) || // 0-9 - char === "-" + char === '-' ) { add = char; } else { // TODO behavior for unicode doesn't match +wood's, // but we can probably get away with that for now. - add = "~" + charCode.toString(16) + "."; + add = '~' + charCode.toString(16) + '.'; } } out = out + add; } - return "~." + out; + return '~.' + out; } export function amOwnerOfGroup(groupPath: string) { - if (!groupPath) return false; + if (!groupPath) +return false; const groupOwner = /(\/~)?\/~([a-z-]{3,})\/.*/.exec(groupPath)?.[2]; return window.ship === groupOwner; } @@ -308,18 +308,18 @@ export function amOwnerOfGroup(groupPath: string) { export function getContactDetails(contact: any) { const member = !contact; contact = contact || { - nickname: "", + nickname: '', avatar: null, - color: "0x0", + color: '0x0' }; - const nickname = contact.nickname || ""; - const color = uxToHex(contact.color || "0x0"); + const nickname = contact.nickname || ''; + const color = uxToHex(contact.color || '0x0'); const avatar = contact.avatar || null; return { nickname, color, member, avatar }; } export function stringToSymbol(str: string) { - let result = ""; + let result = ''; for (let i = 0; i < str.length; i++) { const n = str.charCodeAt(i); if ((n >= 97 && n <= 122) || (n >= 48 && n <= 57)) { @@ -327,19 +327,17 @@ export function stringToSymbol(str: string) { } else if (n >= 65 && n <= 90) { result += String.fromCharCode(n + 32); } else { - result += "-"; + result += '-'; } } - result = result.replace(/^[\-\d]+|\-+/g, "-"); - result = result.replace(/^\-+|\-+$/g, ""); - if (result === "") { + result = result.replace(/^[\-\d]+|\-+/g, '-'); + result = result.replace(/^\-+|\-+$/g, ''); + if (result === '') { return dateToDa(new Date()); } return result; } - - /** * Formats a numbers as a `@ud` inserting dot where needed */ @@ -351,23 +349,24 @@ export function numToUd(num: number) { f.reverse, f.map(s => s.join('')), f.join('.') - )(num.toString()) + )(num.toString()); } -export function usePreventWindowUnload(shouldPreventDefault: boolean, message = "You have unsaved changes. Are you sure you want to exit?") { +export function usePreventWindowUnload(shouldPreventDefault: boolean, message = 'You have unsaved changes. Are you sure you want to exit?') { useEffect(() => { - if (!shouldPreventDefault) return; - const handleBeforeUnload = event => { + if (!shouldPreventDefault) +return; + const handleBeforeUnload = (event) => { event.preventDefault(); return message; - } - window.addEventListener("beforeunload", handleBeforeUnload); + }; + window.addEventListener('beforeunload', handleBeforeUnload); window.onbeforeunload = handleBeforeUnload; return () => { - window.removeEventListener("beforeunload", handleBeforeUnload); + window.removeEventListener('beforeunload', handleBeforeUnload); // @ts-ignore window.onbeforeunload = undefined; - } + }; }, [shouldPreventDefault]); } @@ -378,7 +377,7 @@ export function pluralize(text: string, isPlural = false, vowel = false) { // Hide is an optional second parameter for when this function is used in class components export function useShowNickname(contact: Contact | null, hide?: boolean): boolean { const hideNicknames = typeof hide !== 'undefined' ? hide : useLocalState(state => state.hideNicknames); - return !!(contact && contact.nickname && !hideNicknames); + return Boolean(contact && contact.nickname && !hideNicknames); } interface useHoveringInterface { @@ -406,7 +405,6 @@ export function getItemTitle(association: Association) { return cite(`~${name.slice(4)}`); } return cite(ship); - } - return association.metadata.title || association.resource -}; + return association.metadata.title || association.resource; +} diff --git a/pkg/interface/src/logic/lib/workspace.ts b/pkg/interface/src/logic/lib/workspace.ts index e17b81e7ba..f13df61956 100644 --- a/pkg/interface/src/logic/lib/workspace.ts +++ b/pkg/interface/src/logic/lib/workspace.ts @@ -1,24 +1,24 @@ -import { Associations, Workspace } from "~/types"; +import { Associations, Workspace } from '@urbit/api'; export function getTitleFromWorkspace( associations: Associations, workspace: Workspace ) { switch (workspace.type) { - case "home": - return "My Channels"; - case "messages": - return "Messages"; - case "group": + case 'home': + return 'My Channels'; + case 'messages': + return 'Messages'; + case 'group': const association = associations.groups[workspace.group]; - return association?.metadata?.title || ""; + return association?.metadata?.title || ''; } } export function getGroupFromWorkspace( workspace: Workspace ): string | undefined { - if (workspace.type === "group") { + if (workspace.type === 'group') { return workspace.group; } diff --git a/pkg/interface/src/logic/reducers/contact-update.ts b/pkg/interface/src/logic/reducers/contact-update.ts index 44cbc6cfb0..1d2e45e35b 100644 --- a/pkg/interface/src/logic/reducers/contact-update.ts +++ b/pkg/interface/src/logic/reducers/contact-update.ts @@ -1,8 +1,8 @@ import _ from 'lodash'; import { StoreState } from '../../store/type'; import { Cage } from '~/types/cage'; -import { ContactUpdate } from '~/types/contact-update'; -import {resourceAsPath} from '../lib/util'; +import { ContactUpdate } from '@urbit/api/contacts'; +import { resourceAsPath } from '../lib/util'; type ContactState = Pick; @@ -62,9 +62,9 @@ const edit = (json: ContactUpdate, state: S) => { const contact = state.contacts?.[ship]; const value = data['edit-field'][field]; if(!contact) { - return; + return; } - + if(field === 'add-group') { contact.groups.push(value); } else if (field === 'remove-group') { @@ -80,4 +80,3 @@ const setPublic = (json: ContactUpdate, state: S) => { state.isContactPublic = data; }; - diff --git a/pkg/interface/src/logic/reducers/group-update.ts b/pkg/interface/src/logic/reducers/group-update.ts index 169b30d56c..c4aeddb0ac 100644 --- a/pkg/interface/src/logic/reducers/group-update.ts +++ b/pkg/interface/src/logic/reducers/group-update.ts @@ -10,9 +10,9 @@ import { OpenPolicyDiff, OpenPolicy, InvitePolicyDiff, - InvitePolicy, -} from '~/types/group-update'; -import { Enc, PatpNoSig } from '~/types/noun'; + InvitePolicy +} from '@urbit/api/groups'; +import { Enc, PatpNoSig } from '@urbit/api'; import { resourceAsPath } from '../lib/util'; type GroupState = Pick; @@ -23,7 +23,7 @@ function decodeGroup(group: Enc): Group { ...group, members, tags: decodeTags(group.tags), - policy: decodePolicy(group.policy), + policy: decodePolicy(group.policy) }; return res; } @@ -35,7 +35,7 @@ function decodePolicy(policy: Enc): GroupPolicy { } else { const { open } = policy; return { - open: { banned: new Set(open.banned), banRanks: new Set(open.banRanks) }, + open: { banned: new Set(open.banned), banRanks: new Set(open.banRanks) } }; } } @@ -98,7 +98,7 @@ export default class GroupReducer { members: new Set(), tags: { role: { admin: new Set([window.ship]) } }, policy: decodePolicy(policy), - hidden, + hidden }; } } @@ -189,7 +189,6 @@ export default class GroupReducer { } } - private inviteChangePolicy(diff: InvitePolicyDiff, policy: InvitePolicy) { if ('addInvites' in diff) { const { addInvites } = diff; diff --git a/pkg/interface/src/logic/reducers/group-view.ts b/pkg/interface/src/logic/reducers/group-view.ts index 92be7c0f5f..dd8763c6d6 100644 --- a/pkg/interface/src/logic/reducers/group-view.ts +++ b/pkg/interface/src/logic/reducers/group-view.ts @@ -1,25 +1,24 @@ -import { resourceAsPath } from "~/logic/lib/util"; - +import { resourceAsPath } from '~/logic/lib/util'; const initial = (json: any, state: any) => { const data = json.initial; if(data) { state.pendingJoin = data; } -} +}; const progress = (json: any, state: any) => { const data = json.progress; if(data) { const { progress, resource } = data; - state.pendingJoin = {...state.pendingJoin, [resource]: progress }; + state.pendingJoin = { ...state.pendingJoin, [resource]: progress }; if(progress === 'done') { setTimeout(() => { delete state.pendingJoin[resource]; }, 10000); } } -} +}; export const GroupViewReducer = (json: any, state: any) => { const data = json['group-view-update']; @@ -27,4 +26,4 @@ export const GroupViewReducer = (json: any, state: any) => { progress(data, state); initial(data, state); } -} +}; diff --git a/pkg/interface/src/logic/reducers/hark-update.ts b/pkg/interface/src/logic/reducers/hark-update.ts index 6928e4508b..288b3bed5c 100644 --- a/pkg/interface/src/logic/reducers/hark-update.ts +++ b/pkg/interface/src/logic/reducers/hark-update.ts @@ -3,22 +3,21 @@ import { NotifIndex, NotificationGraphConfig, GroupNotificationsConfig, - UnreadStats, -} from "~/types"; -import { makePatDa } from "~/logic/lib/util"; -import _ from "lodash"; -import {StoreState} from "../store/type"; + UnreadStats +} from '@urbit/api'; +import { makePatDa } from '~/logic/lib/util'; +import _ from 'lodash'; +import { StoreState } from '../store/type'; import { BigIntOrderedMap } from '../lib/BigIntOrderedMap'; -type HarkState = Pick; - +type HarkState = Pick; export const HarkReducer = (json: any, state: HarkState) => { - const data = _.get(json, "harkUpdate", false); + const data = _.get(json, 'harkUpdate', false); if (data) { reduce(data, state); } - const graphHookData = _.get(json, "hark-graph-hook-update", false); + const graphHookData = _.get(json, 'hark-graph-hook-update', false); if (graphHookData) { graphInitial(graphHookData, state); graphIgnore(graphHookData, state); @@ -26,7 +25,7 @@ export const HarkReducer = (json: any, state: HarkState) => { graphWatchSelf(graphHookData, state); graphMentions(graphHookData, state); } - const groupHookData = _.get(json, "hark-group-hook-update", false); + const groupHookData = _.get(json, 'hark-group-hook-update', false); if (groupHookData) { groupInitial(groupHookData, state); groupListen(groupHookData, state); @@ -35,31 +34,31 @@ export const HarkReducer = (json: any, state: HarkState) => { }; function groupInitial(json: any, state: HarkState) { - const data = _.get(json, "initial", false); + const data = _.get(json, 'initial', false); if (data) { state.notificationsGroupConfig = data; } } function graphInitial(json: any, state: HarkState) { - const data = _.get(json, "initial", false); + const data = _.get(json, 'initial', false); if (data) { state.notificationsGraphConfig = data; } } function graphListen(json: any, state: HarkState) { - const data = _.get(json, "listen", false); + const data = _.get(json, 'listen', false); if (data) { state.notificationsGraphConfig.watching = [ ...state.notificationsGraphConfig.watching, - data, + data ]; } } function graphIgnore(json: any, state: HarkState) { - const data = _.get(json, "ignore", false); + const data = _.get(json, 'ignore', false); if (data) { state.notificationsGraphConfig.watching = state.notificationsGraphConfig.watching.filter( ({ graph, index }) => !(graph === data.graph && index === data.index) @@ -68,30 +67,30 @@ function graphIgnore(json: any, state: HarkState) { } function groupListen(json: any, state: HarkState) { - const data = _.get(json, "listen", false); + const data = _.get(json, 'listen', false); if (data) { state.notificationsGroupConfig = [...state.notificationsGroupConfig, data]; } } function groupIgnore(json: any, state: HarkState) { - const data = _.get(json, "ignore", false); + const data = _.get(json, 'ignore', false); if (data) { state.notificationsGroupConfig = state.notificationsGroupConfig.filter( - (n) => n !== data + n => n !== data ); } } function graphMentions(json: any, state: HarkState) { - const data = _.get(json, "set-mentions", undefined); + const data = _.get(json, 'set-mentions', undefined); if (!_.isUndefined(data)) { state.notificationsGraphConfig.mentions = data; } } function graphWatchSelf(json: any, state: HarkState) { - const data = _.get(json, "set-watch-on-self", undefined); + const data = _.get(json, 'set-watch-on-self', undefined); if (!_.isUndefined(data)) { state.notificationsGraphConfig.watchOnSelf = data; } @@ -131,14 +130,14 @@ function seenIndex(json: any, state: HarkState) { function readEach(json: any, state: HarkState) { const data = _.get(json, 'read-each'); if(data) { - updateUnreads(state, data.index, u => u.delete(data.target)) + updateUnreads(state, data.index, u => u.delete(data.target)); } } function readSince(json: any, state: HarkState) { const data = _.get(json, 'read-count'); if(data) { - updateUnreadCount(state, data, () => 0) + updateUnreadCount(state, data, () => 0); } } @@ -152,7 +151,7 @@ function unreadSince(json: any, state: HarkState) { function unreadEach(json: any, state: HarkState) { const data = _.get(json, 'unread-each'); if(data) { - updateUnreads(state, data.index, us => us.add(data.target)) + updateUnreads(state, data.index, us => us.add(data.target)); } } @@ -175,15 +174,15 @@ function unreads(json: any, state: HarkState) { } } -function clearState(state){ - let initialState = { +function clearState(state) { + const initialState = { notifications: new BigIntOrderedMap(), archivedNotifications: new BigIntOrderedMap(), notificationsGroupConfig: [], notificationsGraphConfig: { watchOnSelf: false, mentions: false, - watching: [], + watching: [] }, unreads: { graph: {}, @@ -192,7 +191,7 @@ function clearState(state){ notificationsCount: 0 }; - Object.keys(initialState).forEach(key => { + Object.keys(initialState).forEach((key) => { state[key] = initialState[key]; }); } @@ -203,7 +202,7 @@ function updateUnreadCount(state: HarkState, index: NotifIndex, count: (c: numbe } const property = [index.graph.graph, index.graph.index, 'unreads']; const curr = _.get(state.unreads.graph, property, 0); - const newCount = count(curr) + const newCount = count(curr); _.set(state.unreads.graph, property, newCount); } @@ -218,7 +217,6 @@ function updateUnreads(state: HarkState, index: NotifIndex, f: (us: Set) _.set(state.unreads.graph, [index.graph.graph, index.graph.index, 'unreads'], unreads); } - function updateNotificationStats(state: HarkState, index: NotifIndex, statField: 'notifications' | 'unreads' | 'last', f: (x: number) => number) { if(statField === 'notifications') { state.notificationsCount = f(state.notificationsCount); @@ -233,13 +231,13 @@ function updateNotificationStats(state: HarkState, index: NotifIndex, statField: } function added(json: any, state: HarkState) { - const data = _.get(json, "added", false); + const data = _.get(json, 'added', false); if (data) { const { index, notification } = data; const time = makePatDa(data.time); const timebox = state.notifications.get(time) || []; - const arrIdx = timebox.findIndex((idxNotif) => + const arrIdx = timebox.findIndex(idxNotif => notifIdxEqual(index, idxNotif.index) ); if (arrIdx !== -1) { @@ -256,14 +254,14 @@ function added(json: any, state: HarkState) { } const dnd = (json: any, state: HarkState) => { - const data = _.get(json, "set-dnd", undefined); + const data = _.get(json, 'set-dnd', undefined); if (!_.isUndefined(data)) { state.doNotDisturb = data; } }; const timebox = (json: any, state: HarkState) => { - const data = _.get(json, "timebox", false); + const data = _.get(json, 'timebox', false); if (data) { const time = makePatDa(data.time); if (!data.archive) { @@ -273,21 +271,21 @@ const timebox = (json: any, state: HarkState) => { }; function more(json: any, state: HarkState) { - const data = _.get(json, "more", false); + const data = _.get(json, 'more', false); if (data) { - _.forEach(data, (d) => reduce(d, state)); + _.forEach(data, d => reduce(d, state)); } } function notifIdxEqual(a: NotifIndex, b: NotifIndex) { - if ("graph" in a && "graph" in b) { + if ('graph' in a && 'graph' in b) { return ( a.graph.graph === b.graph.graph && a.graph.group === b.graph.group && a.graph.module === b.graph.module && a.graph.description === b.graph.description ); - } else if ("group" in a && "group" in b) { + } else if ('group' in a && 'group' in b) { return ( a.group.group === b.group.group && a.group.description === b.group.description @@ -305,14 +303,14 @@ function setRead( const patDa = makePatDa(time); const timebox = state.notifications.get(patDa); if (_.isNull(timebox)) { - console.warn("Modifying nonexistent timebox"); + console.warn('Modifying nonexistent timebox'); return; } - const arrIdx = timebox.findIndex((idxNotif) => + const arrIdx = timebox.findIndex(idxNotif => notifIdxEqual(index, idxNotif.index) ); if (arrIdx === -1) { - console.warn("Modifying nonexistent index"); + console.warn('Modifying nonexistent index'); return; } timebox[arrIdx].notification.read = read; @@ -320,7 +318,7 @@ function setRead( } function read(json: any, state: HarkState) { - const data = _.get(json, "read-note", false); + const data = _.get(json, 'read-note', false); if (data) { const { time, index } = data; updateNotificationStats(state, index, 'notifications', x => x-1); @@ -329,7 +327,7 @@ function read(json: any, state: HarkState) { } function unread(json: any, state: HarkState) { - const data = _.get(json, "unread-note", false); + const data = _.get(json, 'unread-note', false); if (data) { const { time, index } = data; updateNotificationStats(state, index, 'notifications', x => x+1); @@ -338,16 +336,16 @@ function unread(json: any, state: HarkState) { } function archive(json: any, state: HarkState) { - const data = _.get(json, "archive", false); + const data = _.get(json, 'archive', false); if (data) { const { index } = data; const time = makePatDa(data.time); const timebox = state.notifications.get(time); if (!timebox) { - console.warn("Modifying nonexistent timebox"); + console.warn('Modifying nonexistent timebox'); return; } - const [archived, unarchived] = _.partition(timebox, (idxNotif) => + const [archived, unarchived] = _.partition(timebox, idxNotif => notifIdxEqual(index, idxNotif.index) ); if(unarchived.length === 0) { @@ -357,6 +355,6 @@ function archive(json: any, state: HarkState) { state.notifications.set(time, unarchived); } const newlyRead = archived.filter(x => !x.notification.read).length; - updateNotificationStats(state, index, 'notifications', (x) => x - newlyRead); + updateNotificationStats(state, index, 'notifications', x => x - newlyRead); } } diff --git a/pkg/interface/src/logic/reducers/invite-update.ts b/pkg/interface/src/logic/reducers/invite-update.ts index 30fb61042b..c4f472be08 100644 --- a/pkg/interface/src/logic/reducers/invite-update.ts +++ b/pkg/interface/src/logic/reducers/invite-update.ts @@ -1,10 +1,9 @@ import _ from 'lodash'; import { StoreState } from '../../store/type'; import { Cage } from '~/types/cage'; -import { InviteUpdate } from '~/types/invite-update'; - -type InviteState = Pick; +import { InviteUpdate } from '@urbit/api/invite'; +type InviteState = Pick; export default class InviteReducer { reduce(json: Cage, state: S) { diff --git a/pkg/interface/src/logic/reducers/launch-update.ts b/pkg/interface/src/logic/reducers/launch-update.ts index d05145d788..56a00efcea 100644 --- a/pkg/interface/src/logic/reducers/launch-update.ts +++ b/pkg/interface/src/logic/reducers/launch-update.ts @@ -51,12 +51,11 @@ export default class LaunchReducer { changeIsShown(json: LaunchUpdate, state: S) { const data = _.get(json, 'changeIsShown', false); if (data) { - let tile = state.launch.tiles[data.name]; + const tile = state.launch.tiles[data.name]; console.log(tile); if (tile) { tile.isShown = data.isShown; } } } - } diff --git a/pkg/interface/src/logic/reducers/metadata-update.ts b/pkg/interface/src/logic/reducers/metadata-update.ts index 00070b87e3..41e6d79855 100644 --- a/pkg/interface/src/logic/reducers/metadata-update.ts +++ b/pkg/interface/src/logic/reducers/metadata-update.ts @@ -2,14 +2,14 @@ import _ from 'lodash'; import { StoreState } from '../../store/type'; -import { MetadataUpdate } from '~/types/metadata-update'; +import { MetadataUpdate } from '@urbit/api/metadata'; import { Cage } from '~/types/cage'; type MetadataState = Pick; export default class MetadataReducer { reduce(json: Cage, state: S) { - let data = json['metadata-update'] + const data = json['metadata-update']; if (data) { console.log(data); this.associations(data, state); @@ -29,13 +29,13 @@ export default class MetadataReducer { } associations(json: MetadataUpdate, state: S) { - let data = _.get(json, 'associations', false); + const data = _.get(json, 'associations', false); if (data) { - let metadata = state.associations; + const metadata = state.associations; Object.keys(data).forEach((key) => { - let val = data[key]; - let appName = val['app-name']; - let rid = val.resource; + const val = data[key]; + const appName = val['app-name']; + const rid = val.resource; if (!(appName in metadata)) { metadata[appName] = {}; } @@ -50,11 +50,11 @@ export default class MetadataReducer { } add(json: MetadataUpdate, state: S) { - let data = _.get(json, 'add', false); + const data = _.get(json, 'add', false); if (data) { - let metadata = state.associations; - let appName = data['app-name']; - let appPath = data.resource; + const metadata = state.associations; + const appName = data['app-name']; + const appPath = data.resource; if (!(appName in metadata)) { metadata[appName] = {}; @@ -69,11 +69,11 @@ export default class MetadataReducer { } update(json: MetadataUpdate, state: S) { - let data = _.get(json, 'update-metadata', false); + const data = _.get(json, 'update-metadata', false); if (data) { - let metadata = state.associations; - let appName = data['app-name']; - let rid = data.resource; + const metadata = state.associations; + const appName = data['app-name']; + const rid = data.resource; if (!(appName in metadata)) { metadata[appName] = {}; @@ -88,11 +88,11 @@ export default class MetadataReducer { } remove(json: MetadataUpdate, state: S) { - let data = _.get(json, 'remove', false); + const data = _.get(json, 'remove', false); if (data) { - let metadata = state.associations; - let appName = data['app-name']; - let rid = data.resource; + const metadata = state.associations; + const appName = data['app-name']; + const rid = data.resource; if (appName in metadata && rid in metadata[appName]) { delete metadata[appName][rid]; diff --git a/pkg/interface/src/logic/reducers/settings-update.ts b/pkg/interface/src/logic/reducers/settings-update.ts index 9716cbb85c..7afef84ec6 100644 --- a/pkg/interface/src/logic/reducers/settings-update.ts +++ b/pkg/interface/src/logic/reducers/settings-update.ts @@ -1,21 +1,21 @@ import _ from 'lodash'; import { StoreState } from '../../store/type'; import { - SettingsUpdate, -} from '~/types/settings'; + SettingsUpdate +} from '@urbit/api/settings'; type SettingsState = Pick; -export default class SettingsReducer{ +export default class SettingsReducer { reduce(json: Cage, state: S) { - let data = json["settings-event"]; + let data = json['settings-event']; if (data) { this.putBucket(data, state); this.delBucket(data, state); this.putEntry(data, state); this.delEntry(data, state); } - data = json["settings-data"]; + data = json['settings-data']; if (data) { this.getAll(data, state); this.getBucket(data, state); @@ -26,31 +26,31 @@ export default class SettingsReducer{ putBucket(json: SettingsUpdate, state: S) { const data = _.get(json, 'put-bucket', false); if (data) { - state.settings[data["bucket-key"]] = data.bucket; + state.settings[data['bucket-key']] = data.bucket; } } delBucket(json: SettingsUpdate, state: S) { const data = _.get(json, 'del-bucket', false); if (data) { - delete state.settings[data["bucket-key"]]; + delete state.settings[data['bucket-key']]; } } putEntry(json: SettingsUpdate, state: S) { const data = _.get(json, 'put-entry', false); if (data) { - if (!state.settings[data["bucket-key"]]) { - state.settings[data["bucket-key"]] = {}; + if (!state.settings[data['bucket-key']]) { + state.settings[data['bucket-key']] = {}; } - state.settings[data["bucket-key"]][data["entry-key"]] = data.value; + state.settings[data['bucket-key']][data['entry-key']] = data.value; } } delEntry(json: SettingsUpdate, state: S) { const data = _.get(json, 'del-entry', false); if (data) { - delete state.settings[data["bucket-key"]][data["entry-key"]]; + delete state.settings[data['bucket-key']][data['entry-key']]; } } diff --git a/pkg/interface/src/logic/state/local.tsx b/pkg/interface/src/logic/state/local.tsx index 64e68a0ca2..70e76c4687 100644 --- a/pkg/interface/src/logic/state/local.tsx +++ b/pkg/interface/src/logic/state/local.tsx @@ -1,10 +1,9 @@ -import React, { ReactNode } from "react"; +import React, { ReactNode } from 'react'; import f from 'lodash/fp'; import create, { State } from 'zustand'; import { persist } from 'zustand/middleware'; import produce from 'immer'; -import { BackgroundConfig, RemoteContentPolicy, TutorialProgress, tutorialProgress } from "~/types/local-update"; - +import { BackgroundConfig, RemoteContentPolicy, TutorialProgress, tutorialProgress } from '~/types/local-update'; export interface LocalState extends State { hideAvatars: boolean; @@ -22,8 +21,8 @@ export interface LocalState extends State { suspendedFocus?: HTMLElement; toggleOmnibox: () => void; set: (fn: (state: LocalState) => void) => void -}; -export const selectLocalState = +} +export const selectLocalState = (keys: K[]) => f.pick(keys); const useLocalState = create(persist((set, get) => ({ @@ -33,21 +32,21 @@ const useLocalState = create(persist((set, get) => ({ hideNicknames: false, tutorialProgress: 'hidden', tutorialRef: null, - setTutorialRef: (el: HTMLElement | null) => set(produce(state => { + setTutorialRef: (el: HTMLElement | null) => set(produce((state) => { state.tutorialRef = el; })), - hideTutorial: () => set(produce(state => { + hideTutorial: () => set(produce((state) => { state.tutorialProgress = 'hidden'; state.tutorialRef = null; })), - nextTutStep: () => set(produce(state => { - const currIdx = tutorialProgress.findIndex(p => p === state.tutorialProgress) + nextTutStep: () => set(produce((state) => { + const currIdx = tutorialProgress.findIndex(p => p === state.tutorialProgress); if(currIdx < tutorialProgress.length) { state.tutorialProgress = tutorialProgress[currIdx + 1]; } })), - prevTutStep: () => set(produce(state => { - const currIdx = tutorialProgress.findIndex(p => p === state.tutorialProgress) + prevTutStep: () => set(produce((state) => { + const currIdx = tutorialProgress.findIndex(p => p === state.tutorialProgress); if(currIdx > 0) { state.tutorialProgress = tutorialProgress[currIdx - 1]; } @@ -56,11 +55,11 @@ const useLocalState = create(persist((set, get) => ({ imageShown: true, audioShown: true, videoShown: true, - oembedShown: true, + oembedShown: true }, omniboxShown: false, suspendedFocus: undefined, - toggleOmnibox: () => set(produce(state => { + toggleOmnibox: () => set(produce((state) => { state.omniboxShown = !state.omniboxShown; if (typeof state.suspendedFocus?.focus === 'function') { state.suspendedFocus.focus(); @@ -86,7 +85,7 @@ function withLocalState(Component: any, stateMemb (object, key) => ({ ...object, [key]: state[key] }), {} ) ): useLocalState(); - return + return ; }); } diff --git a/pkg/interface/src/logic/store/base.ts b/pkg/interface/src/logic/store/base.ts index 9a48ebd80e..faeacca1e9 100644 --- a/pkg/interface/src/logic/store/base.ts +++ b/pkg/interface/src/logic/store/base.ts @@ -19,7 +19,7 @@ export default class BaseStore { clear() { this.handleEvent({ - data: { clear: true }, + data: { clear: true } }); } @@ -30,7 +30,7 @@ export default class BaseStore { return; } - if ("clear" in json && json.clear) { + if ('clear' in json && json.clear) { this.setState(this.initialState()); return; } diff --git a/pkg/interface/src/logic/store/store.ts b/pkg/interface/src/logic/store/store.ts index b2ab60c6c8..e56723ace9 100644 --- a/pkg/interface/src/logic/store/store.ts +++ b/pkg/interface/src/logic/store/store.ts @@ -6,7 +6,7 @@ import MetadataReducer from '../reducers/metadata-update'; import LocalReducer from '../reducers/local'; import { StoreState } from './type'; -import { Timebox } from '~/types'; +import { Timebox } from '@urbit/api'; import { Cage } from '~/types/cage'; import S3Reducer from '../reducers/s3-update'; import { GraphReducer } from '../reducers/graph-update'; @@ -16,10 +16,9 @@ import GroupReducer from '../reducers/group-update'; import LaunchReducer from '../reducers/launch-update'; import ConnectionReducer from '../reducers/connection'; import SettingsReducer from '../reducers/settings-update'; -import {OrderedMap} from '../lib/OrderedMap'; +import { OrderedMap } from '../lib/OrderedMap'; import { BigIntOrderedMap } from '../lib/BigIntOrderedMap'; -import {GroupViewReducer} from '../reducers/group-view'; - +import { GroupViewReducer } from '../reducers/group-view'; export default class GlobalStore extends BaseStore { inviteReducer = new InviteReducer(); @@ -58,7 +57,7 @@ export default class GlobalStore extends BaseStore { invites: {}, associations: { groups: {}, - graph: {}, + graph: {} }, groups: {}, groupKeys: new Set(), @@ -67,7 +66,7 @@ export default class GlobalStore extends BaseStore { launch: { firstTime: false, tileOrdering: [], - tiles: {}, + tiles: {} }, weather: {}, userLocation: null, @@ -87,7 +86,7 @@ export default class GlobalStore extends BaseStore { notificationsGraphConfig: { watchOnSelf: false, mentions: false, - watching: [], + watching: [] }, unreads: { graph: {}, @@ -95,7 +94,7 @@ export default class GlobalStore extends BaseStore { }, notificationsCount: 0, settings: {}, - pendingJoin: {}, + pendingJoin: {} }; } diff --git a/pkg/interface/src/logic/store/type.ts b/pkg/interface/src/logic/store/type.ts index 96b68f8a2d..2348aedf95 100644 --- a/pkg/interface/src/logic/store/type.ts +++ b/pkg/interface/src/logic/store/type.ts @@ -1,20 +1,20 @@ -import { Path } from '~/types/noun'; -import { Invites } from '~/types/invite-update'; -import { Associations } from '~/types/metadata-update'; -import { Rolodex } from '~/types/contact-update'; -import { Groups } from '~/types/group-update'; +import { Path } from '@urbit/api'; +import { Invites } from '@urbit/api/invite'; +import { Associations } from '@urbit/api/metadata'; +import { Rolodex } from '@urbit/api/contacts'; +import { Groups } from '@urbit/api/groups'; import { S3State } from '~/types/s3-update'; import { LaunchState, WeatherState } from '~/types/launch-update'; import { ConnectionStatus } from '~/types/connection'; -import {Graphs} from '~/types/graph-update'; +import { Graphs } from '@urbit/api/graph'; import { Notifications, - NotificationGraphConfig, + NotificationGraphConfig, GroupNotificationsConfig, Unreads, JoinRequests, Patp -} from "~/types"; +} from '@urbit/api'; export interface StoreState { // local state @@ -35,7 +35,6 @@ export interface StoreState { graphs: Graphs; graphKeys: Set; - // App specific states // launch state launch: LaunchState; diff --git a/pkg/interface/src/logic/subscription/base.ts b/pkg/interface/src/logic/subscription/base.ts index eb4b3b3afa..debf665415 100644 --- a/pkg/interface/src/logic/subscription/base.ts +++ b/pkg/interface/src/logic/subscription/base.ts @@ -1,6 +1,6 @@ -import BaseStore from "../store/base"; -import BaseApi from "../api/base"; -import { Path } from "~/types/noun"; +import BaseStore from '../store/base'; +import BaseApi from '../api/base'; +import { Path } from '@urbit/api'; export default class BaseSubscription { private errorCount = 0; @@ -19,24 +19,24 @@ export default class BaseSubscription { // Exists to allow subclasses to hook restart() { - this.handleEvent({ data: { connection: 'reconnecting' }}); + this.handleEvent({ data: { connection: 'reconnecting' } }); this.start(); } onChannelOpen(e: any) { this.errorCount = 0; - this.handleEvent({ data: { connection: 'connected' }}); + this.handleEvent({ data: { connection: 'connected' } }); } onChannelError(err) { console.error('event source error: ', err); this.errorCount++; if(this.errorCount >= 5) { - console.error("bailing out, too many retries"); - this.handleEvent({ data: { connection: 'disconnected' }}); + console.error('bailing out, too many retries'); + this.handleEvent({ data: { connection: 'disconnected' } }); return; } - this.handleEvent({ data: { connection: 'reconnecting' }}); + this.handleEvent({ data: { connection: 'reconnecting' } }); setTimeout(() => { this.restart(); }, Math.pow(2,this.errorCount - 1) * 750); diff --git a/pkg/interface/src/logic/subscription/global.ts b/pkg/interface/src/logic/subscription/global.ts index a434c41e00..5b444f06df 100644 --- a/pkg/interface/src/logic/subscription/global.ts +++ b/pkg/interface/src/logic/subscription/global.ts @@ -1,9 +1,8 @@ import BaseSubscription from './base'; import { StoreState } from '../store/type'; -import { Path } from '~/types/noun'; +import { Path } from '@urbit/api'; import _ from 'lodash'; - /** * Path to subscribe on and app to subscribe to */ @@ -68,7 +67,7 @@ export default class GlobalSubscription extends BaseSubscription { } stopApp(app: AppName) { - this.openSubscriptions[app].map(id => this.unsubscribe(id)) + this.openSubscriptions[app].map(id => this.unsubscribe(id)); this.openSubscriptions[app] = []; } } diff --git a/pkg/interface/src/types/cage.ts b/pkg/interface/src/types/cage.ts index 266188543f..044fb46212 100644 --- a/pkg/interface/src/types/cage.ts +++ b/pkg/interface/src/types/cage.ts @@ -1,21 +1,17 @@ -import { ContactUpdate } from "./contact-update"; -import { InviteUpdate } from "./invite-update"; -import { LocalUpdate } from "./local-update"; -import { MetadataUpdate } from "./metadata-update"; -import { GroupUpdate } from "./group-update"; -import { LaunchUpdate, WeatherState } from "./launch-update"; -import { ConnectionStatus } from "./connection"; -import { SettingsUpdate } from "./settings"; +import { LocalUpdate } from './local-update'; +import { LaunchUpdate, WeatherState } from './launch-update'; +import { ConnectionStatus } from './connection'; +import { ContactUpdate, GroupUpdate, InviteUpdate, MetadataUpdate } from '@urbit/api'; +import { SettingsUpdate } from '@urbit/api/settings'; interface MarksToTypes { readonly json: any; - readonly "contact-update": ContactUpdate; - readonly "invite-update": InviteUpdate; - readonly "metadata-update": MetadataUpdate; + readonly 'contact-update': ContactUpdate; + readonly 'invite-update': InviteUpdate; + readonly 'metadata-update': MetadataUpdate; readonly groupUpdate: GroupUpdate; - readonly "launch-update": LaunchUpdate; - readonly "link-listen-update": LinkListenUpdate; - readonly "settings-event": SettingsUpdate; + readonly 'launch-update': LaunchUpdate; + readonly 'settings-event': SettingsUpdate; // not really marks but w/e readonly 'local': LocalUpdate; readonly 'weather': WeatherState | {}; diff --git a/pkg/interface/src/types/connection.ts b/pkg/interface/src/types/connection.ts index 6f624238e8..38b06b09aa 100644 --- a/pkg/interface/src/types/connection.ts +++ b/pkg/interface/src/types/connection.ts @@ -1,2 +1 @@ - export type ConnectionStatus = 'reconnecting' | 'disconnected' | 'connected'; diff --git a/pkg/interface/src/types/contact-update.ts b/pkg/interface/src/types/contact-update.ts deleted file mode 100644 index e48afc739c..0000000000 --- a/pkg/interface/src/types/contact-update.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { Path, Patp } from "./noun"; - -export type ContactUpdate = - | ContactUpdateCreate - | ContactUpdateDelete - | ContactUpdateAdd - | ContactUpdateRemove - | ContactUpdateEdit - | ContactUpdateInitial - | ContactUpdateContacts; - -interface ContactUpdateCreate { - create: Path; -} - -interface ContactUpdateDelete { - delete: Path; -} - -interface ContactUpdateAdd { - add: { - path: Path; - ship: Patp; - contact: Contact; - }; -} - -interface ContactUpdateRemove { - remove: { - path: Path; - ship: Patp; - }; -} - -interface ContactUpdateEdit { - edit: { - path: Path; - ship: Patp; - "edit-field": ContactEdit; - }; -} - -interface ContactUpdateInitial { - initial: Rolodex; -} - -interface ContactUpdateContacts { - contacts: { - path: Path; - contacts: Contacts; - }; -} - -// - -type ContactAvatar = ContactAvatarUrl | ContactAvatarOcts; - -export type Rolodex = { - [p in Path]: Contacts; -}; - -export type Contacts = { - [p in Patp]: Contact; -}; - -interface ContactAvatarUrl { - url: string; -} - -interface ContactAvatarOcts { - octs: string; -} -export interface Contact { - nickname: string; - email: string; - phone: string; - website: string; - notes: string; - color: string; - avatar: string | null; -} - -export type ContactEdit = { - [k in keyof Contact]: Contact[k]; -}; diff --git a/pkg/interface/src/types/global.ts b/pkg/interface/src/types/global.ts index d43a77b1b7..4294f574f2 100644 --- a/pkg/interface/src/types/global.ts +++ b/pkg/interface/src/types/global.ts @@ -1,4 +1,4 @@ -import { PatpNoSig } from "./noun"; +import { PatpNoSig } from '@urbit/api'; declare global { interface Window { diff --git a/pkg/interface/src/types/graph-update.ts b/pkg/interface/src/types/graph-update.ts deleted file mode 100644 index ad071b97d2..0000000000 --- a/pkg/interface/src/types/graph-update.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Patp } from "./noun"; -import { BigIntOrderedMap } from "~/logic/lib/BigIntOrderedMap"; - -export interface TextContent { - text: string; -} -export interface UrlContent { - url: string; -} -export interface CodeContent { - code: { - expresssion: string; - output: string | undefined; - } -} - -export interface ReferenceContent { - uid: string; -} -export interface MentionContent { - mention: string; -} -export type Content = - | TextContent - | UrlContent - | CodeContent - | ReferenceContent - | MentionContent; - -export interface Post { - author: Patp; - contents: Content[]; - hash: string | null; - index: string; - pending?: boolean; - signatures: string[]; - "time-sent": number; -} - -export interface GraphNode { - children: Graph; - post: Post; -} - -export type Graph = BigIntOrderedMap; - -export type Graphs = { [rid: string]: Graph }; diff --git a/pkg/interface/src/types/group-update.ts b/pkg/interface/src/types/group-update.ts deleted file mode 100644 index ad7c35004e..0000000000 --- a/pkg/interface/src/types/group-update.ts +++ /dev/null @@ -1,180 +0,0 @@ -import { PatpNoSig, Path, Jug, ShipRank, Enc } from './noun'; - -export const roleTags = ['janitor', 'moderator', 'admin'] as const; -export type RoleTags = typeof roleTags[number]; -interface RoleTag { - tag: 'admin' | 'moderator' | 'janitor'; -} - -interface AppTag { - app: string; - resource: string; - tag: string; -} - -export type Tag = AppTag | RoleTag; - -export interface InvitePolicy { - invite: { - pending: Set; - }; -} - -export interface OpenPolicy { - open: { - banned: Set; - banRanks: Set; - }; -} - -export interface Resource { - name: string; - ship: PatpNoSig; -} - -export type OpenPolicyDiff = - | AllowRanksDiff - | BanRanksDiff - | AllowShipsDiff - | BanShipsDiff; - -interface AllowRanksDiff { - allowRanks: ShipRank[]; -} - -interface BanRanksDiff { - banRanks: ShipRank[]; -} - -interface AllowShipsDiff { - allowShips: PatpNoSig[]; -} - -interface BanShipsDiff { - banShips: PatpNoSig[]; -} - -export type InvitePolicyDiff = AddInvitesDiff | RemoveInvitesDiff; - -interface AddInvitesDiff { - addInvites: PatpNoSig[]; -} - -interface RemoveInvitesDiff { - removeInvites: PatpNoSig[]; -} - -interface ReplacePolicyDiff { - replace: GroupPolicy; -} - -export type GroupPolicyDiff = - | { open: OpenPolicyDiff } - | { invite: InvitePolicyDiff } - | ReplacePolicyDiff; - -export type GroupPolicy = OpenPolicy | InvitePolicy; - -interface TaggedShips { - [tag: string]: Set; -} - -export interface Tags { - role: TaggedShips; - [app: string]: TaggedShips; -} - -export interface Group { - members: Set; - tags: Tags; - policy: GroupPolicy; - hidden: boolean; -} - -export type Groups = { - [p in Path]: Group; -}; - -interface GroupUpdateInitial { - initial: Enc; -} - -interface GroupUpdateAddGroup { - addGroup: { - resource: Resource; - policy: Enc; - hidden: boolean; - }; -} - -interface GroupUpdateAddMembers { - addMembers: { - ships: PatpNoSig[]; - resource: Resource; - }; -} - -interface GroupUpdateRemoveMembers { - removeMembers: { - ships: PatpNoSig[]; - resource: Resource; - }; -} - -interface GroupUpdateAddTag { - addTag: { - tag: Tag; - resource: Resource; - ships: PatpNoSig[]; - }; -} - -interface GroupUpdateRemoveTag { - removeTag: { - tag: Tag; - resource: Resource; - ships: PatpNoSig; - }; -} - -interface GroupUpdateChangePolicy { - changePolicy: { resource: Resource; diff: GroupPolicyDiff }; -} - -interface GroupUpdateRemoveGroup { - removeGroup: { - resource: Resource; - }; -} - -interface GroupUpdateExpose { - expose: { - resource: Resource; - }; -} - -interface GroupUpdateInitialGroup { - initialGroup: { - resource: Resource; - group: Enc; - }; -} - -export type GroupUpdate = - | GroupUpdateInitial - | GroupUpdateAddGroup - | GroupUpdateAddMembers - | GroupUpdateRemoveMembers - | GroupUpdateAddTag - | GroupUpdateRemoveTag - | GroupUpdateChangePolicy - | GroupUpdateRemoveGroup - | GroupUpdateExpose - | GroupUpdateInitialGroup; - -export type GroupAction = Omit; - -export const groupBunts = { - group: (): Group => ({ members: new Set(), tags: { role: {} }, hidden: false, policy: groupBunts.policy() }), - policy: (): GroupPolicy => ({ open: { banned: new Set(), banRanks: new Set() } }) -}; diff --git a/pkg/interface/src/types/group-view.ts b/pkg/interface/src/types/group-view.ts deleted file mode 100644 index 635a2954a3..0000000000 --- a/pkg/interface/src/types/group-view.ts +++ /dev/null @@ -1,11 +0,0 @@ -export const joinError = ['no-perms', 'strange'] as const; -export type JoinError = typeof joinError[number]; -export const joinResult = ['done', ...joinError] as const; -export type JoinResult = typeof joinResult[number]; - -export const joinProgress = ['start', 'added', ...joinResult] as const; -export type JoinProgress = typeof joinProgress[number]; - -export interface JoinRequests { - [rid: string]: JoinProgress; -} diff --git a/pkg/interface/src/types/hark-update.ts b/pkg/interface/src/types/hark-update.ts deleted file mode 100644 index 156f96b66c..0000000000 --- a/pkg/interface/src/types/hark-update.ts +++ /dev/null @@ -1,68 +0,0 @@ -import _ from "lodash"; -import { Post } from "./graph-update"; -import { GroupUpdate } from "./group-update"; -import { BigIntOrderedMap } from "~/logic/lib/BigIntOrderedMap"; - -export type GraphNotifDescription = "link" | "comment" | "note" | "mention"; - -export interface UnreadStats { - unreads: Set | number; - notifications: number; - last: number; -} - -export interface GraphNotifIndex { - graph: string; - group: string; - description: GraphNotifDescription; - module: string; - index: string; -} - -export interface GroupNotifIndex { - group: string; - description: string; -} - -export type NotifIndex = - | { graph: GraphNotifIndex } - | { group: GroupNotifIndex }; - -export type GraphNotificationContents = Post[]; - -export type GroupNotificationContents = GroupUpdate[]; - -export type NotificationContents = - | { graph: GraphNotificationContents } - | { group: GroupNotificationContents }; -export interface Notification { - read: boolean; - time: number; - contents: NotificationContents; -} - -export interface IndexedNotification { - index: NotifIndex; - notification: Notification; -} - -export type Timebox = IndexedNotification[]; - -export type Notifications = BigIntOrderedMap; - -export interface NotificationGraphConfig { - watchOnSelf: boolean; - mentions: boolean; - watching: WatchedIndex[] -} - -export interface Unreads { - graph: Record>; - group: Record; -} - -interface WatchedIndex { - graph: string; - index: string; -} -export type GroupNotificationsConfig = string[]; diff --git a/pkg/interface/src/types/index.ts b/pkg/interface/src/types/index.ts index 5c1d81b0b9..c4abcba640 100644 --- a/pkg/interface/src/types/index.ts +++ b/pkg/interface/src/types/index.ts @@ -1,16 +1,8 @@ export * from './cage'; export * from './connection'; -export * from './contact-update'; export * from './global'; -export * from './group-update'; -export * from './group-view'; -export * from './graph-update'; -export * from './hark-update'; -export * from './invite-update'; export * from './launch-update'; export * from './local-update'; -export * from './metadata-update'; -export * from './noun'; export * from './s3-update'; export * from './workspace'; export * from './util'; diff --git a/pkg/interface/src/types/invite-update.ts b/pkg/interface/src/types/invite-update.ts deleted file mode 100644 index b897687a45..0000000000 --- a/pkg/interface/src/types/invite-update.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { Serial, PatpNoSig, Path } from './noun'; -import {Resource} from './group-update'; - -export type InviteUpdate = - InviteUpdateInitial -| InviteUpdateCreate -| InviteUpdateDelete -| InviteUpdateInvite -| InviteUpdateAccepted -| InviteUpdateDecline; - - -interface InviteUpdateInitial { - initial: Invites; -} - -interface InviteUpdateCreate { - create: { - path: Path; - }; -} - -interface InviteUpdateDelete { - delete: { - path: Path; - }; -} - -interface InviteUpdateInvite { - invite: { - path: Path; - uid: Serial; - invite: Invite; - }; -} - -interface InviteUpdateAccepted { - accepted: { - path: Path; - uid: Serial; - }; -} - -interface InviteUpdateDecline { - decline: { - path: Path; - uid: Serial; - }; -} - -// actual datastructures - - -export type Invites = { - [p in Path]: AppInvites; -}; - -export type AppInvites = { - [s in Serial]: Invite; -}; - -export interface Invite { - app: string; - recipient: PatpNoSig; - resource: Resource; - ship: PatpNoSig; - text: string; -} diff --git a/pkg/interface/src/types/launch-update.ts b/pkg/interface/src/types/launch-update.ts index 0999878455..879c3620b7 100644 --- a/pkg/interface/src/types/launch-update.ts +++ b/pkg/interface/src/types/launch-update.ts @@ -1,11 +1,9 @@ - export type LaunchUpdate = LaunchUpdateInitial | LaunchUpdateFirstTime | LaunchUpdateOrder | LaunchUpdateIsShown; - interface LaunchUpdateInitial { initial: LaunchState; } diff --git a/pkg/interface/src/types/metadata-update.ts b/pkg/interface/src/types/metadata-update.ts deleted file mode 100644 index 640bd5a9b4..0000000000 --- a/pkg/interface/src/types/metadata-update.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { AppName, Path, Patp } from './noun'; - - -export type MetadataUpdate = - MetadataUpdateInitial -| MetadataUpdateAdd -| MetadataUpdateUpdate -| MetadataUpdateRemove; - -interface MetadataUpdateInitial { - associations: ResourceAssociations; -} - -type ResourceAssociations = { - [p in Path]: Association; -} - -type MetadataUpdateAdd = { - add: Association; -} - -type MetadataUpdateUpdate = { - update: Association; -} - -type MetadataUpdateRemove = { - remove: Resource & { - group: Path; - } -} - -export interface MetadataUpdatePreview { - group: string; - channels: Associations; - "channel-count": number; - members: number; - metadata: Metadata; -} - -export type Associations = Record; - -export type AppAssociations = { - [p in Path]: Association; -} - -interface Resource { - resource: Path; - 'app-name': AppName; -} - -export type Association = Resource & { - group: Path; - metadata: Metadata; -}; - -export interface Metadata { - color: string; - creator: Patp; - 'date-created': string; - description: string; - title: string; - module: string; - picture: string; - preview: boolean; - vip: PermVariation; -} - -export type PermVariation = '' | 'reader-comments' | 'member-metadata'; diff --git a/pkg/interface/src/types/noun.ts b/pkg/interface/src/types/noun.ts deleted file mode 100644 index f566f02403..0000000000 --- a/pkg/interface/src/types/noun.ts +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Martian embassy - */ - -// an urbit style path rendered as string -export type Path = string; - -// patp including leading sig -export type Patp = string; - -// patp excluding leading sig -export type PatpNoSig = string; - -// @uvH encoded string -export type Serial = string; - -// jug from hoon -export type Jug = Map>; - -// name of app -export type AppName = 'contacts' | 'groups' | 'graph'; - -export function getTagFromFrond(frond: O): keyof O { - const tags = Object.keys(frond) as Array; - const tag = tags[0]; - if(!tag) { - throw new Error("bad frond"); - } - return tag; -} - -export type ShipRank = 'czar' | 'king' | 'duke' | 'earl' | 'pawn'; - - -export type SetElement = S extends Set<(infer T)> ? T : never; -export type MapKey = M extends Map<(infer K), any> ? K : never; -export type MapValue = M extends Map ? V : never; - -/** - * Turns sets into arrays and maps into objects so we can send them over the wire - */ -export type Enc = - S extends Set ? - Enc>[] : - S extends Map ? - { [s: string]: Enc> } : - S extends object ? - { [K in keyof S]: Enc } : - S; diff --git a/pkg/interface/src/types/s3-update.ts b/pkg/interface/src/types/s3-update.ts index 3dfa516229..88763b7d66 100644 --- a/pkg/interface/src/types/s3-update.ts +++ b/pkg/interface/src/types/s3-update.ts @@ -1,6 +1,4 @@ - - - export interface S3Credentials { +export interface S3Credentials { endpoint: string; accessKeyId: string; secretAccessKey: string; @@ -51,7 +49,6 @@ interface S3UpdateSecretAccessKey { setSecretAccessKey: string; } - export type S3Update = S3UpdateCredentials | S3UpdateConfiguration diff --git a/pkg/interface/src/types/settings.ts b/pkg/interface/src/types/settings.ts deleted file mode 100644 index f0f50df491..0000000000 --- a/pkg/interface/src/types/settings.ts +++ /dev/null @@ -1,55 +0,0 @@ -export type Key = string; -export type Value = string | boolean | number; -export type Bucket = Map; -export type Settings = Map; - -interface PutBucket { - "put-bucket": { - "bucket-key": Key; - "bucket": Bucket; - }; -} - -interface DelBucket { - "del-bucket": { - "bucket-key": Key; - }; -} - -interface PutEntry { - "put-entry": { - "bucket-key": Key; - "entry-key": Key; - "value": Value; - }; -} - -interface DelEntry { - "del-entry": { - "bucket-key": Key; - "entry-key": Key; - }; -} - -interface AllData { - "all": Settings; -} - -interface BucketData { - "bucket": Bucket; -} - -interface EntryData { - "entry": Value; -} - -export type SettingsUpdate = - | PutBucket - | DelBucket - | PutEntry - | DelEntry; - -export type SettingsData = - | AllData - | BucketData - | EntryData; diff --git a/pkg/interface/src/types/util.ts b/pkg/interface/src/types/util.ts index 2f3d390e5d..f247978caf 100644 --- a/pkg/interface/src/types/util.ts +++ b/pkg/interface/src/types/util.ts @@ -1,4 +1,4 @@ -import { Icon } from "@tlon/indigo-react"; +import { Icon } from '@tlon/indigo-react'; export type PropFunc any> = Parameters[0]; export type Primitive = string | number | undefined | symbol | null | boolean; diff --git a/pkg/interface/src/types/workspace.ts b/pkg/interface/src/types/workspace.ts index 69da82ed3f..e8238e7251 100644 --- a/pkg/interface/src/types/workspace.ts +++ b/pkg/interface/src/types/workspace.ts @@ -1,5 +1,3 @@ - - interface GroupWorkspace { type: 'group'; group: string; diff --git a/pkg/interface/src/views/apps/chat/ChatResource.tsx b/pkg/interface/src/views/apps/chat/ChatResource.tsx index 5e8a35e95b..03a887a88e 100644 --- a/pkg/interface/src/views/apps/chat/ChatResource.tsx +++ b/pkg/interface/src/views/apps/chat/ChatResource.tsx @@ -3,7 +3,7 @@ import { RouteComponentProps } from 'react-router-dom'; import { Col } from '@tlon/indigo-react'; import _ from 'lodash'; -import { Association } from '~/types/metadata-update'; +import { Association } from '@urbit/api/metadata'; import { StoreState } from '~/logic/store/type'; import { useFileDrag } from '~/logic/lib/useDrag'; import ChatWindow from './components/ChatWindow'; @@ -86,12 +86,16 @@ export function ChatResource(props: ChatResourceProps) { useEffect(() => { (async () => { - if (!res) { return; } - if (!group) { return; } + if (!res) { + return; +} + if (!group) { + return; +} if (group.hidden) { const members = _.compact(await Promise.all( Array.from(group.members) - .map(s => { + .map((s) => { const ship = `~${s}`; if(s === window.ship) { return Promise.resolve(null); @@ -101,7 +105,7 @@ export function ChatResource(props: ChatResourceProps) { 'personal', ship, true - ).then(isAllowed => { + ).then((isAllowed) => { return isAllowed ? null : ship; }); }) @@ -113,7 +117,6 @@ export function ChatResource(props: ChatResourceProps) { } else { setShowBanner(false); } - } else { const groupShared = await props.api.contacts.fetchIsAllowed( `~${window.ship}`, @@ -124,14 +127,13 @@ export function ChatResource(props: ChatResourceProps) { setShowBanner(!groupShared); } })(); - }, [groupPath]); if(!graph) { return ; } - var modifiedContacts = { ...contacts }; + const modifiedContacts = { ...contacts }; delete modifiedContacts[`~${window.ship}`]; return ( @@ -145,7 +147,7 @@ export function ChatResource(props: ChatResourceProps) { setShowBanner={setShowBanner} group={group} groupPath={groupPath} - /> + /> {dragging && } { inCodeMode: false }, async () => { const output = await props.api.graph.eval(text); - const contents: Content[] = [{ code: { output, expression: text }}]; + const contents: Content[] = [{ code: { output, expression: text } }]; const post = createPost(contents); props.api.graph.addPost(ship, name, post); }); return; } - const post = createPost(tokenizeMessage((text))) + const post = createPost(tokenizeMessage((text))); props.deleteMessage(); @@ -110,7 +110,7 @@ class ChatInput extends Component { if (!this.props.canUpload) { return; } - Array.from(files).forEach(file => { + Array.from(files).forEach((file) => { this.props.uploadDefault(file) .then(this.uploadSuccess) .catch(this.uploadError); @@ -178,7 +178,7 @@ class ChatInput extends Component { width="16" height="16" onClick={() => this.props.promptUpload().then(this.uploadSuccess)} - /> + /> : null } @@ -200,4 +200,4 @@ class ChatInput extends Component { } } -export default withLocalState(withS3(ChatInput, {accept: 'image/*'}), ['hideAvatars']); +export default withLocalState(withS3(ChatInput, { accept: 'image/*' }), ['hideAvatars']); diff --git a/pkg/interface/src/views/apps/chat/components/ChatMessage.tsx b/pkg/interface/src/views/apps/chat/components/ChatMessage.tsx index 6252383ddb..7f7cca0a37 100644 --- a/pkg/interface/src/views/apps/chat/components/ChatMessage.tsx +++ b/pkg/interface/src/views/apps/chat/components/ChatMessage.tsx @@ -17,7 +17,7 @@ import { useShowNickname, useHovering } from '~/logic/lib/util'; -import { Group, Association, Contacts, Post, Groups, Associations } from '~/types'; +import { Group, Association, Contacts, Post, Groups, Associations } from '@urbit/api'; import TextContent from './content/text'; import CodeContent from './content/code'; import RemoteContent from '~/views/components/RemoteContent'; @@ -66,12 +66,12 @@ interface ChatMessageProps { contacts: Contacts; className?: string; isPending: boolean; - style?: any; + style?: unknown; scrollWindow: HTMLDivElement; isLastMessage?: boolean; unreadMarkerRef: React.RefObject; - history: any; - api: any; + history: unknown; + api: GlobalApi; highlighted?: boolean; } @@ -149,7 +149,7 @@ export default class ChatMessage extends Component { highlighted, fontSize, associations, - groups, + groups }; const unreadContainerStyle = { @@ -230,7 +230,7 @@ export const MessageWithSigil = (props) => { fontSize } = props; - const dark = useLocalState((state) => state.dark); + const dark = useLocalState(state => state.dark); const datestamp = moment .unix(msg['time-sent'] / 1000) @@ -255,7 +255,7 @@ export const MessageWithSigil = (props) => { const [showOverlay, setShowOverlay] = useState(false); const toggleOverlay = () => { - setShowOverlay((value) => !value); + setShowOverlay(value => !value); }; const showCopyNotice = () => { diff --git a/pkg/interface/src/views/apps/chat/components/ChatWindow.tsx b/pkg/interface/src/views/apps/chat/components/ChatWindow.tsx index 8db2935a50..54d10b9d1f 100644 --- a/pkg/interface/src/views/apps/chat/components/ChatWindow.tsx +++ b/pkg/interface/src/views/apps/chat/components/ChatWindow.tsx @@ -1,22 +1,17 @@ -import React, { Component } from "react"; -import { RouteComponentProps } from "react-router-dom"; -import _ from "lodash"; +import React, { Component } from 'react'; +import { RouteComponentProps } from 'react-router-dom'; +import _ from 'lodash'; import bigInt, { BigInteger } from 'big-integer'; import { Col } from '@tlon/indigo-react'; +import { Patp, Contacts, Association, Associations, Group, Groups, Graph } from '@urbit/api'; -import GlobalApi from "~/logic/api/global"; -import { Patp, Path } from "~/types/noun"; -import { Contacts } from "~/types/contact-update"; -import { Association, Associations } from "~/types/metadata-update"; -import { Group, Groups } from "~/types/group-update"; -import { Envelope, IMessage } from "~/types/chat-update"; -import { Graph } from "~/types"; +import GlobalApi from '~/logic/api/global'; -import VirtualScroller from "~/views/components/VirtualScroller"; +import VirtualScroller from '~/views/components/VirtualScroller'; import ChatMessage, { MessagePlaceholder } from './ChatMessage'; -import { UnreadNotice } from "./unread-notice"; +import { UnreadNotice } from './unread-notice'; const INITIAL_LOAD = 20; const DEFAULT_BACKLOG_SIZE = 100; @@ -66,8 +61,6 @@ export default class ChatWindow extends Component scrollTop) @@ -246,7 +242,6 @@ export default class ChatWindow extends Component {this.virtualList = list}} + ref={(list) => { + this.virtualList = list; +}} origin="bottom" style={{ height: '100%' }} onStartReached={() => { @@ -274,7 +271,8 @@ export default class ChatWindow extends Component { const msg = graph.get(index)?.post; - if (!msg) return null; + if (!msg) +return null; if (!this.state.initialized) { return ; } @@ -285,7 +283,6 @@ export default class ChatWindow extends Component alphabeticalOrder(a.metadata.title, b.metadata.title); - const getGraphUnreads = (associations: Associations, unreads: Unreads) => (path: string) => f.flow( f.pickBy((a: Association) => a.group === path), @@ -34,12 +33,11 @@ const getGraphNotifications = (associations: Associations, unreads: Unreads) => f.reduce(f.add, 0) )(associations.graph); - export default function Groups(props: GroupsProps & Parameters[0]) { const { associations, unreads, inbox, ...boxProps } = props; const groups = Object.values(associations?.groups || {}) - .filter((e) => e?.group in props.groups) + .filter(e => e?.group in props.groups) .sort(sortGroupsAlph); const graphUnreads = getGraphUnreads(associations || {}, unreads); const graphNotifications = getGraphNotifications(associations || {}, unreads); @@ -48,7 +46,7 @@ export default function Groups(props: GroupsProps & Parameters[0]) { <> {groups.map((group, index) => { const path = group?.group; - const unreadCount = graphUnreads(path) + const unreadCount = graphUnreads(path); const notCount = graphNotifications(path); return ( diff --git a/pkg/interface/src/views/apps/launch/components/ModalButton.tsx b/pkg/interface/src/views/apps/launch/components/ModalButton.tsx index eea2d3b6e7..15b223e17c 100644 --- a/pkg/interface/src/views/apps/launch/components/ModalButton.tsx +++ b/pkg/interface/src/views/apps/launch/components/ModalButton.tsx @@ -1,6 +1,6 @@ -import React from "react" -import { Box, Button, Icon, Text } from "@tlon/indigo-react" -import {useModal} from "~/logic/lib/useModal"; +import React from 'react'; +import { Box, Button, Icon, Text } from '@tlon/indigo-react'; +import { useModal } from '~/logic/lib/useModal'; const ModalButton = (props) => { const { @@ -13,7 +13,6 @@ const ModalButton = (props) => { } = props; const { modal, showModal } = useModal({ modal: props.children }); - return ( <> {modal} @@ -33,6 +32,6 @@ const ModalButton = (props) => { ); -} +}; export default ModalButton; diff --git a/pkg/interface/src/views/apps/links/LinkResource.tsx b/pkg/interface/src/views/apps/links/LinkResource.tsx index d85a2d7706..0f61a7bf88 100644 --- a/pkg/interface/src/views/apps/links/LinkResource.tsx +++ b/pkg/interface/src/views/apps/links/LinkResource.tsx @@ -1,19 +1,18 @@ -import React, { useEffect, useCallback } from "react"; -import { Box, Row, Col, Center, LoadingSpinner, Text } from "@tlon/indigo-react"; -import { Switch, Route, Link } from "react-router-dom"; +import React, { useEffect } from 'react'; +import { Box, Col, Center, LoadingSpinner, Text } from '@tlon/indigo-react'; +import { Switch, Route, Link } from 'react-router-dom'; import bigInt from 'big-integer'; -import GlobalApi from "~/logic/api/global"; -import { StoreState } from "~/logic/store/type"; -import { uxToHex } from '~/logic/lib/util'; -import { RouteComponentProps } from "react-router-dom"; +import GlobalApi from '~/logic/api/global'; +import { StoreState } from '~/logic/store/type'; +import { RouteComponentProps } from 'react-router-dom'; -import { LinkItem } from "./components/LinkItem"; -import { LinkPreview } from "./components/link-preview"; -import { LinkWindow } from "./LinkWindow"; -import { Comments } from "~/views/components/Comments"; +import { LinkItem } from './components/LinkItem'; +import { LinkWindow } from './LinkWindow'; +import { Comments } from '~/views/components/Comments'; -import "./css/custom.css"; +import './css/custom.css'; +import { Association } from '@urbit/api/metadata'; const emptyMeasure = () => {}; @@ -38,11 +37,11 @@ export function LinkResource(props: LinkResourceProps) { history } = props; - const rid = association.resource; + const rid = association.resource; const relativePath = (p: string) => `${baseUrl}/resource/link${rid}${p}`; - const [, , ship, name] = rid.split("/"); + const [, , ship, name] = rid.split('/'); const resourcePath = `${ship.slice(1)}/${name}`; const resource = associations.graph[rid] ? associations.graph[rid] @@ -58,7 +57,7 @@ export function LinkResource(props: LinkResourceProps) { const resourceUrl = `${baseUrl}/resource/link${rid}`; if (!graph) { - return

; + return
; } return ( @@ -66,7 +65,7 @@ export function LinkResource(props: LinkResourceProps) { { return ( { const index = bigInt(props.match.params.index); const editCommentId = props.match.params.commentId || null; @@ -95,7 +94,7 @@ export function LinkResource(props: LinkResourceProps) { return
Malformed URL
; } - const node = !!graph ? graph.get(index) : null; + const node = graph ? graph.get(index) : null; if (!node) { return Not found; @@ -106,7 +105,7 @@ export function LinkResource(props: LinkResourceProps) { return ( - {"<- Back"} + {'<- Back'} { const list = virtualList?.current; - if(!list) return; + if(!list) +return; list.calculateVisibleItems(); }, [graph.size]); const first = graph.peekLargest()?.[0]; const [,,ship, name] = association.resource.split('/'); - const canWrite = isWriter(props.group, association.resource) + const canWrite = isWriter(props.group, association.resource); const style = useMemo(() => ({ - height: "100%", - width: "100%", + height: '100%', + width: '100%', display: 'flex', flexDirection: 'column', alignItems: 'center' @@ -76,7 +77,7 @@ export function LinkWindow(props: LinkWindowProps) { return ( (virtualList.current = l ?? undefined)} + ref={l => (virtualList.current = l ?? undefined)} origin="top" style={style} onStartReached={() => {}} @@ -86,11 +87,12 @@ export function LinkWindow(props: LinkWindowProps) { renderer={({ index, measure, scrollWindow }) => { const node = graph.get(index); const post = node?.post; - if (!node || !post) return null; + if (!node || !post) +return null; const linkProps = { ...props, node, - measure, + measure }; if(canWrite && index.eq(first ?? bigInt.zero)) { return ( @@ -100,7 +102,7 @@ export function LinkWindow(props: LinkWindowProps) { - ) + ); } return ; }} diff --git a/pkg/interface/src/views/apps/links/components/LinkItem.tsx b/pkg/interface/src/views/apps/links/components/LinkItem.tsx index 8149fc580d..4e02ae8b94 100644 --- a/pkg/interface/src/views/apps/links/components/LinkItem.tsx +++ b/pkg/interface/src/views/apps/links/components/LinkItem.tsx @@ -1,12 +1,12 @@ -import React, { useState, useEffect, useRef, useCallback } from 'react'; +import React, { useState, useEffect, useRef, useCallback, ReactElement } from 'react'; import { Link } from 'react-router-dom'; + import { Row, Col, Anchor, Box, Text, Icon, Action } from '@tlon/indigo-react'; +import { GraphNode, Group, Rolodex, Unreads } from '@urbit/api'; import { writeText } from '~/logic/lib/util'; import Author from '~/views/components/Author'; - import { roleForShip } from '~/logic/lib/group'; -import { Contacts, GraphNode, Group, Rolodex, Unreads } from '~/types'; import GlobalApi from '~/logic/api/global'; import { Dropdown } from '~/views/components/Dropdown'; import RemoteContent from '~/views/components/RemoteContent'; @@ -22,7 +22,7 @@ interface LinkItemProps { measure: (el: any) => void; } -export const LinkItem = (props: LinkItemProps) => { +export const LinkItem = (props: LinkItemProps): ReactElement => { const { node, resource, @@ -46,7 +46,7 @@ export const LinkItem = (props: LinkItemProps) => { // FF will only update on next tick setTimeout(() => { console.log(remoteRef.current); - if(document.activeElement instanceof HTMLIFrameElement + if(document.activeElement instanceof HTMLIFrameElement && remoteRef?.current?.containerRef?.contains(document.activeElement)) { markRead(); } @@ -55,8 +55,7 @@ export const LinkItem = (props: LinkItemProps) => { window.addEventListener('blur', onBlur); return () => { window.removeEventListener('blur', onBlur); - } - + }; }, [markRead]); const URLparser = new RegExp( @@ -94,11 +93,9 @@ export const LinkItem = (props: LinkItemProps) => { const commColor = (props.unreads.graph?.[appPath]?.[`/${index}`]?.unreads ?? 0) > 0 ? 'blue' : 'gray'; const isUnread = props.unreads.graph?.[appPath]?.['/']?.unreads?.has(node.post.index); - - const onMeasure = useCallback(() => { ref.current && measure(ref.current); - }, [ref.current, measure]) + }, [ref.current, measure]); useEffect(() => { onMeasure(); @@ -120,7 +117,9 @@ export const LinkItem = (props: LinkItemProps) => { onClick={markRead} > { remoteRef.current = r}} + ref={(r) => { + remoteRef.current = r; +}} url={contents[1].url} text={contents[0].text} unfold={true} @@ -143,7 +142,8 @@ export const LinkItem = (props: LinkItemProps) => { alignSelf: 'center', style: { textOverflow: 'ellipsis', whiteSpace: 'pre', width: '100%' }, p: 2 - }} /> + }} + /> @@ -189,7 +189,7 @@ export const LinkItem = (props: LinkItemProps) => { } } - > + > diff --git a/pkg/interface/src/views/apps/links/components/LinkSubmit.tsx b/pkg/interface/src/views/apps/links/components/LinkSubmit.tsx index 2eaba45559..c9679062ab 100644 --- a/pkg/interface/src/views/apps/links/components/LinkSubmit.tsx +++ b/pkg/interface/src/views/apps/links/components/LinkSubmit.tsx @@ -1,22 +1,22 @@ -import { BaseInput, Box, Button, LoadingSpinner, Text } from "@tlon/indigo-react"; -import React, { useCallback, useState } from "react"; -import GlobalApi from "~/logic/api/global"; -import { useFileDrag } from "~/logic/lib/useDrag"; -import useS3 from "~/logic/lib/useS3"; -import { S3State } from "~/types"; -import SubmitDragger from "~/views/components/SubmitDragger"; -import { createPost } from "~/logic/api/graph"; -import { hasProvider } from "oembed-parser"; +import { BaseInput, Box, Button, LoadingSpinner, Text } from '@tlon/indigo-react'; +import React, { useCallback, useState } from 'react'; +import GlobalApi from '~/logic/api/global'; +import { useFileDrag } from '~/logic/lib/useDrag'; +import useS3 from '~/logic/lib/useS3'; +import { S3State } from '@urbit/api'; +import SubmitDragger from '~/views/components/SubmitDragger'; +import { createPost } from '~/logic/api/graph'; +import { hasProvider } from 'oembed-parser'; interface LinkSubmitProps { api: GlobalApi; s3: S3State; name: string; ship: string; -}; +} const LinkSubmit = (props: LinkSubmitProps) => { - let { canUpload, uploadDefault, uploading, promptUpload } = useS3(props.s3); + const { canUpload, uploadDefault, uploading, promptUpload } = useS3(props.s3); const [submitFocused, setSubmitFocused] = useState(false); const [urlFocused, setUrlFocused] = useState(false); @@ -100,7 +100,7 @@ const LinkSubmit = (props: LinkSubmitProps) => { const onLinkChange = (linkValue: string) => { setLinkValueHook(linkValue); - const link = validateLink(linkValue) + const link = validateLink(linkValue); setLinkValid(link); }; @@ -133,7 +133,7 @@ const LinkSubmit = (props: LinkSubmitProps) => { px={2} pt={2} style={{ pointerEvents: 'none' }} - >{canUpload + >{canUpload ? <> Drop or{' '} { zIndex={9} alignItems="center" justifyContent="center" - > + > } {dragging && } @@ -223,4 +223,4 @@ const LinkSubmit = (props: LinkSubmitProps) => { ); }; -export default LinkSubmit; \ No newline at end of file +export default LinkSubmit; diff --git a/pkg/interface/src/views/apps/notifications/graph.tsx b/pkg/interface/src/views/apps/notifications/graph.tsx index 7517b0b505..f289f366c9 100644 --- a/pkg/interface/src/views/apps/notifications/graph.tsx +++ b/pkg/interface/src/views/apps/notifications/graph.tsx @@ -1,31 +1,29 @@ -import React, { ReactNode, useCallback } from "react"; -import moment from "moment"; -import { Row, Box, Col, Text, Anchor, Icon, Action } from "@tlon/indigo-react"; -import { Link, useHistory } from "react-router-dom"; -import _ from "lodash"; +import React, { ReactElement, useCallback } from 'react'; +import moment from 'moment'; +import _ from 'lodash'; +import { useHistory } from 'react-router-dom'; +import styled from 'styled-components'; + +import { Row, Box, Col, Text, Anchor, Icon, Action } from '@tlon/indigo-react'; import { - Post, GraphNotifIndex, GraphNotificationContents, Associations, - Content, Rolodex, - Groups, -} from "~/types"; -import { Header } from "./header"; -import { cite, deSig, pluralize } from "~/logic/lib/util"; -import { Sigil } from "~/logic/lib/sigil"; -import RichText from "~/views/components/RichText"; -import GlobalApi from "~/logic/api/global"; -import ReactMarkdown from "react-markdown"; -import { getSnippet } from "~/logic/lib/publish"; -import styled from "styled-components"; -import {MentionText} from "~/views/components/MentionText"; -import ChatMessage, {MessageWithoutSigil} from "../chat/components/ChatMessage"; + Groups +} from '@urbit/api'; -function getGraphModuleIcon(module: string) { - if (module === "link") { - return "Collection"; +import { Header } from './header'; +import { cite, deSig, pluralize } from '~/logic/lib/util'; +import { Sigil } from '~/logic/lib/sigil'; +import GlobalApi from '~/logic/api/global'; +import { getSnippet } from '~/logic/lib/publish'; +import { MentionText } from '~/views/components/MentionText'; +import { MessageWithoutSigil } from '../chat/components/ChatMessage'; + +function getGraphModuleIcon(module: string): string { + if (module === 'link') { + return 'Collection'; } return _.capitalize(module); } @@ -34,32 +32,32 @@ const FilterBox = styled(Box)` background: linear-gradient( to bottom, transparent, - ${(p) => p.theme.colors.white} + ${p => p.theme.colors.white} ); `; -function describeNotification(description: string, plural: boolean) { +function describeNotification(description: string, plural: boolean): string { switch (description) { - case "link": - return `added ${pluralize("new link", plural)} to`; - case "comment": - return `left ${pluralize("comment", plural)} on`; - case "edit-comment": - return `updated ${pluralize("comment", plural)} on`; - case "note": - return `posted ${pluralize("note", plural)} to`; - case "edit-note": - return `updated ${pluralize("note", plural)} in`; - case "mention": - return "mentioned you on"; - case "message": - return `sent ${pluralize("message", plural)} to`; + case 'link': + return `added ${pluralize('new link', plural)} to`; + case 'comment': + return `left ${pluralize('comment', plural)} on`; + case 'edit-comment': + return `updated ${pluralize('comment', plural)} on`; + case 'note': + return `posted ${pluralize('note', plural)} to`; + case 'edit-note': + return `updated ${pluralize('note', plural)} in`; + case 'mention': + return 'mentioned you on'; + case 'message': + return `sent ${pluralize('message', plural)} to`; default: return description; } } -const GraphUrl = ({ url, title }) => ( +const GraphUrl = ({ url, title }): ReactElement => ( @@ -68,10 +66,10 @@ const GraphUrl = ({ url, title }) => ( ); -const GraphNodeContent = ({ group, post, contacts, mod, description, index, remoteContentPolicy }) => { +const GraphNodeContent = ({ group, post, contacts, mod, index }): ReactElement => { const { contents } = post; - const idx = index.slice(1).split("/"); - if (mod === "link") { + const idx = index.slice(1).split('/'); + if (mod === 'link') { if (idx.length === 1) { const [{ text }, { url }] = contents; return ; @@ -80,20 +78,20 @@ const GraphNodeContent = ({ group, post, contacts, mod, description, index, remo content={contents} contacts={contacts} group={group} - /> + />; } return null; } - if (mod === "publish") { - if (idx[1] === "2") { + if (mod === 'publish') { + if (idx[1] === '2') { return - } else if (idx[1] === "1") { + />; + } else if (idx[1] === '1') { const [{ text: header }, { text: body }] = contents; const snippet = getSnippet(body); return ( @@ -123,42 +121,41 @@ const GraphNodeContent = ({ group, post, contacts, mod, description, index, remo flexShrink={0} flexGrow={1} flexWrap="wrap" - > + > {}} group={group} contacts={contacts} groups={{}} - associations={{ graph: {}, groups: {}}} + associations={{ graph: {}, groups: {} }} msg={post} fontSize='0' pt='2' /> ); - } return null; }; -function getNodeUrl(mod: string, hidden: boolean, groupPath: string, graph: string, index: string) { +function getNodeUrl(mod: string, hidden: boolean, groupPath: string, graph: string, index: string): string { if (hidden && mod === 'chat') { groupPath = '/messages'; } else if (hidden) { groupPath = '/home'; } const graphUrl = `/~landscape${groupPath}/resource/${mod}${graph}`; - const idx = index.slice(1).split("/"); - if (mod === "publish") { + const idx = index.slice(1).split('/'); + if (mod === 'publish') { const [noteId] = idx; return `${graphUrl}/note/${noteId}`; - } else if (mod === "link") { + } else if (mod === 'link') { const [linkId] = idx; return `${graphUrl}/${linkId}`; } else if (mod === 'chat') { return graphUrl; } - return ""; + return ''; } const GraphNode = ({ post, @@ -174,9 +171,7 @@ const GraphNode = ({ read, onRead, showContact = false, - remoteContentPolicy -}) => { - const { contents } = post; +}): ReactElement => { author = deSig(author); const history = useHistory(); @@ -185,7 +180,7 @@ const GraphNode = ({ ship={`~${author}`} size={16} icon - color={`#000000`} + color={'#000000'} classes="mix-blend-diff" padding={2} /> @@ -212,12 +207,12 @@ const GraphNode = ({ alignItems="center" p="1" backgroundColor="white" - > + > {cite(author)} - {moment(time).format("HH:mm")} + {moment(time).format('HH:mm')} } @@ -249,7 +244,7 @@ export function GraphNotification(props: { }) { const { contents, index, read, time, api, timebox, groups } = props; - const authors = _.map(contents, "author"); + const authors = _.map(contents, 'author'); const { graph, group } = index; const icon = getGraphModuleIcon(index.module); const desc = describeNotification(index.description, contents.length !== 1); @@ -259,7 +254,7 @@ export function GraphNotification(props: { return; } - return api.hark["read"](timebox, { graph: index }); + return api.hark['read'](timebox, { graph: index }); }, [api, timebox, index, read]); return ( @@ -284,7 +279,7 @@ return ( author={content.author} contacts={props.contacts} mod={index.module} - time={content?.["time-sent"]} + time={content?.['time-sent']} description={index.description} index={content.index} graph={graph} diff --git a/pkg/interface/src/views/apps/notifications/group.tsx b/pkg/interface/src/views/apps/notifications/group.tsx index 2b5a66f8dc..782069508d 100644 --- a/pkg/interface/src/views/apps/notifications/group.tsx +++ b/pkg/interface/src/views/apps/notifications/group.tsx @@ -1,44 +1,34 @@ -import React, { ReactNode, useCallback } from "react"; -import moment from "moment"; -import { Row, Box, Col, Text, Anchor, Icon, Action } from "@tlon/indigo-react"; -import _ from "lodash"; -import { NotificationProps } from "./types"; +import React, { ReactElement, useCallback } from 'react'; +import _ from 'lodash'; + +import { Col } from '@tlon/indigo-react'; import { - Post, - GraphNotifIndex, - GraphNotificationContents, Associations, - Content, - IndexedNotification, GroupNotificationContents, GroupNotifIndex, GroupUpdate, - Rolodex, -} from "~/types"; -import { Header } from "./header"; -import { cite, deSig } from "~/logic/lib/util"; -import { Sigil } from "~/logic/lib/sigil"; -import RichText from "~/views/components/RichText"; -import GlobalApi from "~/logic/api/global"; -import { StatelessAsyncAction } from "~/views/components/StatelessAsyncAction"; + Rolodex +} from '@urbit/api'; +import { Header } from './header'; +import GlobalApi from '~/logic/api/global'; function describeNotification(description: string, plural: boolean) { switch (description) { - case "add-members": - return "joined"; - case "remove-members": - return "left"; + case 'add-members': + return 'joined'; + case 'remove-members': + return 'left'; default: return description; } } -function getGroupUpdateParticipants(update: GroupUpdate) { - if ("addMembers" in update) { +function getGroupUpdateParticipants(update: GroupUpdate): string[] { + if ('addMembers' in update) { return update.addMembers.ships; } - if ("removeMembers" in update) { + if ('removeMembers' in update) { return update.removeMembers.ships; } return []; @@ -56,7 +46,7 @@ interface GroupNotificationProps { api: GlobalApi; } -export function GroupNotification(props: GroupNotificationProps) { +export function GroupNotification(props: GroupNotificationProps): ReactElement { const { contents, index, read, time, api, timebox, associations } = props; const authors = _.flatten(_.map(contents, getGroupUpdateParticipants)); @@ -68,7 +58,7 @@ export function GroupNotification(props: GroupNotificationProps) { if (props.archived) { return; } - const func = read ? "unread" : "read"; + const func = read ? 'unread' : 'read'; return api.hark[func](timebox, { group: index }); }, [api, timebox, index, read]); diff --git a/pkg/interface/src/views/apps/notifications/header.tsx b/pkg/interface/src/views/apps/notifications/header.tsx index 7d7644b1a7..528460f13d 100644 --- a/pkg/interface/src/views/apps/notifications/header.tsx +++ b/pkg/interface/src/views/apps/notifications/header.tsx @@ -1,17 +1,19 @@ -import React from "react"; -import { Text as NormalText, Row, Icon, Rule, Box } from "@tlon/indigo-react"; -import f from "lodash/fp"; -import _ from "lodash"; -import moment from "moment"; -import { PropFunc } from "~/types/util"; -import { getContactDetails, useShowNickname } from "~/logic/lib/util"; -import { Associations, Contact, Contacts, Rolodex } from "~/types"; +import React, { ReactElement } from 'react'; +import f from 'lodash/fp'; +import _ from 'lodash'; +import moment from 'moment'; + +import { Text as NormalText, Row, Icon, Rule } from '@tlon/indigo-react'; +import { Associations, Contact, Contacts, Rolodex } from '@urbit/api'; + +import { PropFunc } from '~/types/util'; +import { useShowNickname } from '~/logic/lib/util'; const Text = (props: PropFunc) => ( ); -function Author(props: { patp: string; contacts: Contacts; last?: boolean }) { +function Author(props: { patp: string; contacts: Contacts; last?: boolean }): ReactElement { const contact: Contact | undefined = props.contacts?.[props.patp]; const showNickname = useShowNickname(contact); @@ -20,7 +22,7 @@ function Author(props: { patp: string; contacts: Contacts; last?: boolean }) { return ( {name} - {!props.last && ", "} + {!props.last && ', '} ); } @@ -36,7 +38,7 @@ export function Header(props: { time: number; read: boolean; associations: Associations; -} & PropFunc ) { +} & PropFunc ): ReactElement { const { description, channel, group, moduleIcon, read } = props; const contacts = props.contacts[group] || {}; @@ -50,17 +52,17 @@ export function Header(props: { const last = lent - 1 === parseInt(idx, 10); return ; }), - (auths) => ( + auths => ( {auths} {authors.length > 3 && - ` and ${authors.length - 3} other${authors.length === 4 ? "" : "s"}`} + ` and ${authors.length - 3} other${authors.length === 4 ? '' : 's'}`} ) )(authors); - const time = moment(props.time).format("HH:mm"); + const time = moment(props.time).format('HH:mm'); const groupTitle = props.associations.groups?.[props.group]?.metadata?.title; @@ -84,8 +86,8 @@ export function Header(props: { {authorDesc} {description} - {!!moduleIcon && } - {!!channel && {channelTitle}} + {Boolean(moduleIcon) && } + {Boolean(channel) && {channelTitle}} {groupTitle && <> diff --git a/pkg/interface/src/views/apps/notifications/inbox.tsx b/pkg/interface/src/views/apps/notifications/inbox.tsx index a5d5cf3822..2f05b736e8 100644 --- a/pkg/interface/src/views/apps/notifications/inbox.tsx +++ b/pkg/interface/src/views/apps/notifications/inbox.tsx @@ -1,22 +1,28 @@ -import React, { useEffect, useCallback, useRef, useState } from "react"; -import f from "lodash/fp"; -import _ from "lodash"; -import { Icon, Col, Center, Row, Box, Text, Anchor, Rule, LoadingSpinner } from "@tlon/indigo-react"; -import moment from "moment"; -import { Notifications, Rolodex, Timebox, IndexedNotification, Groups, joinProgress, JoinRequests, GroupNotificationsConfig, NotificationGraphConfig } from "~/types"; -import { MOMENT_CALENDAR_DATE, daToUnix, resourceAsPath } from "~/logic/lib/util"; -import { BigInteger } from "big-integer"; -import GlobalApi from "~/logic/api/global"; -import { Notification } from "./notification"; -import { Associations } from "~/types"; -import { InviteItem } from '~/views/components/Invite'; -import { useWaitForProps } from "~/logic/lib/useWaitForProps"; -import { useHistory } from "react-router-dom"; -import {useModal} from "~/logic/lib/useModal"; -import {JoinGroup} from "~/views/landscape/components/JoinGroup"; -import {JoiningStatus} from "./joining"; -import {Invites} from "./invites"; -import {useLazyScroll} from "~/logic/lib/useLazyScroll"; +import React, { useEffect, useCallback, useRef } from 'react'; +import f from 'lodash/fp'; +import _ from 'lodash'; +import moment from 'moment'; +import { BigInteger } from 'big-integer'; + +import { Col, Center, Box, Text, LoadingSpinner } from '@tlon/indigo-react'; +import { + Associations, + Notifications, + Rolodex, + Timebox, + IndexedNotification, + Groups, + JoinRequests, + GroupNotificationsConfig, + NotificationGraphConfig, + Invites as InviteType +} from '@urbit/api'; + +import { MOMENT_CALENDAR_DATE, daToUnix } from '~/logic/lib/util'; +import GlobalApi from '~/logic/api/global'; +import { Notification } from './notification'; +import { Invites } from './invites'; +import { useLazyScroll } from '~/logic/lib/useLazyScroll'; type DatedTimebox = [BigInteger, Timebox]; @@ -25,12 +31,12 @@ function filterNotification(associations: Associations, groups: string[]) { return () => true; } return (n: IndexedNotification) => { - if ("graph" in n.index) { + if ('graph' in n.index) { const { group } = n.index.graph; - return groups.findIndex((g) => group === g) !== -1; - } else if ("group" in n.index) { + return groups.findIndex(g => group === g) !== -1; + } else if ('group' in n.index) { const { group } = n.index.group; - return groups.findIndex((g) => group === g) !== -1; + return groups.findIndex(g => group === g) !== -1; } return true; }; @@ -46,7 +52,7 @@ export default function Inbox(props: { associations: Associations; contacts: Rolodex; filter: string[]; - invites: any; + invites: InviteType; pendingJoin: JoinRequests; notificationsGroupConfig: GroupNotificationsConfig; notificationsGraphConfig: NotificationGraphConfig; @@ -70,30 +76,30 @@ export default function Inbox(props: { const calendar = { ...MOMENT_CALENDAR_DATE, sameDay: function (now) { if (this.subtract(6, 'hours').isBefore(now)) { - return "[Earlier Today]"; + return '[Earlier Today]'; } else { return MOMENT_CALENDAR_DATE.sameDay; } } }; - let notificationsByDay = f.flow( + const notificationsByDay = f.flow( f.map(([date, nots]) => [ date, - nots.filter(filterNotification(associations, props.filter)), + nots.filter(filterNotification(associations, props.filter)) ]), f.groupBy(([d]) => { const date = moment(daToUnix(d)); if (moment().subtract(6, 'hours').isBefore(date)) { return 'latest'; } else { - return date.format("YYYYMMDD"); + return date.format('YYYYMMDD'); } - }), + }) )(notifications); const notificationsByDayMap = new Map( - Object.keys(notificationsByDay).map(timebox => { + Object.keys(notificationsByDay).map((timebox) => { return [timebox, notificationsByDay[timebox]]; }) ); @@ -105,13 +111,12 @@ export default function Inbox(props: { }, [api]); const { isDone, isLoading } = useLazyScroll( - scrollRef, + scrollRef, 0.2, _.flatten(notifications).length, loadMore ); - return ( @@ -123,7 +128,7 @@ export default function Inbox(props: { label={day === 'latest' ? 'Today' : moment(day).calendar(null, calendar)} timeboxes={timeboxes} contacts={props.contacts} - archive={!!props.showArchive} + archive={Boolean(props.showArchive)} associations={props.associations} api={api} groups={props.groups} @@ -142,7 +147,7 @@ export default function Inbox(props: { )} - + ); } @@ -167,9 +172,8 @@ function DaySection({ associations, api, groupConfig, - graphConfig, + graphConfig }) { - const lent = timeboxes.map(([,nots]) => nots.length).reduce(f.add, 0); if (lent === 0 || timeboxes.length === 0) { return null; diff --git a/pkg/interface/src/views/apps/notifications/invites.tsx b/pkg/interface/src/views/apps/notifications/invites.tsx index a856af68d5..829a383bc7 100644 --- a/pkg/interface/src/views/apps/notifications/invites.tsx +++ b/pkg/interface/src/views/apps/notifications/invites.tsx @@ -1,15 +1,12 @@ -import React, { useCallback, useState } from "react"; +import React, { ReactElement } from 'react'; import _ from 'lodash'; -import { Box, Row, Col } from "@tlon/indigo-react"; -import GlobalApi from "~/logic/api/global"; -import { Invites as IInvites, Associations, Invite, JoinRequests, Groups, Contacts, AppInvites, JoinProgress } from "~/types"; -import { resourceAsPath, alphabeticalOrder } from "~/logic/lib/util"; -import { useHistory } from "react-router-dom"; -import { useWaitForProps } from "~/logic/lib/useWaitForProps"; -import InviteItem from "~/views/components/Invite"; -import {JoiningStatus} from "./joining"; -import {useModal} from "~/logic/lib/useModal"; -import {JoinGroup} from "~/views/landscape/components/JoinGroup"; + +import { Col } from '@tlon/indigo-react'; +import { Invites as IInvites, Associations, Invite, JoinRequests, Groups, Contacts, AppInvites, JoinProgress } from '@urbit/api'; + +import GlobalApi from '~/logic/api/global'; +import { resourceAsPath, alphabeticalOrder } from '~/logic/lib/util'; +import InviteItem from '~/views/components/Invite'; interface InvitesProps { api: GlobalApi; @@ -26,50 +23,18 @@ interface InviteRef { invite: Invite; } -export function Invites(props: InvitesProps) { +export function Invites(props: InvitesProps): ReactElement { const { api, invites, pendingJoin } = props; - const [selected, setSelected] = useState<[string, string, Invite] | undefined>() - - const acceptInvite = ( - app: string, - uid: string, - invite: Invite - ) => async () => { - setSelected([app, uid, invite]); - showModal(); - }; - - const declineInvite = useCallback( - (app: string, uid: string) => () => api.invite.decline(app, uid), - [api] - ); - - const { modal, showModal } = useModal({ modal: () => { - const [app, uid, invite] = selected!; - const autojoin = `~${invite.resource.ship}/${invite.resource.name}`; - return ( - - )}}); const inviteArr: InviteRef[] = _.reduce(invites, (acc: InviteRef[], val: AppInvites, app: string) => { const appInvites = _.reduce(val, (invs: InviteRef[], invite: Invite, uid: string) => { return [...invs, { invite, uid, app }]; - }, []); return [...acc, ...appInvites]; }, []); - const invitesAndStatus: { [rid: string]: JoinProgress | InviteRef } = - {..._.keyBy(inviteArr, ({ invite }) => resourceAsPath(invite.resource)), ...props.pendingJoin }; - - + const invitesAndStatus: { [rid: string]: JoinProgress | InviteRef } = + { ..._.keyBy(inviteArr, ({ invite }) => resourceAsPath(invite.resource)), ...props.pendingJoin }; return ( { + .map((resource) => { const inviteOrStatus = invitesAndStatus[resource]; if(typeof inviteOrStatus === 'string') { return ( @@ -93,10 +58,10 @@ export function Invites(props: InvitesProps) { groups={props.groups} associations={props.associations} resource={resource} - pendingJoin={pendingJoin} - api={api} /> - ) - + pendingJoin={pendingJoin} + api={api} + /> + ); } else { const { app, uid, invite } = inviteOrStatus; console.log(inviteOrStatus); @@ -107,13 +72,13 @@ export function Invites(props: InvitesProps) { invite={invite} app={app} uid={uid} - pendingJoin={pendingJoin} + pendingJoin={pendingJoin} resource={resource} contacts={props.contacts} groups={props.groups} associations={props.associations} /> - ) + ); } })} diff --git a/pkg/interface/src/views/apps/notifications/joining.tsx b/pkg/interface/src/views/apps/notifications/joining.tsx index 7b2295fb20..5763712055 100644 --- a/pkg/interface/src/views/apps/notifications/joining.tsx +++ b/pkg/interface/src/views/apps/notifications/joining.tsx @@ -1,35 +1,32 @@ -import React, { useState, useEffect } from "react"; -import { Col, Row, Text, SegmentedProgressBar, Box } from "@tlon/indigo-react"; -import GlobalApi from "~/logic/api/global"; +import React from 'react'; +import { Row, Text, SegmentedProgressBar, Box } from '@tlon/indigo-react'; import { JoinProgress, joinProgress, - MetadataUpdatePreview, - joinError, -} from "~/types"; -import { clamp } from "~/logic/lib/util"; + joinError +} from '@urbit/api'; interface JoiningStatusProps { status: JoinProgress; } const description: string[] = [ - "Attempting to contact host", - "Retrieving data", - "Finished join", - "Unable to join, you do not have the correct permissions", - "Internal error, please file an issue", + 'Attempting to contact host', + 'Retrieving data', + 'Finished join', + 'Unable to join, you do not have the correct permissions', + 'Internal error, please file an issue' ]; export function JoiningStatus(props: JoiningStatusProps) { const { status } = props; const current = joinProgress.indexOf(status); - const desc = description?.[current] || ""; + const desc = description?.[current] || ''; const isError = joinError.indexOf(status as any) !== -1; return ( - + {desc} diff --git a/pkg/interface/src/views/apps/notifications/metadata.tsx b/pkg/interface/src/views/apps/notifications/metadata.tsx index b5643f3591..20d5ac0dcf 100644 --- a/pkg/interface/src/views/apps/notifications/metadata.tsx +++ b/pkg/interface/src/views/apps/notifications/metadata.tsx @@ -1,8 +1,8 @@ -import React from "react"; -import { Box } from "@tlon/indigo-react"; +import React from 'react'; +import { Box } from '@tlon/indigo-react'; -import { MetadataBody, NotificationProps } from "./types"; -import { Header } from "./header"; +import { MetadataBody, NotificationProps } from './types'; +import { Header } from './header'; function getInvolvedUsers(body: MetadataBody) { return []; @@ -10,22 +10,22 @@ function getInvolvedUsers(body: MetadataBody) { function getDescription(body: MetadataBody) { const b = body.metadata; - if ("new" in b) { - return "created"; - } else if ("changedTitle" in b) { - return "changed the title to"; - } else if ("changedDescription" in b) { - return "changed the description to"; - } else if ("changedColor" in b) { - return "changed the color to"; - } else if ("deleted" in b) { - return "deleted"; + if ('new' in b) { + return 'created'; + } else if ('changedTitle' in b) { + return 'changed the title to'; + } else if ('changedDescription' in b) { + return 'changed the description to'; + } else if ('changedColor' in b) { + return 'changed the color to'; + } else if ('deleted' in b) { + return 'deleted'; } else { - throw new Error("bad metadata frond"); + throw new Error('bad metadata frond'); } } -export function MetadataNotification(props: NotificationProps<"metadata">) { +export function MetadataNotification(props: NotificationProps<'metadata'>) { const { unread } = props; const description = getDescription(unread.unreads[0].body); diff --git a/pkg/interface/src/views/apps/notifications/notification.tsx b/pkg/interface/src/views/apps/notifications/notification.tsx index cc55d38145..8c550257d1 100644 --- a/pkg/interface/src/views/apps/notifications/notification.tsx +++ b/pkg/interface/src/views/apps/notifications/notification.tsx @@ -1,6 +1,6 @@ -import React, { ReactNode, useCallback, useMemo, useState } from "react"; -import { Row, Box } from "@tlon/indigo-react"; -import _ from "lodash"; +import React, { ReactNode, useCallback, useMemo, useState } from 'react'; +import { Row, Box } from '@tlon/indigo-react'; +import _ from 'lodash'; import { GraphNotificationContents, IndexedNotification, @@ -9,15 +9,15 @@ import { GroupNotificationsConfig, Groups, Associations, - Contacts, -} from "~/types"; -import GlobalApi from "~/logic/api/global"; -import { getParentIndex } from "~/logic/lib/notification"; -import { StatelessAsyncAction } from "~/views/components/StatelessAsyncAction"; -import { GroupNotification } from "./group"; -import { GraphNotification } from "./graph"; -import { BigInteger } from "big-integer"; -import { useHovering } from "~/logic/lib/util"; + Contacts +} from '@urbit/api'; +import GlobalApi from '~/logic/api/global'; +import { getParentIndex } from '~/logic/lib/notification'; +import { StatelessAsyncAction } from '~/views/components/StatelessAsyncAction'; +import { GroupNotification } from './group'; +import { GraphNotification } from './graph'; +import { BigInteger } from 'big-integer'; +import { useHovering } from '~/logic/lib/util'; interface NotificationProps { notification: IndexedNotification; @@ -37,7 +37,7 @@ function getMuted( graphs: NotificationGraphConfig ) { const { index, notification } = idxNotif; - if ("graph" in idxNotif.index) { + if ('graph' in idxNotif.index) { const { graph } = idxNotif.index.graph; if(!('graph' in notification.contents)) { throw new Error(); @@ -46,11 +46,11 @@ function getMuted( return _.findIndex( graphs?.watching || [], - (g) => g.graph === graph && g.index === parent + g => g.graph === graph && g.index === parent ) === -1; } - if ("group" in index) { - return _.findIndex(groups || [], (g) => g === index.group.group) === -1; + if ('group' in index) { + return _.findIndex(groups || [], g => g === index.group.group) === -1; } return false; } @@ -77,13 +77,13 @@ function NotificationWrapper(props: { ); const onChangeMute = useCallback(async () => { - const func = isMuted ? "unmute" : "mute"; + const func = isMuted ? 'unmute' : 'mute'; return api.hark[func](notif); }, [notif, api, isMuted]); const { hovering, bind } = useHovering(); - const changeMuteDesc = isMuted ? "Unmute" : "Mute"; + const changeMuteDesc = isMuted ? 'Unmute' : 'Mute'; return ( ); - if ("graph" in notification.index) { + if ('graph' in notification.index) { const index = notification.index.graph; const c: GraphNotificationContents = (contents as any).graph; @@ -147,7 +147,7 @@ export function Notification(props: NotificationProps) { ); } - if ("group" in notification.index) { + if ('group' in notification.index) { const index = notification.index.group; const c: GroupNotificationContents = (contents as any).group; return ( diff --git a/pkg/interface/src/views/apps/notifications/notifications.tsx b/pkg/interface/src/views/apps/notifications/notifications.tsx index 87e5764c25..3f9bd75558 100644 --- a/pkg/interface/src/views/apps/notifications/notifications.tsx +++ b/pkg/interface/src/views/apps/notifications/notifications.tsx @@ -1,25 +1,25 @@ -import React, { useCallback, useState, useRef } from "react"; +import React, { useCallback, useState, useRef, ReactElement } from 'react'; import _ from 'lodash'; -import { Box, Col, Text, Row } from "@tlon/indigo-react"; -import { Link, Switch, Route } from "react-router-dom"; -import Helmet from "react-helmet"; +import { Link, Switch, Route } from 'react-router-dom'; +import Helmet from 'react-helmet'; -import { Body } from "~/views/components/Body"; -import { PropFunc } from "~/types/util"; -import Inbox from "./inbox"; -import NotificationPreferences from "./preferences"; -import { Dropdown } from "~/views/components/Dropdown"; -import { Formik } from "formik"; -import { FormikOnBlur } from "~/views/components/FormikOnBlur"; -import GroupSearch from "~/views/components/GroupSearch"; -import {useTutorialModal} from "~/views/components/useTutorialModal"; +import { Box, Col, Text, Row } from '@tlon/indigo-react'; -const baseUrl = "/~notifications"; +import { Body } from '~/views/components/Body'; +import { PropFunc } from '~/types/util'; +import Inbox from './inbox'; +import NotificationPreferences from './preferences'; +import { Dropdown } from '~/views/components/Dropdown'; +import { FormikOnBlur } from '~/views/components/FormikOnBlur'; +import GroupSearch from '~/views/components/GroupSearch'; +import { useTutorialModal } from '~/views/components/useTutorialModal'; + +const baseUrl = '/~notifications'; const HeaderLink = React.forwardRef(( props: PropFunc & { view?: string; current: string }, ref -) => { +): ReactElement => { const { current, view, ...textProps } = props; const to = view ? `${baseUrl}/${view}` : baseUrl; const active = view ? current === view : !current; @@ -35,7 +35,7 @@ interface NotificationFilter { groups: string[]; } -export default function NotificationsScreen(props: any) { +export default function NotificationsScreen(props: any): ReactElement { const relativePath = (p: string) => baseUrl + p; const [filter, setFilter] = useState({ groups: [] }); @@ -43,20 +43,20 @@ export default function NotificationsScreen(props: any) { setFilter({ groups }); }; const onReadAll = useCallback(() => { - props.api.hark.readAll() + props.api.hark.readAll(); }, []); const groupFilterDesc = filter.groups.length === 0 - ? "All" + ? 'All' : filter.groups - .map((g) => props.associations?.groups?.[g]?.metadata?.title) - .join(", "); + .map(g => props.associations?.groups?.[g]?.metadata?.title) + .join(', '); const anchorRef = useRef(null); useTutorialModal('notifications', true, anchorRef.current); return ( { const { view } = routeProps.match.params; return ( @@ -89,7 +89,8 @@ export default function NotificationsScreen(props: any) { + justifyContent="space-between" + > - {view === "preferences" && ( + {view === 'preferences' && ( ) => { console.log(values); try { - let promises: Promise[] = []; + const promises: Promise[] = []; if (values.mentions !== graphConfig.mentions) { promises.push(api.hark.setMentions(values.mentions)); } @@ -46,7 +45,7 @@ export default function NotificationPreferences( promises.push(api.hark.setWatchOnSelf(values.watchOnSelf)); } if (values.dnd !== dnd && !_.isUndefined(values.dnd)) { - promises.push(api.hark.setDoNotDisturb(values.dnd)) + promises.push(api.hark.setDoNotDisturb(values.dnd)); } await Promise.all(promises); diff --git a/pkg/interface/src/views/apps/profile/components/EditProfile.tsx b/pkg/interface/src/views/apps/profile/components/EditProfile.tsx index d43cfbaad2..e22f01b29b 100644 --- a/pkg/interface/src/views/apps/profile/components/EditProfile.tsx +++ b/pkg/interface/src/views/apps/profile/components/EditProfile.tsx @@ -1,30 +1,25 @@ -import React from "react"; -import * as Yup from "yup"; +import React, { ReactElement } from 'react'; +import * as Yup from 'yup'; import _ from 'lodash'; +import { Formik } from 'formik'; +import { useHistory } from 'react-router-dom'; import { ManagedForm as Form, ManagedTextInputField as Input, ManagedCheckboxField as Checkbox, - Center, Col, - Box, Text, Row, - Button, -} from "@tlon/indigo-react"; -import { Formik, FormikHelpers } from "formik"; -import { useHistory } from "react-router-dom"; - -import { uxToHex } from "~/logic/lib/util"; -import { Sigil } from "~/logic/lib/sigil"; -import { AsyncButton } from "~/views/components/AsyncButton"; -import { ColorInput } from "~/views/components/ColorInput"; -import { ImageInput } from "~/views/components/ImageInput"; -import { MarkdownField } from "~/views/apps/publish/components/MarkdownField"; -import { resourceFromPath } from "~/logic/lib/group"; -import GroupSearch from "~/views/components/GroupSearch"; +} from '@tlon/indigo-react'; +import { uxToHex } from '~/logic/lib/util'; +import { AsyncButton } from '~/views/components/AsyncButton'; +import { ColorInput } from '~/views/components/ColorInput'; +import { ImageInput } from '~/views/components/ImageInput'; +import { MarkdownField } from '~/views/apps/publish/components/MarkdownField'; +import { resourceFromPath } from '~/logic/lib/group'; +import GroupSearch from '~/views/components/GroupSearch'; const formSchema = Yup.object({ nickname: Yup.string(), @@ -45,8 +40,7 @@ const emptyContact = { isPublic: false }; - -export function EditProfile(props: any) { +export function EditProfile(props: any): ReactElement { const { contact, ship, api, isPublic } = props; const history = useHistory(); if (contact) { @@ -58,10 +52,10 @@ export function EditProfile(props: any) { try { await Object.keys(values).reduce((acc, key) => { console.log(key); - const newValue = key !== "color" ? values[key] : uxToHex(values[key]); + const newValue = key !== 'color' ? values[key] : uxToHex(values[key]); if (newValue !== contact[key]) { - if (key === "isPublic") { + if (key === 'isPublic') { return acc.then(() => api.contacts.setPublic(newValue) ); @@ -70,23 +64,22 @@ export function EditProfile(props: any) { console.log(toRemove); const toAdd: string[] = _.difference(newValue, contact?.groups || []); console.log(toAdd); - let promises: Promise[] = []; + const promises: Promise[] = []; promises.concat( toRemove.map(e => - api.contacts.edit(ship, {'remove-group': resourceFromPath(e) }) + api.contacts.edit(ship, { 'remove-group': resourceFromPath(e) }) ) ); promises.concat( toAdd.map(e => - api.contacts.edit(ship, {'add-group': resourceFromPath(e) }) + api.contacts.edit(ship, { 'add-group': resourceFromPath(e) }) ) ); return acc.then(() => Promise.all(promises)); - } else if ( - key !== "last-updated" && - key !== "isPublic" + key !== 'last-updated' && + key !== 'isPublic' ) { return acc.then(() => api.contacts.edit(ship, { [key]: newValue }) @@ -95,7 +88,7 @@ export function EditProfile(props: any) { } return acc; }, Promise.resolve()); - //actions.setStatus({ success: null }); + // actions.setStatus({ success: null }); history.push(`/~profile/${ship}`); } catch (e) { console.error(e); diff --git a/pkg/interface/src/views/apps/profile/components/Profile.tsx b/pkg/interface/src/views/apps/profile/components/Profile.tsx index 77b3bc0d1c..eccf1ce727 100644 --- a/pkg/interface/src/views/apps/profile/components/Profile.tsx +++ b/pkg/interface/src/views/apps/profile/components/Profile.tsx @@ -1,25 +1,23 @@ -import React, { useEffect, useRef, useState } from "react"; -import { Sigil } from "~/logic/lib/sigil"; -import { ViewProfile } from './ViewProfile'; -import { EditProfile } from './EditProfile'; -import { SetStatusBarModal } from '~/views/components/SetStatusBarModal'; +import React, { ReactElement, useEffect, useRef, useState } from 'react'; +import { useHistory } from 'react-router-dom'; -import { uxToHex } from "~/logic/lib/util"; import { Center, Box, Row, BaseImage, - StatelessTextInput as Input, - Button, Text -} from "@tlon/indigo-react"; -import useLocalState from "~/logic/state/local"; -import { useHistory } from "react-router-dom"; -import {useTutorialModal} from "~/views/components/useTutorialModal"; +} from '@tlon/indigo-react'; +import { Sigil } from '~/logic/lib/sigil'; +import { ViewProfile } from './ViewProfile'; +import { EditProfile } from './EditProfile'; +import { SetStatusBarModal } from '~/views/components/SetStatusBarModal'; +import { uxToHex } from '~/logic/lib/util'; +import useLocalState from '~/logic/state/local'; +import { useTutorialModal } from '~/views/components/useTutorialModal'; -export function Profile(props: any) { +export function Profile(props: any): ReactElement { const { hideAvatars } = useLocalState(({ hideAvatars }) => ({ hideAvatars })); @@ -31,17 +29,13 @@ export function Profile(props: any) { const { contact, nackedContacts, hasLoaded, isPublic, isEdit, ship } = props; const nacked = nackedContacts.has(ship); - const [statusModal, showStatusModal] = useState(false); - - useEffect(() => { if(hasLoaded && !contact && !nacked) { props.api.contacts.retrieve(ship); } - }, [hasLoaded, contact]) + }, [hasLoaded, contact]); - - const hexColor = contact?.color ? `#${uxToHex(contact.color)}` : "#000000"; + const hexColor = contact?.color ? `#${uxToHex(contact.color)}` : '#000000'; const cover = (contact?.cover) ? : ; @@ -58,19 +52,24 @@ export function Profile(props: any) {
+ width="100%" + > + width="100%" + > {ship === `~${window.ship}` ? ( { history.push(`/~profile/${ship}/edit`) }}> + onClick={() => { + history.push(`/~profile/${ship}/edit`); +}} + > Edit Profile ) : null} - {contact?.status ?? ""} + overflow="hidden" display="inline-block" +verticalAlign="middle" + >{contact?.status ?? ''} {cover} @@ -108,7 +110,8 @@ export function Profile(props: any) { api={props.api} groups={props.groups} associations={props.associations} - isPublic={isPublic}/> + isPublic={isPublic} + /> ) : ( { - setStatus(!!contact ? contact.status : ''); + setStatus(contact ? contact.status : ''); }, [contact]); const editStatus = () => { - api.contacts.edit(ship, {status: _status}); + api.contacts.edit(ship, { status: _status }); if (callback) { callback(); @@ -53,7 +52,8 @@ export function SetStatus(props: any) { color="white" ml={2} width="25%" - onClick={editStatus}> + onClick={editStatus} + > Set Status diff --git a/pkg/interface/src/views/apps/profile/components/ViewProfile.tsx b/pkg/interface/src/views/apps/profile/components/ViewProfile.tsx index cd639b1354..939d8aab7b 100644 --- a/pkg/interface/src/views/apps/profile/components/ViewProfile.tsx +++ b/pkg/interface/src/views/apps/profile/components/ViewProfile.tsx @@ -1,28 +1,21 @@ -import React, {useEffect, useState} from "react"; +import React from 'react'; import _ from 'lodash'; -import { Sigil } from "~/logic/lib/sigil"; +import { useHistory } from 'react-router-dom'; import { Center, Box, Text, Row, - Button, Col, - LoadingSpinner -} from "@tlon/indigo-react"; -import { AsyncButton } from "~/views/components/AsyncButton"; -import RichText from "~/views/components/RichText"; -import { useHistory } from "react-router-dom"; -import {GroupSummary} from "~/views/landscape/components/GroupSummary"; -import {MetadataUpdatePreview} from "~/types"; -import {GroupLink} from "~/views/components/GroupLink"; -import {lengthOrder} from "~/logic/lib/util"; -import useLocalState from "~/logic/state/local"; +} from '@tlon/indigo-react'; +import RichText from '~/views/components/RichText'; +import { GroupLink } from '~/views/components/GroupLink'; +import { lengthOrder } from '~/logic/lib/util'; +import useLocalState from '~/logic/state/local'; -export function ViewProfile(props: any) { - const history = useHistory(); +export function ViewProfile(props: any): ReactElement { const { hideNicknames } = useLocalState(({ hideNicknames }) => ({ hideNicknames })); @@ -33,17 +26,19 @@ export function ViewProfile(props: any) { + width="100%" + >
- {((!hideNicknames && contact?.nickname) ? contact.nickname : "")} + {((!hideNicknames && contact?.nickname) ? contact.nickname : '')}
+ width="100%" + >
{ship}
@@ -52,10 +47,11 @@ export function ViewProfile(props: any) { pb={2} alignItems="center" justifyContent="center" - width="100%"> + width="100%" + >
- {(contact?.bio ? contact.bio : "")} + {(contact?.bio ? contact.bio : '')}
@@ -82,7 +78,8 @@ export function ViewProfile(props: any) { borderRadius={1} bg="white" border={1} - borderColor="washedGray"> + borderColor="washedGray" + >
{ship} remains private diff --git a/pkg/interface/src/views/apps/profile/profile.tsx b/pkg/interface/src/views/apps/profile/profile.tsx index 977a0975e6..ea99e7ecea 100644 --- a/pkg/interface/src/views/apps/profile/profile.tsx +++ b/pkg/interface/src/views/apps/profile/profile.tsx @@ -1,34 +1,24 @@ -import React from "react"; -import { Route, Link } from "react-router-dom"; +import React from 'react'; +import { Route, Link } from 'react-router-dom'; import Helmet from 'react-helmet'; -import { Box, Text, Row, Col, Icon, BaseImage } from "@tlon/indigo-react"; +import { Box } from '@tlon/indigo-react'; -import { uxToHex } from "~/logic/lib/util"; - -import { Profile } from "./components/Profile"; -import useLocalState from "~/logic/state/local"; +import { Profile } from './components/Profile'; export default function ProfileScreen(props: any) { - const { dark } = props; - const hideAvatars = useLocalState(state => state.hideAvatars); return ( <> { props.notificationsCount ? `(${String(props.notificationsCount) }) `: '' }Landscape - Profile { + path={'/~profile/:ship/:edit?'} + render={({ match }) => { const ship = match.params.ship; const isEdit = match.url.includes('edit'); const isPublic = props.isContactPublic; const contact = props.contacts?.[ship]; - const sigilColor = contact?.color - ? `#${uxToHex(contact.color)}` - : dark - ? "#FFFFFF" - : "#000000"; return ( diff --git a/pkg/interface/src/views/apps/publish/PublishResource.tsx b/pkg/interface/src/views/apps/publish/PublishResource.tsx index cd9f077c1c..38aa2a07d9 100644 --- a/pkg/interface/src/views/apps/publish/PublishResource.tsx +++ b/pkg/interface/src/views/apps/publish/PublishResource.tsx @@ -1,11 +1,11 @@ -import React from "react"; -import { Box } from "@tlon/indigo-react"; +import React from 'react'; +import { Box } from '@tlon/indigo-react'; -import GlobalApi from "~/logic/api/global"; -import { StoreState } from "~/logic/store/type"; -import { Association } from "~/types"; -import { RouteComponentProps } from "react-router-dom"; -import { NotebookRoutes } from "./components/NotebookRoutes"; +import GlobalApi from '~/logic/api/global'; +import { StoreState } from '~/logic/store/type'; +import { Association } from '@urbit/api'; +import { RouteComponentProps } from 'react-router-dom'; +import { NotebookRoutes } from './components/NotebookRoutes'; type PublishResourceProps = StoreState & { association: Association; @@ -16,7 +16,7 @@ type PublishResourceProps = StoreState & { export function PublishResource(props: PublishResourceProps) { const { association, api, baseUrl, notebooks } = props; const rid = association.resource; - const [, , ship, book] = rid.split("/"); + const [, , ship, book] = rid.split('/'); const notebookContacts = props.contacts[association.group]; return ( diff --git a/pkg/interface/src/views/apps/publish/components/EditPost.tsx b/pkg/interface/src/views/apps/publish/components/EditPost.tsx index 0f6ed4dcc0..cb7ab51cf1 100644 --- a/pkg/interface/src/views/apps/publish/components/EditPost.tsx +++ b/pkg/interface/src/views/apps/publish/components/EditPost.tsx @@ -1,12 +1,16 @@ -import React from "react"; +import React, { ReactElement } from 'react'; import _ from 'lodash'; -import { PostFormSchema, PostForm } from "./NoteForm"; -import { FormikHelpers } from "formik"; -import GlobalApi from "~/logic/api/global"; -import { RouteComponentProps, useLocation } from "react-router-dom"; -import { GraphNode, TextContent, Association, S3State } from "~/types"; -import { getLatestRevision, editPost } from "~/logic/lib/publish"; -import {useWaitForProps} from "~/logic/lib/useWaitForProps"; +import { FormikHelpers } from 'formik'; +import { RouteComponentProps, useLocation } from 'react-router-dom'; + +import { GraphNode } from '@urbit/api'; + +import { PostFormSchema, PostForm } from './NoteForm'; +import GlobalApi from '~/logic/api/global'; +import { getLatestRevision, editPost } from '~/logic/lib/publish'; +import { useWaitForProps } from '~/logic/lib/useWaitForProps'; +import { S3State } from '~/types'; + interface EditPostProps { ship: string; noteId: number; @@ -16,7 +20,7 @@ interface EditPostProps { s3: S3State; } -export function EditPost(props: EditPostProps & RouteComponentProps) { +export function EditPost(props: EditPostProps & RouteComponentProps): ReactElement { const { note, book, noteId, api, ship, history, s3 } = props; const [revNum, title, body] = getLatestRevision(note); const location = useLocation(); @@ -24,19 +28,19 @@ export function EditPost(props: EditPostProps & RouteComponentProps) { const waiter = useWaitForProps(props); const initial: PostFormSchema = { title, - body, + body }; const onSubmit = async ( values: PostFormSchema, actions: FormikHelpers - ) => { + ): Promise => { const { title, body } = values; try { const newRev = revNum + 1; const nodes = editPost(newRev, noteId, title, body); await api.graph.addNodes(ship, book, nodes); - await waiter(p => { + await waiter((p) => { const [rev] = getLatestRevision(p.note); return rev === newRev; }); @@ -44,7 +48,7 @@ export function EditPost(props: EditPostProps & RouteComponentProps) { history.push(noteUrl); } catch (e) { console.error(e); - actions.setStatus({ error: "Failed to edit notebook" }); + actions.setStatus({ error: 'Failed to edit notebook' }); } }; diff --git a/pkg/interface/src/views/apps/publish/components/MarkdownEditor.tsx b/pkg/interface/src/views/apps/publish/components/MarkdownEditor.tsx index 32f372f5d8..4f917084ff 100644 --- a/pkg/interface/src/views/apps/publish/components/MarkdownEditor.tsx +++ b/pkg/interface/src/views/apps/publish/components/MarkdownEditor.tsx @@ -1,26 +1,26 @@ -import React, { createRef, useCallback, useRef } from "react"; -import { IUnControlledCodeMirror, UnControlled as CodeEditor } from "react-codemirror2"; +import React, { createRef, useCallback, useRef } from 'react'; +import { IUnControlledCodeMirror, UnControlled as CodeEditor } from 'react-codemirror2'; import { useFormikContext } from 'formik'; import { Prompt } from 'react-router-dom'; import { Editor } from 'codemirror'; -import { MOBILE_BROWSER_REGEX, usePreventWindowUnload } from "~/logic/lib/util"; -import { PropFunc } from "~/types/util"; -import CodeMirror from "codemirror"; +import { MOBILE_BROWSER_REGEX, usePreventWindowUnload } from '~/logic/lib/util'; +import { PropFunc } from '~/types/util'; +import CodeMirror from 'codemirror'; -import "codemirror/mode/markdown/markdown"; -import "codemirror/addon/display/placeholder"; -import "codemirror/addon/edit/continuelist"; +import 'codemirror/mode/markdown/markdown'; +import 'codemirror/addon/display/placeholder'; +import 'codemirror/addon/edit/continuelist'; -import "codemirror/lib/codemirror.css"; -import { Box } from "@tlon/indigo-react"; -import { useFileDrag } from "~/logic/lib/useDrag"; -import SubmitDragger from "~/views/components/SubmitDragger"; -import useS3 from "~/logic/lib/useS3"; -import { S3State } from "~/types"; +import 'codemirror/lib/codemirror.css'; +import { Box } from '@tlon/indigo-react'; +import { useFileDrag } from '~/logic/lib/useDrag'; +import SubmitDragger from '~/views/components/SubmitDragger'; +import useS3 from '~/logic/lib/useS3'; +import { S3State } from '@urbit/api'; const MARKDOWN_CONFIG = { - name: "markdown", + name: 'markdown' }; interface MarkdownEditorProps { @@ -49,12 +49,12 @@ export function MarkdownEditor( const options = { mode: MARKDOWN_CONFIG, - theme: "tlon", + theme: 'tlon', lineNumbers: false, lineWrapping: true, - scrollbarStyle: "native", + scrollbarStyle: 'native', // cursorHeight: 0.85, - placeholder: placeholder || "", + placeholder: placeholder || '', extraKeys: { 'Enter': 'newlineAndIndentContinueMarkdownList' } }; @@ -84,7 +84,7 @@ export function MarkdownEditor( const codeMirror: Editor = editor.current.editor; const doc = codeMirror.getDoc(); - Array.from(files).forEach(async file => { + Array.from(files).forEach(async (file) => { const placeholder = `![Uploading ${file.name}](...)`; doc.setValue(doc.getValue() + placeholder); const url = await uploadDefault(file); diff --git a/pkg/interface/src/views/apps/publish/components/MarkdownField.tsx b/pkg/interface/src/views/apps/publish/components/MarkdownField.tsx index 750a649784..e96aec733b 100644 --- a/pkg/interface/src/views/apps/publish/components/MarkdownField.tsx +++ b/pkg/interface/src/views/apps/publish/components/MarkdownField.tsx @@ -1,8 +1,8 @@ -import React, { useCallback } from "react"; -import _ from "lodash"; -import { Box, ErrorLabel } from "@tlon/indigo-react"; -import { useField } from "formik"; -import { MarkdownEditor } from "./MarkdownEditor"; +import React, { useCallback } from 'react'; +import _ from 'lodash'; +import { Box, ErrorLabel } from '@tlon/indigo-react'; +import { useField } from 'formik'; +import { MarkdownEditor } from './MarkdownEditor'; export const MarkdownField = ({ id, @@ -13,13 +13,13 @@ export const MarkdownField = ({ const handleBlur = useCallback( (e: any) => { - _.set(e, "target.id", id); + _.set(e, 'target.id', id); onBlur && onBlur(e); }, [onBlur, id] ); - const hasError = !!(error && touched); + const hasError = Boolean(error && touched); return ( - + {error} diff --git a/pkg/interface/src/views/apps/publish/components/MetadataForm.tsx b/pkg/interface/src/views/apps/publish/components/MetadataForm.tsx index c586321a11..7a3bb39ae4 100644 --- a/pkg/interface/src/views/apps/publish/components/MetadataForm.tsx +++ b/pkg/interface/src/views/apps/publish/components/MetadataForm.tsx @@ -12,10 +12,10 @@ import { import { Formik, Form, useFormikContext, FormikHelpers } from "formik"; import GlobalApi from "~/logic/api/global"; import { Notebook } from "~/types/publish-update"; -import { Contacts } from "~/types/contact-update"; +import { Contacts } from "@urbit/api/contacts"; import { FormError } from "~/views/components/FormError"; import { RouteComponentProps, useHistory } from "react-router-dom"; -import {Association} from "~/types"; +import {Association} from "@urbit/api"; import { uxToHex } from "~/logic/lib/util"; interface MetadataFormProps { diff --git a/pkg/interface/src/views/apps/publish/components/Note.tsx b/pkg/interface/src/views/apps/publish/components/Note.tsx index d336650fa0..2bb8e77e01 100644 --- a/pkg/interface/src/views/apps/publish/components/Note.tsx +++ b/pkg/interface/src/views/apps/publish/components/Note.tsx @@ -1,16 +1,16 @@ -import React, { useState, useEffect } from "react"; -import { Box, Text, Col } from "@tlon/indigo-react"; -import ReactMarkdown from "react-markdown"; +import React, { useState, useEffect } from 'react'; +import { Box, Text, Col } from '@tlon/indigo-react'; +import ReactMarkdown from 'react-markdown'; import bigInt from 'big-integer'; -import { Link, RouteComponentProps } from "react-router-dom"; -import { Spinner } from "~/views/components/Spinner"; -import { Comments } from "~/views/components/Comments"; -import { NoteNavigation } from "./NoteNavigation"; -import GlobalApi from "~/logic/api/global"; +import { Link, RouteComponentProps } from 'react-router-dom'; +import { Spinner } from '~/views/components/Spinner'; +import { Comments } from '~/views/components/Comments'; +import { NoteNavigation } from './NoteNavigation'; +import GlobalApi from '~/logic/api/global'; import { getLatestRevision, getComments } from '~/logic/lib/publish'; -import Author from "~/views/components/Author"; -import { Contacts, GraphNode, Graph, Association, Unreads, Group } from "~/types"; +import Author from '~/views/components/Author'; +import { Contacts, GraphNode, Graph, Association, Unreads, Group } from '@urbit/api'; interface NoteProps { ship: string; @@ -34,12 +34,11 @@ export function Note(props: NoteProps & RouteComponentProps) { const deletePost = async () => { setDeleting(true); - const indices = [note.post.index] + const indices = [note.post.index]; await api.graph.removeNodes(ship, book, indices); props.history.push(rootUrl); }; - const comments = getComments(note); const [revNum, title, body, post] = getLatestRevision(note); const index = note.post.index.split('/'); @@ -49,8 +48,6 @@ export function Note(props: NoteProps & RouteComponentProps) { api.hark.markEachAsRead(props.association, '/',`/${index[1]}/1/1`, 'note', 'publish'); }, [props.association, props.note]); - - let adminLinks: JSX.Element | null = null; if (window.ship === note?.post?.author) { adminLinks = ( @@ -67,7 +64,7 @@ export function Note(props: NoteProps & RouteComponentProps) { color="red" ml={2} onClick={deletePost} - style={{ cursor: "pointer" }} + style={{ cursor: 'pointer' }} > Delete @@ -96,21 +93,21 @@ export function Note(props: NoteProps & RouteComponentProps) { ref={windowRef} > - {"<- Notebook Index"} + {'<- Notebook Index'} - {title || ""} + {title || ''} {adminLinks} - - + + { history.goBack(); }} - type="button">Cancel} + type="button" + >Cancel} diff --git a/pkg/interface/src/views/apps/publish/components/NoteNavigation.tsx b/pkg/interface/src/views/apps/publish/components/NoteNavigation.tsx index b3633df3fd..0a0d345fbc 100644 --- a/pkg/interface/src/views/apps/publish/components/NoteNavigation.tsx +++ b/pkg/interface/src/views/apps/publish/components/NoteNavigation.tsx @@ -1,29 +1,31 @@ -import React, { Component } from "react"; -import moment from "moment"; -import { Box } from "@tlon/indigo-react"; -import { Link } from "react-router-dom"; -import { Graph, GraphNode } from "~/types"; -import { getLatestRevision } from "~/logic/lib/publish"; -import { BigInteger } from "big-integer"; +import React, { ReactElement } from 'react'; +import moment from 'moment'; +import { Link } from 'react-router-dom'; +import { BigInteger } from 'big-integer'; + +import { Box } from '@tlon/indigo-react'; +import { Graph } from '@urbit/api'; + +import { getLatestRevision } from '~/logic/lib/publish'; function NavigationItem(props: { url: string; title: string; date: number; prev?: boolean; -}) { +}): ReactElement { const date = moment(props.date).fromNow(); return ( - {props.prev ? "Previous" : "Next"} + {props.prev ? 'Previous' : 'Next'} {props.title} {date} @@ -53,7 +55,7 @@ interface NoteNavigationProps { baseUrl: string; } -export function NoteNavigation(props: NoteNavigationProps) { +export function NoteNavigation(props: NoteNavigationProps): ReactElement { let nextComponent = ; let prevComponent = ; const { noteId, notebook } = props; @@ -72,13 +74,13 @@ export function NoteNavigation(props: NoteNavigationProps) { if (next && nextId) { const nextUrl = makeNoteUrl(nextId); const [, title, , post] = getLatestRevision(next); - const date = post["time-sent"]; + const date = post['time-sent']; nextComponent = ; } if (prev && prevId) { const prevUrl = makeNoteUrl(prevId); const [, title, , post] = getLatestRevision(prev); - const date = post["time-sent"]; + const date = post['time-sent']; prevComponent = ( ); diff --git a/pkg/interface/src/views/apps/publish/components/NotePreview.tsx b/pkg/interface/src/views/apps/publish/components/NotePreview.tsx index 1820188c46..becefc7e36 100644 --- a/pkg/interface/src/views/apps/publish/components/NotePreview.tsx +++ b/pkg/interface/src/views/apps/publish/components/NotePreview.tsx @@ -4,14 +4,14 @@ import styled from 'styled-components'; import { Col, Row, Box, Text, Icon, Image } from '@tlon/indigo-react'; import Author from '~/views/components/Author'; -import { GraphNode } from '~/types/graph-update'; -import { Contacts, Group } from '~/types'; +import { GraphNode } from '@urbit/api/graph'; +import { Contacts, Group } from '@urbit/api'; import { getComments, getLatestRevision, - getSnippet, -} from "~/logic/lib/publish"; -import {Unreads} from "~/types"; + getSnippet +} from '~/logic/lib/publish'; +import { Unreads } from '@urbit/api'; import GlobalApi from '~/logic/api/global'; import ReactMarkdown from 'react-markdown'; diff --git a/pkg/interface/src/views/apps/publish/components/NoteRoutes.tsx b/pkg/interface/src/views/apps/publish/components/NoteRoutes.tsx index 916347038a..9ac272b83e 100644 --- a/pkg/interface/src/views/apps/publish/components/NoteRoutes.tsx +++ b/pkg/interface/src/views/apps/publish/components/NoteRoutes.tsx @@ -1,12 +1,12 @@ -import React from "react"; -import { Route, Switch } from "react-router-dom"; +import React from 'react'; +import { Route, Switch } from 'react-router-dom'; -import GlobalApi from "~/logic/api/global"; -import { RouteComponentProps } from "react-router-dom"; -import Note from "./Note"; -import { EditPost } from "./EditPost"; +import GlobalApi from '~/logic/api/global'; +import { RouteComponentProps } from 'react-router-dom'; +import Note from './Note'; +import { EditPost } from './EditPost'; -import { GraphNode, Graph, Contacts, Association, S3State, Group } from "~/types"; +import { GraphNode, Graph, Contacts, Association, S3State, Group } from '@urbit/api'; interface NoteRoutesProps { ship: string; @@ -32,17 +32,18 @@ export function NoteRoutes(props: NoteRoutesProps & RouteComponentProps) { } + path={relativePath('/edit')} + render={routeProps => } /> + path={relativePath('/:commentId?')} + render={routeProps => + rootUrl={rootUrl} + /> } /> diff --git a/pkg/interface/src/views/apps/publish/components/Notebook.tsx b/pkg/interface/src/views/apps/publish/components/Notebook.tsx index 2063497234..f689297c76 100644 --- a/pkg/interface/src/views/apps/publish/components/Notebook.tsx +++ b/pkg/interface/src/views/apps/publish/components/Notebook.tsx @@ -1,10 +1,12 @@ -import React from "react"; -import { RouteComponentProps, Link } from "react-router-dom"; -import { NotebookPosts } from "./NotebookPosts"; -import { Col, Box, Text, Button, Row } from "@tlon/indigo-react"; -import GlobalApi from "~/logic/api/global"; -import { Contacts, Rolodex, Groups, Associations, Graph, Association, Unreads } from "~/types"; -import { useShowNickname } from "~/logic/lib/util"; +import React, { ReactElement } from 'react'; +import { RouteComponentProps } from 'react-router-dom'; + +import { Col, Box, Text, Row } from '@tlon/indigo-react'; +import { Contacts, Rolodex, Groups, Associations, Graph, Association, Unreads } from '@urbit/api'; + +import { NotebookPosts } from './NotebookPosts'; +import GlobalApi from '~/logic/api/global'; +import { useShowNickname } from '~/logic/lib/util'; interface NotebookProps { api: GlobalApi; @@ -21,7 +23,7 @@ interface NotebookProps { unreads: Unreads; } -export function Notebook(props: NotebookProps & RouteComponentProps) { +export function Notebook(props: NotebookProps & RouteComponentProps): ReactElement { const { ship, book, @@ -36,7 +38,6 @@ export function Notebook(props: NotebookProps & RouteComponentProps) { return null; // Waiting on groups to populate } - const relativePath = (p: string) => props.baseUrl + p; const contact = notebookContacts?.[ship]; diff --git a/pkg/interface/src/views/apps/publish/components/NotebookPosts.tsx b/pkg/interface/src/views/apps/publish/components/NotebookPosts.tsx index 639cf5330c..8cd94f68bb 100644 --- a/pkg/interface/src/views/apps/publish/components/NotebookPosts.tsx +++ b/pkg/interface/src/views/apps/publish/components/NotebookPosts.tsx @@ -1,7 +1,7 @@ -import React, { Component } from "react"; -import { Col } from "@tlon/indigo-react"; -import { NotePreview } from "./NotePreview"; -import { Contacts, Graph, Unreads, Group } from "~/types"; +import React, { Component } from 'react'; +import { Col } from '@tlon/indigo-react'; +import { NotePreview } from './NotePreview'; +import { Contacts, Graph, Unreads, Group } from '@urbit/api'; interface NotebookPostsProps { contacts: Contacts; diff --git a/pkg/interface/src/views/apps/publish/components/NotebookRoutes.tsx b/pkg/interface/src/views/apps/publish/components/NotebookRoutes.tsx index a3d1f5474f..a4c8e1e7e1 100644 --- a/pkg/interface/src/views/apps/publish/components/NotebookRoutes.tsx +++ b/pkg/interface/src/views/apps/publish/components/NotebookRoutes.tsx @@ -1,6 +1,6 @@ -import React, { useEffect } from "react"; -import { RouteComponentProps, Route, Switch } from "react-router-dom"; -import GlobalApi from "~/logic/api/global"; +import React, { useEffect } from 'react'; +import { RouteComponentProps, Route, Switch } from 'react-router-dom'; +import GlobalApi from '~/logic/api/global'; import { Association, Associations, @@ -10,16 +10,14 @@ import { Rolodex, Unreads, S3State -} from "~/types"; -import { Center, LoadingSpinner } from "@tlon/indigo-react"; +} from '@urbit/api'; +import { Center, LoadingSpinner } from '@tlon/indigo-react'; import bigInt from 'big-integer'; -import Notebook from "./Notebook"; -import NewPost from "./new-post"; +import Notebook from './Notebook'; +import NewPost from './new-post'; import { NoteRoutes } from './NoteRoutes'; - - interface NotebookRoutesProps { api: GlobalApi; ship: string; @@ -49,7 +47,6 @@ export function NotebookRoutes( const group = groups?.[props.association?.group]; - const relativePath = (path: string) => `${baseUrl}${path}`; return ( @@ -66,12 +63,13 @@ export function NotebookRoutes( contacts={notebookContacts} association={props.association} rootUrl={rootUrl} - baseUrl={baseUrl} />; + baseUrl={baseUrl} + />; }} /> ( + path={relativePath('/new')} + render={routeProps => ( { const { noteId } = routeProps.match.params; const noteIdNum = bigInt(noteId); diff --git a/pkg/interface/src/views/apps/publish/components/Writers.js b/pkg/interface/src/views/apps/publish/components/Writers.js index b6be6c1597..e8ff547af0 100644 --- a/pkg/interface/src/views/apps/publish/components/Writers.js +++ b/pkg/interface/src/views/apps/publish/components/Writers.js @@ -1,16 +1,14 @@ import React, { Component } from 'react'; import { Box, Text } from '@tlon/indigo-react'; import { ShipSearch } from '~/views/components/ShipSearch'; -import { Formik, Form, FormikHelpers } from 'formik'; +import { Formik, Form } from 'formik'; import { resourceFromPath } from '~/logic/lib/group'; import { AsyncButton } from '~/views/components/AsyncButton'; -import { cite } from '~/logic/lib/util'; export class Writers extends Component { render() { const { association, groups, contacts, api } = this.props; - const [,,,name] = association?.resource.split('/'); const resource = resourceFromPath(association?.group); const onSubmit = async (values, actions) => { diff --git a/pkg/interface/src/views/apps/publish/components/new-post.tsx b/pkg/interface/src/views/apps/publish/components/new-post.tsx index 2b0dd366a2..3dea28bfb7 100644 --- a/pkg/interface/src/views/apps/publish/components/new-post.tsx +++ b/pkg/interface/src/views/apps/publish/components/new-post.tsx @@ -1,13 +1,13 @@ -import React from "react"; -import { FormikHelpers } from "formik"; -import GlobalApi from "~/logic/api/global"; -import { useWaitForProps } from "~/logic/lib/useWaitForProps"; -import { RouteComponentProps } from "react-router-dom"; -import { PostForm, PostFormSchema } from "./NoteForm"; -import {createPost} from "~/logic/api/graph"; -import {Graph} from "~/types/graph-update"; -import {Association, S3State} from "~/types"; -import {newPost} from "~/logic/lib/publish"; +import React from 'react'; +import { FormikHelpers } from 'formik'; +import GlobalApi from '~/logic/api/global'; +import { useWaitForProps } from '~/logic/lib/useWaitForProps'; +import { RouteComponentProps } from 'react-router-dom'; +import { PostForm, PostFormSchema } from './NoteForm'; +import { createPost } from '~/logic/api/graph'; +import { Graph } from '@urbit/api/graph'; +import { Association, S3State } from '@urbit/api'; +import { newPost } from '~/logic/lib/publish'; interface NewPostProps { api: GlobalApi; @@ -30,21 +30,21 @@ export default function NewPost(props: NewPostProps & RouteComponentProps) { ) => { const { title, body } = values; try { - const [noteId, nodes] = newPost(title, body) - await api.graph.addNodes(ship, book, nodes) - await waiter(p => + const [noteId, nodes] = newPost(title, body); + await api.graph.addNodes(ship, book, nodes); + await waiter(p => p.graph.has(noteId) && !p.graph.get(noteId)?.post?.pending ); history.push(`${props.baseUrl}/note/${noteId}`); } catch (e) { console.error(e); - actions.setStatus({ error: "Posting note failed" }); + actions.setStatus({ error: 'Posting note failed' }); } }; const initialValues: PostFormSchema = { - title: "", - body: "", + title: '', + body: '' }; return ( diff --git a/pkg/interface/src/views/apps/settings/components/lib/BackgroundPicker.tsx b/pkg/interface/src/views/apps/settings/components/lib/BackgroundPicker.tsx index 53aed1b3e9..deae6d4786 100644 --- a/pkg/interface/src/views/apps/settings/components/lib/BackgroundPicker.tsx +++ b/pkg/interface/src/views/apps/settings/components/lib/BackgroundPicker.tsx @@ -1,32 +1,30 @@ -import React from "react"; +import React, { ReactElement } from 'react'; + import { - Box, Row, Label, Col, ManagedRadioButtonField as Radio, - ManagedTextInputField as Input, -} from "@tlon/indigo-react"; +} from '@tlon/indigo-react'; -import GlobalApi from "~/logic/api/global"; -import { S3State } from "~/types"; -import { ImageInput } from "~/views/components/ImageInput"; -import {ColorInput} from "~/views/components/ColorInput"; +import GlobalApi from '~/logic/api/global'; +import { ImageInput } from '~/views/components/ImageInput'; +import { ColorInput } from '~/views/components/ColorInput'; +import { S3State } from '~/types/s3-update'; -export type BgType = "none" | "url" | "color"; +export type BgType = 'none' | 'url' | 'color'; export function BackgroundPicker({ bgType, bgUrl, api, - s3, + s3 }: { bgType: BgType; bgUrl?: string; api: GlobalApi; s3: S3State; -}) { - +}): ReactElement { const rowSpace = { my: 0, alignItems: 'center' }; const radioProps = { my: 4, mr: 4, name: 'bgType' }; return ( @@ -34,7 +32,7 @@ export function BackgroundPicker({ - {bgType === "url" && ( + {bgType === 'url' && ( )} - {bgType === "color" && ( - + {bgType === 'color' && ( + )} diff --git a/pkg/interface/src/views/apps/settings/components/lib/BucketList.tsx b/pkg/interface/src/views/apps/settings/components/lib/BucketList.tsx index 5ffdc270a0..931f230b03 100644 --- a/pkg/interface/src/views/apps/settings/components/lib/BucketList.tsx +++ b/pkg/interface/src/views/apps/settings/components/lib/BucketList.tsx @@ -1,30 +1,29 @@ -import React, { useCallback } from "react"; +import React, { ReactElement, useCallback } from 'react'; +import { Formik } from 'formik'; import { ManagedTextInputField as Input, ManagedForm as Form, Box, Button, - Col, Text, Menu, MenuButton, MenuList, - MenuItem, -} from "@tlon/indigo-react"; -import { Formik } from "formik"; + MenuItem +} from '@tlon/indigo-react'; -import GlobalApi from "~/logic/api/global"; +import GlobalApi from '~/logic/api/global'; export function BucketList({ buckets, selected, - api, + api }: { buckets: Set; selected: string; api: GlobalApi; -}) { +}): ReactElement { const _buckets = Array.from(buckets); const onSubmit = useCallback( @@ -53,14 +52,14 @@ export function BucketList({ ); return ( - +
- {_buckets.map((bucket) => ( + {_buckets.map(bucket => ( { - setRemoteContentPolicy(state => { + setRemoteContentPolicy((state) => { Object.assign(state.remoteContentPolicy, values); }); actions.setSubmitting(false); }} > - {(props) => ( + {props => ( state.hideAvatars); +export default function SettingsScreen(props: any): ReactElement { return ( <> Landscape - Settings { + path={['/~settings']} + render={() => { return ( + borderRadius={1} + > ({ children, @@ -15,11 +15,11 @@ export function AsyncButton({ useEffect(() => { const s = status || {}; let done = false; - if ("success" in s) { + if ('success' in s) { setSuccess(true); onSuccess(); done = true; - } else if ("error" in s) { + } else if ('error' in s) { setSuccess(false); done = true; } @@ -40,13 +40,13 @@ export function AsyncButton({ > {isSubmitting ? ( ) : success === true ? ( - "Done" + 'Done' ) : success === false ? ( - "Errored" + 'Errored' ) : ( children )} diff --git a/pkg/interface/src/views/components/Author.tsx b/pkg/interface/src/views/components/Author.tsx index 8428121e4b..1a3a8b56cf 100644 --- a/pkg/interface/src/views/components/Author.tsx +++ b/pkg/interface/src/views/components/Author.tsx @@ -1,13 +1,15 @@ -import React, { ReactNode, useState, useRef } from 'react'; +import React, { ReactElement, ReactNode, useState } from 'react'; import moment from 'moment'; +import { useHistory } from 'react-router-dom'; + import { Row, Box, BaseImage } from '@tlon/indigo-react'; +import { Contacts } from '@urbit/api/contacts'; +import { Group } from '@urbit/api'; + import { uxToHex, cite, useShowNickname } from '~/logic/lib/util'; -import { Contacts } from '~/types/contact-update'; import OverlaySigil from './OverlaySigil'; import { Sigil } from '~/logic/lib/sigil'; -import { Group } from '~/types'; import GlobalApi from '~/logic/api/global'; -import { useHistory } from 'react-router-dom'; interface AuthorProps { contacts: Contacts; @@ -21,7 +23,7 @@ interface AuthorProps { } // eslint-disable-next-line max-lines-per-function -export default function Author(props: AuthorProps) { +export default function Author(props: AuthorProps): ReactElement { const { contacts, ship = '', date, showImage, group } = props; const history = useHistory(); let contact; @@ -36,7 +38,7 @@ export default function Author(props: AuthorProps) { const [showOverlay, setShowOverlay] = useState(false); const toggleOverlay = () => { - setShowOverlay((value) => !value); + setShowOverlay(value => !value); }; const img = diff --git a/pkg/interface/src/views/components/Body.tsx b/pkg/interface/src/views/components/Body.tsx index 7449689fd0..4e2e64203f 100644 --- a/pkg/interface/src/views/components/Body.tsx +++ b/pkg/interface/src/views/components/Body.tsx @@ -1,6 +1,6 @@ -import React, { ReactNode } from "react"; +import React, { ReactNode } from 'react'; -import { Box } from "@tlon/indigo-react"; +import { Box } from '@tlon/indigo-react'; export function Body( props: { children: ReactNode } & Parameters[0] @@ -14,7 +14,7 @@ export function Body( width="100%" borderRadius={2} border={[0, 1]} - borderColor={["washedGray", "washedGray"]} + borderColor={['washedGray', 'washedGray']} {...boxProps} > {props.children} diff --git a/pkg/interface/src/views/components/ChipInput.tsx b/pkg/interface/src/views/components/ChipInput.tsx index e75934fffb..02471d817d 100644 --- a/pkg/interface/src/views/components/ChipInput.tsx +++ b/pkg/interface/src/views/components/ChipInput.tsx @@ -2,23 +2,23 @@ import React, { useCallback, useState, ReactNode, - SyntheticEvent, useEffect, useRef, -} from "react"; + ReactElement +} from 'react'; +import { useField } from 'formik'; +import Mousetrap from 'mousetrap'; + import { - Box, Label, Row, Col, StatelessTextInput as Input, ErrorLabel -} from "@tlon/indigo-react"; -import { useField } from "formik"; -import Mousetrap from "mousetrap"; -import * as Yup from "yup"; +} from '@tlon/indigo-react'; -function Chip(props: { children: ReactNode }) { + +function Chip(props: { children: ReactNode }): ReactElement { return ( ( + const [{ onBlur, value }, meta, { setValue }] = useField( id ); - const [newChip, setNextChip] = useState(""); + const [newChip, setNextChip] = useState(''); const onChange = useCallback( (e: any) => { setNextChip(e.target.value); @@ -57,7 +57,7 @@ export function ChipInput(props: ChipInputProps) { const addNewChip = useCallback(() => { setValue([...value, newChip]); - setNextChip(""); + setNextChip(''); }, [setValue, value, newChip, setNextChip]); const removeLastChip = useCallback(() => { @@ -70,18 +70,18 @@ export function ChipInput(props: ChipInputProps) { return () => {}; } const mousetrap = Mousetrap(inputRef.current); - mousetrap.bind("backspace", (e) => { + mousetrap.bind('backspace', (e) => { if (newChip.length === 0) { removeLastChip(); return false; } return true; }); - mousetrap.bind("tab", (e) => { + mousetrap.bind('tab', (e) => { addNewChip(); return false; }); - mousetrap.bind("space", (e) => { + mousetrap.bind('space', (e) => { if (props.breakOnSpace) { addNewChip(); return false; @@ -89,9 +89,9 @@ export function ChipInput(props: ChipInputProps) { return true; }); return () => { - mousetrap.unbind("tab"); - mousetrap.unbind("backspace"); - mousetrap.unbind("space"); + mousetrap.unbind('tab'); + mousetrap.unbind('backspace'); + mousetrap.unbind('space'); }; }, [inputRef.current, addNewChip, newChip]); @@ -128,7 +128,7 @@ export function ChipInput(props: ChipInputProps) { py="1" /> - + {meta.error} diff --git a/pkg/interface/src/views/components/ColorInput.tsx b/pkg/interface/src/views/components/ColorInput.tsx index 0ee279db14..8ef2b9d00c 100644 --- a/pkg/interface/src/views/components/ColorInput.tsx +++ b/pkg/interface/src/views/components/ColorInput.tsx @@ -1,15 +1,16 @@ -import React from "react"; -import { useField } from "formik"; +import React, { FormEvent, ReactElement } from 'react'; +import { useField } from 'formik'; + import { Col, Label, Row, Box, ErrorLabel, - StatelessTextInput as Input, -} from "@tlon/indigo-react"; + StatelessTextInput as Input +} from '@tlon/indigo-react'; -import { uxToHex, hexToUx } from "~/logic/lib/util"; +import { hexToUx } from '~/logic/lib/util'; type ColorInputProps = Parameters[0] & { id: string; @@ -17,14 +18,14 @@ type ColorInputProps = Parameters[0] & { disabled?: boolean; }; -export function ColorInput(props: ColorInputProps) { +export function ColorInput(props: ColorInputProps): ReactElement { const { id, label, caption, disabled, ...rest } = props; const [{ value, onBlur }, meta, { setValue }] = useField(id); - const hex = value.replace('#', '').replace("0x","").replace(".", ""); - const padded = hex.padStart(6, "0"); + const hex = value.replace('#', '').replace('0x','').replace('.', ''); + const padded = hex.padStart(6, '0'); - const onChange = (e: any) => { + const onChange = (e: FormEvent) => { let { value: newValue } = e.target as HTMLInputElement; newValue = newValue.replace('#', ''); const valid = newValue.match(/^(\d|[a-f]|[A-F]){0,6}$/); @@ -36,7 +37,6 @@ export function ColorInput(props: ColorInputProps) { setValue(result); }; - return ( @@ -78,7 +78,7 @@ export function ColorInput(props: ColorInputProps) { /> - + {meta.error} diff --git a/pkg/interface/src/views/components/CommentInput.tsx b/pkg/interface/src/views/components/CommentInput.tsx index 99189efb7f..9c669bbd5d 100644 --- a/pkg/interface/src/views/components/CommentInput.tsx +++ b/pkg/interface/src/views/components/CommentInput.tsx @@ -1,15 +1,15 @@ -import React from "react"; -import * as Yup from "yup"; -import { Formik, FormikHelpers, Form, useFormikContext } from "formik"; -import { AsyncButton } from "./AsyncButton"; -import { ManagedTextAreaField as TextArea } from "@tlon/indigo-react"; +import React from 'react'; +import * as Yup from 'yup'; +import { Formik, FormikHelpers, Form, useFormikContext } from 'formik'; +import { AsyncButton } from './AsyncButton'; +import { ManagedTextAreaField as TextArea } from '@tlon/indigo-react'; interface FormSchema { comment: string; } const formSchema = Yup.object({ - comment: Yup.string().required("Comment can't be empty"), + comment: Yup.string().required('Comment can\'t be empty') }); interface CommentInputProps { @@ -25,7 +25,7 @@ interface CommentInputProps { const SubmitTextArea = (props) => { const { submitForm } = useFormikContext(); const onKeyDown = (e: KeyboardEvent) => { - if ((e.getModifierState("Control") || e.metaKey) && e.key === "Enter") { + if ((e.getModifierState('Control') || e.metaKey) && e.key === 'Enter') { submitForm(); } }; @@ -33,9 +33,9 @@ const SubmitTextArea = (props) => { }; export default function CommentInput(props: CommentInputProps) { - const initialValues: FormSchema = { comment: props.initial || "" }; - const label = props.label || "Add Comment"; - const loading = props.loadingText || "Commenting..."; + const initialValues: FormSchema = { comment: props.initial || '' }; + const label = props.label || 'Add Comment'; + const loading = props.loadingText || 'Commenting...'; return ( {label} diff --git a/pkg/interface/src/views/components/CommentItem.tsx b/pkg/interface/src/views/components/CommentItem.tsx index 4bd76a8ebe..a18905c7a8 100644 --- a/pkg/interface/src/views/components/CommentItem.tsx +++ b/pkg/interface/src/views/components/CommentItem.tsx @@ -1,13 +1,14 @@ -import React, { useState } from 'react'; -import { Link } from "react-router-dom"; -import { Contacts } from '~/types/contact-update'; -import GlobalApi from '~/logic/api/global'; -import { Box, Row, Text } from '@tlon/indigo-react'; +import React from 'react'; +import { Link } from 'react-router-dom'; import styled from 'styled-components'; + +import { Box, Row, Text } from '@tlon/indigo-react'; +import { Contacts } from '@urbit/api/contacts'; +import { GraphNode } from '@urbit/api/graph'; +import { Group } from '@urbit/api'; + +import GlobalApi from '~/logic/api/global'; import Author from '~/views/components/Author'; -import { GraphNode, TextContent } from '~/types/graph-update'; -import tokenizeMessage from '~/logic/lib/tokenizeMessage'; -import { Group } from '~/types'; import { MentionText } from '~/views/components/MentionText'; import { getLatestCommentRevision } from '~/logic/lib/publish'; @@ -28,9 +29,9 @@ interface CommentItemProps { group: Group; } -export function CommentItem(props: CommentItemProps) { +export function CommentItem(props: CommentItemProps): ReactElement { const { ship, contacts, name, api, comment, group } = props; - const [revNum, post] = getLatestCommentRevision(comment); + const [, post] = getLatestCommentRevision(comment); const disabled = props.pending || window.ship !== post?.author; const onDelete = async () => { @@ -39,7 +40,7 @@ export function CommentItem(props: CommentItemProps) { const commentIndexArray = (comment.post?.index || '/').split('/'); const commentIndex = commentIndexArray[commentIndexArray.length - 1]; - const updateUrl = `${props.baseUrl}/${commentIndex}` + const updateUrl = `${props.baseUrl}/${commentIndex}`; return ( diff --git a/pkg/interface/src/views/components/Comments.tsx b/pkg/interface/src/views/components/Comments.tsx index 51297020bb..6c6d135133 100644 --- a/pkg/interface/src/views/components/Comments.tsx +++ b/pkg/interface/src/views/components/Comments.tsx @@ -3,10 +3,10 @@ import bigInt from 'big-integer'; import { Col } from '@tlon/indigo-react'; import { CommentItem } from './CommentItem'; import CommentInput from './CommentInput'; -import { Contacts } from '~/types/contact-update'; +import { Contacts } from '@urbit/api/contacts'; import GlobalApi from '~/logic/api/global'; import { FormikHelpers } from 'formik'; -import { Group, GraphNode, Association } from '~/types'; +import { Group, GraphNode, Association } from '@urbit/api'; import { createPost, createBlankNodeWithChildPost } from '~/logic/api/graph'; import { getLatestCommentRevision } from '~/logic/lib/publish'; import tokenizeMessage from '~/logic/lib/tokenizeMessage'; diff --git a/pkg/interface/src/views/components/Dropdown.tsx b/pkg/interface/src/views/components/Dropdown.tsx index 7e2a1fb2c3..352973905c 100644 --- a/pkg/interface/src/views/components/Dropdown.tsx +++ b/pkg/interface/src/views/components/Dropdown.tsx @@ -4,14 +4,17 @@ import React, { useRef, useEffect, useCallback, -} from "react"; -import styled from "styled-components"; -import _ from "lodash"; -import { Box, Col } from "@tlon/indigo-react"; -import { useOutsideClick } from "~/logic/lib/useOutsideClick"; -import { useLocation } from "react-router-dom"; -import { Portal } from "./Portal"; -import { getRelativePosition, AlignY, AlignX } from "~/logic/lib/relativePosition"; + ReactElement +} from 'react'; +import styled from 'styled-components'; +import _ from 'lodash'; +import { useLocation } from 'react-router-dom'; + +import { Box } from '@tlon/indigo-react'; + +import { useOutsideClick } from '~/logic/lib/useOutsideClick'; +import { Portal } from './Portal'; +import { getRelativePosition, AlignY, AlignX } from '~/logic/lib/relativePosition'; interface DropdownProps { children: ReactNode; @@ -33,7 +36,7 @@ const DropdownOptions = styled(Box)` transition-timing-function: ease; `; -export function Dropdown(props: DropdownProps) { +export function Dropdown(props: DropdownProps): ReactElement { const { children, options } = props; const dropdownRef = useRef(null); const anchorRef = useRef(null); @@ -75,14 +78,14 @@ export function Dropdown(props: DropdownProps) { }); return ( - + {children} {open && ( @@ -95,6 +98,6 @@ export function Dropdown(props: DropdownProps) { } Dropdown.defaultProps = { - alignX: "left", - alignY: "bottom", + alignX: 'left', + alignY: 'bottom' }; diff --git a/pkg/interface/src/views/components/DropdownSearch.tsx b/pkg/interface/src/views/components/DropdownSearch.tsx index 5860af19e5..962423eb3f 100644 --- a/pkg/interface/src/views/components/DropdownSearch.tsx +++ b/pkg/interface/src/views/components/DropdownSearch.tsx @@ -5,17 +5,18 @@ import React, { useCallback, useEffect, ChangeEvent, -} from "react"; -import _ from "lodash"; -import Mousetrap from "mousetrap"; + ReactElement +} from 'react'; +import _ from 'lodash'; +import Mousetrap from 'mousetrap'; + import { Box, - Label, - ErrorLabel, - StatelessTextInput as Input, -} from "@tlon/indigo-react"; -import { useDropdown } from "~/logic/lib/useDropdown"; -import { PropFunc } from "~/types/util"; + StatelessTextInput as Input +} from '@tlon/indigo-react'; + +import { useDropdown } from '~/logic/lib/useDropdown'; +import { PropFunc } from '~/types/util'; interface DropdownSearchExtraProps { // check if entry is exact match @@ -36,14 +37,14 @@ interface DropdownSearchExtraProps { disabled?: boolean; placeholder?: string; onChange?: (e: ChangeEvent) => void; - onBlur?: (e: any) => void; + onBlur?: (e: FocusEvent) => void; onFocus?: (e: FocusEvent) => void; } type DropdownSearchProps = PropFunc & DropdownSearchExtraProps; -export function DropdownSearch(props: DropdownSearchProps) { +export function DropdownSearch(props: DropdownSearchProps): ReactElement { const textarea = useRef(); const { candidates, @@ -54,13 +55,13 @@ export function DropdownSearch(props: DropdownSearchProps) { renderCandidate, disabled, placeholder, - onFocus = () => {}, - onChange = () => {}, - onBlur = () => {}, + onFocus = (): void => {}, + onChange = (): void => {}, + onBlur = (): void => {}, ...rest } = props; - const [query, setQuery] = useState(""); + const [query, setQuery] = useState(''); const exact = useCallback( (s: string) => { return isExact ? isExact(s) : undefined; @@ -77,7 +78,7 @@ export function DropdownSearch(props: DropdownSearchProps) { const handleSelect = useCallback( (c: C) => { - setQuery(""); + setQuery(''); onSelect(c); }, [setQuery, onSelect] @@ -96,14 +97,14 @@ export function DropdownSearch(props: DropdownSearchProps) { } const mousetrap = Mousetrap(textarea.current); - mousetrap.bind(["down", "tab"], next); - mousetrap.bind(["up", "shift+tab"], back); - mousetrap.bind("enter", onEnter); + mousetrap.bind(['down', 'tab'], next); + mousetrap.bind(['up', 'shift+tab'], back); + mousetrap.bind('enter', onEnter); return () => { - mousetrap.unbind(["down", "tab"]); - mousetrap.unbind(["up", "shift+tab"]); - mousetrap.unbind("enter"); + mousetrap.unbind(['down', 'tab']); + mousetrap.unbind(['up', 'shift+tab']); + mousetrap.unbind('enter'); }; }, [textarea.current, next, back, onEnter]); diff --git a/pkg/interface/src/views/components/ErrorBoundary.tsx b/pkg/interface/src/views/components/ErrorBoundary.tsx index 5d36f7ab99..c166dfe6b9 100644 --- a/pkg/interface/src/views/components/ErrorBoundary.tsx +++ b/pkg/interface/src/views/components/ErrorBoundary.tsx @@ -13,7 +13,7 @@ class ErrorBoundary extends Component< history.listen((location, action) => { if (this.state.error) { this.setState({ - error: undefined, + error: undefined }); } }); @@ -26,7 +26,7 @@ class ErrorBoundary extends Component< render() { if (this.state.error) { - return () + return (); } return this.props.children; } diff --git a/pkg/interface/src/views/components/FormError.tsx b/pkg/interface/src/views/components/FormError.tsx index 6aa5cca1c4..ed10100a86 100644 --- a/pkg/interface/src/views/components/FormError.tsx +++ b/pkg/interface/src/views/components/FormError.tsx @@ -1,16 +1,16 @@ -import React from "react"; -import { useFormikContext } from "formik"; -import { ErrorLabel } from "@tlon/indigo-react"; -import {PropFunc} from "~/types/util"; +import React from 'react'; +import { useFormikContext } from 'formik'; +import { ErrorLabel } from '@tlon/indigo-react'; +import { PropFunc } from '~/types/util'; export function FormError(props: { message?: string } & PropFunc) { const { status } = useFormikContext(); const { message, ...rest } = props; - let s = status || {}; + const s = status || {}; const contents = message || s?.error; return ( - {contents} + {contents} ); } diff --git a/pkg/interface/src/views/components/FormSubmit.tsx b/pkg/interface/src/views/components/FormSubmit.tsx index ae481de856..6851c8618d 100644 --- a/pkg/interface/src/views/components/FormSubmit.tsx +++ b/pkg/interface/src/views/components/FormSubmit.tsx @@ -1,13 +1,13 @@ -import React, { useCallback, ReactNode } from "react"; -import { useFormikContext } from "formik"; -import { Row, Button } from "@tlon/indigo-react"; -import { AsyncButton } from "./AsyncButton"; +import React, { useCallback, ReactNode, ReactElement } from 'react'; +import { useFormikContext } from 'formik'; +import { Row, Button } from '@tlon/indigo-react'; +import { AsyncButton } from './AsyncButton'; interface FormSubmitProps { children?: ReactNode; } -export function FormSubmit(props: FormSubmitProps) { +export function FormSubmit(props: FormSubmitProps): ReactElement { const { children } = props; const { initialValues, values, dirty, resetForm, isSubmitting } = useFormikContext(); @@ -19,7 +19,6 @@ export function FormSubmit(props: FormSubmitProps) { resetForm({ errors: {}, touched: {}, values: initialValues, status: {} }); }, [resetForm, initialValues]); - return ( void; detailed?: boolean; } & PropFunc -) { +): ReactElement { const { resource, api, associations, groups, measure, ...rest } = props; const name = resource.slice(6); const [preview, setPreview] = useState(null); @@ -31,7 +33,7 @@ export function GroupLink( ) : ( @@ -41,7 +43,7 @@ export function GroupLink( api={api} autojoin={name} /> - ), + ) }); useEffect(() => { diff --git a/pkg/interface/src/views/components/GroupSearch.tsx b/pkg/interface/src/views/components/GroupSearch.tsx index 4cc75b781d..d9bc2f6e8c 100644 --- a/pkg/interface/src/views/components/GroupSearch.tsx +++ b/pkg/interface/src/views/components/GroupSearch.tsx @@ -1,4 +1,8 @@ -import React, { useMemo, useState } from 'react'; +import React, { ReactElement, useMemo, useState } from 'react'; +import { useFormikContext, FieldArray } from 'formik'; +import _ from 'lodash'; +import styled from 'styled-components'; + import { Box, Text, @@ -8,15 +12,12 @@ import { Icon, ErrorLabel } from '@tlon/indigo-react'; -import _ from 'lodash'; -import { useField, useFormikContext, FieldArray } from 'formik'; -import styled from 'styled-components'; +import { Groups } from '@urbit/api'; +import { Associations, Association } from '@urbit/api/metadata'; + import { roleForShip } from '~/logic/lib/group'; - import { DropdownSearch } from './DropdownSearch'; -import { Groups } from '~/types'; -import { Associations, Association } from '~/types/metadata-update'; interface GroupSearchProps { disabled?: boolean; @@ -36,7 +37,7 @@ const CandidateBox = styled(Box)<{ selected: boolean }>` } `; -const Candidate = ({ title, selected, onClick }) => ( +const Candidate = ({ title, selected, onClick }): ReactElement => ( void -) { +): ReactElement { const { title } = a.metadata; const onClick = () => { @@ -68,7 +69,7 @@ type FormValues = { [id in I]: string[]; }; -export function GroupSearch>(props: GroupSearchProps) { +export function GroupSearch>(props: GroupSearchProps): ReactElement { const { id, caption, label } = props; const { values, @@ -76,7 +77,7 @@ export function GroupSearch>(props: Gr errors, initialValues, setFieldValue, - setFieldTouched, + setFieldTouched } = useFormikContext(); const [inputIdx, setInputIdx] = useState(initialValues[id].length); const name = `${id}[${inputIdx}]`; @@ -177,7 +178,8 @@ export function GroupSearch>(props: Gr ); - }} /> + }} + /> ); } diff --git a/pkg/interface/src/views/components/HoverBox.tsx b/pkg/interface/src/views/components/HoverBox.tsx index d678c1e4d2..8159a68e3b 100644 --- a/pkg/interface/src/views/components/HoverBox.tsx +++ b/pkg/interface/src/views/components/HoverBox.tsx @@ -1,19 +1,19 @@ -import React from "react"; -import { Link } from "react-router-dom"; -import styled from "styled-components"; -import { Box } from "@tlon/indigo-react"; -import { PropFunc } from "~/types/util"; +import React from 'react'; +import { Link } from 'react-router-dom'; +import styled from 'styled-components'; +import { Box } from '@tlon/indigo-react'; +import { PropFunc } from '~/types/util'; interface HoverBoxProps { selected: boolean; bg: string; bgActive: string; } export const HoverBox = styled(Box)` - background-color: ${(p) => + background-color: ${p => p.selected ? p.theme.colors[p.bgActive] : p.theme.colors[p.bg]}; pointer: cursor; &:hover { - background-color: ${(p) => p.theme.colors[p.bgActive]}; + background-color: ${p => p.theme.colors[p.bgActive]}; } `; diff --git a/pkg/interface/src/views/components/IconRadio.tsx b/pkg/interface/src/views/components/IconRadio.tsx index 912329e8f3..e58e76a803 100644 --- a/pkg/interface/src/views/components/IconRadio.tsx +++ b/pkg/interface/src/views/components/IconRadio.tsx @@ -1,15 +1,15 @@ -import React, { useCallback, useMemo } from "react"; -import styled from "styled-components"; +import React, { useCallback, useMemo } from 'react'; +import styled from 'styled-components'; +import { useField } from 'formik'; + import { Icon, Box, Row, BaseLabel, - Indicator, Col, - Label, -} from "@tlon/indigo-react"; -import { useField } from "formik"; + Label +} from '@tlon/indigo-react'; type IconRadioProps = Parameters[0] & { id: string; @@ -40,45 +40,50 @@ type IconIndicatorProps = Parameters & { const indicator = { state: { on: { - //"*": { fill: "white" }, - backgroundColor: "blue", - borderColor: "blue", + // "*": { fill: "white" }, + backgroundColor: 'blue', + borderColor: 'blue' }, off: { - //"*": { fill: "transparent" }, - backgroundColor: "white", - borderColor: "lightGray", + // "*": { fill: "transparent" }, + backgroundColor: 'white', + borderColor: 'lightGray' }, onError: { - //"*": { fill: "white" }, - backgroundColor: "red", - borderColor: "red", + // "*": { fill: "white" }, + backgroundColor: 'red', + borderColor: 'red' }, offError: { // "*": { fill: "transparent" }, - backgroundColor: "washedRed", - borderColor: "red", + backgroundColor: 'washedRed', + borderColor: 'red' }, offDisabled: { - //"*": { fill: "transparent" }, - backgroundColor: "washedGray", - borderColor: "lightGray", + // "*": { fill: "transparent" }, + backgroundColor: 'washedGray', + borderColor: 'lightGray' }, onDisabled: { - //"*": { fill: "lightGray" }, - backgroundColor: "washedGray", - borderColor: "lightGray", - }, - }, + // "*": { fill: "lightGray" }, + backgroundColor: 'washedGray', + borderColor: 'lightGray' + } + } }; const IconIndicator = ({ disabled, selected, hasError, children, ...rest }) => { const style = useMemo(() => { - if (selected && disabled) return indicator.state.onDisabled; - if (selected && hasError) return indicator.state.onError; - if (selected) return indicator.state.on; - if (disabled) return indicator.state.offDisabled; - if (hasError) return indicator.state.offError; + if (selected && disabled) +return indicator.state.onDisabled; + if (selected && hasError) +return indicator.state.onError; + if (selected) +return indicator.state.on; + if (disabled) +return indicator.state.offDisabled; + if (hasError) +return indicator.state.offError; return indicator.state.off; }, [selected, disabled, hasError]); @@ -95,7 +100,7 @@ export function IconRadio(props: IconRadioProps) { name, id, value: id, - type: "radio", + type: 'radio' }); const onChange = useCallback( @@ -122,12 +127,12 @@ export function IconRadio(props: IconRadioProps) { > - + {caption ? ( diff --git a/pkg/interface/src/views/components/Invite/Group.tsx b/pkg/interface/src/views/components/Invite/Group.tsx index ea5c37b989..9345d1c78c 100644 --- a/pkg/interface/src/views/components/Invite/Group.tsx +++ b/pkg/interface/src/views/components/Invite/Group.tsx @@ -1,11 +1,11 @@ -import React, { ReactNode } from "react"; -import { Text, Box, Button, Icon, Row, Rule, Col } from "@tlon/indigo-react"; +import React, { ReactElement, ReactNode } from 'react'; +import { Text, Box, Icon, Row } from '@tlon/indigo-react'; -import { cite } from "~/logic/lib/util"; -import { MetadataUpdatePreview, JoinProgress, Invite } from "~/types"; -import { GroupSummary } from "~/views/landscape/components/GroupSummary"; -import { InviteSkeleton } from "./InviteSkeleton"; -import { JoinSkeleton } from "./JoinSkeleton"; +import { cite } from '~/logic/lib/util'; +import { MetadataUpdatePreview, JoinProgress, Invite } from '@urbit/api'; +import { GroupSummary } from '~/views/landscape/components/GroupSummary'; +import { InviteSkeleton } from './InviteSkeleton'; +import { JoinSkeleton } from './JoinSkeleton'; interface GroupInviteProps { preview: MetadataUpdatePreview; @@ -15,12 +15,12 @@ interface GroupInviteProps { onDecline: () => Promise; } -export function GroupInvite(props: GroupInviteProps) { +export function GroupInvite(props: GroupInviteProps): ReactElement { const { preview, invite, status, onAccept, onDecline } = props; const { metadata, members } = props.preview; let inner: ReactNode = null; - let Outer: (p: { children: ReactNode }) => JSX.Element = (p) => ( + let Outer: (p: { children: ReactNode }) => JSX.Element = p => ( <>{p.children} ); @@ -68,7 +68,7 @@ export function GroupInvite(props: GroupInviteProps) { gray metadata={metadata} memberCount={members} - channelCount={preview?.["channel-count"]} + channelCount={preview?.['channel-count']} /> diff --git a/pkg/interface/src/views/components/Invite/InviteSkeleton.tsx b/pkg/interface/src/views/components/Invite/InviteSkeleton.tsx index c1b4d3899b..bcf773f68e 100644 --- a/pkg/interface/src/views/components/Invite/InviteSkeleton.tsx +++ b/pkg/interface/src/views/components/Invite/InviteSkeleton.tsx @@ -1,8 +1,8 @@ -import React, { ReactNode } from "react"; -import { Text, Box, Button, Icon, Row, Rule, Col } from "@tlon/indigo-react"; +import React, { ReactElement, ReactNode } from 'react'; +import { Row, Rule, Col } from '@tlon/indigo-react'; -import { StatelessAsyncAction } from "~/views/components/StatelessAsyncAction"; -import { PropFunc } from "~/types"; +import { StatelessAsyncAction } from '~/views/components/StatelessAsyncAction'; +import { PropFunc } from '~/types'; export interface InviteSkeletonProps { onAccept: () => Promise; @@ -14,7 +14,7 @@ export interface InviteSkeletonProps { export function InviteSkeleton( props: InviteSkeletonProps & PropFunc -) { +): ReactElement { const { children, acceptDesc, diff --git a/pkg/interface/src/views/components/Invite/JoinSkeleton.tsx b/pkg/interface/src/views/components/Invite/JoinSkeleton.tsx index c3e39bd63f..c3e6874f3b 100644 --- a/pkg/interface/src/views/components/Invite/JoinSkeleton.tsx +++ b/pkg/interface/src/views/components/Invite/JoinSkeleton.tsx @@ -1,14 +1,15 @@ -import React, { ReactNode } from "react"; -import { Col, Row, SegmentedProgressBar, Text, Rule } from "@tlon/indigo-react"; -import { JoiningStatus } from "~/views/apps/notifications/joining"; -import { JoinProgress, PropFunc } from "~/types"; +import React, { ReactElement, ReactNode } from 'react'; +import { Col, Rule } from '@tlon/indigo-react'; +import { JoiningStatus } from '~/views/apps/notifications/joining'; +import { JoinProgress } from '@urbit/api'; +import { PropFunc } from '~/types/util'; type JoinSkeletonProps = { children: ReactNode; status: JoinProgress; } & PropFunc; -export function JoinSkeleton(props: JoinSkeletonProps) { +export function JoinSkeleton(props: JoinSkeletonProps): ReactElement { const { children, status, ...rest } = props; return ( <> diff --git a/pkg/interface/src/views/components/Invite/index.tsx b/pkg/interface/src/views/components/Invite/index.tsx index fc6e9b1924..d198e430eb 100644 --- a/pkg/interface/src/views/components/Invite/index.tsx +++ b/pkg/interface/src/views/components/Invite/index.tsx @@ -1,25 +1,23 @@ -import React, { Component, useState, useEffect, useCallback, useMemo } from "react"; -import { Invite } from "~/types/invite-update"; -import { Text, Box, Button, Icon, Row, Rule, Col } from "@tlon/indigo-react"; -import { StatelessAsyncAction } from "~/views/components/StatelessAsyncAction"; -import { cite } from "~/logic/lib/util"; +import React, { useState, useEffect, useCallback } from 'react'; +import { useHistory } from 'react-router-dom'; + import { MetadataUpdatePreview, Contacts, JoinRequests, - JoinProgress, Groups, - Associations, -} from "~/types"; -import GlobalApi from "~/logic/api/global"; -import { GroupSummary } from "~/views/landscape/components/GroupSummary"; -import { JoiningStatus } from "~/views/apps/notifications/joining"; -import { resourceFromPath } from "~/logic/lib/group"; -import { GroupInvite } from "./Group"; -import { InviteSkeleton } from "./InviteSkeleton"; -import { JoinSkeleton } from "./JoinSkeleton"; -import { useWaitForProps } from "~/logic/lib/useWaitForProps"; -import { useHistory } from "react-router-dom"; + Associations +} from '@urbit/api'; +import { Invite } from '@urbit/api/invite'; +import { Text, Icon, Row } from '@tlon/indigo-react'; + +import { cite } from '~/logic/lib/util'; +import GlobalApi from '~/logic/api/global'; +import { resourceFromPath } from '~/logic/lib/group'; +import { GroupInvite } from './Group'; +import { InviteSkeleton } from './InviteSkeleton'; +import { JoinSkeleton } from './JoinSkeleton'; +import { useWaitForProps } from '~/logic/lib/useWaitForProps'; interface InviteItemProps { invite?: Invite; @@ -61,7 +59,7 @@ export function InviteItem(props: InviteItemProps) { if (props.groups?.[resource]?.hidden) { const { metadata } = associations.graph[resource]; - if (name.startsWith("dm--")) { + if (name.startsWith('dm--')) { history.push(`/~landscape/messages/resource/${metadata.module}${resource}`); } else { history.push(`/~landscape/home/resource/${metadata.module}${resource}`); @@ -78,10 +76,10 @@ export function InviteItem(props: InviteItemProps) { await api.invite.decline(app, uid); }, [app, uid]); - const handlers = { onAccept: inviteAccept, onDecline: inviteDecline } + const handlers = { onAccept: inviteAccept, onDecline: inviteDecline }; useEffect(() => { - if (!app || app === "groups") { + if (!app || app === 'groups') { (async () => { setPreview(await api.metadata.preview(resource)); })(); @@ -102,7 +100,7 @@ export function InviteItem(props: InviteItemProps) { {...handlers} /> ); - } else if (invite && name.startsWith("dm--")) { + } else if (invite && name.startsWith('dm--')) { return ( ); - } else if (status && name.startsWith("dm--")) { + } else if (status && name.startsWith('dm--')) { return ( You are joining a DM with - {cite("~hastuc-dibtux")} + {cite('~hastuc-dibtux')} @@ -151,7 +149,7 @@ export function InviteItem(props: InviteItemProps) { ); } else if (status) { - const [, , ship, name] = resource.split("/"); + const [, , ship, name] = resource.split('/'); return ( diff --git a/pkg/interface/src/views/components/Loading.tsx b/pkg/interface/src/views/components/Loading.tsx index a11f5e09c8..78822673e9 100644 --- a/pkg/interface/src/views/components/Loading.tsx +++ b/pkg/interface/src/views/components/Loading.tsx @@ -1,7 +1,7 @@ -import React from "react"; -import { Text, Center, LoadingSpinner } from "@tlon/indigo-react"; +import React from 'react'; +import { Text, Center, LoadingSpinner } from '@tlon/indigo-react'; -import { Body } from "./Body"; +import { Body } from './Body'; interface LoadingProps { text?: string; @@ -11,7 +11,7 @@ export function Loading({ text }: LoadingProps) {
- {!!text && {text}} + {Boolean(text) && {text}}
); diff --git a/pkg/interface/src/views/components/MentionText.tsx b/pkg/interface/src/views/components/MentionText.tsx index 02bdf0c220..96187d94cb 100644 --- a/pkg/interface/src/views/components/MentionText.tsx +++ b/pkg/interface/src/views/components/MentionText.tsx @@ -1,7 +1,7 @@ import React, { useState, useCallback } from 'react'; import _ from 'lodash'; import { Text, Box } from '@tlon/indigo-react'; -import { Contact, Contacts, Content, Group } from '~/types'; +import { Contact, Contacts, Content, Group } from '@urbit/api'; import RichText from '~/views/components/RichText'; import { cite, useShowNickname, uxToHex } from '~/logic/lib/util'; import OverlaySigil from '~/views/components/OverlaySigil'; diff --git a/pkg/interface/src/views/components/ModalOverlay.tsx b/pkg/interface/src/views/components/ModalOverlay.tsx index fee8c578e8..9838fe1ad1 100644 --- a/pkg/interface/src/views/components/ModalOverlay.tsx +++ b/pkg/interface/src/views/components/ModalOverlay.tsx @@ -1,9 +1,9 @@ -import React, { useCallback, UIEvent, MouseEvent, useRef } from "react"; -import { Box } from "@tlon/indigo-react"; -import { PropFunc } from "~/types/util"; +import React, { useCallback, UIEvent, MouseEvent, useRef } from 'react'; +import { Box } from '@tlon/indigo-react'; +import { PropFunc } from '~/types/util'; interface ModalOverlayProps { - spacing: PropFunc["m"]; + spacing: PropFunc['m']; dismiss: () => void; } type Props = ModalOverlayProps & PropFunc; @@ -22,7 +22,7 @@ export const ModalOverlay = (props: Props) => { const onKeyDown = useCallback( (e: any) => { - if (e.key === "Escape") { + if (e.key === 'Escape') { props.dismiss(); e.stopPropagation(); } @@ -49,4 +49,4 @@ export const ModalOverlay = (props: Props) => { ); -} +}; diff --git a/pkg/interface/src/views/components/OverlaySigil.tsx b/pkg/interface/src/views/components/OverlaySigil.tsx index f2d031feb8..066e1de7d6 100644 --- a/pkg/interface/src/views/components/OverlaySigil.tsx +++ b/pkg/interface/src/views/components/OverlaySigil.tsx @@ -1,5 +1,5 @@ -import React, { useState, useRef, useEffect, PureComponent } from 'react'; -import { Contact, Group } from '~/types'; +import React, { useState, useRef, useEffect } from 'react'; +import { Contact, Group } from '@urbit/api'; import ProfileOverlay, { OVERLAY_HEIGHT } from './ProfileOverlay'; import { Box, ColProps } from '@tlon/indigo-react'; diff --git a/pkg/interface/src/views/components/Portal.tsx b/pkg/interface/src/views/components/Portal.tsx index 7bc5d51b6e..297168e901 100644 --- a/pkg/interface/src/views/components/Portal.tsx +++ b/pkg/interface/src/views/components/Portal.tsx @@ -1,10 +1,10 @@ -import { useEffect, ReactNode, useMemo } from "react"; -import { createPortal } from "react-dom"; +import { useEffect, ReactNode, useMemo } from 'react'; +import { createPortal } from 'react-dom'; export function Portal(props: { children: ReactNode }) { - const root = document.getElementById("portal-root"); + const root = document.getElementById('portal-root'); - const el = useMemo(() => document.createElement("div"), []); + const el = useMemo(() => document.createElement('div'), []); useEffect(() => { root?.appendChild(el); diff --git a/pkg/interface/src/views/components/ProfileOverlay.tsx b/pkg/interface/src/views/components/ProfileOverlay.tsx index 367d81186a..df1fec01c8 100644 --- a/pkg/interface/src/views/components/ProfileOverlay.tsx +++ b/pkg/interface/src/views/components/ProfileOverlay.tsx @@ -1,6 +1,6 @@ import React, { PureComponent } from 'react'; -import { Contact, Group } from '~/types'; +import { Contact, Group } from '@urbit/api'; import { cite, useShowNickname } from '~/logic/lib/util'; import { Sigil } from '~/logic/lib/sigil'; @@ -33,7 +33,7 @@ type ProfileOverlayProps = ColProps & { api: any; }; -class ProfileOverlay extends PureComponent { +class ProfileOverlay extends PureComponent> { public popoverRef: React.Ref; constructor(props) { @@ -123,13 +123,14 @@ class ProfileOverlay extends PureComponent { > {(!isOwn) && ( - history.push(`/~landscape/dm/${ship}`)}/> + history.push(`/~landscape/dm/${ship}`)} /> )} history.push(`/~profile/~${ship}`)}> + onClick={() => history.push(`/~profile/~${ship}`)} + > {img} diff --git a/pkg/interface/src/views/components/RemoteContent.tsx b/pkg/interface/src/views/components/RemoteContent.tsx index c6f16c658b..b490a3d2d5 100644 --- a/pkg/interface/src/views/components/RemoteContent.tsx +++ b/pkg/interface/src/views/components/RemoteContent.tsx @@ -66,7 +66,8 @@ class RemoteContent extends PureComponent { this.setState({ embed: result }); }).catch((error) => { - if (error.name === 'AbortError') return; + if (error.name === 'AbortError') +return; this.setState({ embed: 'error' }); }); } @@ -81,7 +82,7 @@ class RemoteContent extends PureComponent + > {contents} ); } @@ -171,7 +172,7 @@ class RemoteContent extends PureComponent + > {this.state.unfold ? 'collapse' : 'expand'} : null} {this.state.embed && this.state.embed.html && this.state.unfold ? -
{ this.containerRef = el; }} - dangerouslySetInnerHTML={{__html: this.state.embed.html}}>
+
{ + this.containerRef = el; +}} + dangerouslySetInnerHTML={{ __html: this.state.embed.html }} + >
: null}
diff --git a/pkg/interface/src/views/components/ShipSearch.tsx b/pkg/interface/src/views/components/ShipSearch.tsx index e4e6c4566d..5a04334956 100644 --- a/pkg/interface/src/views/components/ShipSearch.tsx +++ b/pkg/interface/src/views/components/ShipSearch.tsx @@ -2,33 +2,28 @@ import React, { useMemo, useCallback, ChangeEvent, - useState, - SyntheticEvent, - useEffect, useRef, -} from "react"; + ReactElement +} from 'react'; +import _ from 'lodash'; +import ob from 'urbit-ob'; +import * as Yup from 'yup'; +import { FieldArray, useFormikContext } from 'formik'; + import { - Box, Label, Icon, Text, Row, Col, - ErrorLabel, -} from "@tlon/indigo-react"; -import _ from "lodash"; -import ob from "urbit-ob"; -import * as Yup from "yup"; -import { useField, FieldArray, useFormikContext } from "formik"; -import styled from "styled-components"; + ErrorLabel +} from '@tlon/indigo-react'; +import { Rolodex, Groups } from '@urbit/api'; -import { DropdownSearch } from "./DropdownSearch"; -import { Associations, Association } from "~/types/metadata-update"; -import { cite, deSig } from "~/logic/lib/util"; -import { Rolodex, Groups } from "~/types"; -import { HoverBox } from "./HoverBox"; -const INVALID_SHIP_ERR = "Invalid ship"; +import { DropdownSearch } from './DropdownSearch'; +import { cite, deSig } from '~/logic/lib/util'; +import { HoverBox } from './HoverBox'; interface InviteSearchProps { autoFocus?: boolean; @@ -42,7 +37,7 @@ interface InviteSearchProps { maxLength?: number; } -const getNicknameForShips = (groups: Groups, contacts: Rolodex) => { +const getNicknameForShips = (groups: Groups, contacts: Rolodex): readonly [string[], Map] => { const peerSet = new Set(); const nicknames = new Map(); _.forEach(groups, (group, path) => { @@ -71,7 +66,7 @@ const getNicknameForShips = (groups: Groups, contacts: Rolodex) => { return [Array.from(peerSet), nicknames] as const; }; -const Candidate = ({ title, detail, selected, onClick }) => ( +const Candidate = ({ title, detail, selected, onClick }): ReactElement => ( = { }; const shipItemSchema = Yup.string().test( - "is-patp", - "${value} is not a valid @p", + 'is-patp', + '${value} is not a valid @p', x => ob.isValidPatp(`~${x}`) ); export const shipSearchSchema = Yup.array(shipItemSchema).compact(); export const shipSearchSchemaInGroup = (members: string[]) => - Yup.array(shipItemSchema.oneOf(members, "${value} not a member of this group")).compact(); + Yup.array(shipItemSchema.oneOf(members, '${value} not a member of this group')).compact(); export function ShipSearch>( props: InviteSearchProps -) { +): ReactElement { const { id, label, caption } = props; const { values, touched, errors, initialValues, - setFieldValue, + setFieldValue } = useFormikContext(); const inputIdx = useRef(initialValues[id].length); @@ -133,7 +128,7 @@ export function ShipSearch>( const renderCandidate = useCallback( (s: string, selected: boolean, onSelect: (s: string) => void) => { - const detail = _.uniq(nicknames.get(s)).join(", "); + const detail = _.uniq(nicknames.get(s)).join(', '); const onClick = () => { onSelect(s); }; @@ -152,7 +147,7 @@ export function ShipSearch>( const onChange = (e: ChangeEvent) => { const newValue = - e.target.value?.length > 0 ? `~${deSig(e.target.value)}` : ""; + e.target.value?.length > 0 ? `~${deSig(e.target.value)}` : ''; setFieldValue(name(), newValue); }; @@ -165,7 +160,7 @@ export function ShipSearch>( const onAdd = (ship: string) => { setFieldValue(name(), ship); inputIdx.current += 1; - arrayHelpers.push(""); + arrayHelpers.push(''); }; const onRemove = (idx: number) => { @@ -196,7 +191,7 @@ export function ShipSearch>( props.maxLength ? selected.length >= props.maxLength : false } search={(s: string, t: string) => - (t || "").toLowerCase().startsWith(s.toLowerCase()) + (t || '').toLowerCase().startsWith(s.toLowerCase()) } getKey={(s: string) => s} onChange={onChange} @@ -227,7 +222,7 @@ export function ShipSearch>( ))}
0}> - {error.join(", ")} + {error.join(', ')} ); diff --git a/pkg/interface/src/views/components/StatelessAsyncAction.tsx b/pkg/interface/src/views/components/StatelessAsyncAction.tsx index be46d4de13..68ab25f63a 100644 --- a/pkg/interface/src/views/components/StatelessAsyncAction.tsx +++ b/pkg/interface/src/views/components/StatelessAsyncAction.tsx @@ -1,7 +1,7 @@ -import React, { ReactNode } from "react"; +import React, { ReactNode } from 'react'; import { useStatelessAsyncClickable } from '~/logic/lib/useStatelessAsyncClickable'; -import { LoadingSpinner, Action } from "@tlon/indigo-react"; +import { LoadingSpinner, Action } from '@tlon/indigo-react'; interface AsyncActionProps { children: ReactNode; @@ -19,7 +19,7 @@ export function StatelessAsyncAction({ }: AsyncActionProps & Parameters[0]) { const { onClick: handleClick, - buttonState: state, + buttonState: state } = useStatelessAsyncClickable(onClick, name); return ( @@ -27,16 +27,17 @@ export function StatelessAsyncAction({ height="18px" hideDisabled={!disabled} disabled={disabled || state === 'loading'} - onClick={handleClick} {...rest}> - {state === "error" ? ( - "Error" - ) : state === "loading" ? ( + onClick={handleClick} {...rest} + > + {state === 'error' ? ( + 'Error' + ) : state === 'loading' ? ( - ) : state === "success" ? ( - "Done" + ) : state === 'success' ? ( + 'Done' ) : ( children )} diff --git a/pkg/interface/src/views/components/StatelessAsyncButton.tsx b/pkg/interface/src/views/components/StatelessAsyncButton.tsx index faf933ed34..68c27d2263 100644 --- a/pkg/interface/src/views/components/StatelessAsyncButton.tsx +++ b/pkg/interface/src/views/components/StatelessAsyncButton.tsx @@ -1,9 +1,8 @@ -import React, { ReactNode, useState, useEffect, useCallback } from "react"; +import React, { ReactElement, ReactNode } from 'react'; -import { Button, LoadingSpinner } from "@tlon/indigo-react"; -import { useFormikContext } from "formik"; +import { Button, LoadingSpinner } from '@tlon/indigo-react'; -import { useStatelessAsyncClickable } from "~/logic/lib/useStatelessAsyncClickable"; +import { useStatelessAsyncClickable } from '~/logic/lib/useStatelessAsyncClickable'; interface AsyncButtonProps { children: ReactNode; @@ -14,33 +13,33 @@ interface AsyncButtonProps { export function StatelessAsyncButton({ children, onClick, - name = "", + name = '', disabled = false, ...rest -}: AsyncButtonProps & Parameters[0]) { +}: AsyncButtonProps & Parameters[0]): ReactElement { const { onClick: handleClick, - buttonState: state, + buttonState: state } = useStatelessAsyncClickable(onClick, name); return ( - + { isAdmin && ( diff --git a/pkg/interface/src/views/landscape/components/GroupSettings/Personal.tsx b/pkg/interface/src/views/landscape/components/GroupSettings/Personal.tsx index 5d262d6b28..8f14a4ba64 100644 --- a/pkg/interface/src/views/landscape/components/GroupSettings/Personal.tsx +++ b/pkg/interface/src/views/landscape/components/GroupSettings/Personal.tsx @@ -1,41 +1,22 @@ -import React, { useCallback } from "react"; +import React from 'react'; -import { AsyncButton } from "~/views/components/AsyncButton"; -import * as Yup from "yup"; import { - Box, - ManagedTextInputField as Input, - ManagedToggleSwitchField as Toggle, Col, Label, - Button, - LoadingSpinner, BaseLabel, - Anchor, BaseAnchor -} from "@tlon/indigo-react"; -import { Group, GroupPolicy } from "~/types/group-update"; -import { Enc } from "~/types/noun"; -import { Association } from "~/types/metadata-update"; -import GlobalApi from "~/logic/api/global"; -import { resourceFromPath, roleForShip } from "~/logic/lib/group"; -import { StatelessAsyncButton } from "~/views/components/StatelessAsyncButton"; -import { ColorInput } from "~/views/components/ColorInput"; -import { useHistory } from "react-router-dom"; - -import { uxToHex } from "~/logic/lib/util"; -import { FormikOnBlur } from "~/views/components/FormikOnBlur"; -import {GroupNotificationsConfig} from "~/types"; -import {StatelessAsyncToggle} from "~/views/components/StatelessAsyncToggle"; - +} from '@tlon/indigo-react'; +import { GroupNotificationsConfig } from '@urbit/api'; +import { Association } from '@urbit/api/metadata'; +import GlobalApi from '~/logic/api/global'; +import { StatelessAsyncToggle } from '~/views/components/StatelessAsyncToggle'; export function GroupPersonalSettings(props: { api: GlobalApi; association: Association; notificationsGroupConfig: GroupNotificationsConfig; }) { - const groupPath = props.association.group; const watching = props.notificationsGroupConfig.findIndex(g => g === groupPath) !== -1; @@ -48,7 +29,7 @@ export function GroupPersonalSettings(props: { return ( Group Notifications - ) { +export function GroupSummary(props: GroupSummaryProps & PropFunc): ReactElement { const { channelCount, memberCount, metadata, resource, children, ...rest } = props; const anchorRef = useRef(null); useTutorialModal( - "group-desc", + 'group-desc', resource === `/ship/${TUTORIAL_HOST}/${TUTORIAL_GROUP}`, anchorRef.current ); @@ -39,7 +39,8 @@ export function GroupSummary(props: GroupSummaryProps & PropFunc) { fontSize="1" textOverflow="ellipsis" whiteSpace="nowrap" - overflow="hidden">{metadata.title} + overflow="hidden" + >{metadata.title} {memberCount} participants @@ -57,7 +58,8 @@ export function GroupSummary(props: GroupSummaryProps & PropFunc) { width="100%" fontSize="1" textOverflow="ellipsis" - overflow="hidden"> + overflow="hidden" + > {metadata.description} } diff --git a/pkg/interface/src/views/landscape/components/GroupSwitcher.tsx b/pkg/interface/src/views/landscape/components/GroupSwitcher.tsx index 769963f984..91926e00fd 100644 --- a/pkg/interface/src/views/landscape/components/GroupSwitcher.tsx +++ b/pkg/interface/src/views/landscape/components/GroupSwitcher.tsx @@ -9,11 +9,11 @@ import { import { uxToHex } from '~/logic/lib/util'; import { Link } from 'react-router-dom'; -import { Associations } from '~/types/metadata-update'; +import { Associations } from '@urbit/api/metadata'; import { Dropdown } from '~/views/components/Dropdown'; -import { Workspace } from '~/types'; import { getTitleFromWorkspace } from '~/logic/lib/workspace'; -import {MetadataIcon} from './MetadataIcon'; +import { MetadataIcon } from './MetadataIcon'; +import { Workspace } from '~/types/workspace'; const GroupSwitcherItem = ({ to, children, bottom = false, ...rest }) => ( @@ -93,7 +93,8 @@ export function GroupSwitcher(props: { top="0px" pl='3' borderBottom='1px solid' - borderColor='washedGray'> + borderColor='washedGray' + > ( - "recent-groups", + 'recent-groups', [] ); useEffect(() => { - if (workspace.type !== "group") { + if (workspace.type !== 'group') { return; } - setRecentGroups((gs) => _.uniq([workspace.group, ...gs])); + setRecentGroups(gs => _.uniq([workspace.group, ...gs])); }, [workspace]); if (!(associations && (groupPath ? groupPath in groups : true))) { @@ -75,7 +74,7 @@ export function GroupsPane(props: GroupsPaneProps) { {...routeProps} baseUrl={baseUrl} - />)} + />)} - ) + ); return ( { const { app, host, name } = routeProps.match.params as Record< string, @@ -100,7 +99,7 @@ export function GroupsPane(props: GroupsPaneProps) { const appName = app as AppName; const resource = `/ship/${host}/${name}`; - const association = associations.graph[resource] + const association = associations.graph[resource]; const resourceUrl = `${baseUrl}/resource/${app}${resource}`; if (!association) { @@ -128,7 +127,7 @@ export function GroupsPane(props: GroupsPaneProps) { }} /> { const { app, host, name } = routeProps.match.params; const appPath = `/ship/${host}/${name}`; @@ -168,7 +167,7 @@ export function GroupsPane(props: GroupsPaneProps) { }} /> { const newUrl = `${baseUrl}/new`; return ( @@ -189,10 +188,10 @@ export function GroupsPane(props: GroupsPaneProps) { }} /> { const hasDescription = groupAssociation?.metadata?.description; - const channelCount = Object.keys(props?.associations?.graph ?? {}).filter(e => { + const channelCount = Object.keys(props?.associations?.graph ?? {}).filter((e) => { return props?.associations?.graph?.[e]?.['group'] === groupPath; }).length; let summary: ReactNode; @@ -203,13 +202,11 @@ export function GroupsPane(props: GroupsPaneProps) { channelCount={channelCount} metadata={groupAssociation.metadata} resource={groupAssociation.group} - /> + />; } else { summary = ( Create or select a channel to get started ); - - } const title = groupAssociation?.metadata?.title ?? 'Landscape'; return ( @@ -221,7 +218,7 @@ export function GroupsPane(props: GroupsPaneProps) { {summary} diff --git a/pkg/interface/src/views/landscape/components/InvitePopover.tsx b/pkg/interface/src/views/landscape/components/InvitePopover.tsx index 72dc13d93b..de02b7588e 100644 --- a/pkg/interface/src/views/landscape/components/InvitePopover.tsx +++ b/pkg/interface/src/views/landscape/components/InvitePopover.tsx @@ -1,26 +1,26 @@ -import React, { useCallback, useRef, useMemo } from "react"; +import React, { useCallback, useRef } from 'react'; import _ from 'lodash'; -import { Switch, Route, useHistory } from "react-router-dom"; -import { Formik, Form } from "formik"; +import { Switch, Route, useHistory } from 'react-router-dom'; +import { Formik, Form } from 'formik'; import * as Yup from 'yup'; import { ManagedTextInputField as Input, Box, Text, Col, - Button, Row -} from "@tlon/indigo-react"; +} from '@tlon/indigo-react'; -import { ShipSearch } from "~/views/components/ShipSearch"; -import { Association } from "~/types/metadata-update"; -import { AsyncButton } from "~/views/components/AsyncButton"; -import { useOutsideClick } from "~/logic/lib/useOutsideClick"; -import { FormError } from "~/views/components/FormError"; -import { resourceFromPath } from "~/logic/lib/group"; -import GlobalApi from "~/logic/api/global"; -import { Groups, Rolodex, Workspace } from "~/types"; -import { deSig } from "~/logic/lib/util"; +import { ShipSearch } from '~/views/components/ShipSearch'; +import { Association } from '@urbit/api/metadata'; +import { AsyncButton } from '~/views/components/AsyncButton'; +import { useOutsideClick } from '~/logic/lib/useOutsideClick'; +import { FormError } from '~/views/components/FormError'; +import { resourceFromPath } from '~/logic/lib/group'; +import GlobalApi from '~/logic/api/global'; +import { Groups, Rolodex } from '@urbit/api'; +import { deSig } from '~/logic/lib/util'; +import { Workspace } from '~/types/workspace'; interface InvitePopoverProps { baseUrl: string; @@ -38,15 +38,15 @@ interface FormSchema { } const formSchema = Yup.object({ - emails: Yup.array(Yup.string().email("Invalid email")), - ships: Yup.array(Yup.string()).min(1, "Must invite at least one ship") + emails: Yup.array(Yup.string().email('Invalid email')), + ships: Yup.array(Yup.string()).min(1, 'Must invite at least one ship') }); export function InvitePopover(props: InvitePopoverProps) { const { baseUrl, api, association } = props; const relativePath = (p: string) => baseUrl + p; - const { title } = association?.metadata || ""; + const { title } = association?.metadata || ''; const innerRef = useRef(null); const history = useHistory(); @@ -75,10 +75,9 @@ export function InvitePopover(props: InvitePopoverProps) { const initialValues: FormSchema = { ships: [], emails: [], description: '' }; - return ( - + { + .required('Must provide group to join') + .test('is-valid', 'Invalid group', (group: string | null | undefined) => { if (!group) { return false; } - const [patp, name] = group.split("/"); + const [patp, name] = group.split('/'); return urbitOb.isValidPatp(patp) && name.length > 0; - }), + }) }); interface FormSchema { @@ -60,17 +58,16 @@ function Autojoin(props: { autojoin: string | null }) { return null; } -export function JoinGroup(props: JoinGroupProps) { +export function JoinGroup(props: JoinGroupProps): ReactElement { const { api, autojoin, associations, groups } = props; const history = useHistory(); const initialValues: FormSchema = { - group: autojoin || "", + group: autojoin || '' }; const [preview, setPreview] = useState< MetadataUpdatePreview | string | null >(null); - const waiter = useWaitForProps(props, _.isString(preview) ? 1 : 5000); const onConfirm = useCallback(async (group: string) => { @@ -78,9 +75,9 @@ export function JoinGroup(props: JoinGroupProps) { await api.groups.join(ship, name); try { await waiter((p: JoinGroupProps) => { - return group in p.groups && + return group in p.groups && (group in (p.associations?.graph ?? {}) - || group in (p.associations?.groups ?? {})) + || group in (p.associations?.groups ?? {})); }); if(props.groups?.[group]?.hidden) { @@ -98,7 +95,7 @@ export function JoinGroup(props: JoinGroupProps) { const onSubmit = useCallback( async (values: FormSchema, actions: FormikHelpers) => { - const [ship, name] = values.group.split("/"); + const [ship, name] = values.group.split('/'); const path = `/ship/${ship}/${name}`; // skip if it's unmanaged try { @@ -107,13 +104,13 @@ export function JoinGroup(props: JoinGroupProps) { setPreview(prev); } catch (e) { if (!(e instanceof Error)) { - actions.setStatus({ error: "Unknown error" }); - } else if (e.message === "no-permissions") { + actions.setStatus({ error: 'Unknown error' }); + } else if (e.message === 'no-permissions') { actions.setStatus({ error: - "Unable to join group, you do not have the correct permissions", + 'Unable to join group, you do not have the correct permissions' }); - } else if (e.message === "offline") { + } else if (e.message === 'offline') { setPreview(path); } } @@ -131,8 +128,8 @@ export function JoinGroup(props: JoinGroupProps) { {_.isString(preview) ? ( The host appears to be offline. Join anyway? - onConfirm(preview)} > @@ -173,7 +170,7 @@ export function JoinGroup(props: JoinGroupProps) { )} - onConfirm(preview.group)} @@ -188,7 +185,7 @@ export function JoinGroup(props: JoinGroupProps) { initialValues={initialValues} onSubmit={onSubmit} > - + & { metadata: Metadata; diff --git a/pkg/interface/src/views/landscape/components/NewChannel.tsx b/pkg/interface/src/views/landscape/components/NewChannel.tsx index deff848358..4560299102 100644 --- a/pkg/interface/src/views/landscape/components/NewChannel.tsx +++ b/pkg/interface/src/views/landscape/components/NewChannel.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { ReactElement } from 'react'; import { Box, ManagedTextInputField as Input, @@ -14,13 +14,14 @@ import { FormError } from '~/views/components/FormError'; import { RouteComponentProps } from 'react-router-dom'; import { stringToSymbol, parentPath, deSig } from '~/logic/lib/util'; import { resourceFromPath } from '~/logic/lib/group'; -import { Associations } from '~/types/metadata-update'; +import { Associations } from '@urbit/api/metadata'; import { useWaitForProps } from '~/logic/lib/useWaitForProps'; -import { Groups } from '~/types/group-update'; +import { Groups } from '@urbit/api/groups'; import { ShipSearch, shipSearchSchemaInGroup, shipSearchSchema } from '~/views/components/ShipSearch'; -import { Rolodex, Workspace } from '~/types'; +import { Rolodex } from '@urbit/api'; import { IconRadio } from '~/views/components/IconRadio'; import { ChannelWriteFieldSchema, ChannelWritePerms } from './ChannelWritePerms'; +import { Workspace } from '~/types/workspace'; type FormSchema = { name: string; @@ -47,7 +48,7 @@ interface NewChannelProps { workspace: Workspace; } -export function NewChannel(props: NewChannelProps & RouteComponentProps) { +export function NewChannel(props: NewChannelProps & RouteComponentProps): ReactElement { const { history, api, group, workspace, groups } = props; const waiter = useWaitForProps(props, 5000); @@ -59,7 +60,7 @@ export function NewChannel(props: NewChannelProps & RouteComponentProps) { : ''); try { let { description, moduleType, ships, writers } = values; - ships = ships.filter(e => e !== ""); + ships = ships.filter(e => e !== ''); if (workspace?.type === 'messages' && ships.length === 1) { return history.push(`/~landscape/dm/${deSig(ships[0])}`); } @@ -138,7 +139,7 @@ export function NewChannel(props: NewChannelProps & RouteComponentProps) { maxWidth="348px" gapY="4" > - + Channel Type = isPrivate ? { invite: { - pending: [], - }, + pending: [] + } } : { open: { banRanks: [], - banned: [], - }, + banned: [] + } }; await api.groups.create(name, policy, title, description); const path = `/ship/~${window.ship}/${name}`; diff --git a/pkg/interface/src/views/landscape/components/Participants.tsx b/pkg/interface/src/views/landscape/components/Participants.tsx index dabea1845b..d39a8bace1 100644 --- a/pkg/interface/src/views/landscape/components/Participants.tsx +++ b/pkg/interface/src/views/landscape/components/Participants.tsx @@ -2,7 +2,6 @@ import React, { useState, useMemo, useCallback, - SyntheticEvent, ChangeEvent } from 'react'; import { @@ -11,26 +10,25 @@ import { Row, Text, Icon, - Center, - Button, Action, StatelessTextInput as Input } from '@tlon/indigo-react'; import _ from 'lodash'; import f from 'lodash/fp'; import VisibilitySensor from 'react-visibility-sensor'; +import styled from 'styled-components'; +import { Link } from 'react-router-dom'; + +import { Contact, Contacts } from '@urbit/api/contacts'; +import { Group, RoleTags } from '@urbit/api/groups'; +import { Association } from '@urbit/api/metadata'; -import { Contact, Contacts } from '~/types/contact-update'; import { Sigil } from '~/logic/lib/sigil'; import { cite, uxToHex } from '~/logic/lib/util'; -import { Group, RoleTags } from '~/types/group-update'; import { roleForShip, resourceFromPath } from '~/logic/lib/group'; -import { Association } from '~/types/metadata-update'; -import { useHistory, Link } from 'react-router-dom'; import { Dropdown } from '~/views/components/Dropdown'; import GlobalApi from '~/logic/api/global'; import { StatelessAsyncAction } from '~/views/components/StatelessAsyncAction'; -import styled from 'styled-components'; import useLocalState from '~/logic/state/local'; const TruncText = styled(Box)` @@ -105,7 +103,7 @@ export function Participants(props: { group: Group; association: Association; api: GlobalApi; -}) { +}): ReactElement { const { api } = props; const tabFilters: Record< ParticipantsTabId, diff --git a/pkg/interface/src/views/landscape/components/PopoverRoutes.tsx b/pkg/interface/src/views/landscape/components/PopoverRoutes.tsx index 4c18d93c0d..f457428bdb 100644 --- a/pkg/interface/src/views/landscape/components/PopoverRoutes.tsx +++ b/pkg/interface/src/views/landscape/components/PopoverRoutes.tsx @@ -1,20 +1,21 @@ -import React, { useRef, useCallback } from "react"; -import { Route, Switch, RouteComponentProps, Link } from "react-router-dom"; -import { Box, Row, Col, Icon, Text } from "@tlon/indigo-react"; -import { HoverBoxLink } from "~/views/components/HoverBox"; -import { Contacts, Contact } from "~/types/contact-update"; -import { Group } from "~/types/group-update"; -import { Association } from "~/types/metadata-update"; -import GlobalApi from "~/logic/api/global"; -import { GroupNotificationsConfig, S3State, Associations } from "~/types"; +import React, { useRef, useCallback, ReactElement } from 'react'; +import { Route, Switch, RouteComponentProps, Link } from 'react-router-dom'; +import { Box, Col, Text } from '@tlon/indigo-react'; -import { GroupSettings } from "./GroupSettings/GroupSettings"; -import { Participants } from "./Participants"; -import {useHashLink} from "~/logic/lib/useHashLink"; -import {DeleteGroup} from "./DeleteGroup"; -import {resourceFromPath} from "~/logic/lib/group"; -import {ModalOverlay} from "~/views/components/ModalOverlay"; -import { SidebarItem } from "~/views/landscape/components/SidebarItem"; +import { GroupNotificationsConfig, Associations } from '@urbit/api'; +import { Contacts, Contact } from '@urbit/api/contacts'; +import { Group } from '@urbit/api/groups'; +import { Association } from '@urbit/api/metadata'; + +import GlobalApi from '~/logic/api/global'; +import { GroupSettings } from './GroupSettings/GroupSettings'; +import { Participants } from './Participants'; +import { useHashLink } from '~/logic/lib/useHashLink'; +import { DeleteGroup } from './DeleteGroup'; +import { resourceFromPath } from '~/logic/lib/group'; +import { ModalOverlay } from '~/views/components/ModalOverlay'; +import { SidebarItem } from '~/views/landscape/components/SidebarItem'; +import { S3State } from '~/types'; export function PopoverRoutes( props: { @@ -28,7 +29,7 @@ export function PopoverRoutes( notificationsGroupConfig: GroupNotificationsConfig; rootIdentity: Contact; } & RouteComponentProps -) { +): ReactElement { const relativeUrl = (url: string) => `${props.baseUrl}/popover${url}`; const innerRef = useRef(null); @@ -47,7 +48,7 @@ export function PopoverRoutes( return ( { const { view } = routeProps.match.params; return ( @@ -64,13 +65,13 @@ export function PopoverRoutes( > @@ -79,14 +80,14 @@ export function PopoverRoutes( Group {groupSize} { admin && ( @@ -96,12 +97,12 @@ export function PopoverRoutes( @@ -110,16 +111,16 @@ export function PopoverRoutes( - - {"<- Back"} + + {'<- Back'} - {view === "settings" && ( + {view === 'settings' && ( )} - {view === "participants" && ( + {view === 'participants' && ( @@ -48,11 +39,11 @@ export function Resource(props: ResourceProps) { - {app === "chat" ? ( + {app === 'chat' ? ( - ) : app === "publish" ? ( + ) : app === 'publish' ? ( ) : ( @@ -60,7 +51,7 @@ export function Resource(props: ResourceProps) { { return ( diff --git a/pkg/interface/src/views/landscape/components/ResourceSkeleton.tsx b/pkg/interface/src/views/landscape/components/ResourceSkeleton.tsx index 63bc35f86a..43750dd5d6 100644 --- a/pkg/interface/src/views/landscape/components/ResourceSkeleton.tsx +++ b/pkg/interface/src/views/landscape/components/ResourceSkeleton.tsx @@ -1,21 +1,15 @@ -import React, { ReactNode } from "react"; -import { Row, Icon, Box, Col, Text } from "@tlon/indigo-react"; -import styled from "styled-components"; -import { Link } from "react-router-dom"; - -import { ChatResource } from "~/views/apps/chat/ChatResource"; -import { PublishResource } from "~/views/apps/publish/PublishResource"; - -import RichText from "~/views/components/RichText"; - -import { Association } from "~/types/metadata-update"; -import GlobalApi from "~/logic/api/global"; -import { RouteComponentProps, Route, Switch } from "react-router-dom"; -import { ChannelSettings } from "./ChannelSettings"; -import { ChannelMenu } from "./ChannelMenu"; -import { NotificationGraphConfig, Groups } from "~/types"; -import {isWriter} from "~/logic/lib/group"; +import React, { ReactElement, ReactNode } from 'react'; +import { Icon, Box, Col, Text } from '@tlon/indigo-react'; +import styled from 'styled-components'; +import { Link } from 'react-router-dom'; import urbitOb from 'urbit-ob'; + +import { Association } from '@urbit/api/metadata'; +import { Groups, Rolodex } from '@urbit/api'; + +import RichText from '~/views/components/RichText'; +import GlobalApi from '~/logic/api/global'; +import { isWriter } from '~/logic/lib/group'; import { getItemTitle } from '~/logic/lib/util'; const TruncatedBox = styled(Box)` @@ -26,7 +20,7 @@ const TruncatedBox = styled(Box)` type ResourceSkeletonProps = { groups: Groups; - contacts: any; + contacts: Rolodex; association: Association; api: GlobalApi; baseUrl: string; @@ -35,20 +29,20 @@ type ResourceSkeletonProps = { groupTags?: any; }; -export function ResourceSkeleton(props: ResourceSkeletonProps) { - const { association, api, baseUrl, children, atRoot, groups } = props; - const app = association?.metadata?.module || association["app-name"]; +export function ResourceSkeleton(props: ResourceSkeletonProps): ReactElement { + const { association, baseUrl, children, groups } = props; + const app = association?.metadata?.module || association['app-name']; const rid = association.resource; const group = groups[association.group]; let workspace = association.group; - if (group?.hidden && app === "chat") { - workspace = "/messages"; + if (group?.hidden && app === 'chat') { + workspace = '/messages'; } else if (group?.hidden) { - workspace = "/home"; + workspace = '/home'; } - let title = (workspace === "/messages") + let title = (workspace === '/messages') ? getItemTitle(association) : association?.metadata?.title; @@ -59,7 +53,7 @@ export function ResourceSkeleton(props: ResourceSkeletonProps) { title = (props.contacts?.[title]?.nickname) ? props.contacts[title].nickname : title; } - const [, , ship, resource] = rid.split("/"); + const [, , ship, resource] = rid.split('/'); const resourcePath = (p: string) => baseUrl + p; @@ -89,10 +83,10 @@ export function ResourceSkeleton(props: ResourceSkeletonProps) { fontSize='1' mr={3} my="1" - display={["block", "none"]} + display={['block', 'none']} flexShrink={0} > - {"<- Back"} + {'<- Back'} + minWidth={0} + > {title} - {(workspace === "/messages") ? recipient : association?.metadata?.description} + {(workspace === '/messages') ? recipient : association?.metadata?.description} diff --git a/pkg/interface/src/views/landscape/components/Sidebar/Apps.tsx b/pkg/interface/src/views/landscape/components/Sidebar/Apps.tsx index d56236ad00..fd32f998ad 100644 --- a/pkg/interface/src/views/landscape/components/Sidebar/Apps.tsx +++ b/pkg/interface/src/views/landscape/components/Sidebar/Apps.tsx @@ -1,8 +1,8 @@ -import { useEffect, useCallback } from "react"; -import { Graphs, UnreadStats } from "~/types"; -import { SidebarItemStatus, SidebarAppConfig } from "./types"; +import { useCallback } from 'react'; +import { Graphs, UnreadStats } from '@urbit/api'; +import { SidebarAppConfig } from './types'; export function useGraphModule( graphKeys: Set, @@ -11,10 +11,10 @@ export function useGraphModule( ): SidebarAppConfig { const getStatus = useCallback( (s: string) => { - const [, , host, name] = s.split("/"); + const [, , host, name] = s.split('/'); const graphKey = `${host.slice(1)}/${name}`; if (!graphKeys.has(graphKey)) { - return "unsubscribed"; + return 'unsubscribed'; } const unreads = graphUnreads?.[s]?.['/']?.unreads; @@ -38,7 +38,6 @@ export function useGraphModule( return 0; } return 1; - }, [getStatus, graphUnreads]); return { getStatus, lastUpdated }; diff --git a/pkg/interface/src/views/landscape/components/Sidebar/Sidebar.tsx b/pkg/interface/src/views/landscape/components/Sidebar/Sidebar.tsx index 7cd0e2dcb2..1ec0a32344 100644 --- a/pkg/interface/src/views/landscape/components/Sidebar/Sidebar.tsx +++ b/pkg/interface/src/views/landscape/components/Sidebar/Sidebar.tsx @@ -1,4 +1,4 @@ -import React, { ReactNode, useRef } from 'react'; +import React, { ReactElement, ReactNode, useRef } from 'react'; import styled from 'styled-components'; import { Col @@ -12,14 +12,14 @@ import { Groups, Invites, Rolodex -} from '~/types'; +} from '@urbit/api'; import { SidebarListHeader } from './SidebarListHeader'; import { useLocalStorageState } from '~/logic/lib/useLocalStorageState'; import { getGroupFromWorkspace } from '~/logic/lib/workspace'; import { SidebarAppConfigs } from './types'; import { SidebarList } from './SidebarList'; import { roleForShip } from '~/logic/lib/group'; -import {useTutorialModal} from '~/views/components/useTutorialModal'; +import { useTutorialModal } from '~/views/components/useTutorialModal'; const ScrollbarLessCol = styled(Col)` scrollbar-width: none !important; @@ -46,7 +46,7 @@ interface SidebarProps { workspace: Workspace; } -export function Sidebar(props: SidebarProps) { +export function Sidebar(props: SidebarProps): ReactElement { const { associations, selected, workspace } = props; const groupPath = getGroupFromWorkspace(workspace); const display = props.mobileHide ? ['none', 'flex'] : 'flex'; diff --git a/pkg/interface/src/views/landscape/components/Sidebar/SidebarItem.tsx b/pkg/interface/src/views/landscape/components/Sidebar/SidebarItem.tsx index b42b345bb7..6557edd75e 100644 --- a/pkg/interface/src/views/landscape/components/Sidebar/SidebarItem.tsx +++ b/pkg/interface/src/views/landscape/components/Sidebar/SidebarItem.tsx @@ -1,26 +1,26 @@ -import React, {useRef} from "react"; -import _ from 'lodash'; - -import { Icon, Row, Box, Text, BaseImage } from "@tlon/indigo-react"; - -import { SidebarAppConfigs, SidebarItemStatus } from "./Sidebar"; -import { HoverBoxLink } from "~/views/components/HoverBox"; -import { Groups, Association } from "~/types"; -import { Sigil } from '~/logic/lib/sigil'; +import React, { ReactElement, useRef } from 'react'; import urbitOb from 'urbit-ob'; -import { getModuleIcon, getItemTitle, uxToHex } from "~/logic/lib/util"; -import {useTutorialModal} from "~/views/components/useTutorialModal"; -import {TUTORIAL_HOST, TUTORIAL_GROUP} from "~/logic/lib/tutorialModal"; + +import { Icon, Row, Box, Text, BaseImage } from '@tlon/indigo-react'; +import { Groups, Association, Rolodex } from '@urbit/api'; + +import { HoverBoxLink } from '~/views/components/HoverBox'; +import { Sigil } from '~/logic/lib/sigil'; +import { getModuleIcon, getItemTitle, uxToHex } from '~/logic/lib/util'; +import { useTutorialModal } from '~/views/components/useTutorialModal'; +import { TUTORIAL_HOST, TUTORIAL_GROUP } from '~/logic/lib/tutorialModal'; +import { SidebarAppConfigs, SidebarItemStatus } from './types'; +import { Workspace } from '~/types/workspace'; function SidebarItemIndicator(props: { status?: SidebarItemStatus }) { switch (props.status) { - case "disconnected": + case 'disconnected': return ; - case "unsubscribed": + case 'unsubscribed': return ; - case "mention": + case 'mention': return ; - case "loading": + case 'loading': return ; default: return null; @@ -30,20 +30,20 @@ function SidebarItemIndicator(props: { status?: SidebarItemStatus }) { export function SidebarItem(props: { hideUnjoined: boolean; association: Association; - contacts: any; + contacts: Rolodex; groups: Groups; path: string; selected: boolean; apps: SidebarAppConfigs; workspace: Workspace; -}) { +}): ReactElement { const { association, path, selected, apps, groups } = props; let title = getItemTitle(association); - const appName = association?.["app-name"]; + const appName = association?.['app-name']; const mod = association?.metadata?.module || appName; - const rid = association?.resource + const rid = association?.resource; const groupPath = association?.group; - const anchorRef = useRef(null) + const anchorRef = useRef(null); useTutorialModal( mod as any, groupPath === `/ship/${TUTORIAL_HOST}/${TUTORIAL_GROUP}`, @@ -54,11 +54,11 @@ export function SidebarItem(props: { if (!app) { return null; } - const DM = (isUnmanaged && props.workspace?.type === "messages"); + const DM = (isUnmanaged && props.workspace?.type === 'messages'); const itemStatus = app.getStatus(path); - const hasUnread = itemStatus === "unread" || itemStatus === "mention"; + const hasUnread = itemStatus === 'unread' || itemStatus === 'mention'; - const isSynced = itemStatus !== "unsubscribed"; + const isSynced = itemStatus !== 'unsubscribed'; let baseUrl = `/~landscape${groupPath}`; @@ -72,7 +72,7 @@ export function SidebarItem(props: { ? `${baseUrl}/resource/${mod}${rid}` : `${baseUrl}/join/${mod}${rid}`; - const color = selected ? "black" : isSynced ? "gray" : "lightGray"; + const color = selected ? 'black' : isSynced ? 'gray' : 'lightGray'; if (props.hideUnjoined && !isSynced) { return null; @@ -82,15 +82,15 @@ export function SidebarItem(props: { if (urbitOb.isValidPatp(title)) { if (props.contacts?.[title] && props.contacts[title].avatar) { - img = ; + img = ; } else { - img = + img = ; } if (props.contacts?.[title] && props.contacts[title].nickname) { title = props.contacts[title].nickname; } } else { - img = + img = ; } return ( @@ -125,9 +125,9 @@ export function SidebarItem(props: { overflow='hidden' width='100%' mono={urbitOb.isValidPatp(title)} - fontWeight={hasUnread ? "bold" : "regular"} - color={selected || isSynced ? "black" : "lightGray"} - style={{ textOverflow: 'ellipsis', whiteSpace: 'pre'}} + fontWeight={hasUnread ? 'bold' : 'regular'} + color={selected || isSynced ? 'black' : 'lightGray'} + style={{ textOverflow: 'ellipsis', whiteSpace: 'pre' }} > {title} diff --git a/pkg/interface/src/views/landscape/components/Sidebar/SidebarList.tsx b/pkg/interface/src/views/landscape/components/Sidebar/SidebarList.tsx index 25af63bff7..8264b5d303 100644 --- a/pkg/interface/src/views/landscape/components/Sidebar/SidebarList.tsx +++ b/pkg/interface/src/views/landscape/components/Sidebar/SidebarList.tsx @@ -1,8 +1,10 @@ -import React, { useMemo } from "react"; -import { alphabeticalOrder } from "~/logic/lib/util"; -import { Associations, AppAssociations, Workspace, Groups } from "~/types"; -import { SidebarAppConfigs, SidebarListConfig, SidebarSort } from "./types"; -import { SidebarItem } from "./SidebarItem"; +import React, { ReactElement } from 'react'; +import { Associations, AppAssociations, Groups, Rolodex } from '@urbit/api'; + +import { alphabeticalOrder } from '~/logic/lib/util'; +import { SidebarAppConfigs, SidebarListConfig, SidebarSort } from './types'; +import { SidebarItem } from './SidebarItem'; +import { Workspace } from '~/types/workspace'; function sidebarSort( associations: AppAssociations, @@ -20,8 +22,8 @@ function sidebarSort( const lastUpdated = (a: string, b: string) => { const aAssoc = associations[a]; const bAssoc = associations[b]; - const aAppName = aAssoc?.["app-name"]; - const bAppName = bAssoc?.["app-name"]; + const aAppName = aAssoc?.['app-name']; + const bAppName = bAssoc?.['app-name']; const aUpdated = apps[aAppName]?.lastUpdated(a) || 0; const bUpdated = apps[bAppName]?.lastUpdated(b) || 0; @@ -37,7 +39,7 @@ function sidebarSort( export function SidebarList(props: { apps: SidebarAppConfigs; - contacts: any; + contacts: Rolodex; config: SidebarListConfig; associations: Associations; groups: Groups; @@ -45,7 +47,7 @@ export function SidebarList(props: { group?: string; selected?: string; workspace: Workspace; -}) { +}): ReactElement { const { selected, group, config, workspace } = props; const associations = { ...props.associations.graph }; @@ -53,11 +55,11 @@ export function SidebarList(props: { .filter((a) => { const assoc = associations[a]; if (workspace?.type === 'messages') { - return (!(assoc.group in props.associations.groups) && assoc.metadata.module === "chat"); + return (!(assoc.group in props.associations.groups) && assoc.metadata.module === 'chat'); } else { return group ? assoc.group === group - : (!(assoc.group in props.associations.groups) && assoc.metadata.module !== "chat"); + : (!(assoc.group in props.associations.groups) && assoc.metadata.module !== 'chat'); } }) .sort(sidebarSort(associations, props.apps)[config.sortBy]); diff --git a/pkg/interface/src/views/landscape/components/Sidebar/SidebarListHeader.tsx b/pkg/interface/src/views/landscape/components/Sidebar/SidebarListHeader.tsx index 66364ac663..d548ff4848 100644 --- a/pkg/interface/src/views/landscape/components/Sidebar/SidebarListHeader.tsx +++ b/pkg/interface/src/views/landscape/components/Sidebar/SidebarListHeader.tsx @@ -1,5 +1,7 @@ -import React, { useCallback } from "react"; -import * as Yup from "yup"; +import React, { ReactElement, useCallback } from 'react'; +import { FormikHelpers } from 'formik'; +import { Link } from 'react-router-dom'; + import { Row, Box, @@ -7,18 +9,18 @@ import { ManagedRadioButtonField as Radio, ManagedCheckboxField as Checkbox, Col, - Text, -} from "@tlon/indigo-react"; -import { FormikOnBlur } from "~/views/components/FormikOnBlur"; -import { Dropdown } from "~/views/components/Dropdown"; -import { FormikHelpers } from "formik"; -import { SidebarListConfig, Workspace } from "./types"; -import { Link, useHistory } from 'react-router-dom'; -import { getGroupFromWorkspace } from "~/logic/lib/workspace"; -import { roleForShip } from "~/logic/lib/group"; -import {Groups, Rolodex, Associations} from "~/types"; -import { NewChannel } from "~/views/landscape/components/NewChannel"; -import GlobalApi from "~/logic/api/global"; + Text +} from '@tlon/indigo-react'; +import { Groups, Rolodex, Associations } from '@urbit/api'; + +import { FormikOnBlur } from '~/views/components/FormikOnBlur'; +import { Dropdown } from '~/views/components/Dropdown'; +import { SidebarListConfig } from './types'; +import { getGroupFromWorkspace } from '~/logic/lib/workspace'; +import { roleForShip } from '~/logic/lib/group'; +import { NewChannel } from '~/views/landscape/components/NewChannel'; +import GlobalApi from '~/logic/api/global'; +import { Workspace } from '~/types/workspace'; export function SidebarListHeader(props: { api: GlobalApi; @@ -30,9 +32,7 @@ export function SidebarListHeader(props: { selected: string; workspace: Workspace; handleSubmit: (c: SidebarListConfig) => void; -}) { - - const history = useHistory(); +}): ReactElement { const onSubmit = useCallback( (values: SidebarListConfig, actions: FormikHelpers) => { props.handleSubmit(values); @@ -46,9 +46,9 @@ export function SidebarListHeader(props: { const memberMetadata = groupPath ? props.associations.contacts?.[groupPath].metadata.vip === 'member-metadata' : false; - const isAdmin = memberMetadata || (role === "admin") || (props.workspace?.type === 'home') || (props.workspace?.type === "messages"); + const isAdmin = memberMetadata || (role === 'admin') || (props.workspace?.type === 'home') || (props.workspace?.type === 'messages'); - const noun = (props.workspace?.type === "messages") ? "Messages" : "Channels"; + const noun = (props.workspace?.type === 'messages') ? 'Messages' : 'Channels'; return ( - {props.workspace?.type === "messages" + {props.workspace?.type === 'messages' ? ( } > - + ) : ( - + : `/~landscape/${props.workspace?.type}/new`} + > + ) } @@ -111,7 +112,7 @@ export function SidebarListHeader(props: { flexShrink='0' width="auto" alignY="top" - alignX={["right", "left"]} + alignX={['right', 'left']} options={ diff --git a/pkg/interface/src/views/landscape/components/Sidebar/types.ts b/pkg/interface/src/views/landscape/components/Sidebar/types.ts index 7cdc970e08..56ecda5512 100644 --- a/pkg/interface/src/views/landscape/components/Sidebar/types.ts +++ b/pkg/interface/src/views/landscape/components/Sidebar/types.ts @@ -1,11 +1,11 @@ export type SidebarItemStatus = - | "unread" - | "mention" - | "unsubscribed" - | "disconnected" - | "loading"; + | 'unread' + | 'mention' + | 'unsubscribed' + | 'disconnected' + | 'loading'; -export type SidebarSort = "asc" | "lastUpdated"; +export type SidebarSort = 'asc' | 'lastUpdated'; export interface SidebarListConfig { sortBy: SidebarSort; @@ -18,5 +18,5 @@ export interface SidebarAppConfig { } export type SidebarAppConfigs = { - [a in "chat" | "link" | "publish"]: SidebarAppConfig; + [a in 'chat' | 'link' | 'publish']: SidebarAppConfig; }; diff --git a/pkg/interface/src/views/landscape/components/SidebarItem.tsx b/pkg/interface/src/views/landscape/components/SidebarItem.tsx index 798d31e3eb..71aea2a020 100644 --- a/pkg/interface/src/views/landscape/components/SidebarItem.tsx +++ b/pkg/interface/src/views/landscape/components/SidebarItem.tsx @@ -1,8 +1,8 @@ -import React from "react"; -import { Row, Icon, Text } from "@tlon/indigo-react"; +import React from 'react'; +import { Row, Icon, Text } from '@tlon/indigo-react'; -import { IconRef, PropFunc } from "~/types/util"; -import { HoverBoxLink } from "~/views/components/HoverBox"; +import { IconRef, PropFunc } from '~/types/util'; +import { HoverBoxLink } from '~/views/components/HoverBox'; interface SidebarItemProps { selected?: boolean; @@ -11,17 +11,17 @@ interface SidebarItemProps { to: string; color?: string; children?: JSX.Element; -} +} export const SidebarItem = ({ icon, text, to, selected = false, - color = "black", + color = 'black', children, ...rest -}: SidebarItemProps & PropFunc) => { +}: SidebarItemProps & PropFunc): ReactElement => { return ( ; graphs: Graphs; linkListening: Set; - links: LinkCollections; - notebooks: Notebooks; invites: Invites; selected?: string; selectedApp?: AppName; @@ -33,10 +28,10 @@ interface SkeletonProps { subscription: GlobalSubscription; includeUnmanaged: boolean; workspace: Workspace; - unreads: any; + unreads: unknown; } -export function Skeleton(props: SkeletonProps) { +export function Skeleton(props: SkeletonProps): ReactElement { const graphConfig = useGraphModule(props.graphKeys, props.graphs, props.unreads.graph); const config = useMemo( () => ({ diff --git a/pkg/interface/src/views/landscape/components/TutorialModal.tsx b/pkg/interface/src/views/landscape/components/TutorialModal.tsx index 350287fc80..aa1c67618d 100644 --- a/pkg/interface/src/views/landscape/components/TutorialModal.tsx +++ b/pkg/interface/src/views/landscape/components/TutorialModal.tsx @@ -1,11 +1,11 @@ -import React, { useState, useEffect, useCallback } from "react"; +import React, { useState, useEffect, useCallback } from 'react'; import _ from 'lodash'; -import { Box, Col, Row, Button, Text, Icon, Action } from "@tlon/indigo-react"; -import { useHistory } from "react-router-dom"; -import { TutorialProgress, tutorialProgress as progress } from "~/types"; +import { Box, Col, Row, Button, Text, Icon } from '@tlon/indigo-react'; +import { useHistory } from 'react-router-dom'; +import { TutorialProgress, tutorialProgress as progress } from '~/types'; -import { Portal } from "~/views/components/Portal"; -import useLocalState, { selectLocalState } from "~/logic/state/local"; +import { Portal } from '~/views/components/Portal'; +import useLocalState, { selectLocalState } from '~/logic/state/local'; import { progressDetails, MODAL_HEIGHT_PX, @@ -14,21 +14,21 @@ import { MODAL_HEIGHT, TUTORIAL_HOST, TUTORIAL_GROUP, - getTrianglePosition, -} from "~/logic/lib/tutorialModal"; -import { getRelativePosition } from "~/logic/lib/relativePosition"; -import { StatelessAsyncButton } from "~/views/components/StatelessAsyncButton"; -import GlobalApi from "~/logic/api/global"; -import {Triangle} from "~/views/components/Triangle"; -import {ModalOverlay} from "~/views/components/ModalOverlay"; + getTrianglePosition +} from '~/logic/lib/tutorialModal'; +import { getRelativePosition } from '~/logic/lib/relativePosition'; +import { StatelessAsyncButton } from '~/views/components/StatelessAsyncButton'; +import GlobalApi from '~/logic/api/global'; +import { Triangle } from '~/views/components/Triangle'; +import { ModalOverlay } from '~/views/components/ModalOverlay'; const localSelector = selectLocalState([ - "tutorialProgress", - "nextTutStep", - "prevTutStep", - "tutorialRef", - "hideTutorial", - "set" + 'tutorialProgress', + 'nextTutStep', + 'prevTutStep', + 'tutorialRef', + 'hideTutorial', + 'set' ]); export function TutorialModal(props: { api: GlobalApi }) { @@ -47,7 +47,7 @@ export function TutorialModal(props: { api: GlobalApi }) { alignX, alignY, offsetX, - offsetY, + offsetY } = progressDetails[tutorialProgress]; const [coords, setCoords] = useState({}); @@ -56,7 +56,7 @@ export function TutorialModal(props: { api: GlobalApi }) { const history = useHistory(); const next = useCallback( () => { - const idx = progress.findIndex((p) => p === tutorialProgress); + const idx = progress.findIndex(p => p === tutorialProgress); const { url } = progressDetails[progress[idx + 1]]; nextTutStep(); history.push(url); @@ -64,7 +64,7 @@ export function TutorialModal(props: { api: GlobalApi }) { [nextTutStep, history, tutorialProgress, setCoords] ); const prev = useCallback(() => { - const idx = progress.findIndex((p) => p === tutorialProgress); + const idx = progress.findIndex(p => p === tutorialProgress); prevTutStep(); history.push(progressDetails[progress[idx - 1]].url); }, [prevTutStep, history, tutorialProgress]); @@ -94,7 +94,6 @@ export function TutorialModal(props: { api: GlobalApi }) { setCoords(withMobile); } else { setCoords({}); - } }, [tutorialRef]); @@ -115,12 +114,12 @@ export function TutorialModal(props: { api: GlobalApi }) { await props.api.groups.leaveGroup(TUTORIAL_HOST, TUTORIAL_GROUP); }, [props.api]); - const progressIdx = progress.findIndex((p) => p === tutorialProgress); + const progressIdx = progress.findIndex(p => p === tutorialProgress); useEffect(() => { if ( - tutorialProgress !== "hidden" && - tutorialProgress !== "done" && + tutorialProgress !== 'hidden' && + tutorialProgress !== 'done' && tutorialRef ) { const interval = setInterval(updatePos, 100); @@ -164,7 +163,7 @@ export function TutorialModal(props: { api: GlobalApi }) { ); } - if (tutorialProgress === "hidden") { + if (tutorialProgress === 'hidden') { return null; } @@ -191,11 +190,9 @@ export function TutorialModal(props: { api: GlobalApi }) { - ) - + ); } - if(Object.keys(coords).length === 0) { return null; } @@ -208,7 +205,7 @@ export function TutorialModal(props: { api: GlobalApi }) { bg="white" zIndex={50} height={MODAL_HEIGHT_PX} - width={["100%", MODAL_WIDTH_PX]} + width={['100%', MODAL_WIDTH_PX]} borderRadius="2" > - - + - + {description} { progressIdx > 1 && ( diff --git a/pkg/interface/src/views/landscape/index.tsx b/pkg/interface/src/views/landscape/index.tsx index b04e3892dc..92e7aeade4 100644 --- a/pkg/interface/src/views/landscape/index.tsx +++ b/pkg/interface/src/views/landscape/index.tsx @@ -1,14 +1,13 @@ -import React, { Component, useEffect, useCallback } from 'react'; +import React, { Component, useEffect, useCallback, ReactElement } from 'react'; import { Route, Switch, RouteComponentProps } from 'react-router-dom'; import Helmet from 'react-helmet'; import './css/custom.css'; -import { PatpNoSig } from '~/types/noun'; +import { PatpNoSig } from '@urbit/api'; import GlobalApi from '~/logic/api/global'; import { StoreState } from '~/logic/store/type'; import { GroupsPane } from './components/GroupsPane'; -import { Workspace } from '~/types'; import { NewGroup } from './components/NewGroup'; import { JoinGroup } from './components/JoinGroup'; @@ -16,7 +15,8 @@ import { cite } from '~/logic/lib/util'; import { Body } from '../components/Body'; import { Box } from '@tlon/indigo-react'; import { Loading } from '../components/Loading'; - +import { Workspace } from '~/types/workspace'; +import GlobalSubscription from '~/logic/subscription/global'; type LandscapeProps = StoreState & { ship: PatpNoSig; @@ -24,7 +24,7 @@ type LandscapeProps = StoreState & { subscription: GlobalSubscription; } -export function DMRedirect(props: LandscapeProps & RouteComponentProps & { ship: string; }) { +export function DMRedirect(props: LandscapeProps & RouteComponentProps & { ship: string; }): ReactElement { const { ship, api, history, graphKeys } = props; const goToGraph = useCallback((graph: string) => { history.push(`/~landscape/messages/resource/chat/ship/~${graph}`); @@ -47,7 +47,6 @@ export function DMRedirect(props: LandscapeProps & RouteComponentProps & { ship: const aud = ship !== window.ship ? [`~${ship}`] : []; const title = `${cite(window.ship)} <-> ${cite(ship)}`; - api.graph.createUnmanagedGraph( `dm--${ship}`, title, @@ -57,22 +56,20 @@ export function DMRedirect(props: LandscapeProps & RouteComponentProps & { ship: ).then(() => { goToGraph(station); }); - }, []); return ( ); - } -export default class Landscape extends Component { - componentDidMount() { +export default class Landscape extends Component> { + componentDidMount(): void { this.props.subscription.startApp('groups'); this.props.subscription.startApp('graph'); } - render() { + render(): ReactElement { const { props } = this; return ( @@ -82,7 +79,7 @@ export default class Landscape extends Component { { + render={(routeProps) => { const { host, name @@ -93,10 +90,11 @@ export default class Landscape extends Component { return ( - ) - }}/> + ); + }} + /> { + render={() => { const ws: Workspace = { type: 'home' }; return ( @@ -104,7 +102,7 @@ export default class Landscape extends Component { }} /> { + render={() => { const ws: Workspace = { type: 'messages' }; return ( @@ -112,7 +110,7 @@ export default class Landscape extends Component { }} /> { + render={(routeProps) => { return ( @@ -128,13 +126,13 @@ export default class Landscape extends Component { }} /> { + render={(routeProps) => { const { ship } = routeProps.match.params; - return + return ; }} /> { + render={(routeProps) => { const { ship, name } = routeProps.match.params; const autojoin = ship && name ? `${ship}/${name}` : null; return ( From 8362f22cd782fc74d5aa569ea0a6871002ad1d78 Mon Sep 17 00:00:00 2001 From: Tyler Brown Cifu Shuster Date: Sun, 14 Feb 2021 14:15:43 -0800 Subject: [PATCH 020/338] interface: updated npm packages --- pkg/interface/.eslintrc.js | 187 +--- pkg/interface/package-lock.json | 916 +++++++++-------- pkg/interface/package.json | 7 +- pkg/npm/api/graph/index.ts | 12 +- pkg/npm/api/groups/index.d.ts | 179 +--- pkg/npm/api/groups/index.ts | 5 +- pkg/npm/api/groups/update.d.ts | 180 ++++ pkg/npm/api/groups/view.d.ts | 12 + pkg/npm/api/hark/index.d.ts | 19 +- pkg/npm/api/index.d.ts | 74 +- pkg/npm/api/index.js | 11 +- pkg/npm/api/invite/index.d.ts | 35 +- pkg/npm/api/lib/index.d.ts | 67 ++ pkg/npm/api/metadata/index.d.ts | 32 +- pkg/npm/api/package.json | 7 +- pkg/npm/api/settings/index.d.ts | 55 + pkg/npm/api/settings/index.ts | 0 pkg/npm/eslint-config/index.js | 6 +- pkg/npm/eslint-config/package-lock.json | 1015 ++++++++++++++++++- pkg/npm/eslint-config/package.json | 14 +- pkg/npm/http-api/.github/workflows/main.yml | 42 - pkg/npm/http-api/.vscode/settings.json | 5 - pkg/npm/http-api/LICENSE | 21 - pkg/npm/http-api/package.json | 8 +- 24 files changed, 1896 insertions(+), 1013 deletions(-) create mode 100644 pkg/npm/api/groups/update.d.ts create mode 100644 pkg/npm/api/groups/view.d.ts create mode 100644 pkg/npm/api/lib/index.d.ts create mode 100644 pkg/npm/api/settings/index.d.ts create mode 100644 pkg/npm/api/settings/index.ts delete mode 100644 pkg/npm/http-api/.github/workflows/main.yml delete mode 100644 pkg/npm/http-api/.vscode/settings.json delete mode 100644 pkg/npm/http-api/LICENSE diff --git a/pkg/interface/.eslintrc.js b/pkg/interface/.eslintrc.js index 0f63724ca8..fba1ccabcc 100644 --- a/pkg/interface/.eslintrc.js +++ b/pkg/interface/.eslintrc.js @@ -1,186 +1,3 @@ -const env = { - "browser": true, - "es6": true, - "node": true -}; - -const rules = { - "array-bracket-spacing": ["error", "never"], - "arrow-parens": [ - "error", - "as-needed", - { - "requireForBlockBody": true - } - ], - "arrow-spacing": "error", - "block-spacing": ["error", "always"], - "brace-style": ["error", "1tbs"], - "camelcase": [ - "error", - { - "properties": "never" - } - ], - "comma-dangle": ["error", "never"], - "eol-last": ["error", "always"], - "func-name-matching": "error", - "indent": [ - "off", - 2, - { - "ArrayExpression": "off", - "SwitchCase": 1, - "CallExpression": { - "arguments": "off" - }, - "FunctionDeclaration": { - "parameters": "off" - }, - "FunctionExpression": { - "parameters": "off" - }, - "MemberExpression": "off", - "ObjectExpression": "off", - "ImportDeclaration": "off" - } - ], - "handle-callback-err": "off", - "linebreak-style": ["error", "unix"], - "max-lines": [ - "error", - { - "max": 300, - "skipBlankLines": true, - "skipComments": true - } - ], - "max-lines-per-function": [ - "warn", - { - "skipBlankLines": true, - "skipComments": true - } - ], - "max-statements-per-line": [ - "error", - { - "max": 1 - } - ], - "new-cap": [ - "error", - { - "newIsCap": true, - "capIsNew": false - } - ], - "new-parens": "error", - "no-buffer-constructor": "error", - "no-console": "off", - "no-extra-semi": "off", - "no-fallthrough": "off", - "no-func-assign": "off", - "no-implicit-coercion": "error", - "no-multi-assign": "error", - "no-multiple-empty-lines": [ - "error", - { - "max": 1 - } - ], - "no-nested-ternary": "error", - "no-param-reassign": "off", - "no-return-assign": "error", - "no-return-await": "off", - "no-shadow-restricted-names": "error", - "no-tabs": "error", - "no-trailing-spaces": "error", - "no-unused-vars": [ - "error", - { - "vars": "all", - "args": "none", - "ignoreRestSiblings": false - } - ], - "no-use-before-define": [ - "error", - { - "functions": false, - "classes": false - } - ], - "no-useless-escape": "off", - "no-var": "error", - "nonblock-statement-body-position": ["error", "below"], - "object-curly-spacing": ["error", "always"], - "padded-blocks": ["error", "never"], - "prefer-arrow-callback": "error", - "prefer-const": [ - "error", - { - "destructuring": "all", - "ignoreReadBeforeAssign": true - } - ], - "prefer-template": "off", - "quotes": ["error", "single"], - "semi": ["error", "always"], - "spaced-comment": [ - "error", - "always", - { - "exceptions": ["!"] - } - ], - "space-before-blocks": "error", - "unicode-bom": ["error", "never"], - "valid-jsdoc": "error", - "wrap-iife": ["error", "inside"], - "react/jsx-closing-bracket-location": 1, - "react/jsx-tag-spacing": 1, - "react/jsx-max-props-per-line": ["error", { "maximum": 2, "when": "multiline" }], - "react/prop-types": 0 -}; - module.exports = { - "env": env, - "extends": [ - "plugin:react/recommended", - "eslint:recommended", - ], - "settings": { - "react": { - "version": "^16.5.2" - } - }, - "parser": "babel-eslint", - "parserOptions": { - "ecmaVersion": 10, - "requireConfigFile": false, - "sourceType": "module" - }, - "root": true, - "rules": rules, - "overrides": [ - { - "files": ["**/*.ts", "**/*.tsx"], - "env": env, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaFeatures": { "jsx": true }, - "ecmaVersion": 10, - "requireConfigFile": false, - "sourceType": "module" - }, - "plugins": ["@typescript-eslint"], - "rules": rules - } - ] -}; + extends: "@urbit" +}; \ No newline at end of file diff --git a/pkg/interface/package-lock.json b/pkg/interface/package-lock.json index d4a06d132a..a562d5080b 100644 --- a/pkg/interface/package-lock.json +++ b/pkg/interface/package-lock.json @@ -1165,6 +1165,67 @@ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, + "@eslint/eslintrc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.20", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, "@reach/auto-id": { "version": "0.10.5", "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.10.5.tgz", @@ -1403,12 +1464,6 @@ "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", "dev": true }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, "@types/glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", @@ -1596,14 +1651,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz", - "integrity": "sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.0.tgz", + "integrity": "sha512-DJgdGZW+8CFUTz5C/dnn4ONcUm2h2T0itWD85Ob5/V27Ndie8hUoX5HKyGssvR8sUMkAIlUc/AMK67Lqa3kBIQ==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "3.10.1", + "@typescript-eslint/experimental-utils": "4.15.0", + "@typescript-eslint/scope-manager": "4.15.0", "debug": "^4.1.1", "functional-red-black-tree": "^1.0.1", + "lodash": "^4.17.15", "regexpp": "^3.0.0", "semver": "^7.3.2", "tsutils": "^3.17.1" @@ -1621,53 +1678,70 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", - "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.0.tgz", + "integrity": "sha512-V4vaDWvxA2zgesg4KPgEGiomWEBpJXvY4ZX34Y3qxK8LUm5I87L+qGIOTd9tHZOARXNRt9pLbblSKiYBlGMawg==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", + "@typescript-eslint/scope-manager": "4.15.0", + "@typescript-eslint/types": "4.15.0", + "@typescript-eslint/typescript-estree": "4.15.0", "eslint-scope": "^5.0.0", "eslint-utils": "^2.0.0" } }, - "@typescript-eslint/parser": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", - "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", + "@typescript-eslint/scope-manager": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.0.tgz", + "integrity": "sha512-CSNBZnCC2jEA/a+pR9Ljh8Y+5TY5qgbPz7ICEk9WCpSEgT6Pi7H2RIjxfrrbUXvotd6ta+i27sssKEH8Azm75g==", "dev": true, "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "3.10.1", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-visitor-keys": "^1.1.0" + "@typescript-eslint/types": "4.15.0", + "@typescript-eslint/visitor-keys": "4.15.0" } }, "@typescript-eslint/types": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", - "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.0.tgz", + "integrity": "sha512-su4RHkJhS+iFwyqyXHcS8EGPlUVoC+XREfy5daivjLur9JP8GhvTmDipuRpcujtGC4M+GYhUOJCPDE3rC5NJrg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", - "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.0.tgz", + "integrity": "sha512-jG6xTmcNbi6xzZq0SdWh7wQ9cMb2pqXaUp6bUZOMsIlu5aOlxGxgE/t6L/gPybybQGvdguajXGkZKSndZJpksA==", "dev": true, "requires": { - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/visitor-keys": "3.10.1", + "@typescript-eslint/types": "4.15.0", + "@typescript-eslint/visitor-keys": "4.15.0", "debug": "^4.1.1", - "glob": "^7.1.6", + "globby": "^11.0.1", "is-glob": "^4.0.1", - "lodash": "^4.17.15", "semver": "^7.3.2", "tsutils": "^3.17.1" }, "dependencies": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "globby": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, "semver": { "version": "7.3.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", @@ -1680,14 +1754,64 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", - "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.0.tgz", + "integrity": "sha512-RnDtJwOwFucWFAMjG3ghCG/ikImFJFEg20DI7mn4pHEx3vC48lIAoyjhffvfHmErRDboUPC7p9Z2il4CLb7qxA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "@typescript-eslint/types": "4.15.0", + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + } } }, + "@urbit/api": { + "version": "file:../npm/api", + "requires": { + "@babel/runtime": "^7.12.5", + "@urbit/eslint-config": "^1.0.0", + "big-integer": "^1.6.48", + "lodash": "^4.17.20" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@urbit/eslint-config": { + "version": "1.0.0" + }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } + } + }, + "@urbit/eslint-config": { + "version": "file:../npm/eslint-config", + "dev": true + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -1925,23 +2049,6 @@ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - }, - "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - } - } - }, "ansi-html": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", @@ -2103,9 +2210,9 @@ "dev": true }, "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async": { @@ -2804,12 +2911,6 @@ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, "chokidar": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", @@ -2906,21 +3007,6 @@ "del": "^4.1.1" } }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", @@ -3583,6 +3669,15 @@ "randombytes": "^2.0.0" } }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -3609,9 +3704,9 @@ } }, "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -3839,6 +3934,23 @@ } } }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + } + } + }, "entities": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", @@ -3904,80 +4016,99 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.19.0.tgz", + "integrity": "sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.3.0", "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.2.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "file-entry-cache": "^6.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", "is-glob": "^4.0.0", "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", + "levn": "^0.4.1", + "lodash": "^4.17.20", "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.3", + "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "color-convert": "^2.0.1" } }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, "globals": { "version": "12.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", @@ -3987,40 +4118,43 @@ "type-fest": "^0.8.1" } }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "lru-cache": "^6.0.0" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "isexe": "^2.0.0" + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } } } @@ -4042,17 +4176,6 @@ "prop-types": "^15.7.2", "resolve": "^1.18.1", "string.prototype.matchall": "^4.0.2" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - } } }, "eslint-scope": { @@ -4081,14 +4204,14 @@ "dev": true }, "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" } }, "esprima": { @@ -4098,9 +4221,9 @@ "dev": true }, "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -4396,17 +4519,6 @@ } } }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -4483,6 +4595,32 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "dependencies": { + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -4494,6 +4632,15 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fastq": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.1.tgz", + "integrity": "sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "faye-websocket": { "version": "0.11.3", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", @@ -4509,22 +4656,13 @@ "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", + "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", "dev": true, "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" } }, "file-loader": { @@ -4657,20 +4795,19 @@ } }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "dependencies": { "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -4679,9 +4816,9 @@ } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, "flush-write-stream": { @@ -5375,9 +5512,9 @@ "dev": true }, "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true }, "immer": { @@ -5488,87 +5625,6 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "internal-ip": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", @@ -5580,33 +5636,25 @@ } }, "internal-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", - "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "requires": { - "es-abstract": "^1.17.0-next.1", + "get-intrinsic": "^1.1.0", "has": "^1.0.3", - "side-channel": "^1.0.2" + "side-channel": "^1.0.4" }, "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { - "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "has-symbols": "^1.0.1" } } } @@ -5979,13 +6027,13 @@ } }, "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, "loader-runner": { @@ -6181,6 +6229,12 @@ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -6329,12 +6383,6 @@ "mime-db": "1.45.0" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, "min-document": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", @@ -6486,12 +6534,6 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, "nan": { "version": "2.14.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", @@ -6861,15 +6903,6 @@ "wrappy": "1" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, "opn": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", @@ -6880,17 +6913,17 @@ } }, "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" } }, "original": { @@ -6908,12 +6941,6 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -7132,6 +7159,12 @@ } } }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "pbkdf2": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", @@ -7273,9 +7306,9 @@ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" }, "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "pretty-error": { @@ -7418,6 +7451,12 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "queue-microtask": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", + "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", + "dev": true + }, "ramda": { "version": "0.27.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz", @@ -7920,6 +7959,12 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -8010,16 +8055,6 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -8032,6 +8067,12 @@ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -8051,11 +8092,14 @@ "inherits": "^2.0.1" } }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } }, "run-queue": { "version": "1.0.3", @@ -8066,23 +8110,6 @@ "aproba": "^1.1.1" } }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -8405,20 +8432,38 @@ "dev": true }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true } } @@ -9017,39 +9062,34 @@ "integrity": "sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ==" }, "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", + "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", "dev": true, "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "ajv": "^7.0.2", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" }, "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "ajv": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.0.tgz", + "integrity": "sha512-svS9uILze/cXbH0z2myCK2Brqprx/+JJYK5pHicT/GQiBfzzhUVAIT6MwqJg8y4xV/zoGsUeuPuwtoiKSGE15g==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true } } }, @@ -9184,12 +9224,6 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -9251,15 +9285,6 @@ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -9338,9 +9363,9 @@ "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" }, "tsutils": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.19.1.tgz", - "integrity": "sha512-GEdoBf5XI324lu7ycad7s6laADfnAqCw6wLGI+knxvw9vsIYBaJfYdmeCEG3FMMUiSm3OGgNb+m6utsWf5h9Vw==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz", + "integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -9361,12 +9386,12 @@ "dev": true }, "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" } }, "type-fest": { @@ -10458,15 +10483,6 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "ws": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", diff --git a/pkg/interface/package.json b/pkg/interface/package.json index a65578c438..d4d35e33c0 100644 --- a/pkg/interface/package.json +++ b/pkg/interface/package.json @@ -12,6 +12,7 @@ "@tlon/indigo-light": "^1.0.6", "@tlon/indigo-react": "1.2.17", "@tlon/sigil-js": "^1.4.3", + "@urbit/api": "file:../npm/api", "aws-sdk": "^2.830.0", "big-integer": "^1.6.48", "classnames": "^2.2.6", @@ -63,15 +64,15 @@ "@types/styled-components": "^5.1.7", "@types/styled-system": "^5.1.10", "@types/yup": "^0.29.11", - "@typescript-eslint/eslint-plugin": "^3.10.1", - "@typescript-eslint/parser": "^3.10.1", + "@typescript-eslint/eslint-plugin": "^4.15.0", + "@urbit/eslint-config": "file:../npm/eslint-config", "babel-eslint": "^10.1.0", "babel-loader": "^8.2.2", "babel-plugin-lodash": "^3.3.4", "babel-plugin-root-import": "^6.6.0", "clean-webpack-plugin": "^3.0.0", "cross-env": "^7.0.3", - "eslint": "^6.8.0", + "eslint": "^7.19.0", "eslint-plugin-react": "^7.22.0", "file-loader": "^6.2.0", "html-webpack-plugin": "^4.5.1", diff --git a/pkg/npm/api/graph/index.ts b/pkg/npm/api/graph/index.ts index cbadbb3f6b..a12edb6510 100644 --- a/pkg/npm/api/graph/index.ts +++ b/pkg/npm/api/graph/index.ts @@ -80,25 +80,31 @@ function moduleToMark(mod: string): string | undefined { return undefined; } -export const storeAction = (data: T): Poke => ({ +const storeAction = (data: T): Poke => ({ app: 'graph-store', mark: 'graph-update', json: data }); -export const viewAction = (threadName: string, action: T): Thread => ({ +export { storeAction as graphStoreAction }; + +const viewAction = (threadName: string, action: T): Thread => ({ inputMark: 'graph-view-action', outputMark: 'json', threadName, body: action }); -export const hookAction = (data: T): Poke => ({ +export { viewAction as graphViewAction }; + +const hookAction = (data: T): Poke => ({ app: 'graph-push-hook', mark: 'graph-update', json: data }); +export { hookAction as graphHookAction }; + export const createManagedGraph = ( ship: PatpNoSig, diff --git a/pkg/npm/api/groups/index.d.ts b/pkg/npm/api/groups/index.d.ts index f4c0486dea..76567715c9 100644 --- a/pkg/npm/api/groups/index.d.ts +++ b/pkg/npm/api/groups/index.d.ts @@ -1,177 +1,2 @@ -import { PatpNoSig, Path, Jug, ShipRank, Enc } from '..'; - -export interface RoleTag { - tag: 'admin' | 'moderator' | 'janitor'; -} - -export interface AppTag { - app: string; - tag: string; -} - -export type Tag = AppTag | RoleTag; - -export interface InvitePolicy { - invite: { - pending: Set; - }; -} - -export interface OpenPolicy { - open: { - banned: Set; - banRanks: Set; - }; -} - -export interface Resource { - name: string; - ship: PatpNoSig; // TODO different declaration than in metadata? -} - -export type OpenPolicyDiff = - | AllowRanksDiff - | BanRanksDiff - | AllowShipsDiff - | BanShipsDiff; - -export interface AllowRanksDiff { - allowRanks: ShipRank[]; -} - -export interface BanRanksDiff { - banRanks: ShipRank[]; -} - -export interface AllowShipsDiff { - allowShips: PatpNoSig[]; -} - -export interface BanShipsDiff { - banShips: PatpNoSig[]; -} - -export type InvitePolicyDiff = AddInvitesDiff | RemoveInvitesDiff; - -export interface AddInvitesDiff { - addInvites: PatpNoSig[]; -} - -export interface RemoveInvitesDiff { - removeInvites: PatpNoSig[]; -} - -export interface ReplacePolicyDiff { - replace: GroupPolicy; -} - -export type GroupPolicyDiff = - | { open: OpenPolicyDiff } - | { invite: InvitePolicyDiff } - | ReplacePolicyDiff; - -export type GroupPolicy = OpenPolicy | InvitePolicy; - -export interface TaggedShips { - [tag: string]: Set; -} - -export interface Tags { - role: TaggedShips; - [app: string]: TaggedShips; -} - -export interface Group { - members: Set; - tags: Tags; - policy: GroupPolicy; - hidden: boolean; -} - -export type Groups = { - [p in Path]: Group; -}; - -export interface GroupUpdateInitial { - initial: Enc; -} - -export interface GroupUpdateAddGroup { - addGroup: { - resource: Resource; - policy: Enc; - hidden: boolean; - }; -} - -export interface GroupUpdateAddMembers { - addMembers: { - ships: PatpNoSig[]; - resource: Resource; - }; -} - -export interface GroupUpdateRemoveMembers { - removeMembers: { - ships: PatpNoSig[]; - resource: Resource; - }; -} - -export interface GroupUpdateAddTag { - addTag: { - tag: Tag; - resource: Resource; - ships: PatpNoSig[]; - }; -} - -export interface GroupUpdateRemoveTag { - removeTag: { - tag: Tag; - resource: Resource; - ships: PatpNoSig[]; - }; -} - -export interface GroupUpdateChangePolicy { - changePolicy: { resource: Resource; diff: GroupPolicyDiff }; -} - -export interface GroupUpdateRemoveGroup { - removeGroup: { - resource: Resource; - }; -} - -export interface GroupUpdateExpose { - expose: { - resource: Resource; - }; -} - -export interface GroupUpdateInitialGroup { - initialGroup: { - resource: Resource; - group: Enc; - }; -} - -export type GroupUpdate = - | GroupUpdateInitial - | GroupUpdateAddGroup - | GroupUpdateAddMembers - | GroupUpdateRemoveMembers - | GroupUpdateAddTag - | GroupUpdateRemoveTag - | GroupUpdateChangePolicy - | GroupUpdateRemoveGroup - | GroupUpdateExpose - | GroupUpdateInitialGroup; - -export type GroupAction = Omit; - -export const groupBunts = { - group: (): Group => ({ members: new Set(), tags: { role: {} }, hidden: false, policy: groupBunts.policy() }), - policy: (): GroupPolicy => ({ open: { banned: new Set(), banRanks: new Set() } }) -}; +export * from './update.d'; +export * from './view.d'; \ No newline at end of file diff --git a/pkg/npm/api/groups/index.ts b/pkg/npm/api/groups/index.ts index 03ea4e2894..8679c6d7e2 100644 --- a/pkg/npm/api/groups/index.ts +++ b/pkg/npm/api/groups/index.ts @@ -87,7 +87,7 @@ export const changePolicy = ( } }); -const roleTags = ['janitor', 'moderator', 'admin']; +export const roleTags = ['janitor', 'moderator', 'admin']; // TODO make this type better? export function roleForShip(group: Group, ship: PatpNoSig): string | undefined { @@ -106,3 +106,6 @@ export function makeResource(ship: string, name:string) { return { ship, name }; } +export const joinError = ['no-perms', 'strange'] as const; +export const joinResult = ['done', ...joinError] as const; +export const joinProgress = ['start', 'added', ...joinResult] as const; \ No newline at end of file diff --git a/pkg/npm/api/groups/update.d.ts b/pkg/npm/api/groups/update.d.ts new file mode 100644 index 0000000000..7788fdd83b --- /dev/null +++ b/pkg/npm/api/groups/update.d.ts @@ -0,0 +1,180 @@ +import { PatpNoSig, Path, Jug, ShipRank, Enc } from '..'; +import { roleTags } from './index'; + +export type RoleTags = typeof roleTags[number]; +interface RoleTag { + tag: 'admin' | 'moderator' | 'janitor'; +} + +interface AppTag { + app: string; + resource: string; + tag: string; +} + +export type Tag = AppTag | RoleTag; + +export interface InvitePolicy { + invite: { + pending: Set; + }; +} + +export interface OpenPolicy { + open: { + banned: Set; + banRanks: Set; + }; +} + +export interface Resource { + name: string; + ship: PatpNoSig; +} + +export type OpenPolicyDiff = + | AllowRanksDiff + | BanRanksDiff + | AllowShipsDiff + | BanShipsDiff; + +interface AllowRanksDiff { + allowRanks: ShipRank[]; +} + +interface BanRanksDiff { + banRanks: ShipRank[]; +} + +interface AllowShipsDiff { + allowShips: PatpNoSig[]; +} + +interface BanShipsDiff { + banShips: PatpNoSig[]; +} + +export type InvitePolicyDiff = AddInvitesDiff | RemoveInvitesDiff; + +interface AddInvitesDiff { + addInvites: PatpNoSig[]; +} + +interface RemoveInvitesDiff { + removeInvites: PatpNoSig[]; +} + +interface ReplacePolicyDiff { + replace: GroupPolicy; +} + +export type GroupPolicyDiff = + | { open: OpenPolicyDiff } + | { invite: InvitePolicyDiff } + | ReplacePolicyDiff; + +export type GroupPolicy = OpenPolicy | InvitePolicy; + +interface TaggedShips { + [tag: string]: Set; +} + +export interface Tags { + role: TaggedShips; + [app: string]: TaggedShips; +} + +export interface Group { + members: Set; + tags: Tags; + policy: GroupPolicy; + hidden: boolean; +} + +export type Groups = { + [p in Path]: Group; +}; + +interface GroupUpdateInitial { + initial: Enc; +} + +interface GroupUpdateAddGroup { + addGroup: { + resource: Resource; + policy: Enc; + hidden: boolean; + }; +} + +interface GroupUpdateAddMembers { + addMembers: { + ships: PatpNoSig[]; + resource: Resource; + }; +} + +interface GroupUpdateRemoveMembers { + removeMembers: { + ships: PatpNoSig[]; + resource: Resource; + }; +} + +interface GroupUpdateAddTag { + addTag: { + tag: Tag; + resource: Resource; + ships: PatpNoSig[]; + }; +} + +interface GroupUpdateRemoveTag { + removeTag: { + tag: Tag; + resource: Resource; + ships: PatpNoSig; + }; +} + +interface GroupUpdateChangePolicy { + changePolicy: { resource: Resource; diff: GroupPolicyDiff }; +} + +interface GroupUpdateRemoveGroup { + removeGroup: { + resource: Resource; + }; +} + +interface GroupUpdateExpose { + expose: { + resource: Resource; + }; +} + +interface GroupUpdateInitialGroup { + initialGroup: { + resource: Resource; + group: Enc; + }; +} + +export type GroupUpdate = + | GroupUpdateInitial + | GroupUpdateAddGroup + | GroupUpdateAddMembers + | GroupUpdateRemoveMembers + | GroupUpdateAddTag + | GroupUpdateRemoveTag + | GroupUpdateChangePolicy + | GroupUpdateRemoveGroup + | GroupUpdateExpose + | GroupUpdateInitialGroup; + +export type GroupAction = Omit; + +export const groupBunts = { + group: (): Group => ({ members: new Set(), tags: { role: {} }, hidden: false, policy: groupBunts.policy() }), + policy: (): GroupPolicy => ({ open: { banned: new Set(), banRanks: new Set() } }) +}; diff --git a/pkg/npm/api/groups/view.d.ts b/pkg/npm/api/groups/view.d.ts new file mode 100644 index 0000000000..e85e5adb51 --- /dev/null +++ b/pkg/npm/api/groups/view.d.ts @@ -0,0 +1,12 @@ +import { joinError, joinProgress, joinResult } from "."; + +export type JoinError = typeof joinError[number]; + +export type JoinResult = typeof joinResult[number]; + + +export type JoinProgress = typeof joinProgress[number]; + +export interface JoinRequests { + [rid: string]: JoinProgress; +} diff --git a/pkg/npm/api/hark/index.d.ts b/pkg/npm/api/hark/index.d.ts index 7759d9bae7..1aee7bab7f 100644 --- a/pkg/npm/api/hark/index.d.ts +++ b/pkg/npm/api/hark/index.d.ts @@ -1,6 +1,6 @@ -import { Content, Post } from "../graph/index.d"; +import { Post } from "../graph/index.d"; import { GroupUpdate } from "../groups/index.d"; -import BigIntOrderedMap from "../lib/BigIntOrderedMap"; +import { BigIntOrderedMap } from "~/logic/lib/BigIntOrderedMap"; export type GraphNotifDescription = "link" | "comment" | "note" | "mention"; @@ -23,27 +23,17 @@ export interface GroupNotifIndex { description: string; } -export interface ChatNotifIndex { - chat: string; - mention: boolean; -} - export type NotifIndex = | { graph: GraphNotifIndex } - | { group: GroupNotifIndex } - | { chat: ChatNotifIndex }; + | { group: GroupNotifIndex }; export type GraphNotificationContents = Post[]; export type GroupNotificationContents = GroupUpdate[]; -export type ChatNotificationContents = Content[]; - export type NotificationContents = | { graph: GraphNotificationContents } - | { group: GroupNotificationContents } - | { chat: ChatNotificationContents }; - + | { group: GroupNotificationContents }; export interface Notification { read: boolean; time: number; @@ -66,7 +56,6 @@ export interface NotificationGraphConfig { } export interface Unreads { - chat: Record; graph: Record>; group: Record; } diff --git a/pkg/npm/api/index.d.ts b/pkg/npm/api/index.d.ts index d92065375a..eecb669f3a 100644 --- a/pkg/npm/api/index.d.ts +++ b/pkg/npm/api/index.d.ts @@ -1,67 +1,7 @@ -/** - * Martian embassy - */ - -// an urbit style path rendered as string -export type Path = string; - -// patp including leading sig -export type Patp = string; - -// patp excluding leading sig -export type PatpNoSig = string; - -// @uvH encoded string -export type Serial = string; - -// jug from hoon -export type Jug = Map>; - -// name of app -export type AppName = 'chat' | 'link' | 'contacts' | 'publish' | 'graph'; - -export function getTagFromFrond(frond: O): keyof O { - const tags = Object.keys(frond) as Array; - const tag = tags[0]; - if(!tag) { - throw new Error("bad frond"); - } - return tag; -} - -export type ShipRank = 'czar' | 'king' | 'duke' | 'earl' | 'pawn'; - -export type Action = 'poke' | 'subscribe' | 'ack' | 'unsubscribe' | 'delete'; - - -export type SetElement = S extends Set<(infer T)> ? T : never; -export type MapKey = M extends Map<(infer K), any> ? K : never; -export type MapValue = M extends Map ? V : never; - -/** - * Turns sets into arrays and maps into objects so we can send them over the wire - */ -export type Enc = - S extends Set ? - Enc>[] : - S extends Map ? - { [s: string]: Enc> } : - S extends object ? - { [K in keyof S]: Enc } : - S; - -export type Mark = string; - -export interface Poke { - ship?: string; // This should be handled by the http library, but is part of the spec - app: string; - mark: Mark; - json: Action; -} - -export interface Thread { - inputMark: string; - outputMark: string; - threadName: string; - body: Action; -} \ No newline at end of file +export * from './contacts/index.d' +export * from './graph/index.d'; +export * from './groups/index.d'; +export * from './hark/index.d'; +export * from './invite/index.d'; +export * from './lib/index.d'; +export * from './metadata/index.d'; \ No newline at end of file diff --git a/pkg/npm/api/index.js b/pkg/npm/api/index.js index b8ddcbc8a2..0c6904283e 100644 --- a/pkg/npm/api/index.js +++ b/pkg/npm/api/index.js @@ -2,4 +2,13 @@ import BigIntOrderedMap from './lib/BigIntOrderedMap'; export { BigIntOrderedMap -}; \ No newline at end of file +}; + +export * from './contacts'; +export * from './graph'; +export * from './groups'; +export * from './hark'; +export * from './invite'; +export * from './metadata'; +export * from './settings'; +export * from './index.d'; \ No newline at end of file diff --git a/pkg/npm/api/invite/index.d.ts b/pkg/npm/api/invite/index.d.ts index 91b986aa5b..01f080ef5f 100644 --- a/pkg/npm/api/invite/index.d.ts +++ b/pkg/npm/api/invite/index.d.ts @@ -1,4 +1,5 @@ import { Serial, PatpNoSig, Path } from '..'; +import { Resource } from '../groups'; export type InviteUpdate = InviteUpdateInitial @@ -8,23 +9,24 @@ export type InviteUpdate = | InviteUpdateAccepted | InviteUpdateDecline; -export interface InviteUpdateInitial { + +interface InviteUpdateInitial { initial: Invites; } -export interface InviteUpdateCreate { +interface InviteUpdateCreate { create: { path: Path; }; } -export interface InviteUpdateDelete { +interface InviteUpdateDelete { delete: { path: Path; }; } -export interface InviteUpdateInvite { +interface InviteUpdateInvite { invite: { path: Path; uid: Serial; @@ -32,39 +34,20 @@ export interface InviteUpdateInvite { }; } -export interface InviteUpdateAccepted { +interface InviteUpdateAccepted { accepted: { path: Path; uid: Serial; }; } -export interface InviteUpdateDecline { +interface InviteUpdateDecline { decline: { path: Path; uid: Serial; }; } -export type InviteAction = - InviteActionAccept -| InviteActionDecline; - -export interface InviteActionAccept { - accept: { - term: string, - uid: Serial - } -} - -export interface InviteActionDecline { - decline: { - term: string, - uid: Serial - } -} - - // actual datastructures @@ -78,8 +61,8 @@ export type AppInvites = { export interface Invite { app: string; - path: Path; recipient: PatpNoSig; + resource: Resource; ship: PatpNoSig; text: string; } diff --git a/pkg/npm/api/lib/index.d.ts b/pkg/npm/api/lib/index.d.ts new file mode 100644 index 0000000000..d92065375a --- /dev/null +++ b/pkg/npm/api/lib/index.d.ts @@ -0,0 +1,67 @@ +/** + * Martian embassy + */ + +// an urbit style path rendered as string +export type Path = string; + +// patp including leading sig +export type Patp = string; + +// patp excluding leading sig +export type PatpNoSig = string; + +// @uvH encoded string +export type Serial = string; + +// jug from hoon +export type Jug = Map>; + +// name of app +export type AppName = 'chat' | 'link' | 'contacts' | 'publish' | 'graph'; + +export function getTagFromFrond(frond: O): keyof O { + const tags = Object.keys(frond) as Array; + const tag = tags[0]; + if(!tag) { + throw new Error("bad frond"); + } + return tag; +} + +export type ShipRank = 'czar' | 'king' | 'duke' | 'earl' | 'pawn'; + +export type Action = 'poke' | 'subscribe' | 'ack' | 'unsubscribe' | 'delete'; + + +export type SetElement = S extends Set<(infer T)> ? T : never; +export type MapKey = M extends Map<(infer K), any> ? K : never; +export type MapValue = M extends Map ? V : never; + +/** + * Turns sets into arrays and maps into objects so we can send them over the wire + */ +export type Enc = + S extends Set ? + Enc>[] : + S extends Map ? + { [s: string]: Enc> } : + S extends object ? + { [K in keyof S]: Enc } : + S; + +export type Mark = string; + +export interface Poke { + ship?: string; // This should be handled by the http library, but is part of the spec + app: string; + mark: Mark; + json: Action; +} + +export interface Thread { + inputMark: string; + outputMark: string; + threadName: string; + body: Action; +} \ No newline at end of file diff --git a/pkg/npm/api/metadata/index.d.ts b/pkg/npm/api/metadata/index.d.ts index 7fccfb979e..fca5f1e7bc 100644 --- a/pkg/npm/api/metadata/index.d.ts +++ b/pkg/npm/api/metadata/index.d.ts @@ -1,47 +1,54 @@ import { AppName, Path, Patp } from '..'; - export type MetadataUpdate = MetadataUpdateInitial | MetadataUpdateAdd | MetadataUpdateUpdate | MetadataUpdateRemove; -export interface MetadataUpdateInitial { +interface MetadataUpdateInitial { associations: ResourceAssociations; } -export type ResourceAssociations = { +type ResourceAssociations = { [p in Path]: Association; } -export type MetadataUpdateAdd = { +type MetadataUpdateAdd = { add: Association; } -export type MetadataUpdateUpdate = { +type MetadataUpdateUpdate = { update: Association; } -export type MetadataUpdateRemove = { +type MetadataUpdateRemove = { remove: Resource & { - 'group-path': Path; + group: Path; } } +export interface MetadataUpdatePreview { + group: string; + channels: Associations; + "channel-count": number; + members: number; + metadata: Metadata; +} + export type Associations = Record; export type AppAssociations = { [p in Path]: Association; } -export interface Resource { - 'app-path': Path; +interface Resource { + resource: Path; 'app-name': AppName; } export type Association = Resource & { - 'group-path': Path; + group: Path; metadata: Metadata; }; @@ -52,4 +59,9 @@ export interface Metadata { description: string; title: string; module: string; + picture: string; + preview: boolean; + vip: PermVariation; } + +export type PermVariation = '' | 'reader-comments' | 'member-metadata'; diff --git a/pkg/npm/api/package.json b/pkg/npm/api/package.json index 368c1d2e5e..e9e9eefe44 100644 --- a/pkg/npm/api/package.json +++ b/pkg/npm/api/package.json @@ -2,12 +2,17 @@ "name": "@urbit/api", "version": "1.0.0", "description": "", + "repository" : { + "type" : "git", + "url": "ssh://git@github.com/urbit/urbit.git", + "directory": "pkg/npm/api" + }, "main": "index.js", "types": "index.d.ts", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, - "author": "Tyler Brown Cifu Shuster", + "author": "", "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5", diff --git a/pkg/npm/api/settings/index.d.ts b/pkg/npm/api/settings/index.d.ts new file mode 100644 index 0000000000..f0f50df491 --- /dev/null +++ b/pkg/npm/api/settings/index.d.ts @@ -0,0 +1,55 @@ +export type Key = string; +export type Value = string | boolean | number; +export type Bucket = Map; +export type Settings = Map; + +interface PutBucket { + "put-bucket": { + "bucket-key": Key; + "bucket": Bucket; + }; +} + +interface DelBucket { + "del-bucket": { + "bucket-key": Key; + }; +} + +interface PutEntry { + "put-entry": { + "bucket-key": Key; + "entry-key": Key; + "value": Value; + }; +} + +interface DelEntry { + "del-entry": { + "bucket-key": Key; + "entry-key": Key; + }; +} + +interface AllData { + "all": Settings; +} + +interface BucketData { + "bucket": Bucket; +} + +interface EntryData { + "entry": Value; +} + +export type SettingsUpdate = + | PutBucket + | DelBucket + | PutEntry + | DelEntry; + +export type SettingsData = + | AllData + | BucketData + | EntryData; diff --git a/pkg/npm/api/settings/index.ts b/pkg/npm/api/settings/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/pkg/npm/eslint-config/index.js b/pkg/npm/eslint-config/index.js index 0f63724ca8..b94e161dbf 100644 --- a/pkg/npm/eslint-config/index.js +++ b/pkg/npm/eslint-config/index.js @@ -96,7 +96,8 @@ const rules = { "no-shadow-restricted-names": "error", "no-tabs": "error", "no-trailing-spaces": "error", - "no-unused-vars": [ + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": [ "error", { "vars": "all", @@ -104,7 +105,8 @@ const rules = { "ignoreRestSiblings": false } ], - "no-use-before-define": [ + "no-use-before-define": "off", + "@typescript-eslint/no-use-before-define": [ "error", { "functions": false, diff --git a/pkg/npm/eslint-config/package-lock.json b/pkg/npm/eslint-config/package-lock.json index 0fe4c446f9..49230650eb 100644 --- a/pkg/npm/eslint-config/package-lock.json +++ b/pkg/npm/eslint-config/package-lock.json @@ -1,5 +1,1018 @@ { "name": "@urbit/eslint-config", "version": "1.0.0", - "lockfileVersion": 1 + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/generator": { + "version": "7.12.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.15.tgz", + "integrity": "sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.12.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.16.tgz", + "integrity": "sha512-c/+u9cqV6F0+4Hpq01jnJO+GLp2DdT63ppz9Xa+6cHaajM9VFzK/iDXiKK65YtpeVwu+ctfS6iqlMqRgQRzeCw==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.13.tgz", + "integrity": "sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", + "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.0.tgz", + "integrity": "sha512-DJgdGZW+8CFUTz5C/dnn4ONcUm2h2T0itWD85Ob5/V27Ndie8hUoX5HKyGssvR8sUMkAIlUc/AMK67Lqa3kBIQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.15.0", + "@typescript-eslint/scope-manager": "4.15.0", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "lodash": "^4.17.15", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.0.tgz", + "integrity": "sha512-V4vaDWvxA2zgesg4KPgEGiomWEBpJXvY4ZX34Y3qxK8LUm5I87L+qGIOTd9tHZOARXNRt9pLbblSKiYBlGMawg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.15.0", + "@typescript-eslint/types": "4.15.0", + "@typescript-eslint/typescript-estree": "4.15.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.15.0.tgz", + "integrity": "sha512-L6Dtbq8Bc7g2aZwnIBETpmUa9XDKCMzKVwAArnGp5Mn7PRNFjf3mUzq8UeBjL3K8t311hvevnyqXAMSmxO8Gpg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.15.0", + "@typescript-eslint/types": "4.15.0", + "@typescript-eslint/typescript-estree": "4.15.0", + "debug": "^4.1.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.0.tgz", + "integrity": "sha512-CSNBZnCC2jEA/a+pR9Ljh8Y+5TY5qgbPz7ICEk9WCpSEgT6Pi7H2RIjxfrrbUXvotd6ta+i27sssKEH8Azm75g==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.15.0", + "@typescript-eslint/visitor-keys": "4.15.0" + } + }, + "@typescript-eslint/types": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.0.tgz", + "integrity": "sha512-su4RHkJhS+iFwyqyXHcS8EGPlUVoC+XREfy5daivjLur9JP8GhvTmDipuRpcujtGC4M+GYhUOJCPDE3rC5NJrg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.0.tgz", + "integrity": "sha512-jG6xTmcNbi6xzZq0SdWh7wQ9cMb2pqXaUp6bUZOMsIlu5aOlxGxgE/t6L/gPybybQGvdguajXGkZKSndZJpksA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.15.0", + "@typescript-eslint/visitor-keys": "4.15.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.0.tgz", + "integrity": "sha512-RnDtJwOwFucWFAMjG3ghCG/ikImFJFEg20DI7mn4pHEx3vC48lIAoyjhffvfHmErRDboUPC7p9Z2il4CLb7qxA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.15.0", + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + } + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "array-includes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", + "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "get-intrinsic": "^1.0.1", + "is-string": "^1.0.5" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + } + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "es-abstract": { + "version": "1.18.0-next.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", + "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.1", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.3", + "string.prototype.trimstart": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint-plugin-react": { + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz", + "integrity": "sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.18.1", + "string.prototype.matchall": "^4.0.2" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fastq": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.1.tgz", + "integrity": "sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "dev": true, + "requires": { + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz", + "integrity": "sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "object.values": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", + "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "queue-microtask": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", + "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", + "dev": true + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "string.prototype.matchall": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz", + "integrity": "sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.3" + } + }, + "string.prototype.trimend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz", + "integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "typescript": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", + "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } } diff --git a/pkg/npm/eslint-config/package.json b/pkg/npm/eslint-config/package.json index 4df8fac798..1036e8ff1f 100644 --- a/pkg/npm/eslint-config/package.json +++ b/pkg/npm/eslint-config/package.json @@ -2,13 +2,25 @@ "name": "@urbit/eslint-config", "version": "1.0.0", "description": "", + "repository": { + "type": "git", + "url": "ssh://git@github.com/urbit/urbit.git", + "directory": "pkg/npm/eslint-config" + }, "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, - "author": "Tyler Brown Cifu Shuster", + "author": "", "license": "MIT", "peerDependencies": { "eslint": ">= 3" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^4.15.0", + "@typescript-eslint/parser": "^4.15.0", + "babel-eslint": "^10.1.0", + "eslint-plugin-react": "^7.22.0", + "typescript": "^4.1.5" } } diff --git a/pkg/npm/http-api/.github/workflows/main.yml b/pkg/npm/http-api/.github/workflows/main.yml deleted file mode 100644 index 11023c28f5..0000000000 --- a/pkg/npm/http-api/.github/workflows/main.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: CI -on: [push] -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Begin CI... - uses: actions/checkout@v2 - - - name: Use Node 12 - uses: actions/setup-node@v1 - with: - node-version: 12.x - - - name: Use cached node_modules - uses: actions/cache@v1 - with: - path: node_modules - key: nodeModules-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - nodeModules- - - - name: Install dependencies - run: yarn install --frozen-lockfile - env: - CI: true - - - name: Lint - run: yarn lint - env: - CI: true - - - name: Test - run: yarn test --ci --coverage --maxWorkers=2 - env: - CI: true - - - name: Build - run: yarn build - env: - CI: true diff --git a/pkg/npm/http-api/.vscode/settings.json b/pkg/npm/http-api/.vscode/settings.json deleted file mode 100644 index cd44658026..0000000000 --- a/pkg/npm/http-api/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "files.watcherExclude": { - "**/node_modules/**": false - } -} \ No newline at end of file diff --git a/pkg/npm/http-api/LICENSE b/pkg/npm/http-api/LICENSE deleted file mode 100644 index a079e905ad..0000000000 --- a/pkg/npm/http-api/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 Tyler Brown Cifu Shuster - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/pkg/npm/http-api/package.json b/pkg/npm/http-api/package.json index 3d963dd76e..eb7ac9cd32 100644 --- a/pkg/npm/http-api/package.json +++ b/pkg/npm/http-api/package.json @@ -3,7 +3,11 @@ "version": "1.1.0", "license": "MIT", "description": "Library to interact with an Urbit ship over HTTP", - "repository": "github:tylershuster/urbit", + "repository" : { + "type" : "git", + "url": "ssh://git@github.com/urbit/urbit.git", + "directory": "pkg/npm/http-api" + }, "main": "dist/cjs/index.js", "module": "dist/esm/index.js", "browser": "dist/esm/index.js", @@ -27,7 +31,7 @@ "singleQuote": true, "trailingComma": "es5" }, - "author": "Tyler Brown Cifu Shuster", + "author": "", "devDependencies": { "@babel/core": "^7.12.3", "@babel/plugin-proposal-class-properties": "^7.12.1", From 7b48d3d3e15e25c23e3a46d4db98f9445f21aac4 Mon Sep 17 00:00:00 2001 From: Tyler Brown Cifu Shuster Date: Sun, 14 Feb 2021 14:18:32 -0800 Subject: [PATCH 021/338] interface: ignore plain js files when linting --- pkg/interface/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/interface/package.json b/pkg/interface/package.json index d4d35e33c0..bf58224c49 100644 --- a/pkg/interface/package.json +++ b/pkg/interface/package.json @@ -86,7 +86,7 @@ "webpack-dev-server": "^3.11.2" }, "scripts": { - "lint": "eslint ./src/**/*.{js,ts,tsx}", + "lint": "eslint ./src/**/*.{ts,tsx}", "lint-file": "eslint", "tsc": "tsc", "tsc:watch": "tsc --watch", From c272cdfff86ebe2fde6984e01a49325cf481e6da Mon Sep 17 00:00:00 2001 From: James Acklin Date: Mon, 15 Feb 2021 16:00:22 -0500 Subject: [PATCH 022/338] landscape: sets ModalButton label to nowrap Fixes urbit/landscape#435 --- .../apps/launch/components/ModalButton.tsx | 33 ++++++++----------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/pkg/interface/src/views/apps/launch/components/ModalButton.tsx b/pkg/interface/src/views/apps/launch/components/ModalButton.tsx index eea2d3b6e7..bb9618c8ae 100644 --- a/pkg/interface/src/views/apps/launch/components/ModalButton.tsx +++ b/pkg/interface/src/views/apps/launch/components/ModalButton.tsx @@ -1,38 +1,33 @@ -import React from "react" -import { Box, Button, Icon, Text } from "@tlon/indigo-react" -import {useModal} from "~/logic/lib/useModal"; +import React from 'react'; +import { Box, Button, Icon, Text } from '@tlon/indigo-react'; +import { useModal } from '~/logic/lib/useModal'; const ModalButton = (props) => { - const { - children, - icon, - text, - bg, - color, - ...rest - } = props; + const { children, icon, text, bg, color, ...rest } = props; const { modal, showModal } = useModal({ modal: props.children }); - return ( <> {modal} ); -} +}; export default ModalButton; From 5d2e7bf35b6004bb54bb0b032d6194d504f8ed96 Mon Sep 17 00:00:00 2001 From: James Acklin Date: Tue, 16 Feb 2021 08:46:45 -0500 Subject: [PATCH 023/338] chat: applies consistent padding and margin rules Fixes urbit/landscape#357 Fixes urbit/landscape#355 --- .../apps/chat/components/ChatMessage.tsx | 383 ++++++++---------- .../views/apps/chat/components/ChatWindow.tsx | 133 +++--- .../apps/chat/components/content/text.js | 88 ++-- .../src/views/apps/notifications/graph.tsx | 242 ++++++----- .../src/views/components/MentionText.tsx | 14 +- 5 files changed, 437 insertions(+), 423 deletions(-) diff --git a/pkg/interface/src/views/apps/chat/components/ChatMessage.tsx b/pkg/interface/src/views/apps/chat/components/ChatMessage.tsx index 6252383ddb..8bddbdeb4c 100644 --- a/pkg/interface/src/views/apps/chat/components/ChatMessage.tsx +++ b/pkg/interface/src/views/apps/chat/components/ChatMessage.tsx @@ -1,3 +1,4 @@ +/* eslint-disable max-lines-per-function */ import React, { useState, useEffect, @@ -17,7 +18,14 @@ import { useShowNickname, useHovering } from '~/logic/lib/util'; -import { Group, Association, Contacts, Post, Groups, Associations } from '~/types'; +import { + Group, + Association, + Contacts, + Post, + Groups, + Associations +} from '~/types'; import TextContent from './content/text'; import CodeContent from './content/code'; import RemoteContent from '~/views/components/RemoteContent'; @@ -27,34 +35,34 @@ import useLocalState from '~/logic/state/local'; export const DATESTAMP_FORMAT = '[~]YYYY.M.D'; -export const UnreadMarker = React.forwardRef(({ dayBreak, when }, ref) => ( - - - - New messages below - - - - -)); - export const DayBreak = ({ when }) => ( - - + + + {moment(when).calendar(null, { sameElse: DATESTAMP_FORMAT })} + ); +export const UnreadMarker = React.forwardRef(({ dayBreak, when }, ref) => ( + + + + New messages below + + + +)); + interface ChatMessageProps { measure(element): void; msg: Post; @@ -73,6 +81,7 @@ interface ChatMessageProps { history: any; api: any; highlighted?: boolean; + renderSigil?: boolean; } export default class ChatMessage extends Component { @@ -113,21 +122,26 @@ export default class ChatMessage extends Component { associations } = this.props; - const renderSigil = Boolean( - (nextMsg && msg.author !== nextMsg.author) || !nextMsg || msg.number === 1 - ); + let { renderSigil } = this.props; + + if (renderSigil === undefined) { + renderSigil = Boolean( + (nextMsg && msg.author !== nextMsg.author) || + !nextMsg || + msg.number === 1 + ); + } + const dayBreak = nextMsg && new Date(msg['time-sent']).getDate() !== new Date(nextMsg['time-sent']).getDate(); - const containerClass = `${ - renderSigil ? 'cf pl2 lh-copy' : 'items-top cf hide-child' - } ${isPending ? 'o-40' : ''} ${className}`; + const containerClass = `${isPending ? 'o-40' : ''} ${className}`; const timestamp = moment .unix(msg['time-sent'] / 1000) - .format(renderSigil ? 'hh:mm a' : 'hh:mm'); + .format(renderSigil ? 'h:mm A' : 'h:mm'); const reboundMeasure = (event) => { return measure(this.divRef.current); @@ -149,7 +163,7 @@ export default class ChatMessage extends Component { highlighted, fontSize, associations, - groups, + groups }; const unreadContainerStyle = { @@ -158,34 +172,22 @@ export default class ChatMessage extends Component { return ( {dayBreak && !isLastRead ? : null} {renderSigil ? ( - + <> + + + ) : ( - + )} - + {isLastRead ? ( { } } -interface MessageProps { - msg: Post; - timestamp: string; - group: Group; - association: Association; - contacts: Contacts; - containerClass: string; - isPending: boolean; - style: any; - measure(element): void; - scrollWindow: HTMLDivElement; - associations: Associations; - groups: Groups; -} - -export const MessageWithSigil = (props) => { - const { - msg, - timestamp, - contacts, - association, - associations, - groups, - group, - measure, - api, - history, - scrollWindow, - fontSize - } = props; - +export const MessageAuthor = ({ + timestamp, + contacts, + msg, + measure, + group, + api, + associations, + groups, + scrollWindow, + ...rest +}) => { const dark = useLocalState((state) => state.dark); const datestamp = moment .unix(msg['time-sent'] / 1000) .format(DATESTAMP_FORMAT); - const contact = `~${msg.author}` in contacts ? contacts[`~${msg.author}`] : false; + const contact = + `~${msg.author}` in contacts ? contacts[`~${msg.author}`] : false; const showNickname = useShowNickname(contact); const shipName = showNickname ? contact.nickname : cite(msg.author); const copyNotice = 'Copied'; @@ -290,17 +274,16 @@ export const MessageWithSigil = (props) => { padding={2} /> ); - return ( - <> + { setShowOverlay(true); }} - className='fl v-top pt1' height={16} - pr={3} + pr={2} pl={2} + cursor='pointer' position='relative' > {showOverlay && ( @@ -329,11 +312,11 @@ export const MessageWithSigil = (props) => { > { writeText(`~${msg.author}`); showCopyNotice(); @@ -342,48 +325,25 @@ export const MessageWithSigil = (props) => { > {displayName} - + {timestamp} {datestamp} - - {msg.contents.map((c, i) => ( - - ))} - - + ); }; -const ContentBox = styled(Box)` - & > :first-child { - margin-left: 0px; - } -`; - -export const MessageWithoutSigil = ({ +export const Message = ({ timestamp, contacts, msg, @@ -392,119 +352,94 @@ export const MessageWithoutSigil = ({ api, associations, groups, - scrollWindow + scrollWindow, + timestampHover, + ...rest }) => { const { hovering, bind } = useHovering(); return ( - <> - - {timestamp} - - - {msg.contents.map((c, i) => ( - - ))} - - - ); -}; - -export const MessageContent = ({ - content, - contacts, - api, - associations, - groups, - measure, - scrollWindow, - fontSize, - group -}) => { - if ('code' in content) { - return ; - } else if ('url' in content) { - return ( - - + + {timestampHover ? ( + + {timestamp} + + ) : ( + <> + )} + + {msg.contents.map((content, i) => { + switch (Object.keys(content)[0]) { + case 'text': + return ( + + ); + case 'code': + return ; + case 'url': + return ( + + + + ); + case 'mention': + return ( + + ); + default: + return null; + } + })} - ); - } else if ('text' in content) { - return ( - ); - } else if ('mention' in content) { - return ( - - ); - } else { - return null; - } + + ); }; export const MessagePlaceholder = ({ diff --git a/pkg/interface/src/views/apps/chat/components/ChatWindow.tsx b/pkg/interface/src/views/apps/chat/components/ChatWindow.tsx index 8db2935a50..98c0ac2bc5 100644 --- a/pkg/interface/src/views/apps/chat/components/ChatWindow.tsx +++ b/pkg/interface/src/views/apps/chat/components/ChatWindow.tsx @@ -1,22 +1,22 @@ -import React, { Component } from "react"; -import { RouteComponentProps } from "react-router-dom"; -import _ from "lodash"; +import React, { Component } from 'react'; +import { RouteComponentProps } from 'react-router-dom'; +import _ from 'lodash'; import bigInt, { BigInteger } from 'big-integer'; import { Col } from '@tlon/indigo-react'; -import GlobalApi from "~/logic/api/global"; -import { Patp, Path } from "~/types/noun"; -import { Contacts } from "~/types/contact-update"; -import { Association, Associations } from "~/types/metadata-update"; -import { Group, Groups } from "~/types/group-update"; -import { Envelope, IMessage } from "~/types/chat-update"; -import { Graph } from "~/types"; +import GlobalApi from '~/logic/api/global'; +import { Patp, Path } from '~/types/noun'; +import { Contacts } from '~/types/contact-update'; +import { Association, Associations } from '~/types/metadata-update'; +import { Group, Groups } from '~/types/group-update'; +import { Envelope, IMessage } from '~/types/chat-update'; +import { Graph } from '~/types'; -import VirtualScroller from "~/views/components/VirtualScroller"; +import VirtualScroller from '~/views/components/VirtualScroller'; import ChatMessage, { MessagePlaceholder } from './ChatMessage'; -import { UnreadNotice } from "./unread-notice"; +import { UnreadNotice } from './unread-notice'; const INITIAL_LOAD = 20; const DEFAULT_BACKLOG_SIZE = 100; @@ -38,7 +38,7 @@ type ChatWindowProps = RouteComponentProps<{ scrollTo?: number; associations: Associations; groups: Groups; -} +}; interface ChatWindowState { fetchPending: boolean; @@ -47,7 +47,10 @@ interface ChatWindowState { unreadIndex: BigInteger; } -export default class ChatWindow extends Component { +export default class ChatWindow extends Component< + ChatWindowProps, + ChatWindowState +> { private virtualList: VirtualScroller | null; private unreadMarkerRef: React.RefObject; private prevSize = 0; @@ -66,8 +69,6 @@ export default class ChatWindow extends Component { - if(this.props.scrollTo) { + if (this.props.scrollTo) { this.scrollToUnread(); } @@ -102,7 +103,7 @@ export default class ChatWindow extends Component { const { api, station, graph } = this.props; - if ( this.state.fetchPending && !force) { - return new Promise((resolve, reject) => {}); + if (this.state.fetchPending && !force) { + return new Promise((resolve, reject) => {}); } this.setState({ fetchPending: true }); - const [,, ship, name] = station.split('/'); + const [, , ship, name] = station.split('/'); const currSize = graph.size; - if(newer && !this.loadedNewest) { + if (newer && !this.loadedNewest) { const [index] = graph.peekLargest()!; - await api.graph.getYoungerSiblings(ship,name, 20, `/${index.toString()}`) - if(currSize === graph.size) { + await api.graph.getYoungerSiblings( + ship, + name, + 20, + `/${index.toString()}` + ); + if (currSize === graph.size) { console.log('loaded all newest'); this.loadedNewest = true; } - } else if(!newer && !this.loadedOldest) { + } else if (!newer && !this.loadedOldest) { const [index] = graph.peekSmallest()!; - await api.graph.getOlderSiblings(ship,name, 20, `/${index.toString()}`) + await api.graph.getOlderSiblings(ship, name, 20, `/${index.toString()}`); this.calculateUnreadIndex(); - if(currSize === graph.size) { + if (currSize === graph.size) { console.log('loaded all oldest'); this.loadedOldest = true; } } this.setState({ fetchPending: false }); - } onScroll({ scrollTop, scrollHeight, windowHeight }) { @@ -222,8 +226,8 @@ export default class ChatWindow extends Component scrollTop) - && (scrollHeight - parent.offsetTop < scrollTop + offsetHeight) + scrollHeight - parent.offsetTop > scrollTop && + scrollHeight - parent.offsetTop < scrollTop + offsetHeight ) { this.dismissUnread(); } @@ -246,24 +250,40 @@ export default class ChatWindow extends Component + {this.virtualList = list}} - origin="bottom" + ref={(list) => { + this.virtualList = list; + }} + origin='bottom' style={{ height: '100%' }} onStartReached={() => { this.setState({ idle: false }); @@ -276,18 +296,34 @@ export default class ChatWindow extends Component; + return ( + + ); } const isPending: boolean = 'pending' in msg && Boolean(msg.pending); - const isLastMessage = index.eq(graph.peekLargest()?.[0] ?? bigInt.zero); + const isLastMessage = index.eq( + graph.peekLargest()?.[0] ?? bigInt.zero + ); const highlighted = bigInt(this.props.scrollTo || -1).eq(index); - const graphIdx = keys.findIndex(idx => idx.eq(index)); - const prevIdx = keys[graphIdx+1]; - const nextIdx = keys[graphIdx-1]; - + const graphIdx = keys.findIndex((idx) => idx.eq(index)); + const prevIdx = keys[graphIdx + 1]; + const nextIdx = keys[graphIdx - 1]; const isLastRead: boolean = this.state.unreadIndex.eq(index); - const props = { measure, highlighted, scrollWindow, isPending, isLastRead, isLastMessage, msg, ...messageProps }; + const props = { + measure, + highlighted, + scrollWindow, + isPending, + isLastRead, + isLastMessage, + msg, + ...messageProps + }; return ( { - return {value} + inlineCode: ({ language, value }) => { + return ( + + {value} + + ); }, paragraph: ({ children }) => { - return ({children}); + return ( + + {children} + + ); }, - code: ({language, value}) => { - return - {value} - + code: ({ language, value }) => { + return ( + + {value} + + ); } }; -const MessageMarkdown = React.memo(props => ( +const MessageMarkdown = React.memo((props) => ( ( disallowedTypes={['heading', 'list', 'listItem', 'link']} allowNode={(node, index, parent) => { if ( - node.type === 'blockquote' - && parent.type === 'root' - && node.children.length - && node.children[0].type === 'paragraph' - && node.children[0].position.start.offset < 2 + node.type === 'blockquote' && + parent.type === 'root' && + node.children.length && + node.children[0].type === 'paragraph' && + node.children[0].position.start.offset < 2 ) { - node.children[0].children[0].value = '>' + node.children[0].children[0].value; + node.children[0].children[0].value = + '>' + node.children[0].children[0].value; return false; } return true; }} - plugins={[RemarkBreaks]} /> + plugins={[RemarkBreaks]} + /> )); export default function TextContent(props) { @@ -80,12 +99,13 @@ export default function TextContent(props) { const group = content.text.match( /([~][/])?(~[a-z]{3,6})(-[a-z]{6})?([/])(([a-z0-9-])+([/-])?)+/ ); - const isGroupLink = ((group !== null) // matched possible chatroom - && (group[2].length > 2) // possible ship? - && (urbitOb.isValidPatp(group[2]) // valid patp? - && (group[0] === content.text))) // entire message is room name? + const isGroupLink = + group !== null && // matched possible chatroom + group[2].length > 2 && // possible ship? + urbitOb.isValidPatp(group[2]) && // valid patp? + group[0] === content.text; // entire message is room name? - if(isGroupLink) { + if (isGroupLink) { const resource = `/ship/${content.text}`; return ( + ); diff --git a/pkg/interface/src/views/apps/notifications/graph.tsx b/pkg/interface/src/views/apps/notifications/graph.tsx index 7517b0b505..9fe909a1fd 100644 --- a/pkg/interface/src/views/apps/notifications/graph.tsx +++ b/pkg/interface/src/views/apps/notifications/graph.tsx @@ -1,8 +1,8 @@ -import React, { ReactNode, useCallback } from "react"; -import moment from "moment"; -import { Row, Box, Col, Text, Anchor, Icon, Action } from "@tlon/indigo-react"; -import { Link, useHistory } from "react-router-dom"; -import _ from "lodash"; +import React, { ReactNode, useCallback } from 'react'; +import moment from 'moment'; +import { Row, Box, Col, Text, Anchor, Icon, Action } from '@tlon/indigo-react'; +import { Link, useHistory } from 'react-router-dom'; +import _ from 'lodash'; import { Post, GraphNotifIndex, @@ -10,22 +10,22 @@ import { Associations, Content, Rolodex, - Groups, -} from "~/types"; -import { Header } from "./header"; -import { cite, deSig, pluralize } from "~/logic/lib/util"; -import { Sigil } from "~/logic/lib/sigil"; -import RichText from "~/views/components/RichText"; -import GlobalApi from "~/logic/api/global"; -import ReactMarkdown from "react-markdown"; -import { getSnippet } from "~/logic/lib/publish"; -import styled from "styled-components"; -import {MentionText} from "~/views/components/MentionText"; -import ChatMessage, {MessageWithoutSigil} from "../chat/components/ChatMessage"; + Groups +} from '~/types'; +import { Header } from './header'; +import { cite, deSig, pluralize } from '~/logic/lib/util'; +import { Sigil } from '~/logic/lib/sigil'; +import RichText from '~/views/components/RichText'; +import GlobalApi from '~/logic/api/global'; +import ReactMarkdown from 'react-markdown'; +import { getSnippet } from '~/logic/lib/publish'; +import styled from 'styled-components'; +import { MentionText } from '~/views/components/MentionText'; +import ChatMessage from '../chat/components/ChatMessage'; function getGraphModuleIcon(module: string) { - if (module === "link") { - return "Collection"; + if (module === 'link') { + return 'Collection'; } return _.capitalize(module); } @@ -40,75 +40,83 @@ const FilterBox = styled(Box)` function describeNotification(description: string, plural: boolean) { switch (description) { - case "link": - return `added ${pluralize("new link", plural)} to`; - case "comment": - return `left ${pluralize("comment", plural)} on`; - case "edit-comment": - return `updated ${pluralize("comment", plural)} on`; - case "note": - return `posted ${pluralize("note", plural)} to`; - case "edit-note": - return `updated ${pluralize("note", plural)} in`; - case "mention": - return "mentioned you on"; - case "message": - return `sent ${pluralize("message", plural)} to`; + case 'link': + return `added ${pluralize('new link', plural)} to`; + case 'comment': + return `left ${pluralize('comment', plural)} on`; + case 'edit-comment': + return `updated ${pluralize('comment', plural)} on`; + case 'note': + return `posted ${pluralize('note', plural)} to`; + case 'edit-note': + return `updated ${pluralize('note', plural)} in`; + case 'mention': + return 'mentioned you on'; + case 'message': + return `sent ${pluralize('message', plural)} to`; default: return description; } } const GraphUrl = ({ url, title }) => ( - - - + + + {title} ); -const GraphNodeContent = ({ group, post, contacts, mod, description, index, remoteContentPolicy }) => { +const GraphNodeContent = ({ + group, + post, + contacts, + mod, + description, + index, + remoteContentPolicy +}) => { const { contents } = post; - const idx = index.slice(1).split("/"); - if (mod === "link") { + const idx = index.slice(1).split('/'); + if (mod === 'link') { if (idx.length === 1) { const [{ text }, { url }] = contents; return ; } else if (idx.length === 3) { - return + return ( + + ); } return null; } - if (mod === "publish") { - if (idx[1] === "2") { - return - } else if (idx[1] === "1") { + if (mod === 'publish') { + if (idx[1] === '2') { + return ( + + ); + } else if (idx[1] === '1') { const [{ text: header }, { text: body }] = contents; const snippet = getSnippet(body); return ( - + {header} - - {snippet} + + {snippet} @@ -116,49 +124,57 @@ const GraphNodeContent = ({ group, post, contacts, mod, description, index, remo } } - if(mod === 'chat') { + if (mod === 'chat') { return ( - {}} - group={group} - contacts={contacts} - groups={{}} - associations={{ graph: {}, groups: {}}} - msg={post} - fontSize='0' - pt='2' - /> - ); - + width='100%' + flexShrink={0} + flexGrow={1} + flexWrap='wrap' + marginLeft='-32px' + > + {}} + group={group} + contacts={contacts} + groups={{}} + associations={{ graph: {}, groups: {} }} + msg={post} + fontSize='0' + pt='2' + /> + + ); } return null; }; -function getNodeUrl(mod: string, hidden: boolean, groupPath: string, graph: string, index: string) { +function getNodeUrl( + mod: string, + hidden: boolean, + groupPath: string, + graph: string, + index: string +) { if (hidden && mod === 'chat') { groupPath = '/messages'; } else if (hidden) { groupPath = '/home'; } const graphUrl = `/~landscape${groupPath}/resource/${mod}${graph}`; - const idx = index.slice(1).split("/"); - if (mod === "publish") { + const idx = index.slice(1).split('/'); + if (mod === 'publish') { const [noteId] = idx; return `${graphUrl}/note/${noteId}`; - } else if (mod === "link") { + } else if (mod === 'link') { const [linkId] = idx; return `${graphUrl}/${linkId}`; } else if (mod === 'chat') { return graphUrl; } - return ""; + return ''; } const GraphNode = ({ post, @@ -186,41 +202,45 @@ const GraphNode = ({ size={16} icon color={`#000000`} - classes="mix-blend-diff" + classes='mix-blend-diff' padding={2} /> - ) : ; + ) : ( + + ); const groupContacts = contacts[groupPath] ?? {}; const nodeUrl = getNodeUrl(mod, group?.hidden, groupPath, graph, index); const onClick = useCallback(() => { - if(!read) { + if (!read) { onRead(); } history.push(nodeUrl); }, [read, onRead]); return ( - + {img} - - {showContact && - - {cite(author)} - - - {moment(time).format("HH:mm")} - - } - + + {showContact && ( + + + {cite(author)} + + + {moment(time).format('HH:mm')} + + + )} +
- + {_.map(contents, (content, idx) => ( { - setShowOverlay(value => !value); - }, - [showOverlay] - ); + const toggleOverlay = useCallback(() => { + setShowOverlay((value) => !value); + }, [showOverlay]); return ( toggleOverlay()} - mx='2px' - px='2px' + mx={1} + px={1} bg='washedBlue' color='blue' + fontSize={showNickname ? 1 : 0} mono={!showNickname} > {name} From c90857db59281382a24f7ea98f7d96092f6f9531 Mon Sep 17 00:00:00 2001 From: Tyler Brown Cifu Shuster Date: Tue, 16 Feb 2021 07:20:57 -0800 Subject: [PATCH 024/338] npm: removed lock files --- pkg/npm/api/package-lock.json | 31 - pkg/npm/eslint-config/package-lock.json | 1018 ----- pkg/npm/http-api/package-lock.json | 5591 ----------------------- 3 files changed, 6640 deletions(-) delete mode 100644 pkg/npm/api/package-lock.json delete mode 100644 pkg/npm/eslint-config/package-lock.json delete mode 100644 pkg/npm/http-api/package-lock.json diff --git a/pkg/npm/api/package-lock.json b/pkg/npm/api/package-lock.json deleted file mode 100644 index e4855e4ecb..0000000000 --- a/pkg/npm/api/package-lock.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@urbit/api", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - } - } -} diff --git a/pkg/npm/eslint-config/package-lock.json b/pkg/npm/eslint-config/package-lock.json deleted file mode 100644 index 49230650eb..0000000000 --- a/pkg/npm/eslint-config/package-lock.json +++ /dev/null @@ -1,1018 +0,0 @@ -{ - "name": "@urbit/eslint-config", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/generator": { - "version": "7.12.15", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.15.tgz", - "integrity": "sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", - "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.16.tgz", - "integrity": "sha512-c/+u9cqV6F0+4Hpq01jnJO+GLp2DdT63ppz9Xa+6cHaajM9VFzK/iDXiKK65YtpeVwu+ctfS6iqlMqRgQRzeCw==", - "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.13.tgz", - "integrity": "sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", - "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.4", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.4", - "fastq": "^1.6.0" - } - }, - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.0.tgz", - "integrity": "sha512-DJgdGZW+8CFUTz5C/dnn4ONcUm2h2T0itWD85Ob5/V27Ndie8hUoX5HKyGssvR8sUMkAIlUc/AMK67Lqa3kBIQ==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.15.0", - "@typescript-eslint/scope-manager": "4.15.0", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.0.tgz", - "integrity": "sha512-V4vaDWvxA2zgesg4KPgEGiomWEBpJXvY4ZX34Y3qxK8LUm5I87L+qGIOTd9tHZOARXNRt9pLbblSKiYBlGMawg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.15.0", - "@typescript-eslint/types": "4.15.0", - "@typescript-eslint/typescript-estree": "4.15.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.15.0.tgz", - "integrity": "sha512-L6Dtbq8Bc7g2aZwnIBETpmUa9XDKCMzKVwAArnGp5Mn7PRNFjf3mUzq8UeBjL3K8t311hvevnyqXAMSmxO8Gpg==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.15.0", - "@typescript-eslint/types": "4.15.0", - "@typescript-eslint/typescript-estree": "4.15.0", - "debug": "^4.1.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.15.0.tgz", - "integrity": "sha512-CSNBZnCC2jEA/a+pR9Ljh8Y+5TY5qgbPz7ICEk9WCpSEgT6Pi7H2RIjxfrrbUXvotd6ta+i27sssKEH8Azm75g==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.15.0", - "@typescript-eslint/visitor-keys": "4.15.0" - } - }, - "@typescript-eslint/types": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.0.tgz", - "integrity": "sha512-su4RHkJhS+iFwyqyXHcS8EGPlUVoC+XREfy5daivjLur9JP8GhvTmDipuRpcujtGC4M+GYhUOJCPDE3rC5NJrg==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.0.tgz", - "integrity": "sha512-jG6xTmcNbi6xzZq0SdWh7wQ9cMb2pqXaUp6bUZOMsIlu5aOlxGxgE/t6L/gPybybQGvdguajXGkZKSndZJpksA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.15.0", - "@typescript-eslint/visitor-keys": "4.15.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.0.tgz", - "integrity": "sha512-RnDtJwOwFucWFAMjG3ghCG/ikImFJFEg20DI7mn4pHEx3vC48lIAoyjhffvfHmErRDboUPC7p9Z2il4CLb7qxA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.15.0", - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", - "dev": true - } - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "array-includes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", - "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "get-intrinsic": "^1.0.1", - "is-string": "^1.0.5" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - } - }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "es-abstract": { - "version": "1.18.0-next.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", - "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.1", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.3", - "string.prototype.trimstart": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint-plugin-react": { - "version": "7.22.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz", - "integrity": "sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "array.prototype.flatmap": "^1.2.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "object.entries": "^1.1.2", - "object.fromentries": "^2.0.2", - "object.values": "^1.1.1", - "prop-types": "^15.7.2", - "resolve": "^1.18.1", - "string.prototype.matchall": "^4.0.2" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "fastq": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.1.tgz", - "integrity": "sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", - "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - } - }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", - "dev": true, - "requires": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", - "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - } - }, - "object.fromentries": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz", - "integrity": "sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - } - }, - "object.values": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", - "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - } - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "queue-microtask": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", - "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", - "dev": true - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "string.prototype.matchall": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz", - "integrity": "sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.3" - } - }, - "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz", - "integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "typescript": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz", - "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } -} diff --git a/pkg/npm/http-api/package-lock.json b/pkg/npm/http-api/package-lock.json deleted file mode 100644 index 0b03dfdd46..0000000000 --- a/pkg/npm/http-api/package-lock.json +++ /dev/null @@ -1,5591 +0,0 @@ -{ - "name": "@urbit/http-api", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.3", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", - "dev": true, - "requires": { - "@babel/types": "^7.12.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - }, - "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", - "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", - "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", - "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==", - "dev": true - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", - "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz", - "integrity": "sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz", - "integrity": "sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-typescript": "^7.12.1" - } - }, - "@babel/preset-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz", - "integrity": "sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-transform-typescript": "^7.12.1" - } - }, - "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", - "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.5", - "@babel/types": "^7.12.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, - "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.12.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", - "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" - } - }, - "@types/anymatch": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", - "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", - "dev": true - }, - "@types/browser-or-node": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/browser-or-node/-/browser-or-node-1.2.0.tgz", - "integrity": "sha512-hLn4jvpZ804yQDu71YW7qNQDm045XmODoEOZohkH4jWb23AaPodhVM5qztG+XM54Oqw8X1dA4A7z49iNFGbrxA==", - "dev": true - }, - "@types/eslint": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.4.tgz", - "integrity": "sha512-YCY4kzHMsHoyKspQH+nwSe+70Kep7Vjt2X+dZe5Vs2vkRudqtoFoUIv1RlJmZB8Hbp7McneupoZij4PadxsK5Q==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.45", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz", - "integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==", - "dev": true - }, - "@types/eventsource": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@types/eventsource/-/eventsource-1.1.5.tgz", - "integrity": "sha512-BA9q9uC2PAMkUS7DunHTxWZZaVpeNzDG8lkBxcKwzKJClfDQ4Z59/Csx7HSH/SIqFN2JWh0tAKAM6k/wRR0OZg==", - "dev": true - }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/node": { - "version": "14.0.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.14.tgz", - "integrity": "sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", - "dev": true - }, - "@types/react": { - "version": "16.9.56", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.56.tgz", - "integrity": "sha512-gIkl4J44G/qxbuC6r2Xh+D3CGZpJ+NdWTItAPmZbR5mUS+JQ8Zvzpl0ea5qT/ZT3ZNTUcDKUVqV3xBE8wv/DyQ==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@types/tapable": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", - "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==", - "dev": true - }, - "@types/uglify-js": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.3.tgz", - "integrity": "sha512-KswB5C7Kwduwjj04Ykz+AjvPcfgv/37Za24O2EDzYNbwyzOo8+ydtvzUfZ5UMguiVu29Gx44l1A6VsPPcmYu9w==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "@types/webpack": { - "version": "4.41.22", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.22.tgz", - "integrity": "sha512-JQDJK6pj8OMV9gWOnN1dcLCyU9Hzs6lux0wBO4lr1+gyEhIBR9U3FMrz12t2GPkg110XAxEAw2WHF6g7nZIbRQ==", - "dev": true, - "requires": { - "@types/anymatch": "*", - "@types/node": "*", - "@types/tapable": "*", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "source-map": "^0.6.0" - } - }, - "@types/webpack-sources": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-1.4.2.tgz", - "integrity": "sha512-77T++JyKow4BQB/m9O96n9d/UUHWLQHlcqXb9Vsf4F1+wKNrrlWNFPDLKNT92RJnCSL6CieTc+NDXtCVZswdTw==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.7.0.tgz", - "integrity": "sha512-li9aiSVBBd7kU5VlQlT1AqP0uWGDK6JYKUQ9cVDnOg34VNnd9t4jr0Yqc/bKxJr/tDCPDaB4KzoSFN9fgVxe/Q==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.7.0", - "@typescript-eslint/scope-manager": "4.7.0", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.7.0.tgz", - "integrity": "sha512-cymzovXAiD4EF+YoHAB5Oh02MpnXjvyaOb+v+BdpY7lsJXZQN34oIETeUwVT2XfV9rSNpXaIcknDLfupO/tUoA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.7.0", - "@typescript-eslint/types": "4.7.0", - "@typescript-eslint/typescript-estree": "4.7.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.7.0.tgz", - "integrity": "sha512-+meGV8bMP1sJHBI2AFq1GeTwofcGiur8LoIr6v+rEmD9knyCqDlrQcFHR0KDDfldHIFDU/enZ53fla6ReF4wRw==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.7.0", - "@typescript-eslint/types": "4.7.0", - "@typescript-eslint/typescript-estree": "4.7.0", - "debug": "^4.1.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.7.0.tgz", - "integrity": "sha512-ILITvqwDJYbcDCROj6+Ob0oCKNg3SH46iWcNcTIT9B5aiVssoTYkhKjxOMNzR1F7WSJkik4zmuqve5MdnA0DyA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.7.0", - "@typescript-eslint/visitor-keys": "4.7.0" - } - }, - "@typescript-eslint/types": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.7.0.tgz", - "integrity": "sha512-uLszFe0wExJc+I7q0Z/+BnP7wao/kzX0hB5vJn4LIgrfrMLgnB2UXoReV19lkJQS1a1mHWGGODSxnBx6JQC3Sg==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.7.0.tgz", - "integrity": "sha512-5XZRQznD1MfUmxu1t8/j2Af4OxbA7EFU2rbo0No7meb46eHgGkSieFdfV6omiC/DGIBhH9H9gXn7okBbVOm8jw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.7.0", - "@typescript-eslint/visitor-keys": "4.7.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.7.0.tgz", - "integrity": "sha512-aDJDWuCRsf1lXOtignlfiPODkzSxxop7D0rZ91L6ZuMlcMCSh0YyK+gAfo5zN/ih6WxMwhoXgJWC3cWQdaKC+A==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.7.0", - "eslint-visitor-keys": "^2.0.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", - "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", - "dev": true - }, - "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", - "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", - "requires": { - "array-filter": "^1.0.0" - } - }, - "babel-loader": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.1.tgz", - "integrity": "sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw==", - "dev": true, - "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.0.tgz", - "integrity": "sha512-Jrdy04F2EKcNggUDfubMUPNAZg2vMquLQSm8sKLYJvz40ClFL1S8GKyDshGkNsbNNE5Z+fQavzU7nSK1I9JUGA==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "browser-or-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", - "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.14.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz", - "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001157", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.591", - "escalade": "^3.1.1", - "node-releases": "^1.1.66" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001157", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001157.tgz", - "integrity": "sha512-gOerH9Wz2IRZ2ZPdMfBvyOi3cjaz4O4dgNwPGzx8EhqAs4+2IL/O+fJsbt+znSigujoZG8bVcIAUM/I/E5K3MA==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "dependencies": { - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - } - } - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", - "dev": true, - "requires": { - "@types/webpack": "^4.4.31", - "del": "^4.1.1" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "csstype": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.4.tgz", - "integrity": "sha512-xc8DUsCLmjvCfoD7LTGE0ou2MIWLx0K9RCZwSHMOdynqRsP4MtUcLeqh1HcQ2dInwDTqn+3CE0/FZh1et+p4jA==", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "dependencies": { - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - } - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.592", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.592.tgz", - "integrity": "sha512-kGNowksvqQiPb1pUSQKpd8JFoGPLxYOwduNRCqCxGh/2Q1qE2JdmwouCW41lUzDxOb/2RIV4lR0tVIfboWlO9A==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", - "dev": true - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", - "dev": true - }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "requires": { - "original": "^1.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fastq": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", - "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "dev": true, - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - }, - "dependencies": { - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - } - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", - "dev": true - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" - }, - "is-core-module": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", - "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-generator-function": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", - "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dev": true, - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", - "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typed-array": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.3.tgz", - "integrity": "sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ==", - "requires": { - "available-typed-arrays": "^1.0.0", - "es-abstract": "^1.17.4", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "loader-runner": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.1.0.tgz", - "integrity": "sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==", - "dev": true - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "loglevel": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", - "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==", - "dev": true - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true - }, - "node-releases": { - "version": "1.1.66", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.66.tgz", - "integrity": "sha512-JHEQ1iWPGK+38VLB2H9ef2otU4l8s3yAMt9Xf934r6+ojCYDMHPMqvCc9TnzfeFSP1QEOeU6YZEd3+De0LTCgg==", - "dev": true - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" - }, - "object-is": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", - "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "requires": { - "url-parse": "^1.4.3" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dev": true, - "requires": { - "retry": "^0.12.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - } - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "dependencies": { - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - } - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", - "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", - "dev": true, - "requires": { - "node-forge": "^0.10.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", - "dev": true, - "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.4.0", - "websocket-driver": "0.6.5" - }, - "dependencies": { - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - } - } - }, - "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", - "dev": true, - "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - } - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "requires": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "stream-http": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz", - "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "terser": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.8.tgz", - "integrity": "sha512-zVotuHoIfnYjtlurOouTazciEfL7V38QMAOhGqpXDEg6yT13cF4+fEP9b0rrCEQTn+tT46uxgFsTZzhygk+CzQ==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ==", - "dev": true, - "requires": { - "jest-worker": "^26.6.1", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.3.8" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", - "dev": true - }, - "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", - "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "watchpack": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.0.1.tgz", - "integrity": "sha512-vO8AKGX22ZRo6PiOFM9dC0re8IcKh8Kd/aH2zeqUc6w4/jBGlTy2P7fTC6ekT0NjVeGjgU2dGC5rNstKkeLEQg==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webpack": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.4.0.tgz", - "integrity": "sha512-udpYTyqz8toTTdaOsL2QKPLeZLt2IEm9qY7yTXuFEQhKu5bk0yQD9BtAdVQksmz4jFbbWOiWmm3NHarO0zr/ng==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.45", - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^8.0.4", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.3.1", - "eslint-scope": "^5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.1.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "pkg-dir": "^4.2.0", - "schema-utils": "^3.0.0", - "tapable": "^2.0.0", - "terser-webpack-plugin": "^5.0.3", - "watchpack": "^2.0.0", - "webpack-sources": "^2.1.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "enhanced-resolve": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.3.1.tgz", - "integrity": "sha512-G1XD3MRGrGfNcf6Hg0LVZG7GIKcYkbfHa5QMxt1HDUTdYoXH0JR1xXyg+MaKLF73E9A27uWNVxvFivNRYeUB6w==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.0.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "tapable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.1.1.tgz", - "integrity": "sha512-Wib1S8m2wdpLbmQz0RBEVosIyvb/ykfKXf3ZIDqvWoMg/zTNm6G/tDSuUM61J1kNCDXWJrLHGSFeMhAG+gAGpQ==", - "dev": true - } - } - }, - "webpack-cli": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", - "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.1", - "findup-sync": "^3.0.0", - "global-modules": "^2.0.0", - "import-local": "^2.0.0", - "interpret": "^1.4.0", - "loader-utils": "^1.4.0", - "supports-color": "^6.1.0", - "v8-compile-cache": "^2.1.1", - "yargs": "^13.3.2" - } - }, - "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", - "dev": true - } - } - }, - "webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "webpack-sources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } - }, - "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", - "dev": true, - "requires": { - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "which-typed-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.2.tgz", - "integrity": "sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ==", - "requires": { - "available-typed-arrays": "^1.0.2", - "es-abstract": "^1.17.5", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" - }, - "xmlhttprequest-ssl": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.0.tgz", - "integrity": "sha512-z59ztoKPjoFdK6uki5DRiMwPCYtHgp42vCamEpirB9j6zqnbNYBp/2GfrTEOG6IcS9OoMWmIiauU6d2RQNcdbA==" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } -} From a52a6c3cd924db7a7fae61d165057288390fa699 Mon Sep 17 00:00:00 2001 From: James Acklin Date: Tue, 16 Feb 2021 17:22:38 -0500 Subject: [PATCH 025/338] landscape: use styled-system prop instead of tachyons class Fixes urbit/landscape#435 --- pkg/interface/src/views/apps/launch/components/ModalButton.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/interface/src/views/apps/launch/components/ModalButton.tsx b/pkg/interface/src/views/apps/launch/components/ModalButton.tsx index bb9618c8ae..fc4ff338f0 100644 --- a/pkg/interface/src/views/apps/launch/components/ModalButton.tsx +++ b/pkg/interface/src/views/apps/launch/components/ModalButton.tsx @@ -22,7 +22,7 @@ const ModalButton = (props) => { {...rest} > - + {props.text} From 0761df261e32d7547c55f2782e44e4ea4e85c9f1 Mon Sep 17 00:00:00 2001 From: Tyler Brown Cifu Shuster Date: Tue, 16 Feb 2021 15:11:16 -0800 Subject: [PATCH 026/338] interfaced: added missing import --- pkg/interface/src/views/apps/links/LinkWindow.tsx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/pkg/interface/src/views/apps/links/LinkWindow.tsx b/pkg/interface/src/views/apps/links/LinkWindow.tsx index 01ebbdbc2b..7f28b79808 100644 --- a/pkg/interface/src/views/apps/links/LinkWindow.tsx +++ b/pkg/interface/src/views/apps/links/LinkWindow.tsx @@ -1,21 +1,21 @@ import React, { useRef, useCallback, useEffect, useMemo } from 'react'; -import { Col } from '@tlon/indigo-react'; + +import { Col, Text } from '@tlon/indigo-react'; import bigInt from 'big-integer'; import { Association, Graph, - Contacts, Unreads, - LocalUpdateRemoteContentPolicy, Group, Rolodex, - S3State } from '@urbit/api'; + import GlobalApi from '~/logic/api/global'; import VirtualScroller from '~/views/components/VirtualScroller'; import { LinkItem } from './components/LinkItem'; import LinkSubmit from './components/LinkSubmit'; import { isWriter } from '~/logic/lib/group'; +import { S3State } from '~/types/s3-update'; interface LinkWindowProps { association: Association; @@ -33,8 +33,6 @@ interface LinkWindowProps { } export function LinkWindow(props: LinkWindowProps) { const { graph, api, association } = props; - const loadedNewest = useRef(true); - const loadedOldest = useRef(false); const virtualList = useRef(); const fetchLinks = useCallback( async (newer: boolean) => { From 9d8be26fead865ac596d8cd1ad13b62320b2672a Mon Sep 17 00:00:00 2001 From: Liam Fitzgerald Date: Wed, 17 Feb 2021 12:22:07 +1000 Subject: [PATCH 027/338] meta: add .gitignore for npm --- pkg/npm/.gitignore | 1 + pkg/npm/api/package.json | 4 ++-- pkg/npm/http-api/package.json | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 pkg/npm/.gitignore diff --git a/pkg/npm/.gitignore b/pkg/npm/.gitignore new file mode 100644 index 0000000000..d8b83df9cd --- /dev/null +++ b/pkg/npm/.gitignore @@ -0,0 +1 @@ +package-lock.json diff --git a/pkg/npm/api/package.json b/pkg/npm/api/package.json index e9e9eefe44..55e8e273db 100644 --- a/pkg/npm/api/package.json +++ b/pkg/npm/api/package.json @@ -2,8 +2,8 @@ "name": "@urbit/api", "version": "1.0.0", "description": "", - "repository" : { - "type" : "git", + "repository": { + "type": "git", "url": "ssh://git@github.com/urbit/urbit.git", "directory": "pkg/npm/api" }, diff --git a/pkg/npm/http-api/package.json b/pkg/npm/http-api/package.json index eb7ac9cd32..25d701a284 100644 --- a/pkg/npm/http-api/package.json +++ b/pkg/npm/http-api/package.json @@ -3,8 +3,8 @@ "version": "1.1.0", "license": "MIT", "description": "Library to interact with an Urbit ship over HTTP", - "repository" : { - "type" : "git", + "repository": { + "type": "git", "url": "ssh://git@github.com/urbit/urbit.git", "directory": "pkg/npm/http-api" }, From ad035b54f1fa58d09acc4741e331957821a20526 Mon Sep 17 00:00:00 2001 From: Liam Fitzgerald Date: Wed, 17 Feb 2021 12:23:49 +1000 Subject: [PATCH 028/338] urbit/api: bring inline with current userspace --- pkg/npm/api/contacts/index.d.ts | 77 +++++++++++------------ pkg/npm/api/contacts/index.ts | 107 +++++++++++--------------------- pkg/npm/api/graph/index.d.ts | 9 +++ pkg/npm/api/graph/index.ts | 12 ++-- pkg/npm/api/groups/index.ts | 8 ++- pkg/npm/api/groups/update.d.ts | 7 +-- pkg/npm/api/hark/index.d.ts | 2 +- pkg/npm/api/invite/index.d.ts | 19 ++++-- pkg/npm/api/invite/index.ts | 10 +-- pkg/npm/api/lib/index.d.ts | 15 ++--- pkg/npm/api/lib/util.ts | 4 +- pkg/npm/api/metadata/index.d.ts | 16 +++-- pkg/npm/api/metadata/index.ts | 36 ++++------- pkg/npm/api/tsconfig.json | 6 +- 14 files changed, 147 insertions(+), 181 deletions(-) diff --git a/pkg/npm/api/contacts/index.d.ts b/pkg/npm/api/contacts/index.d.ts index d29331be83..e03e1f4402 100644 --- a/pkg/npm/api/contacts/index.d.ts +++ b/pkg/npm/api/contacts/index.d.ts @@ -1,25 +1,14 @@ import { Path, Patp } from ".."; +import {Resource} from "groups/update"; export type ContactUpdate = - | ContactUpdateCreate - | ContactUpdateDelete | ContactUpdateAdd | ContactUpdateRemove | ContactUpdateEdit | ContactUpdateInitial - | ContactUpdateContacts; - -interface ContactUpdateCreate { - create: Path; -} - -interface ContactUpdateDelete { - delete: Path; -} interface ContactUpdateAdd { add: { - path: Path; ship: Patp; contact: Contact; }; @@ -27,7 +16,6 @@ interface ContactUpdateAdd { interface ContactUpdateRemove { remove: { - path: Path; ship: Patp; }; } @@ -36,50 +24,55 @@ interface ContactUpdateEdit { edit: { path: Path; ship: Patp; - "edit-field": ContactEdit; + "edit-field": ContactEditField; + timestamp: number; }; } +interface ContactUpdateAllowShips { + allow: { + ships: Patp[]; + } +} + +interface ContactUpdateAllowGroup { + allow: { + group: Path; + } +} + +interface ContactUpdateSetPublic { + 'set-public': boolean; +} + +export interface ContactShare { + share: Patp; +} + interface ContactUpdateInitial { initial: Rolodex; } -interface ContactUpdateContacts { - contacts: { - path: Path; - contacts: Contacts; - }; -} - -// - -type ContactAvatar = ContactAvatarUrl | ContactAvatarOcts; - export type Rolodex = { - [p in Path]: Contacts; -}; - -export type Contacts = { [p in Patp]: Contact; }; -interface ContactAvatarUrl { - url: string; -} - -interface ContactAvatarOcts { - octs: string; -} export interface Contact { nickname: string; - email: string; - phone: string; - website: string; - notes: string; + bio: string; + status: string; color: string; avatar: string | null; + cover: string | null; + groups: Path[]; + 'last-updated': number; } -export type ContactEdit = { - [k in keyof Contact]: Contact[k]; +type ContactKeys = keyof Contact; + +export type ContactEditFieldPrim = Exclude; + +export type ContactEditField = Partial> & { + 'add-group'?: Resource; + 'remove-group'?: Resource; }; diff --git a/pkg/npm/api/contacts/index.ts b/pkg/npm/api/contacts/index.ts index f952fffaac..ca5ba9d015 100644 --- a/pkg/npm/api/contacts/index.ts +++ b/pkg/npm/api/contacts/index.ts @@ -1,83 +1,50 @@ import { Enc, Path, Patp, Poke } from ".."; -import { Contact, ContactEdit, ContactUpdateCreate, ContactUpdateEdit, ContactUpdateRemove } from "./index.d"; -import { GroupPolicy, Resource } from "../groups/index.d" +import { + Contact, + ContactUpdateAdd, + ContactUpdateEdit, + ContactUpdateRemove, + ContactEditField, + ContactShare, + ContactUpdate, +} from "./index.d"; -export const viewAction = (data: T): Poke => ({ - app: 'contact-view', - mark: 'json', - json: data +export const storeAction = (data: T): Poke => ({ + app: "contact-store", + mark: "contact-action", + json: data, }); -export const hookAction = (data: T): Poke => ({ - app: 'contact-hook', - mark: 'contact-action', - json: data -}); +export const add = (ship: Patp, contact: Contact): Poke => { + contact["last-updated"] = Date.now(); -export const create = ( - name: string, - policy: Enc, - title: string, - description: string -): Poke => viewAction({ // TODO which type is correct? - create: { - name, - policy, - title, - description - } -}); + return storeAction({ + add: { ship, contact }, + }); +}; -export const share = ( - recipient: Patp, - path: Patp, - ship: Patp, - contact: Contact -): Poke => viewAction({ // TODO type - share: { - recipient, - path, - ship, - contact - } -}); +export const remove = (ship: Patp): Poke => + storeAction({ + remove: { ship }, + }); -export const remove = ( - path: Path, - ship: Patp -): Poke => viewAction({ - remove: { - path, - ship - } +export const share = (recipient: Patp): Poke => ({ + app: "contact-push-hook", + mark: "contact-action", + json: { share: recipient }, }); export const edit = ( path: Path, ship: Patp, - editField: ContactEdit -): Poke => hookAction({ - edit: { - path, - ship, - 'edit-field': editField - } -}); + editField: ContactEditField +): Poke => + storeAction({ + edit: { + path, + ship, + "edit-field": editField, + timestamp: Date.now(), + }, + }); -export const invite = ( - resource: Resource, - ship: Patp, - text: string = '' -): Poke => viewAction({ // TODO type - invite: { - resource, - ship, - text - } -}); - -export const join = ( - resource: Resource -): Poke => viewAction({ // TODO type - join: resource -}); \ No newline at end of file diff --git a/pkg/npm/api/graph/index.d.ts b/pkg/npm/api/graph/index.d.ts index 17abee3cb4..b98872e813 100644 --- a/pkg/npm/api/graph/index.d.ts +++ b/pkg/npm/api/graph/index.d.ts @@ -37,6 +37,15 @@ export interface Post { "time-sent": number; } +export interface GraphNodePoke { + post: Post; + children: GraphChildrenPoke | null; +} + +export interface GraphChildrenPoke { + [k: string]: GraphNodePoke; +} + export interface GraphNode { children: Graph; post: Post; diff --git a/pkg/npm/api/graph/index.ts b/pkg/npm/api/graph/index.ts index a12edb6510..82d4cc986e 100644 --- a/pkg/npm/api/graph/index.ts +++ b/pkg/npm/api/graph/index.ts @@ -1,20 +1,20 @@ import _ from 'lodash'; import { PatpNoSig, Patp, Poke, Thread, Path, Enc } from '..'; -import { Content, GraphNode, Post } from './index.d'; +import { Content, GraphNode, Post, GraphNodePoke, GraphChildrenPoke } from './index.d'; import { deSig, unixToDa } from '../lib/util'; import { makeResource, resourceFromPath } from '../groups/index'; -import { GroupPolicy } from '../groups'; +import { GroupPolicy } from '../groups/update.d'; export const createBlankNodeWithChildPost = ( ship: PatpNoSig, parentIndex: string = '', childIndex: string = '', contents: Content[] -): GraphNode => { +): GraphNodePoke => { const date = unixToDa(Date.now()).toString(); const nodeIndex = parentIndex + '/' + date; - const childGraph = {}; + const childGraph: GraphChildrenPoke = {}; childGraph[childIndex] = { post: { author: `~${ship}`, @@ -253,7 +253,7 @@ export const addNode = ( let nodes = {}; nodes[node.post.index] = node; - return this.addNodes(ship, name, nodes); + return addNodes(ship, name, nodes); } export const addNodes = ( @@ -367,4 +367,4 @@ export const removeNodes = ( // data: node // }); // }); -// } \ No newline at end of file +// } diff --git a/pkg/npm/api/groups/index.ts b/pkg/npm/api/groups/index.ts index 8679c6d7e2..02122d3e56 100644 --- a/pkg/npm/api/groups/index.ts +++ b/pkg/npm/api/groups/index.ts @@ -12,6 +12,7 @@ import { Resource, Tag } from "./index.d"; +import { GroupPolicy } from "./update"; export const proxyAction = (data: T): Poke => ({ app: 'group-push-hook', @@ -106,6 +107,11 @@ export function makeResource(ship: string, name:string) { return { ship, name }; } +export const groupBunts = { + group: (): Group => ({ members: new Set(), tags: { role: {} }, hidden: false, policy: groupBunts.policy() }), + policy: (): GroupPolicy => ({ open: { banned: new Set(), banRanks: new Set() } }) +}; + export const joinError = ['no-perms', 'strange'] as const; export const joinResult = ['done', ...joinError] as const; -export const joinProgress = ['start', 'added', ...joinResult] as const; \ No newline at end of file +export const joinProgress = ['start', 'added', ...joinResult] as const; diff --git a/pkg/npm/api/groups/update.d.ts b/pkg/npm/api/groups/update.d.ts index 7788fdd83b..00d3ac340b 100644 --- a/pkg/npm/api/groups/update.d.ts +++ b/pkg/npm/api/groups/update.d.ts @@ -133,7 +133,7 @@ interface GroupUpdateRemoveTag { removeTag: { tag: Tag; resource: Resource; - ships: PatpNoSig; + ships: PatpNoSig[]; }; } @@ -174,7 +174,4 @@ export type GroupUpdate = export type GroupAction = Omit; -export const groupBunts = { - group: (): Group => ({ members: new Set(), tags: { role: {} }, hidden: false, policy: groupBunts.policy() }), - policy: (): GroupPolicy => ({ open: { banned: new Set(), banRanks: new Set() } }) -}; + diff --git a/pkg/npm/api/hark/index.d.ts b/pkg/npm/api/hark/index.d.ts index 1aee7bab7f..eaa92db40b 100644 --- a/pkg/npm/api/hark/index.d.ts +++ b/pkg/npm/api/hark/index.d.ts @@ -1,6 +1,6 @@ import { Post } from "../graph/index.d"; import { GroupUpdate } from "../groups/index.d"; -import { BigIntOrderedMap } from "~/logic/lib/BigIntOrderedMap"; +import BigIntOrderedMap from "../lib/BigIntOrderedMap"; export type GraphNotifDescription = "link" | "comment" | "note" | "mention"; diff --git a/pkg/npm/api/invite/index.d.ts b/pkg/npm/api/invite/index.d.ts index 01f080ef5f..05b43ce8a5 100644 --- a/pkg/npm/api/invite/index.d.ts +++ b/pkg/npm/api/invite/index.d.ts @@ -1,14 +1,21 @@ import { Serial, PatpNoSig, Path } from '..'; -import { Resource } from '../groups'; +import { Resource } from "../groups/update.d"; export type InviteUpdate = InviteUpdateInitial | InviteUpdateCreate | InviteUpdateDelete | InviteUpdateInvite +| InviteUpdateAccept | InviteUpdateAccepted | InviteUpdateDecline; +interface InviteUpdateAccept { + accept: { + term: string; + uid: Serial; + } +} interface InviteUpdateInitial { initial: Invites; @@ -16,19 +23,19 @@ interface InviteUpdateInitial { interface InviteUpdateCreate { create: { - path: Path; + term: string; }; } interface InviteUpdateDelete { delete: { - path: Path; + term: string; }; } interface InviteUpdateInvite { invite: { - path: Path; + term: string; uid: Serial; invite: Invite; }; @@ -36,14 +43,14 @@ interface InviteUpdateInvite { interface InviteUpdateAccepted { accepted: { - path: Path; + term: string; uid: Serial; }; } interface InviteUpdateDecline { decline: { - path: Path; + term: string; uid: Serial; }; } diff --git a/pkg/npm/api/invite/index.ts b/pkg/npm/api/invite/index.ts index 4960073842..51e6ab5fb9 100644 --- a/pkg/npm/api/invite/index.ts +++ b/pkg/npm/api/invite/index.ts @@ -1,7 +1,7 @@ -import { InviteAction, InviteActionAccept, InviteActionDecline } from "./index.d"; +import { InviteUpdate, InviteUpdateAccept, InviteUpdateDecline } from "./index.d"; import { Poke, Serial } from ".."; -export const action = (data: T): Poke => ({ +export const action = (data: T): Poke => ({ app: 'invite-store', mark: 'invite-action', json: data @@ -10,7 +10,7 @@ export const action = (data: T): Poke => ({ export const accept = ( app: string, uid: Serial -): Poke => action({ +): Poke => action({ accept: { term: app, uid @@ -20,9 +20,9 @@ export const accept = ( export const decline = ( app: string, uid: Serial -): Poke => action({ +): Poke => action({ decline: { term: app, uid } -}); \ No newline at end of file +}); diff --git a/pkg/npm/api/lib/index.d.ts b/pkg/npm/api/lib/index.d.ts index d92065375a..f8f94ce66d 100644 --- a/pkg/npm/api/lib/index.d.ts +++ b/pkg/npm/api/lib/index.d.ts @@ -2,6 +2,8 @@ * Martian embassy */ +import BigIntOrderedMap from "./BigIntOrderedMap"; + // an urbit style path rendered as string export type Path = string; @@ -20,15 +22,6 @@ export type Jug = Map>; // name of app export type AppName = 'chat' | 'link' | 'contacts' | 'publish' | 'graph'; -export function getTagFromFrond(frond: O): keyof O { - const tags = Object.keys(frond) as Array; - const tag = tags[0]; - if(!tag) { - throw new Error("bad frond"); - } - return tag; -} - export type ShipRank = 'czar' | 'king' | 'duke' | 'earl' | 'pawn'; export type Action = 'poke' | 'subscribe' | 'ack' | 'unsubscribe' | 'delete'; @@ -48,6 +41,8 @@ export type Enc = { [s: string]: Enc> } : S extends object ? { [K in keyof S]: Enc } : + S extends BigIntOrderedMap ? + { [index: string]: T } : S; export type Mark = string; @@ -64,4 +59,4 @@ export interface Thread { outputMark: string; threadName: string; body: Action; -} \ No newline at end of file +} diff --git a/pkg/npm/api/lib/util.ts b/pkg/npm/api/lib/util.ts index 2a6ba82261..c646c3a8a1 100644 --- a/pkg/npm/api/lib/util.ts +++ b/pkg/npm/api/lib/util.ts @@ -140,7 +140,7 @@ export function cite(ship: string): string { let patp = ship, shortened = ""; if (patp === null || patp === "") { - return null; + return ""; } if (patp.startsWith("~")) { patp = patp.substr(1); @@ -208,4 +208,4 @@ export function numToUd(num: number): string { f.map(s => s.join('')), f.join('.') )(num.toString()) -} \ No newline at end of file +} diff --git a/pkg/npm/api/metadata/index.d.ts b/pkg/npm/api/metadata/index.d.ts index fca5f1e7bc..c0a12075d0 100644 --- a/pkg/npm/api/metadata/index.d.ts +++ b/pkg/npm/api/metadata/index.d.ts @@ -15,15 +15,15 @@ type ResourceAssociations = { } type MetadataUpdateAdd = { - add: Association; + add: AssociationPoke; } type MetadataUpdateUpdate = { - update: Association; + update: AssociationPoke; } type MetadataUpdateRemove = { - remove: Resource & { + remove: MdResource & { group: Path; } } @@ -42,16 +42,22 @@ export type AppAssociations = { [p in Path]: Association; } -interface Resource { +interface MdResource { resource: Path; 'app-name': AppName; } -export type Association = Resource & { +export type Association = MdResource & { group: Path; metadata: Metadata; }; +export interface AssociationPoke { + group: Path; + resource: MdResource; + metadata: Metadata; +} + export interface Metadata { color: string; creator: Patp; diff --git a/pkg/npm/api/metadata/index.ts b/pkg/npm/api/metadata/index.ts index 126c48e0cc..e880f1c9d5 100644 --- a/pkg/npm/api/metadata/index.ts +++ b/pkg/npm/api/metadata/index.ts @@ -8,32 +8,19 @@ export const action = (data: T): Poke => ({ }); export const add = ( - ship: PatpNoSig, appName: AppName, - appPath: Path, - groupPath: Path, - title: string, - description: string, - dateCreated: string, - color: string, - moduleName: string + resource: string, + group: string, + metadata: Metadata, ): Poke => { - const creator = `~${ship}`; return action({ add: { - 'group-path': groupPath, + group, resource: { - 'app-path': appPath, + resource, 'app-name': appName }, - metadata: { - title, - description, - color, - 'date-created': dateCreated, - creator, - 'module': moduleName - } + metadata } }); } @@ -41,15 +28,16 @@ export const add = ( export const update = ( association: Association, newMetadata: Partial -): Poke => { +): Poke => { + const { resource, metadata, group } = association; return action({ add: { - 'group-path': association['group-path'], + group, resource: { - 'app-path': association['app-path'], + resource, 'app-name': association['app-name'], }, - metadata: {...association.metadata, ...newMetadata } + metadata: {...metadata, ...newMetadata } } }); -} \ No newline at end of file +} diff --git a/pkg/npm/api/tsconfig.json b/pkg/npm/api/tsconfig.json index ca67462754..1d5a91a976 100644 --- a/pkg/npm/api/tsconfig.json +++ b/pkg/npm/api/tsconfig.json @@ -19,9 +19,7 @@ } }, "include": [ - "src/**/*" + "**/*" ], - "exclude": [ - "node_modules", - ] + "exclude": [ "node_modules" ] } From 14da6b9bd111e047fa2de3544d06118e49c80e20 Mon Sep 17 00:00:00 2001 From: Liam Fitzgerald Date: Wed, 17 Feb 2021 12:35:28 +1000 Subject: [PATCH 029/338] npm: make packages typecheck --- pkg/npm/api/contacts/index.d.ts | 2 +- pkg/npm/api/lib/BigIntOrderedMap.ts | 18 +++++++++--------- pkg/npm/http-api/src/app/base.ts | 1 + pkg/npm/http-api/src/index.ts | 17 +++++++++-------- pkg/npm/http-api/src/types/index.d.ts | 8 +++++--- 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/pkg/npm/api/contacts/index.d.ts b/pkg/npm/api/contacts/index.d.ts index e03e1f4402..bbb037c89b 100644 --- a/pkg/npm/api/contacts/index.d.ts +++ b/pkg/npm/api/contacts/index.d.ts @@ -1,5 +1,5 @@ import { Path, Patp } from ".."; -import {Resource} from "groups/update"; +import {Resource} from "../groups/update.d"; export type ContactUpdate = | ContactUpdateAdd diff --git a/pkg/npm/api/lib/BigIntOrderedMap.ts b/pkg/npm/api/lib/BigIntOrderedMap.ts index e13ee45da3..6f42da526c 100644 --- a/pkg/npm/api/lib/BigIntOrderedMap.ts +++ b/pkg/npm/api/lib/BigIntOrderedMap.ts @@ -26,9 +26,9 @@ export default class BigIntOrderedMap implements Iterable<[BigInteger, V]> { * Retrieve an value for a key */ get(key: BigInteger): V | null { - const inner = (node: MapNode) => { + const inner = (node: MapNode): V | null => { if (!node) { - return node; + return null; } const [k, v] = node.n; if (key.eq(k)) { @@ -48,8 +48,8 @@ export default class BigIntOrderedMap implements Iterable<[BigInteger, V]> { * Put an item by a key */ set(key: BigInteger, value: V): void { - - const inner = (node: MapNode) => { + + const inner = (node: MapNode): MapNode => { if (!node) { return { n: [key, value], @@ -97,7 +97,7 @@ export default class BigIntOrderedMap implements Iterable<[BigInteger, V]> { * Predicate testing if map contains key */ has(key: BigInteger): boolean { - const inner = (node: MapNode) => { + const inner = (node: MapNode): boolean => { if (!node) { return false; } @@ -156,7 +156,7 @@ export default class BigIntOrderedMap implements Iterable<[BigInteger, V]> { } private nip(nod: NonemptyNode): MapNode { - const inner = (node: NonemptyNode) => { + const inner = (node: NonemptyNode): MapNode => { if (!node.l) { return node.r; } @@ -170,9 +170,9 @@ export default class BigIntOrderedMap implements Iterable<[BigInteger, V]> { }; return inner(nod); } - + peekLargest(): [BigInteger, V] | undefined { - const inner = (node: MapNode) => { + const inner = (node: MapNode): [BigInteger, V] | undefined => { if(!node) { return undefined; } @@ -185,7 +185,7 @@ export default class BigIntOrderedMap implements Iterable<[BigInteger, V]> { } peekSmallest(): [BigInteger, V] | undefined { - const inner = (node: MapNode) => { + const inner = (node: MapNode): [BigInteger, V] | undefined => { if(!node) { return undefined; } diff --git a/pkg/npm/http-api/src/app/base.ts b/pkg/npm/http-api/src/app/base.ts index 9324004653..715886b515 100644 --- a/pkg/npm/http-api/src/app/base.ts +++ b/pkg/npm/http-api/src/app/base.ts @@ -34,6 +34,7 @@ export default class UrbitApp implements UrbitAppInterface { subscribe(path: string) { const ship = this.ship; const app = this.app; + // @ts-ignore return this.airlock.subscribe(app, path); } // TODO handle methods that don't exist diff --git a/pkg/npm/http-api/src/index.ts b/pkg/npm/http-api/src/index.ts index 44c490c699..b08f46e532 100644 --- a/pkg/npm/http-api/src/index.ts +++ b/pkg/npm/http-api/src/index.ts @@ -1,7 +1,7 @@ import { isBrowser, isNode } from 'browser-or-node'; import { Action, Thread } from '../../api'; -import { AuthenticationInterface, SubscriptionInterface, CustomEventHandler, PokeInterface, SubscriptionRequestInterface, headers, UrbitInterface, SSEOptions, ThreadInterface } from './types'; +import { AuthenticationInterface, SubscriptionInterface, CustomEventHandler, PokeInterface, SubscriptionRequestInterface, headers, UrbitInterface, SSEOptions, PokeHandlers } from './types'; import UrbitApp from './app/base'; import { uncamelize, hexString } from './utils'; @@ -40,7 +40,7 @@ export class Urbit implements UrbitInterface { * removed after calling the success or failure function. */ - outstandingPokes: Map = new Map(); + outstandingPokes: Map = new Map(); /** * A registry of requestId to subscription functions. @@ -99,6 +99,7 @@ export class Urbit implements UrbitInterface { ) { return this; // We return a proxy so we can set dynamic properties like `Urbit.onChatHook` + // @ts-ignore return new Proxy(this, { get(target: Urbit, property: string) { // First check if this is a regular property @@ -211,9 +212,9 @@ export class Urbit implements UrbitInterface { if (data.response === 'poke' && this.outstandingPokes.has(data.id)) { const funcs = this.outstandingPokes.get(data.id); if (data.hasOwnProperty('ok')) { - funcs.success(); + funcs.onSuccess(); } else if (data.hasOwnProperty('err')) { - funcs.fail(data.err); + funcs.onError(data.err); } else { console.error('Invalid poke response', data); } @@ -335,7 +336,7 @@ export class Urbit implements UrbitInterface { * @param mark The mark of the data being sent * @param json The data to send */ - poke(params: PokeInterface): Promise { + poke(params: PokeInterface): Promise { const { app, mark, json, onSuccess, onError } = {onSuccess: () => {}, onError: () => {}, ...params}; return new Promise((resolve, reject) => { this @@ -346,12 +347,12 @@ export class Urbit implements UrbitInterface { } if (!this.sseClient) resolve(pokeId); // A poke may occur before a listener has been opened this.outstandingPokes.set(pokeId, { - success: () => { + onSuccess: () => { onSuccess(); resolve(pokeId); }, - fail: (event) => { - onError(); + onError: (event) => { + onError(event); reject(event.err); } }); diff --git a/pkg/npm/http-api/src/types/index.d.ts b/pkg/npm/http-api/src/types/index.d.ts index 36b63c1733..57d095f769 100644 --- a/pkg/npm/http-api/src/types/index.d.ts +++ b/pkg/npm/http-api/src/types/index.d.ts @@ -1,10 +1,12 @@ import { Action, Mark, Poke } from '../../../api/index'; -export interface PokeInterface extends Poke { +export interface PokeHandlers { onSuccess?: () => void; - onError?: () => void; + onError?: (e: any) => void; } +export type PokeInterface = PokeHandlers & Poke; + export interface AuthenticationInterface { ship: string; @@ -42,4 +44,4 @@ export interface SSEOptions { Cookie?: string }; withCredentials?: boolean; -} \ No newline at end of file +} From 1c38deb502bba8336a282ed99ecfa6ff6692141a Mon Sep 17 00:00:00 2001 From: Liam Fitzgerald Date: Wed, 17 Feb 2021 15:47:34 +1000 Subject: [PATCH 030/338] settings: match designs for already implemented features --- pkg/interface/src/logic/state/local.tsx | 7 +- .../views/apps/notifications/preferences.tsx | 2 - .../settings/components/lib/BackButton.tsx | 11 ++ .../components/lib/BackgroundPicker.tsx | 32 +++-- .../settings/components/lib/BucketList.tsx | 37 ++++-- .../apps/settings/components/lib/CalmPref.tsx | 115 +++++++++++++++++ .../settings/components/lib/DisplayForm.tsx | 38 +++--- .../components/lib/NotificationPref.tsx | 88 +++++++++++++ .../apps/settings/components/lib/S3Form.tsx | 56 ++++---- .../apps/settings/components/lib/Security.tsx | 71 ++++++---- .../apps/settings/components/settings.tsx | 121 +++++++++++++----- .../src/views/apps/settings/settings.tsx | 108 +++++++++++----- .../src/views/components/ColorInput.tsx | 6 +- 13 files changed, 534 insertions(+), 158 deletions(-) create mode 100644 pkg/interface/src/views/apps/settings/components/lib/BackButton.tsx create mode 100644 pkg/interface/src/views/apps/settings/components/lib/CalmPref.tsx create mode 100644 pkg/interface/src/views/apps/settings/components/lib/NotificationPref.tsx diff --git a/pkg/interface/src/logic/state/local.tsx b/pkg/interface/src/logic/state/local.tsx index 64e68a0ca2..1695824773 100644 --- a/pkg/interface/src/logic/state/local.tsx +++ b/pkg/interface/src/logic/state/local.tsx @@ -6,7 +6,7 @@ import produce from 'immer'; import { BackgroundConfig, RemoteContentPolicy, TutorialProgress, tutorialProgress } from "~/types/local-update"; -export interface LocalState extends State { +export interface LocalState { hideAvatars: boolean; hideNicknames: boolean; remoteContentPolicy: RemoteContentPolicy; @@ -23,10 +23,13 @@ export interface LocalState extends State { toggleOmnibox: () => void; set: (fn: (state: LocalState) => void) => void }; + +type LocalStateZus = LocalState & State; + export const selectLocalState = (keys: K[]) => f.pick(keys); -const useLocalState = create(persist((set, get) => ({ +const useLocalState = create(persist((set, get) => ({ dark: false, background: undefined, hideAvatars: false, diff --git a/pkg/interface/src/views/apps/notifications/preferences.tsx b/pkg/interface/src/views/apps/notifications/preferences.tsx index 8d3f900b43..99b889329b 100644 --- a/pkg/interface/src/views/apps/notifications/preferences.tsx +++ b/pkg/interface/src/views/apps/notifications/preferences.tsx @@ -31,12 +31,10 @@ export default function NotificationPreferences( mentions: graphConfig.mentions, watchOnSelf: graphConfig.watchOnSelf, dnd, - watching: graphConfig.watching, }; const onSubmit = useCallback( async (values: FormSchema, actions: FormikHelpers) => { - console.log(values); try { let promises: Promise[] = []; if (values.mentions !== graphConfig.mentions) { diff --git a/pkg/interface/src/views/apps/settings/components/lib/BackButton.tsx b/pkg/interface/src/views/apps/settings/components/lib/BackButton.tsx new file mode 100644 index 0000000000..0ba81209c3 --- /dev/null +++ b/pkg/interface/src/views/apps/settings/components/lib/BackButton.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; +import { Text } from '@tlon/indigo-react'; + +export function BackButton(props: {}) { + return ( + + {"<- Back to System Preferences"} + + ); +} diff --git a/pkg/interface/src/views/apps/settings/components/lib/BackgroundPicker.tsx b/pkg/interface/src/views/apps/settings/components/lib/BackgroundPicker.tsx index 53aed1b3e9..1e50e95f80 100644 --- a/pkg/interface/src/views/apps/settings/components/lib/BackgroundPicker.tsx +++ b/pkg/interface/src/views/apps/settings/components/lib/BackgroundPicker.tsx @@ -1,6 +1,7 @@ import React from "react"; import { Box, + Text, Row, Label, Col, @@ -28,31 +29,38 @@ export function BackgroundPicker({ }) { const rowSpace = { my: 0, alignItems: 'center' }; - const radioProps = { my: 4, mr: 4, name: 'bgType' }; + const colProps = { my: 3, mr: 4, gapY: 1 }; return ( - + - - {bgType === "url" && ( + + + Set an image background - )} + - - {bgType === "color" && ( - - )} + + + Set a hex-based background + + - + ); } diff --git a/pkg/interface/src/views/apps/settings/components/lib/BucketList.tsx b/pkg/interface/src/views/apps/settings/components/lib/BucketList.tsx index 5ffdc270a0..12a955f403 100644 --- a/pkg/interface/src/views/apps/settings/components/lib/BucketList.tsx +++ b/pkg/interface/src/views/apps/settings/components/lib/BucketList.tsx @@ -1,4 +1,4 @@ -import React, { useCallback } from "react"; +import React, { useCallback, useState } from "react"; import { ManagedTextInputField as Input, @@ -11,8 +11,9 @@ import { MenuButton, MenuList, MenuItem, + Row, } from "@tlon/indigo-react"; -import { Formik } from "formik"; +import { Formik, FormikHelpers } from "formik"; import GlobalApi from "~/logic/api/global"; @@ -27,9 +28,12 @@ export function BucketList({ }) { const _buckets = Array.from(buckets); + const [adding, setAdding] = useState(false); + const onSubmit = useCallback( - (values: { newBucket: string }) => { + (values: { newBucket: string }, actions: FormikHelpers) => { api.s3.addBucket(values.newBucket); + actions.resetForm({ values: { newBucket: "" } }); }, [api] ); @@ -68,7 +72,7 @@ export function BucketList({ alignItems="center" borderRadius={1} border={1} - borderColor="washedGray" + borderColor="lightGray" fontSize={1} pl={2} mb={2} @@ -92,10 +96,27 @@ export function BucketList({ )} ))} - - + {adding && ( + + )} + + + + ); diff --git a/pkg/interface/src/views/apps/settings/components/lib/CalmPref.tsx b/pkg/interface/src/views/apps/settings/components/lib/CalmPref.tsx new file mode 100644 index 0000000000..c36d70f6d5 --- /dev/null +++ b/pkg/interface/src/views/apps/settings/components/lib/CalmPref.tsx @@ -0,0 +1,115 @@ +import React, {useCallback} from "react"; +import { + Box, + ManagedToggleSwitchField as Toggle, + Button, + Col, + Text, +} from "@tlon/indigo-react"; +import { Formik, Form, FormikHelpers } from "formik"; +import * as Yup from "yup"; +import { BackButton } from "./BackButton"; +import useLocalState, { selectLocalState } from "~/logic/state/local"; + +interface FormSchema { + hideAvatars: boolean; + hideNicknames: boolean; + imageShown: boolean; + audioShown: boolean; + oembedShown: boolean; +} + +const localSelector = selectLocalState([ + "hideAvatars", + "hideNicknames", + "remoteContentPolicy", + "set", +]); + +export function CalmPrefs(props: {}) { + const { + hideAvatars, + hideNicknames, + remoteContentPolicy, + set: setLocalState, + } = useLocalState(localSelector); + const { + imageShown, + videoShown, + oembedShown, + audioShown, + } = remoteContentPolicy; + + const initialValues: FormSchema = { + hideAvatars, + hideNicknames, + imageShown, + videoShown, + oembedShown, + audioShown, + }; + + const onSubmit = useCallback(async (values: FormSchema, actions: FormikHelpers) => { + setLocalState(state => { + const { hideAvatars, hideNicknames, ...remote } = values; + Object.assign(state.remoteContentPolicy, remote); + state.hideNicknames = hideNicknames; + state.hideAvatars = hideAvatars; + }); + + }, [setLocalState]); + + return ( + +
+ + + + + CalmEngine + + + Modulate various elemednts across Landscape to maximize calmness + + + User-set identity + + + Remote Content + + + + + + + + +
+ ); +} diff --git a/pkg/interface/src/views/apps/settings/components/lib/DisplayForm.tsx b/pkg/interface/src/views/apps/settings/components/lib/DisplayForm.tsx index 1fcc3a1204..e3288a6895 100644 --- a/pkg/interface/src/views/apps/settings/components/lib/DisplayForm.tsx +++ b/pkg/interface/src/views/apps/settings/components/lib/DisplayForm.tsx @@ -3,7 +3,9 @@ import React from 'react'; import { Box, ManagedCheckboxField as Checkbox, - Button + Button, + Col, + Text } from '@tlon/indigo-react'; import { Formik, Form } from 'formik'; import * as Yup from 'yup'; @@ -12,6 +14,7 @@ import GlobalApi from '~/logic/api/global'; import { uxToHex } from '~/logic/lib/util'; import { S3State, BackgroundConfig } from '~/types'; import { BackgroundPicker, BgType } from './BackgroundPicker'; +import { BackButton } from "./BackButton"; import useLocalState, { LocalState } from '~/logic/state/local'; const formSchema = Yup.object().shape({ @@ -81,35 +84,26 @@ export default function DisplayForm(props: DisplayFormProps) { > {props => (
- - - Display Preferences - + + + + + Display Preferences + + + Customize visual interfaces across your Landscape + + - - - - +
)} diff --git a/pkg/interface/src/views/apps/settings/components/lib/NotificationPref.tsx b/pkg/interface/src/views/apps/settings/components/lib/NotificationPref.tsx new file mode 100644 index 0000000000..cdbfecae16 --- /dev/null +++ b/pkg/interface/src/views/apps/settings/components/lib/NotificationPref.tsx @@ -0,0 +1,88 @@ +import React, { useCallback } from "react"; +import { + Col, + Text, + ManagedToggleSwitchField as Toggle, +} from "@tlon/indigo-react"; +import { Form, FormikHelpers } from "formik"; +import { FormikOnBlur } from "~/views/components/FormikOnBlur"; +import { BackButton } from "./BackButton"; +import GlobalApi from "~/logic/api/global"; +import {NotificationGraphConfig} from "~/types"; + +interface FormSchema { + mentions: boolean; + dnd: boolean; + watchOnSelf: boolean; +} + +export function NotificationPreferences(props: { + api: GlobalApi; + graphConfig: NotificationGraphConfig; + dnd: boolean; +}) { + const { graphConfig, api, dnd } = props; + const initialValues = { + mentions: graphConfig.mentions, + dnd: dnd, + watchOnSelf: graphConfig.watchOnSelf, + }; + + const onSubmit = useCallback(async (values: FormSchema, actions: FormikHelpers) => { + try { + let promises: Promise[] = []; + if (values.mentions !== graphConfig.mentions) { + promises.push(api.hark.setMentions(values.mentions)); + } + if (values.watchOnSelf !== graphConfig.watchOnSelf) { + promises.push(api.hark.setWatchOnSelf(values.watchOnSelf)); + } + if (values.dnd !== dnd && !_.isUndefined(values.dnd)) { + promises.push(api.hark.setDoNotDisturb(values.dnd)) + } + + await Promise.all(promises); + actions.setStatus({ success: null }); + actions.resetForm({ values: initialValues }); + } catch (e) { + console.error(e); + actions.setStatus({ error: e.message }); + } + }, [api]); + + return ( + + + + + Notification Preferences + + + Set notification visibility and default behaviours for groups and + messaging + + + +
+ + + + + + +
+ + ); +} diff --git a/pkg/interface/src/views/apps/settings/components/lib/S3Form.tsx b/pkg/interface/src/views/apps/settings/components/lib/S3Form.tsx index 963e2feb1d..dcbb2180cb 100644 --- a/pkg/interface/src/views/apps/settings/components/lib/S3Form.tsx +++ b/pkg/interface/src/views/apps/settings/components/lib/S3Form.tsx @@ -49,7 +49,7 @@ export default function S3Form(props: S3FormProps) { ); return ( <> - + -
- - S3 Credentials - - - - - + + + + + S3 Storage Setup + + + Store credentials for your S3 object storage buckets on your + Urbit ship, and upload media freely to various modules. Learn + more + + + + + + +
- - - S3 Buckets - + + + + S3 Buckets + + + Your 'active' bucket will be the one used when Landscape uploads a + file + + - - Security - - - Log out of this session - - - You will be logged out of your Urbit on this browser. + + + + + Security Preferences + + + Manage sessions, login credentials and Landscape access + + + + + Log out of this session + + + {allSessions + ? "You will be logged out of all browsers that have currently logged into your Urbit." + : "You will be logged out of your Urbit on this browser."} + + setAllSessions((s) => !s)} + > + Log out of all sessions +
-
-
- - Log out of all sessions - - - You will be logged out of all browsers that have currently logged into your Urbit. -
- - -
-
-
+ + ); } diff --git a/pkg/interface/src/views/apps/settings/components/settings.tsx b/pkg/interface/src/views/apps/settings/components/settings.tsx index c199f82910..218ea0b40b 100644 --- a/pkg/interface/src/views/apps/settings/components/settings.tsx +++ b/pkg/interface/src/views/apps/settings/components/settings.tsx @@ -1,37 +1,96 @@ -import React from 'react'; +import React from "react"; -import { Box } from '@tlon/indigo-react'; +import { Row, Icon, Box, Col, Text } from "@tlon/indigo-react"; -import GlobalApi from '~/logic/api/global'; -import { StoreState } from '~/logic/store/type'; -import DisplayForm from './lib/DisplayForm'; -import S3Form from './lib/S3Form'; -import SecuritySettings from './lib/Security'; -import RemoteContentForm from './lib/RemoteContent'; +import GlobalApi from "~/logic/api/global"; +import { StoreState } from "~/logic/store/type"; +import DisplayForm from "./lib/DisplayForm"; +import S3Form from "./lib/S3Form"; +import SecuritySettings from "./lib/Security"; +import RemoteContentForm from "./lib/RemoteContent"; +import { NotificationPreferences } from "./lib/NotificationPref"; +import { CalmPrefs } from "./lib/CalmPref"; +import { Link } from "react-router-dom"; -type ProfileProps = StoreState & { api: GlobalApi; ship: string }; - -export default function Settings({ - api, - s3 -}: ProfileProps) { +export function SettingsItem(props: { + title: string; + description: string; + to: string; +}) { + const { to, title, description } = props; return ( - - - - - - + + + + + {title} + {description} + + + + ); +} + +export default function Settings(props: {}) { + return ( + + + System Preferences + Configure and customize Landscape + + + + + + + + + + + + ); } diff --git a/pkg/interface/src/views/apps/settings/settings.tsx b/pkg/interface/src/views/apps/settings/settings.tsx index bfe331ecd3..8c0d78e31e 100644 --- a/pkg/interface/src/views/apps/settings/settings.tsx +++ b/pkg/interface/src/views/apps/settings/settings.tsx @@ -1,48 +1,94 @@ -import React from "react"; +import React, { ReactNode } from "react"; import { Route, Link, Switch } from "react-router-dom"; -import Helmet from 'react-helmet'; +import Helmet from "react-helmet"; import { Box, Text, Row, Col, Icon, BaseImage } from "@tlon/indigo-react"; import Settings from "./components/settings"; +import { NotificationPreferences } from "./components/lib/NotificationPref"; +import DisplayForm from './components/lib/DisplayForm'; +import S3Form from "./components/lib/S3Form"; import useLocalState from "~/logic/state/local"; +import {CalmPrefs} from "./components/lib/CalmPref"; +import SecuritySettings from "./components/lib/Security"; + +export const Skeleton = (props: { children: ReactNode }) => ( + + + {props.children} + + +); export default function SettingsScreen(props: any) { const { ship, dark } = props; - const hideAvatars = useLocalState(state => state.hideAvatars); + const hideAvatars = useLocalState((state) => state.hideAvatars); return ( <> Landscape - Settings - { - return ( - - - - - - ); - }} - /> + + + { + return ( + + ); + }} + /> + { + return ( + + ); + }} + /> + { + return ( + + ); + }} + /> + { + return ( + + ); + }} + /> + { + return ( + + ); + }} + /> + { + return ; + }} + /> + + ); } diff --git a/pkg/interface/src/views/components/ColorInput.tsx b/pkg/interface/src/views/components/ColorInput.tsx index 0ee279db14..127d6e97e4 100644 --- a/pkg/interface/src/views/components/ColorInput.tsx +++ b/pkg/interface/src/views/components/ColorInput.tsx @@ -13,12 +13,13 @@ import { uxToHex, hexToUx } from "~/logic/lib/util"; type ColorInputProps = Parameters[0] & { id: string; - label: string; + label?: string; + placeholder?: string; disabled?: boolean; }; export function ColorInput(props: ColorInputProps) { - const { id, label, caption, disabled, ...rest } = props; + const { id, placeholder, label, caption, disabled, ...rest } = props; const [{ value, onBlur }, meta, { setValue }] = useField(id); const hex = value.replace('#', '').replace("0x","").replace(".", ""); @@ -54,6 +55,7 @@ export function ColorInput(props: ColorInputProps) { value={hex} disabled={disabled || false} borderRight={0} + placeholder={placeholder} /> Date: Wed, 17 Feb 2021 16:48:05 +1000 Subject: [PATCH 031/338] leap: add category blacklist --- pkg/interface/src/logic/lib/omnibox.js | 28 +++++--- pkg/interface/src/logic/state/local.tsx | 6 +- pkg/interface/src/types/local-update.ts | 4 ++ pkg/interface/src/views/apps/launch/app.js | 8 ++- .../settings/components/lib/DisplayForm.tsx | 69 ++++++++++++------- .../settings/components/lib/LeapSettings.tsx | 64 +++++++++++++++++ .../src/views/apps/settings/settings.tsx | 9 +++ .../src/views/components/leap/Omnibox.tsx | 26 +++++-- 8 files changed, 170 insertions(+), 44 deletions(-) create mode 100644 pkg/interface/src/views/apps/settings/components/lib/LeapSettings.tsx diff --git a/pkg/interface/src/logic/lib/omnibox.js b/pkg/interface/src/logic/lib/omnibox.js index eabb8017ec..b775127fed 100644 --- a/pkg/interface/src/logic/lib/omnibox.js +++ b/pkg/interface/src/logic/lib/omnibox.js @@ -1,7 +1,7 @@ import { cite } from '~/logic/lib/util'; import { isChannelAdmin } from '~/logic/lib/group'; - const indexes = new Map([ +const makeIndexes = () => new Map([ ['ships', []], ['commands', []], ['subscriptions', []], @@ -70,18 +70,30 @@ const appIndex = function (apps) { return applications; }; -const otherIndex = function() { +const otherIndex = function(hide) { const other = []; - other.push(result('My Channels', '/~landscape/home', 'home', null)); - other.push(result('Notifications', '/~notifications', 'inbox', null)); - other.push(result('Profile and Settings', `/~profile/~${window.ship}`, 'profile', null)); + console.log(hide); + const notBanned = (cat) => hide.findIndex(c => c === cat) === -1; + if(notBanned('mychannel')) { + other.push(result('My Channels', '/~landscape/home', 'home', null)); + } + if(notBanned('updates')) { + other.push(result('Notifications', '/~notifications', 'inbox', null)); + } + if(notBanned('profile')) { + other.push(result('Profile and Settings', `/~profile/~${window.ship}`, 'profile', null)); + } + other.push(result('Messages', '/~landscape/messages', 'messages', null)); - other.push(result('Log Out', '/~/logout', 'logout', null)); + if(notBanned('logout')) { + other.push(result('Log Out', '/~/logout', 'logout', null)); + } return other; }; -export default function index(contacts, associations, apps, currentGroup, groups) { +export default function index(contacts, associations, apps, currentGroup, groups, hide) { + const indexes = makeIndexes(); indexes.set('ships', shipIndex(contacts)); // all metadata from all apps is indexed // into subscriptions and landscape @@ -141,7 +153,7 @@ export default function index(contacts, associations, apps, currentGroup, groups indexes.set('subscriptions', subscriptions); indexes.set('groups', landscape); indexes.set('apps', appIndex(apps)); - indexes.set('other', otherIndex()); + indexes.set('other', otherIndex(hide)); return indexes; }; diff --git a/pkg/interface/src/logic/state/local.tsx b/pkg/interface/src/logic/state/local.tsx index 1695824773..079fbe6d1d 100644 --- a/pkg/interface/src/logic/state/local.tsx +++ b/pkg/interface/src/logic/state/local.tsx @@ -3,7 +3,7 @@ import f from 'lodash/fp'; import create, { State } from 'zustand'; import { persist } from 'zustand/middleware'; import produce from 'immer'; -import { BackgroundConfig, RemoteContentPolicy, TutorialProgress, tutorialProgress } from "~/types/local-update"; +import { BackgroundConfig, RemoteContentPolicy, TutorialProgress, tutorialProgress, LeapCategories } from "~/types/local-update"; export interface LocalState { @@ -11,10 +11,12 @@ export interface LocalState { hideNicknames: boolean; remoteContentPolicy: RemoteContentPolicy; tutorialProgress: TutorialProgress; + hideGroups: boolean; tutorialRef: HTMLElement | null, hideTutorial: () => void; nextTutStep: () => void; prevTutStep: () => void; + hideLeapCats: LeapCategories[]; setTutorialRef: (el: HTMLElement | null) => void; dark: boolean; background: BackgroundConfig; @@ -34,6 +36,8 @@ const useLocalState = create(persist((set, get) => ({ background: undefined, hideAvatars: false, hideNicknames: false, + hideLeapCats: [], + hideGroups: false, tutorialProgress: 'hidden', tutorialRef: null, setTutorialRef: (el: HTMLElement | null) => set(produce(state => { diff --git a/pkg/interface/src/types/local-update.ts b/pkg/interface/src/types/local-update.ts index 5849931fe2..731bd8244f 100644 --- a/pkg/interface/src/types/local-update.ts +++ b/pkg/interface/src/types/local-update.ts @@ -1,5 +1,9 @@ export const tutorialProgress = ['hidden', 'start', 'group-desc', 'channels', 'chat', 'link', 'publish', 'profile', 'leap', 'notifications', 'done', 'exit'] as const; +export const leapCategories = ["commands", "mychannel", "messages", "updates", "profile", "logout"] as const; + +export type LeapCategories = typeof leapCategories[number]; + export type TutorialProgress = typeof tutorialProgress[number]; interface LocalUpdateSetDark { setDark: boolean; diff --git a/pkg/interface/src/views/apps/launch/app.js b/pkg/interface/src/views/apps/launch/app.js index 1e0c937e17..887cb5e34b 100644 --- a/pkg/interface/src/views/apps/launch/app.js +++ b/pkg/interface/src/views/apps/launch/app.js @@ -38,7 +38,7 @@ const ScrollbarLessBox = styled(Box)` } `; -const tutSelector = f.pick(['tutorialProgress', 'nextTutStep']); +const tutSelector = f.pick(['tutorialProgress', 'nextTutStep', 'hideGroups']); export default function LaunchApp(props) { const history = useHistory(); @@ -82,7 +82,7 @@ export default function LaunchApp(props) { } }, [query]); - const { tutorialProgress, nextTutStep } = useLocalState(tutSelector); + const { tutorialProgress, nextTutStep, hideGroups } = useLocalState(tutSelector); const waiter = useWaitForProps(props); @@ -198,7 +198,9 @@ export default function LaunchApp(props) { > - + {!hideGroups && + () + } {hashBox} diff --git a/pkg/interface/src/views/apps/settings/components/lib/DisplayForm.tsx b/pkg/interface/src/views/apps/settings/components/lib/DisplayForm.tsx index e3288a6895..0c6924a643 100644 --- a/pkg/interface/src/views/apps/settings/components/lib/DisplayForm.tsx +++ b/pkg/interface/src/views/apps/settings/components/lib/DisplayForm.tsx @@ -1,30 +1,32 @@ -import React from 'react'; +import React from "react"; import { Box, ManagedCheckboxField as Checkbox, Button, Col, - Text -} from '@tlon/indigo-react'; -import { Formik, Form } from 'formik'; -import * as Yup from 'yup'; + Text, + ManagedToggleSwitchField as Toggle, +} from "@tlon/indigo-react"; +import { Formik, Form } from "formik"; +import * as Yup from "yup"; -import GlobalApi from '~/logic/api/global'; -import { uxToHex } from '~/logic/lib/util'; -import { S3State, BackgroundConfig } from '~/types'; -import { BackgroundPicker, BgType } from './BackgroundPicker'; +import GlobalApi from "~/logic/api/global"; +import { uxToHex } from "~/logic/lib/util"; +import { S3State, BackgroundConfig } from "~/types"; +import { BackgroundPicker, BgType } from "./BackgroundPicker"; import { BackButton } from "./BackButton"; -import useLocalState, { LocalState } from '~/logic/state/local'; +import useLocalState, { LocalState } from "~/logic/state/local"; const formSchema = Yup.object().shape({ bgType: Yup.string() - .oneOf(['none', 'color', 'url'], 'invalid') - .required('Required'), + .oneOf(["none", "color", "url"], "invalid") + .required("Required"), bgUrl: Yup.string().url(), bgColor: Yup.string(), avatars: Yup.boolean(), - nicknames: Yup.boolean() + nicknames: Yup.boolean(), + hideGroups: Yup.boolean(), }); interface FormSchema { @@ -33,6 +35,7 @@ interface FormSchema { bgUrl: string | undefined; avatars: boolean; nicknames: boolean; + hideGroups: boolean; } interface DisplayFormProps { @@ -43,16 +46,22 @@ interface DisplayFormProps { export default function DisplayForm(props: DisplayFormProps) { const { api, s3 } = props; - const { hideAvatars, hideNicknames, background, set: setLocalState } = useLocalState(); + const { + hideAvatars, + hideNicknames, + background, + hideGroups, + set: setLocalState, + } = useLocalState(); let bgColor, bgUrl; - if (background?.type === 'url') { + if (background?.type === "url") { bgUrl = background.url; } - if (background?.type === 'color') { + if (background?.type === "color") { bgColor = background.color; } - const bgType = background?.type || 'none'; + const bgType = background?.type || "none"; return ( { const bgConfig: BackgroundConfig = - values.bgType === 'color' - ? { type: 'color', color: `#${uxToHex(values.bgColor || '0x0')}` } - : values.bgType === 'url' - ? { type: 'url', url: values.bgUrl || '' } + values.bgType === "color" + ? { type: "color", color: `#${uxToHex(values.bgColor || "0x0")}` } + : values.bgType === "url" + ? { type: "url", url: values.bgUrl || "" } : undefined; setLocalState((state: LocalState) => { state.background = bgConfig; state.hideAvatars = values.avatars; state.hideNicknames = values.nicknames; + state.hideGroups = values.hideGroups; + }); actions.setSubmitting(false); }} > - {props => ( + {(props) => (
- + Display Preferences - + Customize visual interfaces across your Landscape @@ -100,6 +112,11 @@ export default function DisplayForm(props: DisplayFormProps) { api={api} s3={s3} /> + diff --git a/pkg/interface/src/views/apps/settings/components/lib/LeapSettings.tsx b/pkg/interface/src/views/apps/settings/components/lib/LeapSettings.tsx new file mode 100644 index 0000000000..aaa87dc426 --- /dev/null +++ b/pkg/interface/src/views/apps/settings/components/lib/LeapSettings.tsx @@ -0,0 +1,64 @@ +import React, { useCallback } from "react"; +import _ from 'lodash'; +import { + Col, + Text, + ManagedToggleSwitchField as Toggle, + ManagedCheckboxField, +} from "@tlon/indigo-react"; +import { Form, FormikHelpers } from "formik"; +import { FormikOnBlur } from "~/views/components/FormikOnBlur"; +import { BackButton } from "./BackButton"; +import GlobalApi from "~/logic/api/global"; +import { NotificationGraphConfig, LeapCategories, leapCategories } from "~/types"; +import useLocalState, {selectLocalState} from "~/logic/state/local"; + +type FormSchema = { + [c in LeapCategories]: boolean; +} + +const localSelector = selectLocalState(["hideLeapCats", "set"]); + +export function LeapSettings(props: {}) { + + const { hideLeapCats, set: setLocalState } = useLocalState(localSelector); + + const initialValues: FormSchema = leapCategories.reduce((acc, val, key) => { + return {...acc, [val]: hideLeapCats.findIndex(c => c === val) !== -1 }; + }, {} as FormSchema); + + const onSubmit = useCallback((values: FormSchema) => { + setLocalState(state => { + state.hideLeapCats = _.keys(_.pickBy(values, v => v)) as any; + }); + + }, [setLocalState]); + + return ( + + + + + Leap + + + Customize Leap ordering, omit modules or results + + + + + + + Customize default Leap sections + + + + + + + + + + + ); +} diff --git a/pkg/interface/src/views/apps/settings/settings.tsx b/pkg/interface/src/views/apps/settings/settings.tsx index 8c0d78e31e..dde98baec3 100644 --- a/pkg/interface/src/views/apps/settings/settings.tsx +++ b/pkg/interface/src/views/apps/settings/settings.tsx @@ -11,6 +11,7 @@ import S3Form from "./components/lib/S3Form"; import useLocalState from "~/logic/state/local"; import {CalmPrefs} from "./components/lib/CalmPref"; import SecuritySettings from "./components/lib/Security"; +import {LeapSettings} from "./components/lib/LeapSettings"; export const Skeleton = (props: { children: ReactNode }) => ( @@ -38,6 +39,14 @@ export default function SettingsScreen(props: any) { + { + return ( + + ); + }} + /> { diff --git a/pkg/interface/src/views/components/leap/Omnibox.tsx b/pkg/interface/src/views/components/leap/Omnibox.tsx index 24385f6137..a5a2b46f4d 100644 --- a/pkg/interface/src/views/components/leap/Omnibox.tsx +++ b/pkg/interface/src/views/components/leap/Omnibox.tsx @@ -6,7 +6,7 @@ import makeIndex from '~/logic/lib/omnibox'; import Mousetrap from 'mousetrap'; import OmniboxInput from './OmniboxInput'; import OmniboxResult from './OmniboxResult'; -import { withLocalState } from '~/logic/state/local'; +import useLocalState, { withLocalState, selectLocalState } from '~/logic/state/local'; import { deSig } from '~/logic/lib/util'; import defaultApps from '~/logic/lib/default-apps'; @@ -28,10 +28,12 @@ interface OmniboxProps { } const SEARCHED_CATEGORIES = ['ships', 'other', 'commands', 'groups', 'subscriptions', 'apps']; +const localSelector = selectLocalState(["hideLeapCats"]); export function Omnibox(props: OmniboxProps) { const location = useLocation(); const history = useHistory(); + const { hideLeapCats } = useLocalState(localSelector); const omniboxRef = useRef(null) const inputRef = useRef(null); @@ -45,18 +47,30 @@ export function Omnibox(props: OmniboxProps) { : props.contacts; }, [props.contacts, query]); - const index = useMemo(() => { - const selectedGroup = location.pathname.startsWith('/~landscape/ship/') + const selectedGroup = useMemo( + () => location.pathname.startsWith('/~landscape/ship/') ? '/' + location.pathname.split('/').slice(2,5).join('/') - : null; + : null, + [location.pathname] + ); + + const index = useMemo(() => { return makeIndex( contacts, props.associations, props.tiles, selectedGroup, - props.groups + props.groups, + hideLeapCats, ); - }, [location.pathname, contacts, props.associations, props.groups, props.tiles]); + }, [ + selectedGroup, + hideLeapCats, + contacts, + props.associations, + props.groups, + props.tiles + ]); const onOutsideClick = useCallback(() => { props.show && props.toggle() From 24f0ae5b792a7536ac3004ac1e31c37e70b45083 Mon Sep 17 00:00:00 2001 From: Tyler Brown Cifu Shuster Date: Wed, 17 Feb 2021 08:46:45 -0800 Subject: [PATCH 032/338] interface: upgraded SourceCodePro --- .../landscape/fonts/sourcecodepro-bold.woff2 | Bin 0 -> 77628 bytes .../fonts/sourcecodepro-extralight.woff2 | Bin 76588 -> 71812 bytes .../landscape/fonts/sourcecodepro-light.woff2 | Bin 80792 -> 75744 bytes .../fonts/sourcecodepro-medium.woff2 | Bin 82268 -> 77400 bytes .../fonts/sourcecodepro-regular.woff2 | Bin 82304 -> 76848 bytes .../fonts/sourcecodepro-semibold.woff2 | Bin 82624 -> 77380 bytes .../landscape/fonts/sourcecodeprop-bold.woff2 | Bin 82452 -> 0 bytes 7 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 pkg/arvo/app/landscape/fonts/sourcecodepro-bold.woff2 delete mode 100644 pkg/arvo/app/landscape/fonts/sourcecodeprop-bold.woff2 diff --git a/pkg/arvo/app/landscape/fonts/sourcecodepro-bold.woff2 b/pkg/arvo/app/landscape/fonts/sourcecodepro-bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4efbf2991d993cd1301bf5cfd2ba03918760fc99 GIT binary patch literal 77628 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%0D<5N) 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

1t^*jU}*R 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 literal 76588 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�_= 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 diff --git a/pkg/arvo/app/landscape/fonts/sourcecodepro-light.woff2 b/pkg/arvo/app/landscape/fonts/sourcecodepro-light.woff2 index 8f7849083b7b65d7d9918f34a55014407968e4c8..289b6c97c5b83897675f26c794b4003ee76d99f2 100644 GIT binary patch literal 75744 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

jyOCaD}PajEk@HSA5mZ`~lIR6*w$CzVV}~ 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 J=#fJJ000_}_2K{k literal 80792 zcmZU(Q>-uytSz{0?{C|-ZQHhO+qP}nwr$(C?fcJ6=A22UPi?aL(q^ruP2J=~8Re9f z0f4}3|BL>Ah9L?Y@@9q^0)9pc>>?U7Y=nbst@BcNhM7%i89=AlhZvu@*V-G_kBXMqVarA)2#L(1W1wbMa z68K2mof)NR0?FXYT0!)+5NxSIQyjylS|d7o&8TLNz`*JzEgibFSf zlM?sy%T7@@H@^NMc-3GO0}-e{wC zG~LOs5!YnJLZ09S4;oJ<-qUP6`k2|;b01sBSuN?JCspS>r`ZhJ_(?s~zbKzH8A-pQ zxLd0LJEBI8CH!~7&qC#-zKpiHKmVkqV%zP7J%Oa+*C5}iItNAC23gpi;Rpt>L5LN> zr>I_B6qxEg4>*M19G2g)P)wOK_76d69%gqVzH#1B_fdufoj*4TyhPX zg6doHICHb;6@`Ly%qa2(d@3CtW3&V1Wfp4Z%6OjNM`m%)!m_uv_=cvV=^I1v)!P{m zKv61tOpOkv=gC%alPt;qL~=tE3aF=}i%TWQ+517bs%UQJeGp00WtES(&7{`o=1ntE zc+!}8CAelB!y1n3>_r0m4){z&)Df%8FJVI^!QKK=7(F*r5sTjy=ou8vS?r-rY%i2B zN?HbM7$OCs6*lAfDSd?owHFKl$=ri+h`y~HD1I-Pc?XXQb(c`PgRyicz088VJ=h15 zYu{n_($XZywPeL^{eDr&$VrAD^VU0zyQL>Y-vv3KVMg}c53&ZqeFybK6)ZgFuG?9y z^r!!I5`s0DAL0QWHgHr*3P&McwI6Eez56wOalW~%gdad{6jK=|?(Bt~oxPs*zO|b6 z_hJ4?Izt8j2!onU|IRf(DG>gO|CqIH)tcTgr2 zEvA&E1d{-TkU)TDMl~F!)JI2{U zZ2k>wvR@{=?ssS4Id3=01AaLB!vnuHxCK`LmY?~1>cGe-kyhrMMngdK*X{L z97aXZ1f8|Ab1{>`GzVhH;UJW*~qF68TgVx0l(>bfElyD-!d+4gE#LHqzHfLj4y z$=cvcI(Yg1)4fo@Ol6bCLoVZ!B4XwdN23N};UI%m2D4fGcO41~9ZH#nVh$WqvscVv zux<0{RdvmXq(!m;?r--&M+~mrJo0nCY?ooT)FSF+fy_!s@Bq3-r4tzD&Sx1$jBTcV z`b7YM_v2ef=J(b+TnK#naPCjTDU5~+RREiubK&jjBjaPgpu13uE>mohKfyT><{hu= zS8MVfw^vsqE3P-Y^WxD8NBklki3)rSqQp@%skI_I`*D)GsG~{;Fjo(34YJV)lSs0` zs9^68%pW9yil968Ogy7Hhdmj8(2TK-d>k=xl*|eL>vpTR8T?T$e~|+zg6@AS#2FmTUkILvjERTEWhVgvbpyy&fO3|N3`!bXau1(9RU-2x4y+$1IonRbMpKXU zkGa_*@o?g`Z&n*<)BQ5tL-&6ExPH!QBoR5+13~#<2rDZz~xLAV@~Lyl{%_jZH)(BElRZ!F}Ay>e_oef+{>b z+CQE=A}JFcFlV+MQ0K_6Z~}67w~>0P@%zqW>(lSYou*D*rL2k2-w?n7Y>dH}^sSxN?`et{9pL^i&-s&%MuVvC%l9Gk zqbRMP6Dcnl?1KFQqN{BG(JxzZpahWADIWNBMawcjd*Yq|{7 zl@#FH_wpt0%Or`hbpQ1aiQG6MKQsA0O%Y%+^_<;}t@mBk?ebQAT)2iF%m0)sbk1_H zfuU&$OuQVD$B68W+rd$W)@BpYhu$Xj&9mfy_EK9O%bz-B0JIyu)sb(o&K)w7c-E!- zoSXvvKp`d{Il$-7uVS;U=MF_&MIccpp3~np (VuMNS@!?v;PY$LEkM&FK4#mGx z4Mar+zeF$~ITBO?EHV)b;KUBe`75Y6Xj#G4Yzw)Oleoo85Jcc|3xq4YU<+wkqL}DJ zHo2!^dxD3dWW-Z-O5<8H_qs0=0j;Z9{n|;rIy7vzM8YYz?~DrhpHRM8q-N55jS|*C zAjL{sUh4DdbM0nY;81vz`4G}*cjC6{=BJ+|O|@Rlcz^(R`Q^K%Gbk>hZ=b3hgAAIY z7gtkMItyj+BNJ{wrZonc{MADXW_3zJZkZpQ?v4jqP!K4L7ii-$^0(niq}0#f>SfE* zqQD!V$>34rAWhZ%1OK4gPGx|W-6ycx+AO?&NPAGz5)S?<`7wC3Hp*Gi$a{X$fk$tH z-OJoI3%WIe4ECa^V9_c{R#>?)_fd(uWcCcPCh;?v0BaU0$|+cji~3;|&$pJZ0VLGM zyJxn@xTS6`nO*nR?#~k-xS#^UN^zHiA}Z*Kra9fcp<^^-2-+ZajfMJC2{(Jnw@O^D z095WM%+R4#n65k&++PqQ_$5CWVqLtYo7rswz}%lNeHDC1I`s@P?9VB2cfM3mNu&JO zoXOYks$Vg&3KUb24ww||ZshvMo`H30fWn;`HHyfo^|~_#+2Ggr?nNH762#V85oQbN zux4ID1~>8r;Rh&or&lf00)E=aU#3BGOY2>`U)_)kF);`M66DLl!|2c-*Ou3o7=eT% z$x`0_M~ukLQ_zfq*f2gKA<|-GGh&UnQy$lzt^@A7i&pm)BY}Gc{a|@60%1Brp#5E) zGeSqrI*e!#3b<`7gD9lwFB}(vf4UKla6SlM``#l%iHZLA9%M|&v5J~*VPRfM$H+q6 z^8pQ!ti5)M;V;$s4 z-p>Q^$y}1;G)Dw>Ajxg%w5 zWvAvK%e*-gP0NPvStZauwxsYy61}MjF@{`kviYLXbRdt~?srIJ5}{HrV~gfK$bmXT zW^*=&BU=|Uij=p6F`1f&lv1~%vSG{gH&{%tFqx{{OyyE}xr_Qj@H1lvC9;1ipi{fL zVG!~y`2uA>L?w*;9z9Hzu&JZFAr*P%xc;Mj!y-}+`dFmwn=q~s@eWQjezW>gwrxD9 zgDSIh9gtV6G1=LKL{)N`lc#C_F&K_#aYY=-2q*tYxFd zv}KEG8|etOuSQC@_GHyEN^i-Ds*cUh&F#FP6m8#%%G&O0EbGQcXqvV`i;P`s7(Ip@tp)nADpU!XSnNgh$HN)aJn#jf@)nYj< z#YN@Wr8f@WxS~o5F@}U8-CMj5lEFR$d;1jKhV)1eqY+d?!;Fhto}H*B4+naVjZ(f` zxYSvk<(Yrx$<~1|r^?F3MPvq%4V6+uMc)uz{IpV`VM@vBoL)kyZb7aMnXHXLUd1>m z9!Lqi%myTYymG+}oFI)5OTw7WjlyE0Ocg{QXxJXi4I{LwZv`DQ1ZV;!6-L*BAQ13R zA~x{vcw}gwrFey9-kWCWa}&x!62P7E-2E9HEL1RG6giETfT^@UoG?FWK!i#gD@pbx zmG(vW?g|T)B&FKwlEYqFdmuDbhX}235eOxTGj&-4pUkFmfj$@!y@El4F=XGMs2GDR zN0*EqDfR*!+ECE2cFwlqY9m|Pxq4o9o&=k_I4>qZAAf_b1n0u=h-rZusOw$&?qtSD2-%gj%c zdxg)ts^5=Ypw#X`R-F5#)80InuUVY?b`|%_M%`B++RxX>Oy6EGu42T4M?Ig~q#Y=dsIS|)HbGaQaN`7S~4@u|sJkT8n)ruUW2ut?R8`+$F$0?-M$RCfJ`W#?_1rNv2t(FppmMX)~ zH5cbK6@$vkt8bC6s0o!pMBS8E3ftMf@{;y6{#cxaV`9Ir-%BY((D#tLcaxC6pAwPx zX6)CjJ>5Q+qXEf*GNh;a@6@~Rp1VdtZ1Qmv1V5)%)RiUwimtp=xn{RVU=u{T5rnNM zn}OPOX%$ODQv;JKc}baR@=i|&9v9kjU?jh6i*gO~Mj9}(0Wz>$I4aS7`4~ibn&3Kr z8Ys#oS%!gV)L5J%muC-1nd64Eb!V3+C&5M@J?o}@Nkeq*bHyHfkjWVqV7BT+8rN?C zaBv?Nc*Tbwbs-`V)xv}Drx#4{^_jOF2l$}DC*wcQc}li9Yxq*iuXL8h3N!PrYA{VK zqv)_v)J#*N?>7S1td#7xo{fN7~ueA^8>giJd zyP-e#WEVIazF?Ub)u9)%g5BRFJ~q?o#7%2JoN8+n$%~&4F58itPt>;#x3TF%-gO#s()q;dFZ`@sb!EGGKlA()xRt3Mlph3|13U*GIL9t}D+CXrt1g09n82 zm?4VG7+x%$TCD~0LBdFt?`aD+xeXdyeM?4`EKTW}(pIIBcI`^%|H3O8OSx_Rw+>*h zTy-wOY{F9+0di1&a{=b_$kvU{jQ0K{}JW6FU$@w=eVBRy)42~NYZAi#vq-Pl(75Cp%$SD58LzV z^qCZ3U)N38wDa9Y?BRpoRpP6yKP+)})mfP44(E||Q0@x=P%-PbkB0~C{LB+C0O}VC z!xmgrn4z8M<20r-ttWMN$O z$dEUhd8OnOI#}g}HR6P}O35vgSosx77!w`P);-&plVljy*seZE(`HRHy_b%+1O%Wp zlexTQK?DTBwmiVk0v^ z!-Nflbl~8TNtx+Low%=Yfd5UR_}?Tl6#T(pMq9{==7u&LKsyB#1g8RgRk&eo0&qoI zdbHX83=dzo5``t)y}w^9wHR07g%4gjj6$F7qotR819@g{$V=3t>Aheg%Hrte@g^7S zgVh5pl`7#wD`B{wj!|K0m$QYH*&+_CrhD;3aC#6JFkpIg7y@8=_0p3NPI8vUk)TYS z_PpQ)DGKn;+AVxWCQ7Mtl56&j=M=lQqqC)r=$j8_{-YL&)goKn7VT5EN6~D*1>fvL zrBZKEhj4W_Zg?!2It;AQ-0Tdytaoc<14e~+7vVmFc1zp6A8)T+tdx=V08={gh(!(3iY`BhaEOHn%&v?7$mV&NQu% zTzp702SH#RQ->ht3SIp`#M)1VY{T>UMd7ke9*)G1z{53xrhDS4blsv_54lBO56|{m zsU!Erbb7-A5P^J%Nn$rmE9O14@DCoro~Tu>2Mu@~5}4Q!ejtBg2a!as!x;B6*zChe zhyg)A1ypbCxug}nVWC>5RnZyo2Xa0?p_dK{;jy?Ze6)^RH_k}kJxWfA`is{~&x+N@ zOFF>MF|-hLN#CKZsjKZc#pFUxW#+^TY~lx(SG?aj6Y}O?;%$J|LLyuSic>MbH9OEZ z+W}1B>YuV={6}c_jVo zYm(y5%P(p82pj(ugE3p(JU!;(oF|sTK+K}11VQtH>x7$;Oxxk#?v88kO+ho{rFQ)M zC%cH)%0lOjqaBwGxQoQFJ$#XvWM_d=t|k@W|A&;)=lWZWy5kLFA*h^L<&ZXG5@6!N z%ABVS@r}mB!OJW&SD`nnS86jP=Qx{Fuit|KxB_7QI`+Y@qmHnS!+`z(!4UN9(}>^z zKnR4{4##jo0>Q#vMsDYH-*NzS;J|?JW!=zOPPrZhvmIX-e3^9Hn25k0F2NAUlkFtM zi=(@cfdAKYNR5}o@*?|Rg~&nwAA-9f`Tq}C;{O8%{vTz?!Tw*c=KqL9j}m}zy8I{& zK?>_@4*0W_X6kiL(%o)pm=wka#m|I`v2Yw5RjpV=mCr0aiB&<64xE`ip_Vs7hbZEy z3OpqhDR>%6QqXkbj^`_UFXjgN4pI{cQVA&kJku!Gd!G3Q=%#vfR;Xl2X5qb$3UWe| z-5Z8dTi0QkC+9bU7>+tEv)aZ0I|NB#%$_uFxnpe88S;S;me(02}6c^9s7*g z^9Z@A0oo{+SIF0o^NFaZ@p(EEM+`$L&jz!lnMbniPR_=Yi*HU&5#H<7-{9V(n;qMc zQs0N%Z>ruo({Iop{GaEU6nHKa;VB)N1PDQgT$)B#$ z5RB<3)3%8%lN+}$87vcw1o+*f#Ku^YL^%ePmxOVFtd4hxNKT=C>wbyms#Yvwd>%&I zF07iCwS0*vB-eFy@)8@UA(y38XnxNV^;^(kb4g$nLlEK#c}bJ%!4xSl zQy%Nt0;jMVdEZ{;o3hpl-3?v?3$NJ~8cu&WE{IwYalSVmpaFvbC{!Hp-9e)Sm#a48 z`c|Aa`9kj#R?D?J#gxmNmU7)WS%e+f7W@L_Q3I4)YwJd42xR`t=qC#0xeC~KBd=t3 zoU?~(C^Ee(Qd!Qg&$Qi<1aP_D_lz^IHo11s=UllT_x1G^Q@GkTbFw2dYW3!e(J|@t zj&8N?4^hP|$Hae1Ts4aaQaty^W_*7!ypJk*Pos7(_u#pojB_$2xND=k>C$HDfKnUB z@8g3rIa+T=X?!&g86i|zZn1iDbauM$pB)W9(kKYa{b1mPh2jN~=3 zSHAb=TSY^0??p|ye47{WyqizwgGIL>xz8dOM2Br&6{37Ogcsj%d@V~wXzvAc)Ba`L z9HwBrzJ5F( z7W``&9*oSn6=3jljFLK;mb7@hYl>cl*inPNx35Pnr6V@}(^_@MGo@ASiYc9}?z}Mf}VZ zHVZe360F06Mg}%s9Zf<=Xa%mZrk78hD`$A?hfkK;*gbj|Z1a2j*({KFJ zcqC6TO8VhZqFXM;)JxlUeo0or|B30%Ct#)b-G`v!0O1c zirA1Tblx=FXX9U3*UWuS!;U`bXa|Bsnd{0dJ~RNIr0&&W^M}(;MUwR*fh}9qJz!8o zE@DXo^h`$d%roTwN)%%gn~#eSy6Iomql{|_<|V!78xve_zh|;Qad*o!AmlmLI)~k} z3jO+AGPi#zv)1@219jE6gh4YITPiNXwBr>)Z*WLNHtfH(KY!Q2*F;|HpKkOg589yc z{y(p65z)3zHe68Qdt{^ zcrkK8JO>dQjJTwjE)D|Z<6*FWz92rl_Dp~NP+Diom_oFLs)HrH>nK$fk&_9?Y8Eq* zwZCrMQIw~1(M0s%<+hEL_sk8%x6=&$$U&9(Do(x689fW4*`$qHWSR-nzI(HkYc_z$ zQiL@9+r;I6CLOdf>N{%m-tv)-c>lzs$`^?DXT700+mRGS-p`hb4AV<`dkr>h)r_M4>$0`He0;pDyk%@OxA<=EGINiINJ(MwG<03L( z6fAQbcyC+lA$bP&;Gb)GQJdFEioBu`(GNWLiXUv-7hVXPUasVXV-Y6F?o{Es2H|GU zFOeXYzskkqAamziDGmv*4Vi0QT288n-D-ixg5IewiECZ_hX6{g4H)zoc8+4#54%$Q zqVg?aqS|RztGr!CH#H^6rb8f*T|PuwEC_P@g6|yr$IV@tbr+HQ^)kkvuXqgL`UAA# zUEn(3OT&_lT=)K8pMtt9Z{uFWh>aV}dH-VG^9X(BFX0lJ7txz6*I^u)XX~tgFM4X5 z(;}i-?TBZq`TEV4tn600(L(MY?YxWA`gug~{DXGW(CXN0ExI!uJVz9}en@aOQs$ zFJ$L#9UgCx^YDY@I!0YdM^U>xu`oJ%&Z-zQm12O}XR~!&T=oew#Z=S6VkvUq;3fpT zT7n>h{^3qW%w1`?-UHb=E16p9(!m`omVKH$m5NPQr2o*R3pBgOM_G5K&yW{E7JJxJk3yvdo#96(bBmYFOaWm`Hvg8xpYg(Q-eHxh zS@V9Qw7NzScz+SJ&I^kUt3|2k6w+x(zio_TzIJTdQaqhl+rE7^( zB5_Y=lmsm;!6*#C`|@~O9*1;zZVkrY%s9WpP+$#t21w~iX1hq0qVs6^WRKONBDqD^ zUKQZ;%)P7`F_>xS9ALsvjEd@Uwj^YWz0fv@M{L@ASNh|iScG>X(1FEhSFBGXuR>`I z9RI`9>gHb|XSr9jaU~SFZ2l~yzWD16WlNUZM&w+|dzVhW{;A_S7i`P=c-f=vnLMW{ zOyU=|>u|o&+N`Ls$}{(-$_N=Oj<-eoY`+CsNBq#OK*JqO>c;{;n z^48EmiFuvtYG+=5Z$MxyvA<4P`)TWSYi#@lkebl`pvoZ}ry#g&3F+y$8?NBq+Ca8i zM1Cg6sF<$;)SRV}a#WzL`B5*bxry2frc`h*FX3DWugH3=QdM~oMr5XOo>rx1J0gq0 z5a(`Ca@Q|Wu+9qZejfz8%%$z18OD9KYcm9nd0mTM^Vh`&|9jX+v;FglE72@mku-J0 z_NGu@I@G1K)d3A{mOe@`Q-^1Ak}i$HDPfSIbXTxjnQ0wH!*5R)HrPDfl2f~KeyDFn zC`GvO3(QRYFmKjx+w9egV+$1ySx$m_^vkDH+rFEUAro8oxw{Qr(jty=W>u_y=SQMj z{A3uE!x$H*t!cWxDIHcaGA~90_##Zr_X- z(69c-(vUeRhI!qbUox_|e`qkzMv7469H|V|%%VG;utdmUc~XkihIA#cl*vWWleHVn z1ZA})wLZw*SR#w8r(a9Q{Tv3ZL)P3}wUv$GcAFmLhQh(Bv`* zd*6ksUuqhsZj1y2&#^`pH5h$C{LXER&WFwS^)_cD=f`RI{LH1t%X>|k{1F4`ch&Po zw6L-={y@f;$Bnm6s~fXByeVlhCI#xvL38l>0=-S4sl2;d8N}mad{&5@1o}K>XNGwG z(sU#%AR0tXdicE|OK#OD=Xrk6I2o9a{bnE{JhUQJL~jC%p`qMlBxnD2{HydsUlP8r z+i!3<8}A0$cw#O2RcW_Hx_&XwL!MPMK0A4@JD7Nr?BacVC^Fg%sj9zuyx9$ViJ^zn zGqcG4AdZ5A{`Ds!@viC551Uj;LLyA2q0jTgr+?sVC=;5;bjSebw&p-iNBnXnElUmYaNbhq1z(+9 zH1*nchxa8pe+BO;RDHEt^j_Aj{JR=}mr;XD^=VYIN|6FmCJvC^&Wp9`p)o?ef9Mg(7OWfr#x zUp{Gvdcf7%A|h7jfel7g7DTi`Wh0i(abOXu2$@OKQ;S&?=WiNVDReU3`CMS(}}UcnMZlv4Wm=pG7byV?m*+V0T?q}7=N1v!Ep2aB!}nMG^{hI!NG{mn!Y6`J4>fIAv_*wb$x~Brq@B9m>({lj{exv zr-#rO)V>sh>*n<@&;vhPF0W5sj;_FHHx`>{{m}4(@E#Sl^{zKQ=% zvgmPLz>8(LFm<0XkK6Em1q#!r@hICK5LxEMWV;`+hi}1V!%(QsEq}&b!+3U#?Uz+t zI=zs-3~to`Ef*`x=;r=-u25c6XA44=iT#FvQeuT8*Q%^XrIV4$28sNqFCm$v-x%E3 z1<#dhd%AbG3uAV3yj78MST!oAn4X&&1f=bi05_DHu@XuIovOKMdiG?+2f?bYR45vb zh2eg*t4Mhc3b?opNl3BrjzmqwrL0qStIQI(kfh#*q!DV^AQ}J0Y`DJF7&NXM9Ld;a z>~zU+kATEQoCJ$MNvjY!66G~Msj?>p7Y9DA9}*`vpfjNTJ`%apCTo^)Ko5;ax(l$7d%~z?f1=U z_XDX74c9ZYgXRct$ThA0Q~s_|BU*E7i98R|T$}aru2(cvd-t<&wOEWy^pd+AHN}lC zqi&(F-f!>)mPlDPb_Z~cBzYxizpPSGE>y$2+$L!{mGKjR7il?$4Jbb^jv8QpTj(CzUziw{3=Rv1U3@_i` zgPBmv+(%O!?p>v{-EHy@7uDG$a7pZR&5DsNp3&`skyLx3rYS1Q${Tb2iPM`5ULkOy zd)-;fbz9wBmY^)TcuT6rBV+NQ5fUx*;Tad7t_%B ztJ;rOO_G_Oq*?{4Ub0ZRgC@Av5L+mS)d6tv*v-=jWRW)e4RiN6S3ee>il zVv%LIUV z=!g#>R9bBz=O9%hEAuCsh_p85sjHD7}z=_Esj;VKBC~d>w@leeNRi)^Es$ zgo`w%`t8a6PTsy)hnM%CV-_Q|Yli~SMrb3ksGdF?hU&7`x3R7nYigTFOwK^Za9cy~ zE{>bwR1u~zR9BC|U;fZt@AI_wI+id5BtLj5u#C|HFE?k2Ip31Yy_qRH1PUWBoCs~T z0tW_?l_tFMbr##l-AxV^S9CQczp@w=i_Lu5hrqu4*F%mcZYTRzizRxiI3lu0>lzb# zU&#zSV-=e^2vMV;E9vg#R3&UG69mM%k;1ePO83F6Bii>T&UO4WrIX$>^ z?=LB}&|QD1zJLL|?Y=biE@z5{uZ-~Yj2rcq4Wrb!r4^5#AD()WWMf-&Om2xMsx4NH zfg$pyrH^`Ja>0PT>|+sHVc{kA*gab9d=nL%8qswfIoA@^Sllwa5O@0+)0~I*Wt!tao|i$tK0ZSr z1E#jVxjFgUHaDc+A^OdRx8tywNmv}vibw`|32%&B854lZx1#XyeF@NUj2nSK+<#tQ^V?z==4fN;~ zvB5)UYNu%39-RZSQJw!LIz4h@o?^@eD?@UTS(M2x8_6_^hjc+rZ7&Npu{wV2Uj;Ni za?7fB>v^iOD#UXUNwHc13|Kl6x7^S1r?#-^Q0e*sXD)_Ev7Z!E?66BC>UTByiKI8# zB{0s!b2H=F%2Y|Pb;cvJR^TRuASrA?Y5?m+p-*zl=~rKhdAn))vdadLncK^h9}QoV z$tcWsC9I1jwiWXF!nQs@e?oHX8ygxe-%RBZd+mJDP&UKiAu^)+@P9?~Hb!W!o_lV< zT(zJ#5>=VBrMyOFyvUiS|F(b_uY@^?Pkf0vW<-4$S#hTBG z4CXgUNCa0v24*$s@96ZAj|QG&OER&PF+jV<_kTBw;L}^TpU`BRB)Z1il7wjBL3)lp zpC4IuP)N?N|0Q`C#D-gZ9?_O#{v#SFSS)z=k_UooHl~LI*x9QGwph5?2Tvd$c^oqH zpxYIq5NEiIo(yPM?vMk)tWHNa>0bld(eF)<3(C91YpRcWw8mYKlpt+RsYlGb);`imjglm7?f;%RAZIn4dcKaYWj|EFW64f zHr~bd>EXsfju9731K)Mpi@Cd1 zAYR9jA$HS!wP!^cOooS4h?dv4UixpD_77(59?t{-{4e)G17E{2Ad@Pf>w2~8(5j6LQY5JTeK|ea2qydL0w(&!336a~c>IEo*di`gq97@0pyzW_%;+LIgqs$OW106$&$uyGsl%@S+w^tRH59WD!) zXsH_6Q&a&^ZHdURF=iEK9?2a&GNYh2iwb{IdMk`-L;<`ir`*D~%6#Ua0m^`X4eIRl zeIWg5aPWUENWKN9-0QOd6~d8fM9y}X4m^)=3&tj6E_4iW09#OVw|uZVw_awjA=Q; z54YI!Q^{O(E19)MD-7EC2$#V}0ETZ$t}(FBHWc=9@HXTex6QQ&LQXu?ghs1nRtq;f z{eWMb*kJU-j#P^uWLc`z*tBwtpde(*a{0T}88N_mUDs4JdD|Jct(U)A7{WqH{G6_6 z=pXY%K5|nEfm7UZ9dOCuWhZNO;fCqtyYk)1N9*DwVtB}^i+OMy!`}cTeaq#8y0#z5 zLm6vO!52AtRpxhW%LuI*zL)$%_h+n>e&*K;et!K|Ri#dl zD{HkeV{PC^5ey?;BPKYevJWtc9UWkI(tbMWEE^`MrjtZ9TrvViweQvo%GT91Z^Bbp z-p}0wAqfT93+r<>WNYu`Z5gXeJ+~1h@Y+&twg-dvbZAyYMQ4Wu`PzBrt*b#MI+;$| z8VF#|t2Np%Iyt$f$r~wztTbTVge-;KzThz}Is=#G26DKTG+dZ^D;mi^iMMv=X zxkysn8a6h}2?v`B+@J>AeTB%SV3V+$HV9v>7(UW#YwxV$PZGt{v7zcPJD67Q9X&!` zE9nrXs9^MRNW3`jGU^wB)VuYK0l&@_87tK5#MuD&gUUJ|4V-a|+hEsjM>Z^6xqbAz z)@e^XS>HsHABXl}?s{Lu4dB9j^B|OWDi4jb+YHy<=)Y=SfCW}P{dPEL*$eGO_0yo! z$<~@2^Qbe_N-8o{>6}F zXlN3F%Y#%iEuA}kc1GZD^Hgd2%VEvQU4wCsWyaPTZ~a7#1a7KILipYU^QYH2smm_@ z^cGgxFZDuUUAF<61ALVOs%sIh`Hgu}x9kA}E=b-2DR@TDt+qS-&`PxLw;TTOU|dPGvkZ>TmmRgEJ!P@U3dgf5gXJxNkkkz# z`Z4Ml{r!lq0G5ywP5ch4Kru`PZDONoW?)5XY=xa!bFQk+o&)V=2E-PZf!AY`3yd|% zg~L5{Jp9o!E6i(KAMi|<)x|^32UkP!u&J_Aje6Fqku8+GgRufW00(Rl<20N; zO`xnkk2zdmPJV~5IY14+5n4G4ydSU@!XlV8a0`|#Up+7ZS%6NylJhk9Pf!eSJ}+}D zfEOY*=xY!zk`}9edfrfWSW}>E0H%?B>U0!LntpG3 zE*M&%G6Zd)S$__Kb3iA8K|^{J%(MX@dk38MaCyXjlX~%?9iUo5Wk`FR>VMEu{gn3$ z5UikBZ3Cu8_Gs-P`S9()tNhiF)-3d}*08j<0WC)L|E#g#Z~@^FDxuv$UfT$8gLHs$ z19e9CDb`_`Hv>rY+oZ+-#Yc=PVTxemA>tti-1`AA0XG7A`Kj;$$RURTn!!AQb`VVw z=TQX^=b^=cwhcjy{1@=$>|^-R^0C@U1>gO(!hqmGpz_h>;mrYx0bT+M`w8)J^N|C& z^QqcnoSprzfKq{*27X|V0oGvI`)^9<;kU_(^apJuGBso{lVw)a+TA@wkKEkmH#>Ooig9sCNWXfzLQx%J|6>VP?IWty8Hz}ZK zNGm*|nmjA*y!ImeERqAL(K{aERZEw~$wiKpO=BTV*SH`=4$FgLYdv?gx_4>dbqm_~sIaO=XUP6EKI`-JuvSh>?0&d@Tzb>`URO=7 zKH6Tk%$v3^ySnP5+~_>gFg#OMyvHql>j}mG)rei!)OA+OOIsZ@^*#B0xD2;tbzZ{S zx?EV@`ZZGGxF8(y_PHJ(}y`7G9Pv`yde)gFz1VNC}1C##SzyCh~FF?@0>HOpo zKjbXexX*Xo;!Pn!aU>dIMsUIvQ$Yz;&Xx@s$`y%8UrtJ2z9vh~z{ka>&u78s%;&?` z!?(+SpI?$6!jIxF=g0C-@*fJ^5_m2kCZH%#B7hT^5;zxpDkv^!CKx1GAlN22EVu)r z1HA${gW^Dypm8BPq3=TVLi56O!eYW6!fC=~!d=4S!rLNH5jT-g5ws|+D6goTXo6^k zC{c7xj7iK?%t6dcEJUnb>`I(oTva?+JX#zjK_~H8f=@z4!c^j?M2p0nB#k7$q_JeY zBwlh_a$WLRic0FMRFo7(szz#1YEkM$nqC?x4U+yKttD+K?Ij)gnoi~5-ekJF34{4{7!t+?aGob7(9@Ifr-ZlJ1~RsY}vj zbR)e>R~)u+Xz)4!Q-j68&frZ&kfNnxfnw3e#~;H!5|th*!Iip|PLsYV#09(N>@g?{j{*1WQeoedvOTk|dfN#hpLcaUXCRXYxyU;7k637kP!R@C&@e%fh`vMR*cw!hPW_p%y5_193y# ziwWtnL`nbUee!?VQ*LBu*gHj6W)#gPtfs74t+T9iZ5VA}HeI$9`Ld<8Rkp3SZL+&% zhqk|Kf8RdRKGr_P9%El=KWsl`zvw{iaMOXqLB_$xp%r!uCIyRu#lg~Hg)l5^3N{1V zf?dF_9uCq@mU2~#Ybh)fyIAVq4a;8`cBcZ82DIyX7Y2X5p6YwgLyjJ>Wy`cio@4 zgWP|(r??-wUwP1YJoDi6DE9d8DdlPI>E(&??De|m^}x%-E5xhJYs&kvw~{y7yBqNc z0Yq3Ku!!rC0vx;{8v;O(!75yXSMUaYp-v=4%g}A)@meg#a_otN@oszv|7}bno5@zf zh#<#FN3PR#bUociuh4h2-0aS(*;V#`NhZI@pYU(uqSzpAiKpVN7T3z1rSge_P z(ryrakav(*5F%(W=rEWY>=S$%;t=v91RHucR3y|Qv^9)6j2EUCW*U|pmKuf&>kgX@ zI}Q662_h|!K%@n73OR$kSRzAH5Dk9>--kazRw56`UF0*wMQdmSy+@y-?_#sCF$S?~ z*l&1_Z{RKt@n^)%#B$=C7$aih7jhr@L4K#Ys2`|z=`HkxuF>oCIUS~b2AD(U4)Z^& zuswE{Wmw3LvI1+d@39Hi2Qy$LXaO4lkiY{WNWc(WgLPnn9k98DT!*{k0`4+5W8pNYRpU-U|?OdU@BpJtt=pXQskhSEe? zpx~%rR0^scwSu}pgJ?cl4E+_|l+K-QnZA-Ckr9@$l?lvb&*aGD%*1B)XO3phWu9Ts z7%oN<1IB1z3@|nrPfQ>t8k2&_!W3h=F~gXZ)l!~f5k!N40b3C81dPjdc`UEx6B){^ zb7H~B9Wgyax0O)2P%adzb7{4T8@5}%V&%~8s=sKf_y3>(d9U;I@rOu_nr75K) zWvpc(WmDynW)?YHW>sO<}D_ZCdU1(6X+iZmj-gy>Y#Ly;ps3 zeOdjr|El3*gKtAt!(hYjM#e_3M$g9NCWa=PCYz?7X3A!d=7JXC7K@hPme7{gmR~JL zt;kkJt5oaf)~MEw*4?(pZ3bF?AH(ku=n2mWwuE-V24Rb^P1q&u6AlTV31123UVQJZ z-aEZ_d++x??0wwp-Mi7}+t=QA(f9v;Qa`X?vEQ}duOHoC-mlYVAuZ%GHui@1h%%xF z(Tk`Hhr*d~EZ1Yi^(pag6Xf;E7^0tN67K?Y;E25DG_ z12_*`a1TY;;8%Q`kN7=a=54;u&+!%B_*6Tio#96|{E`sz6DNUJ* z$$y=$S=}{AZJN*%s%WTt{f8C+H-x~31dfA;jv)$k{FK?nyMz|594~U|mu>0gpLJSe z_U3N^>owVOyS67^aaRv;y9YhvM_h8t6MxSiImL=X%IQuGJ7{B&3HFhp$`&WQB={O@ zF;zF~xhmIA&FXPw{cU|MHuo0ULM_}P`Nyo8Ir1rA@-08o&3qQJl$ESyqX#;?54!cM zzOKJM=7+^_8@eHkYOr$^m%4oRtTaoN247CiXs-N7#!hX*vHYS3CfeXt)Qz%HVXl$A z6n;6ekzVdFkkJmh+aPoKNg>VKa8huT$Fh?``c}Ny09Meh&Sr-#?R5#{N|MFCMXJUc}0|!M1)? z4zX)QnjaZumNE*c?Qf@`2W?36n4M4nVw81*QD9H5gAN2G%E3OOtaFSZ?=~b}y@syq=i%{yu}Rq&&|BotT4CS6~*6ELzjF{qoNj{VpFli@>x zgh*Gj*S=j6D#(dmKEno6#a>b}drIBJu~H&1I^qnrp*F&w05Zkkb$R>|JL=$ij>{8D zWH6%~^lqF)ZPSJ157*wt_~rjQv!{;zJ3>a>9VLZ7Va47XfnusEu8%T$TtReep>C(5 zABZm10JPIN|L!M`^#|O*-A73%^h}9Z|FKoJdNy0w;fBa0JcvD#pLha#GBM!?G;2jf zMtFo*^^BJvq5ptC*{PZe`it>vYwu|3;`={;vf#60V)VYJ5~YI3 zjrPrwqqzC)r{9%oY_5eKiB?CnSZ^vT#6|lmX&PVDKGjOUyS({m^jk=MP;S~cNFs*y zfYztnX#3tyw6p%Nd1|Rv?4)w<({?$Dsr29Ii9`|eO1wAy${Ma^g2HPA-k?Mcr7MRK z{@gx{)#60br%R?TZnq+${e1fav~pj5W@%mEX}cegEJo)0tnl(7$Hzx+Z0ut1I&&TH z>z2{L?xfrd>Qk_0LE5s0F+aKA#{b?R@C8=>Uzd^`e8X|2Q2NAq{-^Cuw)SIe48XvL zdkWkJc+rj8F49 zXx+&*2kTDvj+Sn`d}Gl1*VKZ1A2&2_^LiCTONT65I$(VJt)1L)~=8YPl%y7`bz2}sh-l)-QL|)_a%+<57PW8^G zvbFi&S&6F2C@QP5bF+Lf9C_zrw(_^=AegHt)0#zf zb=XzN$ZpMSHD*zx>2F~#2RjVVS`wpK?o|bl6Gdzl>jE>~Kr%(@;01vfv=Ojh9as9y zSbQZkyww6PBi;hL6QrqOc8`+|t>CHP!7C`dfS+RX6@6yz@x4sKOL3f|Sd~o!hrxM8hG@s{d)c%$y<(q}1s@ zygC!j+(Nq$O3VA0hJG59@;V%Zb(o>!X2pA&218$~-*l2p*YrM4xpuo5;obQFg&N8c zExC5-Q%zp*=`o>foSwJ~YbQvDWzq(*uF9u(FbF;&a6&CKuQO2uyFJ9VwRHWU9Ug0r zgNl$WEXV^xWV+bCM+OJ!>`$|1|LpcC*uliv06odyMy$y($P6q`+EC*xm!R$h7um>s z29U@Vwy%v~`jZ(W4or04Y_c!+S47*hu53Ddb)ie!{aWR39SE4dS73!Ei-U#|ijcU( z9#-z{uSHX0D*Z1Sl_+AgkP&ZvFalDZKN8d0Z`R^=crtDK`F7iIJ3#yL6JlK;Q;+1O zJl`jSZmh?9rXo`%^taitvFn2LtiuJVL(dv^y@$5k*e|pf^z;@AMbGl%Z`-zG^8$C2 z;A?{(8D^yQ6^z@cI5Ck0>T5Qbaf=tAC20?%J4jT{USxDALyEeG=*Gt7TivulJZJ274&01 z-eDn!`JOUE>`_MoUd0&Zs-sL!Tq9_cyL?}pT^=eUv>Y`{D^Bh)td=tw^7)YL;nzs5 zd}3PWcJUdtELpuu&x%|Aui(;Of1I|!bv|G}{ms5UhQj$h27XGQpPCuBHQ6nW-S;IOA4?AzB1NLmizJYahKdpcs`dp30rJ8 zl(S`iD1&7C`S#>?3b6L&(|f{nnA!nm0LFpL##$TXCC%4y%uu>#oV5~ll=a=g&Xn7^ zm&`Y0_xJ3z$4o96{U6-mM=4V2Mt&($=nC1NYs$qm1@}nmF*b*eQ=o>CgX7>M8)KD@ z#eAt+*}YUmg}i^xjs-mu8329kpbi0vX@|KuhhvQ$MB$`@jA=o3h)O!-?U=k1l$efF z$p&Ash*9`rwpV336~+<-jt4UUGfv$r)DB{w>ElrybfHQlm#j2awktbRB^EQv^v}PQ zJ{xeuD>HRR3uM~Wk=x$!rt#C!WKJ}F-(%}r{Rf~nUHTRI8DYXEEnS44E?inDM2@wF47>fFA1A5 za^0l6-KH+EXVSC^mLGW4~+)T1@fwB&=i) z1+-7YX_U-;a0A-MQmz=842k-+B0V2@trMJ;g4C9Gb;x;eI)Fm`K+W^-be9I5-+sr# zWq_mBoSwYwrpRVL+uSt0rv4ZF<4pzaF&)8}-V~p0+MM)t@FkTx z?Z4Z*v=e5KRHvaXk|956w-%pnKi_^jY14y~%@O&xM!ya`X2TRS{irqbyz8K&>9d-% z(tTxo7e3~@te9EV%b$s9{{FqDvX~TtB7C;FAPZ2h>L1#>zc7#Tg|HFYxM#f^q>a0Q zf`1kkG1i|KVmN*8+A@g?*%c=ijLmd{Yl;d*(Hhjfbci`@+GSqU_ZZjqak2Dtx@R=5<(~MUa!ai-70=stTANSzY7A)U``c7yiqOy_s?jLu51~35EW>*H z+O!LHhR`HIWJD$~W<>yHFqv46vlzF?^fAwc&QpzepMzI0B2#YA;_xuRLCGV#q}CQ{TKe?LKw-gqf(xNC8~ z6={~Td%bO56X~`K1|5r6Hc}r$=~^=zbvZMMhL{qJ^G=)$i)xI*D=fUQ5sP$jSYp3t z7!nIa+9kn;+D*C|U1iBzAVLGpZr~ts-|T)SQHFMwd(DD^!;0AHl05%qp&Z#S{H(*f z{Q{86UF4Ma%CVmh0^3IstzYP0+kFWU?gYv5;28jP{hjWiTs!UPx`25zMsjH#L5LI$ z>z7ntv%gwam)}HR)nWUa`sx|!T3|_yAKcSjI(^FY@FxM8y{FB`yW1gb=Pl4L8lAA= z6t~!cS#b1lSJv&|$g7F2pR(<%SNGp=JnP6Vqx0}qA;0Xp6U+K+$o2~>gejPx_j66@ zt}oo3pV-UGw}1ZPz-jZ}xqafSrp@oWye5Az@_6aZnfG^3syvz|Ucdebnl!mgo$?M{LfCs9ZZmPb^9i`vjg(O2X5a_mc6~@Vr!w9JHZZRMWEONN%QK)k$YB_ zE+@vgyeEUT;ayYqX8#B3D{=24J9$}_VJ*p@c?B%a*KKn@`E!j%Y$7?&0LF*A*NsM< zB;F|6&Rlw)sYGj8c8OKmvT-5Xy|3p|RjUMeEY={(-%wp-LdyX)?~?cVmeDlCN($Rqr#wehL^8imfvF@Ch$x(lgkD%CETc94lxLiG`dOQ z8)n|m%owU+)HofxEpD4=mrv>m%a#c*u_e-lCf%wB4m{vQZ0nz8sw#eB{cPs5A86oV z(gx6}g%7wAWEXb>0`EDUkhz%)+{co(J5|M5kR0Idogm->cr%#r+#-xA;?-5lRVKDs zZjXOrzr$Po*G!c-cY^C2lz9f9&h-jFmb>ob8257GcXwuE z+)V!6AL-4A%hPnb$c&$v=;|ZcO6ttfXoab~Ov(fTTeWU@KJOBp`;45=(w!QvLP?WS zHT_3`15`pIPhql5LR|TKk>(IXgLjcgr+y2UqW9V zULf7GNO4+trzY*PtiNX&xx=`p=Gj5(9PSlyhyfi4ZTlSlq?l@iQES|f6vFZnE6YPx zRu0*LIffbNA%!7s1m$Weeo{TQ+mx*h+{3ZZ4s>luPhH}ANXJ$4S$`uzoyKoY z3Q^bM$lbQ5o< zFy#ApjfvO(yk;&|3cxJ*@Xx$WLt7UROLx7-7)3m+{fXbn^-3NNYd%O~oe+!=!b z==Sz=1uhN0S@tKOFdUj8?`b4z^2yt*b!ek0We>NrhZF~42p-OdYpv(-IXI_;_y#BP zjlY|h5Dvu=!=e%t_r|@1Ubwg3yOFYLB_N7>&!6~G@JIKFPiMq*%&Pr(esILqO#Y({ zdE$^WWJx48LlA+lC3DGVO6&Vb>wAYMe`#*M3_^{d28oJMck+##-S5tHGVZ;_X44(~ZNWQ+H4ogT7$OU_Y5~&Bemyj{KW%utO)}CVH87U~9f?@0!j%16YYMhJma1B)Fm?&Zf zQhrxZ`q&Wn)8&Q)+H^&SUQu?56hk{LOC6})w!w(rPde#__3dvvL->Q+w*)UjMGS6K z+pgr{V6{rQ`*((;&FWtGL00}t9157ZpOI8a{7wFFZMX#HI&R7{BhEexitCK7)=Wa& z*mT$JGcDftK5#239czhM5Jvg#-NavF%Ah04+)ey!x6^pO{gv8%qFK!p^}97fLyL zsLf{#z$`^hRrcUM;0uao>6wO<6{l~cV`0Up@g`bm&uB<$YV1_yxXq+;!JTU7f5Y|pZVNL#r1&O=Fl_v`tYJ==yDnO6bsG`F;u(S@@XEnH2(i*l@ zy9gJc^C7HTGjnm!wSHXGZ-z^or=(m8<^j`3{djP=p#0>vASK`yUE0@~dUp5607Pvv zpz#k;rQuCm<#u`!Axz$E*)R48xl=VqFFV!YyBOlAKZt!({GdGX!2gzoY?;A^@`?~bq9LQd3g`F-d+ZpkLp#~$hLS$ z)f2GB{rlAt3zm?D;?HsMJt{}v@&Jbs$DziCpps%hz|X=N`r6I5dy;t~&yzE0e9f&Y zRlNua>?Sq{u5h!9;FXXwQp-sDDVvktFq%+2G!rT0#i?VJXq2fMp;6}bP>nS0N-Yv% z7MZA}y$Krsdtkpqx&tynP@~N=H)Hf%)gW!)p7`m6Cv|@Wo=hK(D4E2w@mn|#za`8T zX5&0O+sJcIdllyz%(e3*EUE{ds&&|ek1x~tM>>C1=O5|DGTm6F^H+7gOz(cxi8kHb zwcav}+ypOvWwsY2k%$f`z98`CNO6P#Of5Ve^kaQ&l0RxRyv+-|4*!bR32j0f{uQ?g zzlyWccAgFI(%r$wzjc4n(v6>s_wDlh_O^Caq}C*i&?6thyr!9>%6?5hLaP}yth z`}#`IPP!w_;k^EDbJ4wUM%yoq7^-Ag<+b8n%(jcE!7O1Xun!k*EY;yVivEb7y0d9# zlNC{Z;A7YQtlt2B-cw5i&&ViGhhj_93NK_+;jI2?4t!7@fZoOme?Mnt3fDO z1vZl?%QCArt9Y~=hs^d+t(sEF!?!+WPc>M`){1mSIW^|>+(1Wa{jxVbteDIpWc&u4 zz8OHd%}_UzrO?vXpC4j15jA7(%a4$$|AQdD=hthioF#f@M_K+dZZ_VYoi6sWDcPztKHy$i2sR9&8=b<@ zaO1`^X4o~bG_Ft`LsWy^Zj&Cy7P5Y z9HJTb?vGt15LshheBR=FJv~S-+AW1mG0hDI!+Hlo?lv?E&nK-gB9~bdy(bX7bagU_ zhwWS;qxm8E4~34s*Dw;YVtEW}Gd4+k-402(mP;jsU0(Ukd^UQ|RNhLPsx_2rQno4} z=Sm^V*y%XNiQ;Hzjrz==i^;=3o0^sKHj={MM_GYjr&v-6G&3syZVRGQZ>a@8271+>?DF_`$>Wd?AKw4p2tz z5P(Zfzfp|UKJ8r2t2y%$xnm_(=Pf4EHo;N(X5#rs2|ESPc!M{onT#dY=v8STk&?t} z?|MQp^Ck4paXFJ$YV}NGuq}Nfy=}W^l)OtGVP%y&4w*l;pge53cWul0@i~VX^lTs> zZS`B#>_~?O#YKrT{8bp$bU3m-*&gK!5hJj9%NqCRu>-ro&w_i7)GC})&+htT5YBLI zE8~M~LfID^ZQwQXIZZ#QzzUy?&|e$JYIxO$oG=4n=v-qj2VGj^&!ISst?$Rj`(D}Q z60*Qy!bZwuH^=WnN=gdfU^+A}q4Yg)fGlN9**GCQ-}+nI>eC&X0c)JEElY&fIq0+` z$Py!+J;^Yu`y?p>N;8bQSP&_cYIbT=CQtMtv|vT98GYK1xpK#|UQ;^BYObQ~QN^@} zk#Pi@Q)w+C^%9b(8zcjh$uFxw#S*YpR-(v)`oO}{G6_s*4p-l`88Gw~G8rKE5kFHz zzvlopFrcPH%63Ct&;wBSLoEQ)WXa2qQW2`D;;A95BGQ~CC8+=M@IZ-c(PqMUDW@7SHaF2HOv0{0rLq28IttpG3Gu;6x8k&IMzztX9CS?|0 zumrXf4uiJYI4zWF4D)>Tr5tUjih(~R_U^BbEJEi|Ql3{3#gAh~FNLe{=U&)#77k3Z z(awXhy3(NVE7T;sgy$7*JuxaZKF?gTQMzQOTjpBUy{q7n_55qEwmD;>E4#yi8{{;r zS=ZSv^U~Wy?{PV55T3)cW2mXA$J^KqX<%zLX=GPuhShALbg{)SUurZ^2%75l8&HeI z{n4+8lST5D{P58@)J7htCPsJj)t!5KdP$Dn%lr<$((N$l+^v&O|G2@+ou+r=A|RCu zG}E@E?T|LeHKFH>*uhj`8Ke#&%ssH{P}Y(j-*sF??~Ok)@j^`#D(Xq|s4PP7dX&a~ z({S0{AAj1eWP9PF8b#Opp7Gz7^-WH<%Uu$ zo~&Tfe-7Q{9vivyDFJ(ZI+I*>g2jFz%vw9n zeb5`8sUPhMm;^k-EnjZS7D*T@1A~~7R}`aIf_}V7lj%!$9MjekcfA8aWTSLQ4@Toc zV~F+cC}GD%SDf)n&klaqVbh%Og7C7JD@Qi@AZ4v)`QN6s*d;L#@Bsb2E7hn!ZBkw7 zMjg<-V{|i12@jTMluAT9!IyLcEh37bq9Opugp6RanM+uS=$>W$85!*KqS)wgB(3aB zqQ_8lBkG&4HtVWC6>Tg^4FZwrS2U@x9wjj*{5sfj)~~_kY(op~X@NR6$cRj!exKGg zc5#cL)BA#5F@Ijd{tu#Yp}0)%o&>y#XN{mtLu@9#qDN;vDbKY4!QbY&VF}LM`AUEK zMtZ%ZwMZH*9Hd>c-(qVmv!x(QGM@Za=`DT1ZnXRnP3sp3k5fZzF;eJEpRuqLKbdev z%JRIKT&;;eV^+}DnMFFjPuqUGFabZAu*3pQ(R`G*qxXAXu=D3n=P)o)`f6M*!FBdh z#y3@4RlLeOcgv0%R>CzUcSy0Q|J8i>r;Kd)lzenhiME){2XkUaZ09Cdv_!F5?Ne4u z$Fa0!_<)9cdcon7zUS?@2)0nOW3k0M!_ZGq*Nw6@eTQ1z$C1SVK&oj{d#88BlT)pf z(jQgcFK?-j!;B7f%lm#Q{u>2VIt9h0WNw@29je0G)*N`3q1xzAUYZK_T7NwEB!J7@CpM-e*kwPZdm~>BjNLiN~w(XToRtDj*C6CpQN$fF7S<^l|&0 zwx{2Mmgo3@-nmq(eKFQK6XTJwIit2eZ1@{ceBCddCG24Hw$4InnQr@cmORDN0%Spr zM=326f3Ah$+Ul;QA*8zwX#mR}@4*IfF`##eTyvm=oq;tj+_+5Fo+1q_@rsRDp;7!B zHJFzj+k$`1iY*yC$mCn8T^9N0HU7jaOJPO{2J+;K`*oybiEI7gmto(|9O`>U^C@Em zAL*5{P3G}Dn|3;cDxOq8F&{5H^ci*Cui+B~H#_03S<#z`t>yP~X(vhzm&M1!s*Z;B zsXuz27+57LSm*RyeaIz<$RUago)beD@>)yc938jeT(t_p<=^Tr9%co+M+4cu#vbI- zuZ}QxK*;tS=S=I+z433SCX%^?OcwMjiAVYQ;!%MKvm^df5dP-wr<5&Qk6<=Qfb0N* zJn5AU9sdrfdpj?Jkzcx^@B8v()=*XhWa{|m88QVx6}4(D#hLYS%LByR_6}4ZTMs^i z0VTYlUvN%`E#6DKfI3um-QBd#OyV4h$I)5!LyrqLMf&& zsZQDRE#Re`XSL<{5u%K?j5$0Y`H@+W>(Qq(!|Pkv&}edOhqKE{`$FQIc?c}F(wHh1 zH*5jFHpq`vLzy+lh3r^0oV0dWh#9d6aWHP&hK))GT&_Y=n@q2@bek#V4!NUmBcz&Z zxCIdQdr1u3W_Dab{Iq{B)_M;Ot()S?G!qsGZk9vSng_G!hSZs&N)4s4+gysjcU*Xo z8RngT-K3A@n2>nxfQX|kjyCt9RVQ4)hfveTjVas5_tHl*5hriG1zT&oWlz5DW9>#t zB=}*yJ6}JRyQd>Up>^@**e3tK0UBy6S5e=4Vj+&lrS&C7TC(@GzM2s1Ym|K=o5F_? z!xx{g-yyK`KL{KLpfyj-966XOX7^=%7938LS#Xn3VibRs>E-tiCV*kG0M!CV{`f%Y z(WCU`ixmU+Pu<9?j|1VZ+IDZYOEk=^TW{hQ-Ae1USIPJtxb~=|bTF z%7XzfXfW{Yc!Yls$WHt4mI^4$I}+%nx>9*fkWM^p&%w$P7ds7{#g`G>(%u=Tz?@19 z%tw1Zc~ci?G~ku3G3U=~pkHeQuCygJ=Vkr2o2bKgT^K!xc}%}WeW>~H+AQfGlM9yU zTEQV181?0qvZ_|GkmQ(#NNj~lH3^|DM48vzlTF=nU;GBl>zjNkYz@#Vo?BfJh@uE4 zD5K&dE}OgyIWr1=fA_QZalsPo&-8i1t4k{)!q#LQZpkR=)H!b#ZnWgJZaA#LTP|AK znbc18_NrM*77(eI({L`6E{LQbv!CW&IaQwV?#QZMu+XpH_n|ZrgI|m2Um7t`ehCvH zRa&bD6ZV&(o&WQg^260Lcl7{YzCZxXO}N12t#+motHpR0e6}iQI2WWnV{YQhGZ~>T zn6p%W6!ymgpRT^j3%Z!CMS3vFLv2}r_u=X!HEHcOh1h9IV-*o4mUm7G#z$>S+hB6h9aUcIen$l3A`*!3r-^=V@EajpUXS) z!ySKG(c9v>o21R#u`zNGBf7hdUELhLv%d=CL4YxUhPucrL?GW|7xnSNWE!NOo_JZrY;q@O$$dJc)ZHN~E-hy|9RRg`& z39S4V5R~XfRHl&j5iz9atRKpxiN!4KHKV+z5ag`TsU4;4{ur>oWp7JjxR6rccRK{s zHjca2h*4hww3OS;)1_T=S`D?gfgTyM=q4z@)n9&42;{A1B@#~Wl4e_?#c!WCs3Te>gX}U?wVlz2 zWd^m)XY8pqrT;}C11uE(KDmtlYYD?MyEhDo)U*Q>H)3$FI9Jw$7~iG_T(E8%09G3I zl1ps;SjxgZJEOVP0BFpS6o4;>l@#32AM{*r!otz7Q3>a@L5ku!&c>6Iu{R}hgHFn@ z%%ril3ZL@D0=k!Y(;`faJ*&b{>1g+dvX_R->cY;NDSo?`Y_|A~%a%Eardtb)^Yh@2 zC2@`tN_AhE1!OJl6= zTk#|3gzcGhPs(6U1HKYR&TpF;)zPfR%6;#OadRd$J~!}};zdB1>3$Q}?mx4UQ*y3U z>KEk(xq&-}y_ZM6tjwqRoQab6>U{ zRaSHO6Z~$R=f5;ZLft4tDB)Ejpch(yy^)51>kP^P&L9Kpe<&jxZ%Dvq`lG)PHan%4 zm*avAao*=O7crHLVz}tk`!!&!fy}5-BW8HXZaXzV71%!Sd!}95lr96s=r4nGYfzIG zjKxHzKy0V=ghV~2)tW?4B)r8aMbjo0fXlrBKgzrbG#3y)pj^xpSd@mTOq3t?QIIyU zP8NG{a5aDh-qd>%WS@jKOv@dP;+t%q%xhqKp&Q$6d~s-5bg5BgSIvdd4R(oj?Z$i~ zLtAAFor}8+(^}`Uqo@cUQ4)RB;7ugBe@Pb%avQZ;ju3M9M~V)j=(KsMOJy60hGEA8 zWpW)=6s#x$4|+V+eZ;3R{FsRFITV%8e_s7W1+LQvwp%Gsj1zRj$HwyJzj6yB8qW<^ z==hEba-m{Y6{H=HM}9bL)+bMoSy$gu0DBx@ds~10L*9$1v;E=ali(FAVP1ZSBkq=J z`(U7`iJhw47mV`E?%qMazH+O(a(OuA9B{hl9AjYQ1M9zdgWy(z-o!f(#1|T~_RZC5 ziI8P<8g;G_f8gB{_L)M;(r0kgEUz@shPUIt0Ocj9>$r})=_-Mc!+l)s} zp%0&_|1-nygKNvDz#pJy?rs7NjWn|}3>>(+OJ(@=VX`b@R#w@r1k)&h@%PTG&aCdcDS&N8M z*0P$i!Bm>P7s1?t;g^ECRQ14swt%*jy0AjPI9>gC<9-%DJ~Vp5+hAx?63dLfV}~kr z>BqmUy7DPzXk1xkNH%gAWZNGzaMj@YZUd8TI_jFF&M-Og*)i;@vFig@kP~&G=y1v} zfnwN7i$NM)GQxsUHnE8r_VEYIo}t;uBpoy&GL^?GP~)v2>5AkrHX!yt(h z(wGDLoDXwT!-LOfwp=Bv^&G~Ns5f_Qm}Ql_!d3`|F0mY5WoEilezhf);9PM$YORnS z6ehQt#??9qX(6OPmQ_8FMptHRUjwd`o+QQS1Y>qr=sV}`;3Y@E{uO+Bc>U)0K<=7l)`|}eLybt?t5!mK{_Tx@z zH2__{ItHj19LYchL^^gsKE0cNJo*FEG0XkjU~XbEXt+s`gkV#@De1LVJO7NmAT;M3 zEDXVr)*H0AGqLK7`b={Ss!|0<7-;pSWr7Rk)0E?19)En`FRyprH_^nT3&tklBn>v> zR@a=ma-#9QHnQu%>H#me)ToyvahGfz8>?Y*eV0n5CFp-C z@p2Q3wD;hr{@b3rwS5WO)s0hqDxHQKq&7K8p)$6{E(T`yWnx1Nf8HaVsh1)rYWqX6 zl3@QF>fkGONi7W;l|j824oss{;bT=4ZOi4@;q$R-GtfSCO>)E5MD*;IP20WuPhlOp zl*Q*wXG9Y^5+S4b6N{~D^ChOK-Rs6%k*5b8fLRPu(pxb%ZSsp{HJ^^evcMG(ic*9z}M1`yw06@S;pPlL#Q3^c=)?zJFd_p=U zoj80do&asw!dICCIGc6gM8o`1u1mjP%^2$BFq8`pik<%q3!)E$A`70hqmV+5h#CB8j!IPxHo+jUy zZFL=QE&;|ADrYKUs19g(BRmR5*+5)a87Ygv!TEph)+P1v%xL;6#1Lefk8C>M(2_XY zRrUgt9hC7k^4;Jvn#ukoQggHWgWBh2C`qw*S)wiWJXWwQ>dVCNNo7+dZvLTbA~G4v zjHYv;n()bxN>07R*SRn0aq*8`laYzbo6m--!IuE!j8ZuthU9q)iE(Gjp3d&NEfp93 z-fmdd#}PdU5T!4EpQJcPIM_ zfxQ;k&&oiO4Sz-+uF_f>#!f54lYE+KP?CRpvM)LOG@Rnr#y}Z<&B-U1RsarSNUor0E?ycQ*3s={B-X2+ zn4_RoEP404F|(ih!KtJBDEQgI=H15*07rxS;1H7K%TZvV+gEWIa%Xz5Y|Nhz)~An- zQd+Ho&mr6Fu-}6&>8%RHlU>2o+RE$=ox4rqY|X9WSRcZqwu|9S6(qonyxcN0cc8Ep zpu#b_!NXWSpMI?&Cz(?(SVd5BddY<#I(o`d8};2wMmF11wd<+WPEKDqS0^`g>|;W? z<^EJOYMFg$^uHzKV!8IDjlNb-{Vk)XOzzf;tMz5z7Z0df731?(ZuHuu4aE|yYsvzI zFCq+kKRh$6FYv4-;8&b~2Pgr-nscav(zNx~xv;ajc1x!#FU=H zr_;&XgC4PGG!c`b~Hl&3d&8!*Bqzf0nd<1YC zMOCj^nisM+pC4YQWGS$hv?YrcvXu@+g~d?@s_JYBh#F|EOPTP_lDS@nx)V>bTUTP= z(cUW`Y5mi}sf5{IJlM~&GlQ5ZN;|4P`xG?{o)>>Hn?9Hh&5_WpEV%qSn?>t=> z-+CU?h}irVPy^o!u+OJRzSZbMhG#EUxB1KkrNeDDFP`IT%kr$m;d134Ge057VPc4N zEO*1-yxs3LeexWgTWBBrJx4Mliu+aF&|04qKYe>@!i?Pzv}wY(yekpf9{PIalBRKT zj5CmN);M|PD$f%g0_ctj;!Evj42-177|;??8$3jKjsS>=!BqSuTfd-VvJ9zbpyW7= zP>@r}5yW!S&3e)w1{V7>K}j5JAi>5O2k9js(1j(h28X01?Z6ybqFuM~2uNkRAH#YW zu?i*E0SOpjbplBxy6Vk;FihfbJ+8*$3sjjBDiWCpw~^`;f@i;u82>vDtE^jxRnFOy zvnWmI`2x%y2|ioys(zI%NKe4%-dCKV*?D0HiiNg9MQ8*ex#BM-v(9YIT}9_8i;}tX zrKBNYuOZf^A^$so3|)1Ro9O!gd&Kh`{+ZkASqR2&>syvB@MhDUH}Gv?o3IL>!?(~K z_)(Xu`(CpV?o72vNlv96?4;yCDS1TLdqj9spcMPR#pM63q~PanitE$yUxquwm^jq0 z|8q~e<&tg%hPMW$on8Lo5imkYv9H5ll6BD z7+-0q+@;CHSMbu&;m`h+hV29q(SRDCHYmH zf|CVrVKa`!$tXoTV)<+Tye{K>K<@$$21niP;lOyVJGN6b_oa`6E$#|F4#a`$H@WZ# zK0*VR4Tos(M7TC$$K~O}uY=P60x)AF-=37xc+I2|%!Udxngg_eCifB~K!V7GMP$Of z0g?*41Yz%k1lWC(0la+-)|}HE1_@QKbN>>M55dMykNYdb#p^HO6o@&g-g*aEp z6$)`S&c=nU2lxOEl#o&A921<23^lj%q`bg1m`b1$XfP$F1R65NkuI|DS3-rYD#+Hl3qwyJR~d-E~y7edO?z2_(pxQq(>G2ML@d0 z^~u5g@xp)cN)Y`leziaMNv~nGEK@t;IHo8k2Amn4TCYcGxAKA!p)&K*n>P$lZKjy zsLPUjdLyr`m)im9@RhnO;W~>{>ybJ=Ql}<%Sqe}2(e;%7%0R`8CX~w$7bFI)yl!>k zwf`({7L!`rN`{a7hY5SIN2=>1b@d5%<#10#Ozn1;&9k{p2ZyQtxlC|Us0Z&7t9gG3 zJA(*ZxUp2%KBBD-e?^_<0ScKC>s0de(N9Y?D(KOkl#a$0DBK%T`9&+#&Ya;b;in@v z5+3y@^1~B7QgJi$<~u_F%#2ctYr~g5mcA~UOt_JxOVl7Tc+?V?CEYTSH%1+8P%P~j z%X=LVjf}d>CV_<7BU7>Okv4}oK4_$FyX^L7o~7~YTOxx2C_5c@YkG!WqSHZ20)2qT zPSSAeCCXWN85dU>gd5pPEh0lYY(P3gL~#)IWGnBg zF80^WH5$9flwfcqnR|4P^;Mx#f@n%-UwOd zq9V!C#AP>FqVS!X5;w{ufyS@*oeh{c;O1Zc z-Bd>;&6o)&M^b{p+m(fm3mIG;J5BjFL&#(GZQes11!^M^x*v~$bN+M9Gs)21A<B zP+5G!u9~~ifeKr9E%4~`k}P<$8*j;YACVQHb4PF}OOqdl;09Hs zi$`#Y)s-%uOuW5l)A|3KM{Z$!I6n~bH3H1_AZ#VpN@2Az6sk5=RsKJ@_t)hP2vE-i zGpNO1jSk#ZJk+8HJ{NfUTzlt%7c<|7b1SG_5>Mill<>rSuUDIZw2`Iw_HeYaGrM{= zhekT2uy?2U3s}=A`#OEeqMx4eEIA5`@k&MQJDbr@v*GA6RoZ*C)N!WFy=vpK)=6!% zuo=~PdR-j`m1>oSN9T1&gxgP&S`3c}goiLO42Nq3!rzzRU=lXxd^0PB?{>-wq?Vid z=cIh}Q}@~*6*{#9QV2S5T{mFAmKjZV#$TOm9S2eviqjF7s5e&DlDhb~nmQDOG!KP9 zhOOYKQH4{c=Dt*Zhf%?qoIk^Jv0kJ$_i5$EJAkWZL?!jF;qg&TA;fzSL#-@UBZdk8 z==*e7L0F=b+N#$`wmS_dQ#12a6?;LS>oF326w+T!?8OBmELgY3Uc*-c*4YM-ZMr4V zFxmEg3)q^BOqktk1d|eVnP@;ty!;1dX}m(eLFq)^-*ed7?tO1|)8P8yN4B-;6#M;g zPTp@0VB5qOe`Z&W-R^u3+r&OVDkGluAU!b(LYWDb@^#27dNhYqXOZe0hz%_%4GL*g!M8XlS zGZU#)OK&C`a8m6ze91#|67=UjdVhEE+pO25kK8ugo_hn7tg4&>{1}VygXzOcMnrH| z+~_whU2$ZrS!aWi0`@u=Q`cIfw6Td0QMoI;5B~pF6%wgy*{BH)6l9yZclo<>pIgjP zJ&*?{779EiDqnPF?qjo+2A5o5Z(q+PEV+=?+@}@=QnIiM3a>&4h+T00ikzi{ybW9; z6R8(-DMUH0m!FUMH5y>c3_`N%r?!86!IL&_cuV(KGlBkcHX%*_XFgP@O+zPc4_@iN znXzKuSw*GZ`|ethpM_jOXrx%mx)SR+b6W$V^P}Mm4Sks*lhRRJ8D;4wbEo!5Fm{0o zh6Zk7@l}(0@1L2_Vb0tan6_M;iz3mb`e7ZV&t_cS;MVq({@m;@pBgN%*CzDdxT)w{ zMZ_x8qZy~W4zg4RI#Nys!3EFgjkK2~gIL^^1<^{P)L2yXfcEttUANxaJ5K^Y8`XdB zO)H)KK{WT-2AxtYuQi*Kc)he5aiRM5iB(f8_#m|_{q36uK_%JdL4KUQM0;w z#0LW%oW?TQ6bDpc_O(plWa7+7D04MJ()Z4U?aWh`Kc0!zfB0)$I=C8Ch(rP$9tdn6 z{$B&@=Rmge;*dWJT62QxHDqsgxwa0-bvlr1Yh9&`uWNC>hY}H*P-!%9rMZ`o}|WbIz{>&oXj;efoz_`+RkX`f1L0X!xbKlTrWJ2ZiGN9T<0@5{(}@5U!S3-AY15185?NbXQ_-K~5S4v0d)Gm}AKuX$=`f2ru}2?f=ksVgdUu4X6HwI5 z2c|W#TPi1R5)$slpfB=UzzD2OVh0P97o>S)-wY?O{^O|*KmPUFJs?*L{p7}jM|KYO z*jbGdme6`Cfzr$QZ6DQNIg@=EAhmpsbBPkyTyd?wOqV5wy)AJ1{S9TyOU$AwM)|+% z_{>0N-gN_Ntq#<>+T2V*c{uhdvs7+zrXq6-L}_RlO0OC#Te8@%N5?d9tc55ScNTS1 zk0mor=Y|pT8&KrO3|}_SFOYZqjft7Ul5K3Wm2FJg&{asz!^Q?%NHwfry1J4lBy!M4 z;KE%Ar%a(#=kCUKK$mslw{@$rv?_9rUj`5N|B|tEe}7Y{4q$}ma>)DrN+QC%JDFW1 z3U#rN-eu&(nOzcm4oTyS%fOES9%GV`nSI~*olTW>^~Ta=O3dRk8ce_wfq4HSoF8Og zI>0NUl_whudrw0qA2bXSybt@4+Y>hsWxC%FQ)@tzq=!X)`2#beP7S}V0Qy2k?DOjHlMoNP(PTdH)F1uB1{v3 zsx*R$_L4r~Gp+zAL7>AuiY8?0z0r2wh<8LP=8v`1-A}7|>A3BH9EM2kXb1U%*RiI#j&qqUo9olHWQ%?Wut*8Ty{X zF?EA+RkYzTy8g=1`8W*yg${lu?=W?ju>{f8eb;{6NQ0hYw?EnpGEM04>1hBkD!+})Gs(n%zC+RZ37w5#jh5`aOPAwkwgjPT^@6W$ zo#yGbT53f|Yf9}ky)xkChf6?$X{U{m{ciyRBlsRjAcF=0!8X5rzC2hn za47@0r0+h4T!ZI(%?uIr-bnT&`>P{C_(~Tt3jAU3Deu!6*!y}W=o%PJC14fitm^l% znQX;bM#z3Fr;6Re@z=J|F?B@(xr^+e2XZE>5Vh;!dSK;do@S?t z4MPt?Z1Ky##>nD`rqJYLN)NXX!7(LaN1B%r8}59NYNk0ze3qTz{!k^kB}wZg=CSjE z&xiGJJ9*IHEMOD4a2bn7#MT_WJ;k#%WXJX-gO^El8`oH616fcsqs9am_NL5du_9_h zS0?Vd2Cm!{w!5^O$xJ_M1N919!p4fF+8s09VZ~%m#|t*NSWWhnq*?2jj9rG*c|Li_xBwZ1QC{`7yQwxl5FpGrx<}<38`sFV+hAUh63BOB%0yA^~0nTyP>& zZpdj+v<{RZFEe{OI1%vo7Yd37v*kA=xXioMiRtsU&o&B|cI%HNj}2g#Y0r+nVHV3T zJp~u4M0sRbZZz-`D!yg?MWC(H)nlDe=t$RSO!zXS`~-FWt0n?T2qDr#^in> zP~33-L^wNGet8sRJL2Lk zOe0Q`bG*T=)Yv{SLa6SVm&*N@`gGolr!u_5K2$;6HF=OL6VMo}8()G6Qj3QylCy9^ zH!ol=Ykf}yr_N3XE4Zn}kcA5fB;TzmD2btI{O4Fy;%vJYmNayvw7btjxxUa$%YFpZ zFu06a?)E_$UE;SzLGOrrPBfszmnEP;m$qqs8(Mi{$zs|(o2E6vB#BcA^KF*wiMx2) z%IY#WVKt(&C4<`&GZm#MeJ)7k)nj%P6T){KB-3-oevFdI%sKxnd;TQ&;sPThE-~v~ z%P_L&J9D$|fa#k6R_s4scug0Ij-{CDuze)S@A><9Gmh;iNb?NBXSSYS07o;L-uYik zNe7>s{}N~aKsaDz_Fu99rkV2oK~vKu1bZS#_nW%rC*;F$(s%djv)@9qUHjT(dx0?9 zzbb)Sr6j|0`t&G{nbm1M(_SxGd26d=yoj` zGXI5(fB)3ezbJg`GV z?+qf;yf49tL~(lOfDsiwav8}ab@UcdvJ&%Yo-;*n43{cb-e*{sNx=1j;zQ)vdd;nr zJxFQBn172a5dH!S8+g&6FxvbGI30o(1TX0MaU)6}oX}hjV~5Y#awAKl=^A^jOU+4$ zHs`Mx8tDR>t_TK!!iuTM0W~fKH&3$R)Zf#A%qjU`h|2;3leNkm1)L?j3v~t33#%cU zt_QlA?qQ%+zXVf~&NI>6ID0dV3_PMbj5O0RumOlj-BZ1EAaY9IXJCAgdnr{m$|i(6 zrzXPbV4}q*&a96FQ&dVw$ypO*8Sr~NV*ZQ;NApWqY_drEH9oB{hoH=yAgTj)U0+`* z1ZZ7v%0i-LKc=r);Jq)iYUYV32$hC3c~G9`@4Cg?dSQHr|JZWYLB|4mq#7p{Xso9* zh$SRUWmpa?Ij2FXd8e5Tc4x~)$ zs}&r-G#&g>_m3PFhY+R|p;}~L>h8MfG4G9VFnM4N&(H`xT(-^PpyxOC_p0DxH#wct zzD7x1k|WOrh{=5T=)WGEoZRytCHY?4RJf{vNFgY09n~6vJn%RVJlN1>T^k!e@t@CP zA#J0>tRbGp(3I)~U9-U@Q-Vuu4jw==V2wKQ^UQ~*i##bp-g%u@+G<^G;%4)a$tjJM zWbln03iEMiPGv{>hH7N@NGRIt?f^q0q;2hPbMv7=I-N!k0sZ3-H-Xmb@si7Wv_g_l z_d73KT(abH;!s~=#DIbDp~EN@b_dzG{Ra&jC3D;UlVG9I{+(E#7tL8vRah%f1(@39 z9u+)Jc|?g^g)i?AMDLBAY8yRWJkYO#v)$y>@{ZvSx-O+~o3o&bksL&h7|~4&n8yK7 z7ogf(6_=V;NoQMAjCTx(pNgj>LfTUwNAu+cc|!@$iKL&!(P;!<@%;gR&+>eIQu-6S z?Yp0{uX1Ff{HY(7qi*iM}ClWz$@0Lh`9W7|y@u4ndRre2 zP2$fI^k;u`caj~1p&>X&EYo_1`;#fkEtUbnq_~i(hf~S_0!UQ{S>hLml+`1(6_(07b3jtuz>X| z8KQUrmeKZc7G4zB8tD>Yzz7%GIDG;ut5H}*U8+v?R}EXs4@R&$1Ww1d7dDtNs`RT z4~Z(VY9W?Rod3Z_a~F(iPOZ@!t#IN)GU?T~v!WDMuWZK87bJ1tE@j1e!M_{&T6}1_ zCyt2C`N>}Ugu4_lYvLN58asV^SG9#a^NmH*#HgsVwmsvR1jqDO=GfZPCD6t=3>zUVt`*Yb`;Ef4>IJ$5X~)P^xw_43xR^P_zt zgxz$WXtfMNH>cLTv=;#H@(u1C=A_!n{Pivf>R5mbuqLSBub6tlZn-)(6j0R=q<9t_ z8(IfggT_(>L04*noJjY4`E6I;3I@{^B7bN4A}x_p|>U*%m=( zDa~@FD4*Fn^o{U^x>wCF_M~?G*US%y{7W&!n!H^oXkIfGSo|a=CdM**2q4ILTX*(kZx)bX{DcEj%v7;3*C3t?HY~5-AVLA09mbMIYOjd$VrM6(?8(u)(vq ziGp|klW6fX=uQ*<=ryYT9uIJ~kPEw;dpyAtQ*qGWe2(^>dn3o`;KyFv6P!J~t{v#$ zq|laJrm(jRqbxkHOD!+AZPWzMSxpS^;O%pJ_tN@(V_U<_Vrv~{w>RKy6FBEvE-<+; z+^=^o1EoLHB^A6RZn;T%_})unfBjro64;g1qynr9Y~)hs6VB* zCRf_we|asSr-JQ+z0Z2BK`GPqCJ^{tT>5kKlbi0z0GrWfU-bDLh_aS@Ukrh5*!Ll6 zF)JDIH3M51h^A{}6p3LD$>Qn4HP(`W6aB(JU}br8^|=%1X*n(S%z$5pwN{?XY&61? z8gF1gmbBah%Kvq979-7V(9NrFK6KMy988LRy)10p|4K`bZJYBP*F>x(W%ZwOyDM~c zGgnu}e0I{G;uwbWw4N%E>7t9ro>W6T5~8b-LpSg_{6OIzf1)esJ!i;VIDDCNc4%1J9dv%2cWB|*yv zgDRT{&@vykrtOqVV4#UUh^7&m?%e?S*GVWo|B0z<&swm1aT7AY;--2slGX$0R*j@k z4BQof-=AM;)LyOjOq%JWtc~FPl|KIpQ!`1;@D9t9SSNMEK~nc5Om}I^qh-TQ<_N*a zwNYO(IsmX@(x8@>(Czak&+OX;l(VS(lL;joYPJoHn4f@t3px(|7#Ul3dZspzv@j~q zU`G_5tl_w68sNgAqz1a4Zu4u%GW5{+xI}?Mg7T5|70MHJMjL@a`b#p0D4rGAcmfiX z;`L=}D?QVw!OySSNw?SwPwy1#01vO|h%zH8wRz&_)uDQRwjS-4dpNtF$#T0o#j+F0 z)3eB9#6ud9i8mnOL7M$Eq^OGSclE|HXVoaTxjhox&xFvA`D0W&3`Ytfju01o;Ya3; ztpm(JSye}3;ZTx_x$nVap*95TmB2fNZ5dKR%wuCSsu-GXJyj{!+n(Gw7WS2@ku-$6 zrAlFL3L$8sbu^L*8Heu4zo+2CeadW zO!|JF=~(xrQT4cMLjuV^r-QM&s3PaoPO{t)nouGo2@AkMC*S~wK{2%)61Qy43`ruG ze`(M*a0s7oJ|9+EQ#%=zrm~W}x5<$5HU%{e_mdT*xQ$4XAJLFG#Hz2kt?>Y=F@BKe zr)$LXXJZl$`xu2D4QL&|cE!`IEl;G6`QCw(=Etm!>LnC`ow z1>Wj1(27aPv+GPflXv2TrGMYNU3{`}zjqjLX5Snp{#1^{ekw_X{pWK;NsvcM$yx7{ zV|YYta39ya-FTy23V)lOxbZ{BTFjL&t#zs%fkGl#AZ_;@X+{b)a+ig6z(z56} zFlKawTZ}$iJXZDTaIP$=#JUR58z6UF>;kiu@DEsK>nF|5%pm{Mwj3mcnR{|G9`Sn| z|Fv4rhP9BW<-LPFbXQi=idkQBoQ0O21hCFKOIWIxD@8>|Hrqq6Q^u83u z!3?Iou~LUyfcDcsS;MUWEGEGd*&f8Jed?(to1&=eOvQ4%QdZR zAFBG5w?=OU@Q{SbnrMCO`8aQ~KtJ9+)%A;+Y}GFRR##oZ5Uo?715`9n)e&dDq+A65 z0cxI=Lp^1!_|6P7vyU3a%21$3t6xh4Gw~`Mdh@Y+d7!1GyOFI~a#(6umEPRK$XTD| z_O~i-OIQs8DsMMHMgbPS2{;mxush>up%z?EWbCw`%zEfAyYu+-)C*a!`gh+w)E=wr zcWaCsS7l7BOk`PhgQNE>qz z`&coO;Wm$!hQbEYokKueeWh^JRaDu$Tg=BXk3J($jwk8Z-C%0J{fj0l(RSHe;~b~| zbwNPToezIq|5-Zju%wra*evLnDuD13=@}7nTtNKKe?E#Yem6Xn$;gN@bpG3EbQm0& zrzyfd5Zmv_;EmHL?ccKQ)9RI5JuDz<@rxDdd20e%OkgZQ=jMWZdY}8i zy5#0(Pi(bQc#K!Tso5TSW2hUtVO50EjE?#;^#azvvu{d+7xSSYQ1a{J))i`bRUbP0 z4|CGxNdvlWKwl+LRy%wN8-jr0$*BtG3Sr(iKA5ow*&Ikh`W-7vx9SYIwHJVh7zaS2 zPrs>Wmv`V;O+*BAZbTqd!N$(7Vig6x`$@L|?yFk(;j{NRZU9$HU!>eJ5OTC+hu3AW z1R@}JL~mO z0YAc5cNJXha;HDVz5r^}987eT)`X;yDr6C8{VLwcOcXd*8 zlPoGFoOu1TctG~>;b>h|$m^T-WRTmv!I?7@$SQ#9G6y%p(*b!X|1sY!qbpp%=Ht-~ z?yOq?XS_q0fS;oB7aV!;zppHQnk{}p`_cfuBI6k+%n=R>6Hu3$vBDdLZlp$lBrk0B zD)#M@W6b!s?g$hm*&Wu+p{}j&BIxp851Tu#+EG!I9q~-Tlib{(4=bFd0EEyM)OZs* zN>KJD5U^H^KxJBj=$(7aX-K>5LFeaknx?(`_UUPa}11$+faPE>l*%gieedCp)l7hR8Ns;f`*9Y!d^ySc!H%2*5 zMMFVCW*~}w1QR3(Mr0B+p-31mMmY}u$7PnXJ2NU4HyG0&Cv>;}>5-e?_#H$Lw|EXV zm!eg_4#A=)hm4=SibmAdYNu(s|J49XF%nzP@0RC50IO#?=6;|nAAK47h!1Jn_DK0> zh@l)Gl0N!&#D4GxZ-~_n$9=2q>!^elIq=xQh2lO&JfP=Cs%SO7u9bUB{q5VMQ$Fxt zCA0hdMXh7*=_@aMX-@C#mBrtI^UDK=Hc!R>c1r)5dHwjr6(_!EirL$I_?NHwwz0k- zv$R5C+O(yUiKeB$bbzl413rKGqu(#CJ;S1W79|Pl4*r-fZbUwOTfhhH4h|yyWk8gT zuO7!lVqw?j70(`rzNiozdSj>?@rW*&xfRdhw6}#$Y;Yr7*+IFFZ0O5X{xPRtopeOE zd$XhBQmrvLYzBmLWndC)on<(Y*%;S}44Ur-QdurVu9l|XGl3`Z#ri{1p#@^hIC=+2 z?U{dSP??lxf@>N6jpIYZ<81g_TW0QY_fK%IK>{<;nS5aiaN(v|NKuJzmm2atxihK) zw1|A5&jVctR3w1UYeKBXOD7tt%wQ5qy*uYhZgwbO7`k;$z z?wz59XTH6Vd3>|FS51?5*?hqodvq=r?tUnL{2MnZN;xtD`9ld`?%rsOp}(KE?&6Dn z&q*i^C9xm>%zK7+ub!n#x(u3D%ItLQ%k}V3q56?Ij2NVMBt}8TVa**b5)n)wi&v$m zE?gLNs(=3$>oem@U4l{o?L>XY1UoOv(d>X0bS?K07Z=ruVq)s5l9GL@%WS1IDyA(% zLyav11C5`QluSRVa8JepLaafkg-~D}*62DGfQ}+(%><Nn_Say8OA(ktVMhIe*bav%0)adM=x|JCV}`S1n=`+Jh!T^e1}e_2l7WB{ZBa>{ z1IJ~OgV1jTF>l(2L$Gh-L$Dhu+Avdt@~~9%TLGIUp`<>64|JDL3R(?{m7oX!*>TSS zh(_I;Me(JdC_*B1;~WP1X{u8^^J4`nS}9y<_myX_ z?dHCT9sVbXgh`tP0gz_iM2D;+f(x1FYk7;$F6%Y61@ZfZ}0T%T+7Xr*{zsqgf~ zuTP!TUfpa!l=&oXb{dn1C*Es6Z_|WL&^;wcD5i%3%7KVnJZI^|7vPUYJ|LTzb4N?= zyHqcj0s^Jr?(gvC=+Wz1MpYQeW`e@xRc&qX;_QX1TG#T!Ofgp{e8PY_Xnz?mTlVQD zxS}NX>Sv}>nU`DSjJna8Z@}5fF@iEzkU*aUniN7q_;vanHJt>~Y+vJox?V_+ULVoD62nI!f3>CF1N)hsHIOjT)`*$T)Vs)#rGR07D`E>HXF^n3ON2H(4r#>g6-p3c7IOor? zryB+JUD(~`yMj?VvWzS(tvYmd)tz2_MZZ~3?nN9}nL__?ootFur5K$+y$MJ9*>)0+ z@jh>%ZH#2Q+d|6?g{)U1pwIckL)Eo9+lA~zL9>0?#@0JSyqN*b*^#nls4ITVZ zpuNcYU!y~}>qKIN4euX0YaAT5?Wm}v)?qOkHbUwFfg)GK7_4Wl0xqZXVOnaB;|AEM z2tm{|F@)IjCyXry`bnjRpnIl) z?6Z1ek2!}46bvb%{safDenADndo8v5XzE@vQMWCbPgA3M#->NdZVPL}F_0_8CH&;) zgaUT?mPp(#gP7SSCR9KW1z_h_dgBnNYlY>ziRiu_YbIV}r+CnxETyOxanQyU&jGg|N$7Kj(xw4=`IdOuJCN;H02IX6fN$-9*&5402%#z09 z?7OeHZHHn0Z~Clu70S`Z!=|C_BnVh5YEyMq*syyyUo&-?;~1vagpUA+L@i!-p_&e+ zJg?*R3Xx|ma&nbVn2sW0l_xpz(E~A$X8#&B5zq;>BSMofi4qPbFsc)~p;>vvgcV+h z6*w$uhIN*pOOeXHKizOvXlGY#k{n~s943JFo1SaF^Lro{sVCA|dk$FOx>Wu2(}byvBW%;_o%V5l5kW+P2mLjwN} ztRap~@>n#jh)p?Zd^TKz1^$JKQ`=(kI&+jxtgDiJw`OT8ncHQiklE7GxTs&RCMsvi zY#dz~Av$~)((Fq>mrN3~rt-@eue4k^oSLqxW&=`yPnD-3J{&&3*iwnQ;Lfqtf@-Aw z^k6FwlKRFXP*k=;pY@3Jl=O%#-vtk)r~nKM@Fn$`(SbJ^kcR-MIK$u!{bQa~87dI?r2Sz4r$)nveNQa% zCaTJmYbgk1RJ`&kCl>YL=Yc*|wR4w9yi1blHj1b@Fv?m5Kcy}(-ufo=w3GZi%cl^Kt*-sg@;}+Y)MHH(9wk)PamPHXYOo70=0B)hQWM3>_%r=kbZ5rpduy=Z% z744=7o^9S_mz}p6{UY0={fd2Ylf0>i8QN%mjC|Qshsxyn{j_W9&4U9I>{c$I1=Z8+ z2N_s~r9$CaJ=6x-Xr|W{r;3ODdmeS5sX5K8#>_}_HJh_lrVL?$hfv7CuWz$-S$ z_z+N3_}~mko3W=4W{a6ZG-|zq!^=BRiVdcMOVm%E@v)NG@!FV zMkp{uO)ynM%t-$&qb7tiG!g0lNz_zH3V0E07tmauXvO-N4PUigBjUAauy)X0usWAq z0ZudQ_&ZhgxEWGhu~)!UQvJdIrjjDpZG=t~57&<-A$JrPT>EiIHINFsS~x@sr}#Ud zQ#%@++PA=5Uj9tA)C0)8d1bHNsED(rAO(Qqss;1HI6qCqV2QRF; zf$$)R7pZ1#2TYd~|^? zBV^A%|8u|gRm6Etx!~kTGo`sKaPwpbqQmgC%EQvnS-6UJ>AiDO|MEiP7<>Apd8_s2 zl*zi8$>~`&94*uJ7-&gB*A@3-Th^>-O<*pgru*OLHl4|$^JaQmL-UEoEC^TVlji7R zC6k4FO0s5_vEd4R)*PJ6$5W6#XMOUWxUWqz-v0)JvLWWuo_W82E)gg?jD@%!%q-l}d{v7;--DI?ODmPfWI*kA`xRMxkdll~EZekjy2p-#4h*t2lZGtw zsxted<6()5QCYdAiy@Q}L(5V^oa$NjEa-JN#H)Xg&N78W+1DGVru7nKOo}r$7wtzS z?=0MZ$eLKSNYo}PQl|Lz{pb(nCBo4ynLx1D0B+<8?75o+D}^y)nO~$M~%sl7nu^ATr2wL+^GoYEveV2)gO0 zoI<;!j;vOr)ddk#$d9>`iEj=c-M}o~m0v|@@vwGHgi4BRxy~c5k6^^(`XqtR5k0oN#loJk zqWTFDvgdX30W0S`n`%*;wO4Sr@VP#wEP zi3J8ZrEMJpq--M@W@2*qEmKIj8$+o84j7GaD9A-Ffq?t8h30Vlw;dh!wuHl7@5a2UvHqGMLZzs0L zwk2kU(_wdxH`hKEv5hSR3H|b&B(gbM;sYquH8R`@N8*U`>*>B}`Xd%^>%mcN}gspo{14$ z#}&UG3>>0DS~-Dp0Pi$G>PCGg;asp1hVqifUqa4pwK}?*i{Z=3W7?^^wW3D+iM@NSclCEU`h9gPl5^U zqA9gUTrIAYc>z4e$(`nK)VJf6$-acla5_?_w7OicVpPM8K%g<&GruB;a7%eoT#xhH zyL5-atntly;1pf8YwR^}-_mS3CCvZBK^sVaPI9hMgEVY!Bi6k~fi<(D`?vO*Phh(= z7woyF0~i?ZY9L`;|)JOXBIM)`S8uCa~hjRkCgXLL^IKOIw7kVRj zh0Y6lSNYyosB4uaejcq37vQJh#vnoUqIIwke$0saM#a0Ky(vCCt7FFLhWDfI)IQl@ zb)!KWNiw>{kwqT;edCJ5BS%@?wdc%+(#_$exPZqt`7Zx`d#eC@g>k`++rlk&cI+4{ z)SYab@zs~tu9uXaK3(!j>k*5;I)p{CC$+)na~9D3z-DUUmp&Rwo14{w_JT3-(^t`7NE6YYWD|M98@ev* zE`zSa!3JrVq0PhyN+jBlM5pM4t5!+Ads5>mafTzYvElt2rRofE;Ib0;ZW4E}5*J^! z3MlVh^4NW-@)ppttOkkx%vSr*(?2h~t7Mm8Z=wS^%)JfXMuGk=e}qqLqm6&ge{t31 z&?Jk8U7lhH{yhI4u=+!FQtq~ht0C&x?c1MH>R@4upV(uaSXdyF!K;{`a1APz@X)Fy zLpkh{0@>>XXSd`Zehr2$s&xbM0=C`+QUEfy1Ql+|mupvC{7tt|`N&JtHXd^!qxX^w zfIXSB$Ikg{o&WJj2&7#n{3XQIt@6qX;%04`E8H=0cqm{C7{MJBZ%<}{#{7nfKz^=^ zpVJL>3Tm@7Mg2b!GNj9@2knDzzl>aiE>pLPV_%UqG`~RJ4K(-RUG$qGv1#9+0Ov??Jsge&qz^5(w7aNK zcov3?X`in!rb~KG!}~v?kRciOFB;bE1`zre`eR3b&ot1TPai!wX4fKB`sC1Jd5dWK z>f)1wcyv*EV8OWqD0e8ui4^tr{N~ z7sI<#%lQ~SUejUiuwu}WzT#3e9ADgU9A zy%g#(L+t44j!v2n4q!s>B2kLTr*PiU*IHaREb?0oAy9^TGL_4Kq5tz$aNoaVVl_>iw@%4uQT7mdY#X09$Thy22Y4WRI=0aqVbod5jiG z8K_wn{4y;ar^tK=&7<}NffRKTW!#zLGVgM~b(!W0T6mHRXVOZt&!Q3aAWiZ6Dp;nF?SGA=l zJ1>OubS3&#s|bpZDPEjGM^2o>Fd~%>eIWdyVZHCvzfnswdhJrkcU zYmBS#`F$||Q7L;@I9l{<)VzJ|h-JZTjIAG#DOS4r+gRRo5pL#_c|&bVhPSGVXhxe^ zy2v0sF-U}XaBYSrZ~BmgHUln0!Y>LJ=?~JL%{yS}ie+H4hA%2YN;bYJ)|3e`H6B=m zKzlV%;GW7#%Dp1uYD&V>{a=g>{kZkL0W947Hj^oCZ%(?C7_j(KZ*89noy%Sry$O&X zYbQcHYzh4{Yfl3F>gCPhu1GWbebw$0v7J7<6L7D?1DsqFwghb%P&%2$lIqRDd8U3= z(MOZr>~24GH<9Q%UB*kaLN|YhlaKggm=|_Rvv{MyY)=iPM5%TuE!;P{#{(0q90Px< zcX}pxG2~Ozrk>LX9Y}D*BY{^LV8HyLTb>(6|NJ?k;rDv413{AdAgx0=nTiAdai15E ztw;Ukv?(YGSNWo_&f~k=r}@7a_U|0`Rx^LgTTCe|B+GONXstf`9m&wz_2;o=uSGif zgAo(c1_F*qt2N5>2;G;s62n9tK>u?2>>j|Qsjb}gVcL;BCE@uxe|R{3az>vGH*(-k zSH#Z<;UJ);xj6KStG$o~c0VDxtR z-m4MCz`F4WG>}^7GF!4UO`+6IN2#^Wf<$2W5e&$cQKkRznm75!4=5!wLs7{s30uS?0rpbIrtXdG`%2l8x83WaD5|()5zu2v=|-!l%A( zDY@&#_^fz7);xIN*@E#KKYo!NJ$f4sTqr7WL)0U^0U}pXZ+#MkEZD4kL^k+xu38*R zoa^{BF?0y+d7o_*0<^Hl;{Gg@1os=GvwR|cZuO($g|`@v29ymtBhUSeu71pb>-JPr zB-(JQH52K>OYhEVyR0h))By(F1A8|Rj$#zUijYT3JqTAkYalu_NJ|IHHO^w}2|LO? zom}g|tl~Cb=NHa=>K_H_fsdKD-GTQ|Cw$aJ0biSLnT&EB%iw0LX~jGBBf2VneS$Rf zH?A280mI>23{UFfPMuNj9X2~3vnt#DYyeNif~{}3L${e#q5RhJA6%y^Ut2V@QzKJRQvKW-LVIn}rpe zGkr_xatP1`t$ky(p<@?8z-+NxPgs?88Wec;Ec+u9il0bu!Fx#mXqN82NjVt2b}n|> zoK@T%457wF>iAi7wzQn;TLum6pZXEXLbQqw$4JY`U5sW~I*g845I%>VRJLYW$ULSI zLkt$digcjwyMEOw{eQnkqx$`5@s=`T(a%Iz>b)Y!D9J-QtCCY%va4GP&7mi(EyolY zp^1k>b0o*q#?YKZMe*hZ?8^7pgQ+ zNO2MLxyZu-Hv@ex>Jg}llf$YaMfQ28Z}+y;pk|>xFU3AV##FOPSMqKHe}K9y*7S<{ zxm5_>P_gsN2E4ei;6{XQt@x*}M5YkIrD__MmPr(q+Rw--Rng&CCMMCsUWv;=w5(o2 z>Wi;aeWQQqO=p90STEw*fqiZzGSwDX&kqjQ>l^!MzpK92=JLx2z*Y9tH^rj$6W$C4 zmveqD5g5+;A|9YWn+4SCSAb2$Q@g?O72)yW;@I_$S{#9~ zOAQ+ikh2CK88xh$I+1Wdg?iq=9wnJt2AGN=L48FOQ1OyM!@b}zZC^k!LL!%97 z>6%*wlI8BP2TOyAO#`Miw~T=(*mdn%!7xIYyljXY49MLLj37k!N$-&!06YZ;D;EzH zlFfn@fy$Qkp0``~?-G#zM#}A@T3Lp9|+#c(jvfV--JoI5gflTn* z5Vx~u$s3%T^A_xP@nH`Zpc#TmIqAqFA$<@aEu0K7lf4*IJ7?=j9Qk7*xzYIv?}n~W zc=0+zbM^t`Fmn;Wj+PAe_hFAJRJ^v4(WB?2*f74CK$04w`Z#Sa89-^@Je4!B1ag9R zoS#Bj)bkI92y7Z~O`h_~W>5O!+O6Zak(7O)ZrJ;htv7spC&P5XuGZl9W1Dd(AB{-M zuu)w_)3slaBB>sN>1cvj1Mmx4-LV7dSw;lC%w$Pr%=hsU<>x0?&C9$1gJU5cR}#^e zZ2%+{hL30AeeT~GCIuCOFT{H#gX6F(oXX^btAJU5kzjWm^Oh$C-2UsJW>{7jJJ(9CX3Uiq&7C+Qdd(>uZ@sSaq8tIdYFvoWjdb#wto zbyUBhU#tWZ>%ffY0s)G)DWV9a+}uKna?>yvNdKOkf(faEDzD{j;ne(?`nN<7a$)Xs zuo2edH=;6LhPM=LAiO@`MG98yA4K)sp?{K)A9GWwVW6|5Qb7>f!Q6oUH~09#wN)PP zZ$^E%t>d;~i|+h4JaPF&-K4WPU|)^AKO<3$pcRqtUA~=hVEt%$OZ|elUPG>>RV{?j z*`Mj}9`m|DvnOn+M;Q(+Un0@P=(kNA&E{L6G3OpJmNxkPO~dE(lt+(z?) z+UO?aGIz3D4i$raL$7L_q0wYMYO|(mF)>=nkh2|;8MrN4qw$#mJ6%NhLmWlJqrh^r zaoxnIiapS@Xj-L*_9}`m!-o9P&Q3;*#$MFl%PKZ`EXUGqH%6>SxsrP4>ov@5*cN># zr_dAO$cNSmbK-I~pdu-1C`W^e6B8zAV7YHduQq5ZdTg~o796S)%27({(`)sHa27Ke z#NzZ%6rA}d3Z;CREeg(J77xBr&Uj+pXf!>sJMCLcl^{n;GN}OkQVUt*8$NJTav?Ty zDL1C2!O#52*_%uuC}fS?GL#jYM4s2hlmky0FNMZ(ex$f(1FB z;g9)29&ur+5M7AH$9 zQ>Ktv6MDn@n8zPhb^Z9R9r&1#sdHdvwFWs$!53GMq0HeYOD%G;lp>|K@*6ay@Xlsa z%N$iVnDWJJO2LEZjAx1uksGLZlKiOg(hHNyh@g9a9Jdj)Vszf9v2tb^0V4sy9tjFz z0>*-J;&k~=C+s$ z6|8Ef()ZX<|CuK>botwkM+qbBu}Ax=G3X)>PWpU!5_D@w&HW8xCxLDYvK{Ox@uLj) z0Bt1*X7NF~^b#vb{O}c%j?TyImdo3Czr7(xFI}kw@>KKGE1=E))6&Vj=d6kMNl)OU zCxmIA#V)~VC@@0Bm*=K{lXUtaEMC#FNECZ7d&9O)l@9v08@fmRqMYBE9U z`*n#!6wBqgQwf&)5X)=65~c=dVOSewqLbEe|3odZi;RyxdZV4`N3D<%Z z$rQB;TJRpN5g@sS*3szcg2Eopx6}td_DfnzsJ- zc|bYNAkFatv|FyWASH9b#~c1Wq0NndZD#RUOBTaa+TaB|2w-`UijWrxgkYmIoC-mi zUt0V9|H3nx`^GcTT&#ArwRLl8Il0ll9p6Q_+%2*BfxdBU&ax%4^i4=YlN_C&kC{z& z>VDWaaE^`J5#0Vwa<(mD^S^zvV&Cj6Np?Isu7UelCyh_CZ>fdvW_d-1C)J4-FIerb zm%e%O`1Ab-F6)c1M#!PxHwCJ3p#Sct)A1gh!8vv1RHWfUR1 zOdVn$$kU>R5E6?e02zo$-+u;@2I##G^GW~SFANds%99{|p)*L5xsY%X+nl0$9$V*n ztjTn|Jw-`-tjsl}Swi(cZD8H+095LiJ1b2f3=vyFzGb%R>Kr>7Id?SF>jqgrF^Z9D zPWt@JQ)94KKxb|Nt6El;uN?*C?%r2EP9#zPv&tB@9WWdiodDQ{pgGXcoFKwJIDY%S zecQM1*|UB8{r8U_|7;cc_t;kJ&Z9Gn!A`R~3TQ{PuDj1V9~Vcij;yurxGS6S)?k{C z0x>1gyw-U0(?s^MBO`0Izux(AR^g8ij3PP(S~t_dH)dsb+%>XQJ9eb_5Y@mEg%bOB&O3vuWxyGFwY|DzAytEV-6_+BB77i>R-Pr~y*D1L*bYU?2`JV9#cO zp&TXD*VP`2@ALgL_zq2(jXjj*Xs&#UM!8+8nVcS`%NZWcQ+8%kpNzR*+5{7)$lDd8 zU!J$sUBwL-kLZ35c{Nlu_lA3KvoS|Q;}H3#{R-OhzNZaLGrq<~+GC=I1OMmoAmB4+ zFH$HL6Eu@Vyo&x#9ucp_sfb^iE?p}X)1h+n4K{tOi!lZ)smK){A_4cH`aC|Y7!UYVO%iN1eEEyFqr|J04j^Mj_)rq zsGM9Fw{0F{Cc?<_!S~KJ2HHuEfjR|mKw>hWj#@KvW`fyt6s8vAI^Q%hGB?h#95Aur zs0>J(8=5lQ*7a0xl0ocf$}>tSH<=SPgk--)eGYqEv3Vp@Qb26&5?Kd_<9#yKe_abs z&9Xq;4t;m=4$UKKVJtwqCV1Z;I94GHpI5ON=nlrvV^CQ;U-9c?= zVcZ-0(0|gG7q`Fpkq%Up;GxxPh7rrQw~dA1I3*bDxB9ikG#j>2EI{|M)zjqvXlwaS zb4u-Lhu?F*QzOT*yM{eOA$r32d7>mR3##v1?reP$ss$MUi`Bz31YXR8hWnP=Tc3c< zLMK40ie!=&gSxbFe?tF4WVrn}`21AkK}z$IztNMpNM9rb?;jC~>q+4c5trHx8twjt zVL%8ue))FtVO$ET4bd2rnQcs}FZCv~q)Ij9%?Os-?zK3R@)>Q z5eFS4s6{|AF%wnbis(f|In6T@P%?XpAG;$zhI^6(3zFsnvO)X=7dFSZjdblY*+R>*AZr_gF112o>Ld?&%%S~mKW4%4%wynS|WqMRl zu^uk(iM_L17o66KL*c6!?n+hAX_}z4^O`le{#$5B^~CT2g4-Zm)EF2HYnvpQo!)o2 zbop;I^Q7$-0_~#CzgD@c&!Yeg$trXxji6H*MvF_Co|JV+)Ra8y5od?wT9fA%ungdz z9VF>2CcMZbRB4%vu`wrYQDgbr@OYPYQtg}_Hule`tosgI=+iHT;_IB)Oq*kUKE3E1 z=W;jVYZ&SaF`&CeO~(;WUL?2wq&vF!bu}r@WpVT zrTvlH#C@YCp`|TZQ^THGIDrYG37S{N-JF%>m-GK6XfTHbR?deMrIp$^x+<2v`=k)& z{8WWfctv7)xF$tUi$)}uZ#!L>zb<*w_U=#Dt@~`$2qO@i0G|7?vqdJ3csey2990N& z!~XwIWnnIUGWzT@KlBx<0}W28aMs}rr`hj-Ca+YJ8o?oHCI{@p0V(rnKnX=WPK43XlKP?dedbgSdXD&uSUn`8x)1v* zx0=JAUU}zZ?R#MdY-#>h+^IdLegyWc<60a-H3vSg(6pJBclxxq;DI*X{R!x4sDHw>Vy1Yi+!6$@B6jt^ zksR*JryCSapCbQJ_VagE+i2JnEAj>DG1QRS&5eQg2H7J&u}Y7YC2llygLl5XbwkV1 zxAgM%zIWBQ<(2_^5WmN&84!~HOMwiy>ha;m04{3MyTfDPxnB0nPpH(RWeJ=0-Qc-G zc3&}y2D$(qAK%%AQFST z7v(28G&$6`smm@MWH92wckKa~lz_CKjC7^d4-CoNjPpXb4)Gc0{$bp|X5@}+Siv!Y8oF&j z=mbkk6O?GPfED%NISpdau$~QDV7zCkPj`=+mMUbi8I4d*qq%0Kundd_vAd`{+<1ZG<(|7)`oOFH4b*1fJ`-1)@;` z5=GG~EG0?~g9@$8NetYH!D^mJ$9|Xg;5EYdX2S0 ziAppy{DbMUG{%bxX_;MzNd-U`bYP&TpMk$y>LtpFk|JI9@nywkfUbOdQBnYt{wqKk zUa9xA)+E3X#5FV{74s``tW34m@P#bWq;xx{L|_J8%uiHyGATi4rO=%_T(6#lidY68 zu`%9PJH?n8YzG5MFda|_8dfQbV3sXsm z;<2vj%sXkBe=TK!>Kml?iJ*QwY!G@5PJD)9zem~i-A0{j|4~;dt=D${scs?@<>`lU zT~ZPw23B7d*g`R?G_coD#BqX2sv-<(iPsb@F45|OREMU-COO6!ia(U9=uE_gfpR=ZpWbjgifRC)4a}kajMNB}5Uk*w{n|&s=?9D+NWR7qWnyB~MyY8a#_xLoza0uOll|n>Ip(Du?_u!={OItAx zC!mZFnsrEyzm?I~-aUxTXS*&hNVD7(?jg6kND>jL2}MA^0==twrnFO`Zm_#k6PV-K z6(Ncc1{EAp*v*hqeEJ*H=${y@<`>PXm7po;B`#8Myk%6As1Ej59_gM*%=ZE8ZUrcj zH^e-1pMa)VQr^vhSum>@t04&33R_uvsaJ_wi>AiP^5(Y(igTi-QMhEuRz>s_&RoY6 zP#cTolnFzeZaGc#-X!Vv&9a($?;&k9NG%(hlSvjBkN$k6P=Or*7@3!ID9w;?4XB~w zZ@s2uE-q7PRXlC7%yH}_O}SfH^rBRjZzW7d%P`0rOnR|W?u^+y20@BJWhNC*bp3=4 zSJxRWQynN~3da`XPD-ouITOjdm!17k{h08o>x1{n(*6MZ{LX-YH}(GlvdJ(cSl~~~ zqk0;R2zh@f>*4A&06daDciq_!!wlkE*@beqs{vHQYV%^RWF>VKMY?3cF$hVQ8X!Ry z8*QcH7&*VJq;2c_LGY3<1ePwNBBQC`W4KrUBCB8(mm3017S}QYs*G%c zP29c{V6yYyh7oRT zh#4_Tjp60yzk&W6wK+83@|vQEA&C55F`0iie}umsZJi(a8Puj)H~c!RCTHi~AycYN zoKueO?o&p`VyH}2Z1_ccxQ?^~wMS+k%(vd*&y7-s9jDb3qSm&Mwa(${-XYVVWbXfV zba%7MmIzY9Z>g>S=+w7+=Bd{C*1ML^jZ$uOoK~+jYHhb>t#d8a5a~A*ke#I8Boq|A zrMkJ>deWx6{wSUG9gj4AIvk@_HL7%scB#ATGs%P!v0d=Z4+sl;bo}$?T8H0~DLjLT zDFsNZT`@TkgoMI;75aFTIM0>|dICx!kzE)-lQZh2>;IVGmhZ0;}S#&OlIwuk%W%|c6A!1L8bOKhpIifOqI{Rh$!e}9X# zL3-=ukd2tD4UXL4$qkWAwMk3XGACD^j7IdAd!H#6nu+lJh|RL+qbJ%jLd;o$qUAR9 z?nx0v0^>9=rMRncjb=pAMl*4=L@n)>tYt1#*_097R)2PvMgSzX{*%DCZQY#2D-mw% z&hkhg@r9t%tq%iQp>YXyNHNnJAS~J*T5sTB6)kwNS{vH9H$`O(p__q1XfJO2QQ8CO z-wWF-Ap@z)?pCStXR%cl=qN0W_E5#Lrht+LZKpr7;-sE!Nab|FgZo-d=?{Vry>N;h zXi#v_JauvJnYg|;+JNUQLYRsvjDV+Q%*XWJqi`#9m(2LO!c2G?dhO6OWN^u!I)R7&KEI!=^_Jr=qUWury>0HF$%TZh90~%tYMq{RlbEKdqlP+DK$>GD zS6RLakzk0f7Dnv-CKuKAqJQXN3qNA9YM>cymsDQFt~ovVJgKSS^?-5mA739ikAbs; zE8<$6_s_)j=T&qK&Q88``c9RZHoGP><(Zn+TDF{5=z=cG<+`dDcF`-nH|^lyL0NlY1zW8(cT(jo22nxHayQEk8T6kOF@8$l& z|4uL8KYl;ADNY(edlilHL^-IOQqC%O>3{ZeHfaOxlS%4WeC9$u)!z)f?#HIg%g&qj zm?VQ3p^+OMV?Eg*8A>_LydEWq2@KQDrMWi65vDrYc(XU!Sd-4zlNx98yVx2py8J5J z*l@?z-ej{4F0)`O*MAY2sDhdZ(E2F{Z*apWUwR*0@|-I$2gi5^1`$XE3_%G6lMX&9 zIU?oub%~6~uDhdiH#=OsV#`%(byn8V(M-{RdM?lysH8q!5y?4+%|W7KG-x=&AdGI}(8VVag((n7F;*o*fz85-qJ<&G}}MsHSn6d0uiZVEfmSY6JqG+V-9Cb^T#(M*pY4D?98qy-Ry+% zy!dyzJv4Lzy(`=lt_bh`=vLw?OXs6@X~ahK>T7X%*$ctt9d!5*$nHw?jPf zu|v?gsahSz?`L3KKEz$Tbhzb>+U(J`df5I0p}3g?c`@5nWRu+$Mvapma#tVm$KoDu ze8p9Z@vgY3@*IWD$k%_;4Ivuys!h^Aw^d)B02&IM$}$*#SY){46_BKr@o1(7vv-CD zH7y+|g;Nup{V9)lc3`!qPf#my`bT!?mxMs-hK6ptXn77;IAaO-%3{vMo15 zELC%sI%!6oHLJhjyR-pf@j<&K=v;QE=jPOf-JWr{r*rY9^q=oY&i~*Td#??M43W9c z5PP4=%Q4zjI+)9!EM!ZaE#F+u%;mx(KS%C_V^yKy0+tcJ2Rne#IC)x4zx9_8N`Jz<4tN6(%;ZY=K z7q#n7Q2)HlVN%Gv~ntu9sJQXkVQv$=CE_)@lvpK8r2V#Z~Io$YKd|6nlOln z?2c$-@GZ^TxXydQPluduBcUJuLk#!oq{DBoTwQK;dkqW zhokLMb9f(YdT<_f@p8k{)@Sku_wSuuzqN68*SitJW*){{d~_Qw-o@qp05UC=5SBJ@ zS9P8+3ZM9!-tI!vg)%xnG)KYy85=<)JI6){lI_pN!}%yUiwF)%Le{$1J8N?|XR1s1 zk}P5U+CShN5TDJp&)A%fS-B|3KknyOJS~ax@yOoy+MsYV8BsP@eSw~@x1BaXVIKK> z#k9ju1b@usvZ+|5(R8Xh?K9l1RE~C!16=}c1nSaJF0M-H2zUwfy%pd0eIz09dnu)F zLww)&+5LU=zv9<)>8#aKKT}tiFQt+TjV4f)Mh4expLgG5^71XM{{;&k7AHCS*tPtT z!Qj?S*Q#SToWQEkh< zf8k%8C7H{WryLty zA@Eo+hJz`bBU|~A*LN9%U?Mywdioe$<;sLESU|3j*ZD_ttGfTcNF0^G*pHZideky4 z;E3{yDjy|T85CHARWzF9X$6-Z27Ccw(E3e7n^^}90FygHK20o7L^B(bNJh_f+jr z4P@aB<}b}n8S-=0^sR3Fo*z-2n|7vXOqQS4O)o4 zlz)?FF#^5-?r_%jWR+W@DIUlmrX@s*%q>x8HQqOl&3D?|`J=x2st(+H7}8U+U>7}I zR)^1e(pFpy|LSr721ISWetE&dMVh-^H8!~cl8YG!)sJ%V2z3QRru}6785ud`;}X&ZKR} z$orc80(}rrNTaWp0RbK#T-o^V;)Ja2G&MOZ^WyGDpo1G1P;(3V{Ao6Zc3!GR@L||& zUKi15@eXDue>)|7f9RL}SBq0`J@)0nmnxtBx13Z&q0531ik^4s9ZrX>)bpPmu~C)_ z)LMplRVauGGn}bKGuRz2yz!5zAJ<9~W30|6^2`1=bi6Xc4TH~GdH0IU1{u*P=dAbR z^)-ta_Jp`wND|lUbT&$U2mhS4p^Hy_7oPb}xUH4f6r~<+LGx1I+}96og}jFm;H={m zDwgZ+soB-5kkUxTePypSB0)}RzjWzr0I`*2gZ&P0D~^=bQ}q;VeQERBR?eMuzIS1z zA>uu7HjtW`TUTD(`>KiVoE5pC8}|8)k>Kern&^A979bCgXe=olox&S6+5C_}SrOH$ zA3+*lkK6y}F>_MI1hqSn?5g1mae86bv4f{U>=u8>H^LFU? zoBs16qs1^%mPq+xTcyZfnrovynSnKn@<=%r6S*}CViDd|U>tLV4vb)@m=_==xt z9(3TZ-3HA(6dm1rX^UC_>17X% zy=logPJmOYYb?rlUihEKZoE7W;P#dbwl>`F@l-CkP?uu);bZtTD?G8J56D9v46h=K z9VbkW1z4QtAl0pl*3*>qlY-{ZUqGk!dug)Zc3upbuFVs5L4N$Fx#x0WvPhK60)Hl$ z;mUSRgq6p01KWlySWImxWPeLWhrPccL6~X!dJ!io7expQrV{v!sau!x_1Q_FulHub zc?uaJN0{Suf6490$~{MB(yZ5JsLFUkkC@UYMJ3Zc=b1$)^3~bv$%N&lM>^0T`x}d0 zhF7T&^1om~*P0O{z`fS;qY)YX7(mVY9z9H=$6A8lG^x1(Guev+6fm`x@N1u=SNikm zdn}^!q3EWbVKb+DaopoZlv$?VKMbN5p^SO)DEC|^&%T^q$K%3rczf8p2$a(p+^#Ys zq*jq-5SNb|{=;e}c(LoV8+#k~OhJ~S&C`DkI?pk;zG>lMx|Fkr4MH`P$}b(|d#nsk z0Ku+k)FZqU?faU)JV}Y%9rcXsG<<$?H(x|*%|f;O(4`=!L~FM-YU}EXWjQg|YyuPm zystG8m`c-z8BU>($4oq+(W9n;)vap4#lotc+Ctl(?_?$^(X} zdO^knttEywKS|{*2TxkIUZ?^^sp}WXthVKbbt=)=D5PJx zhd^&fWBEl^y7ek0wKUJKF^twii3*!@mIC+SD&;TK9@-6s_U@+w=w|be3kCE(LBR<> zriMRc@3tv}p=GLGQLW~3Q>_O0J4cE)W@G$pAE7HtOKP?;v`#7NE7e@T9@HkVh5k0} z?9L8=(SW_5Q+TKL=R62BFdcHPyi=GY`%U+vW`ipkasn@p&IupFf8@+fX@9K}5%zh!=h?Yo`u_N8!ZYWQ}PN z@b%%*cPHs~`lI6G+y5IZ;F#Xb;t34y{EF8VkN7#3cEG6BMK{PkI}GMPd&~y!%~IKH zGn_NKYWOqTBI2obdzIC|L#HltCN)Vp9~Y_DgrL+pqOg@W7O>0*RTa@P3KkBGg*dGS zta+E%o15sMK$HA9=3qHt@L-o;$OQiGJL_%c*4XxE#?Fp0Nh*I4*W=M7$`?C9TzVjqlXl|J?{iLQ0ye8TRsS7HNUl9MFOP zI2%Z;v7NxbAMb?JS~?+>H<^T@6!Iecb11&73(XRZV1@d7a#(B6&$wp&78*`LH2X zZ84rqGVaNMF(8IaQKW1qREY`)FtRekC~zAeM`Al&3KZd&XfSKU%zOg>3oAeNC5MQM zkQZNq}gM81xCK zEix-|VZ1Y$C{pOsy(TDmjyd58T%32Gs99(8sz`BC_SQDqV?fZJh|?2K=Ln@%>FnR> zmyz>bQWFooWL5rW2F^PcDZw6dmEq?#n-`#UI7+m@G~MOt5l-K>0bVv7uXwsOSe+9(d0tkePG~L ze;)kmw6O!1flAs#9bVZKFRto9%7zc6>E`ocyq|yDAoiEAl}E?D7!-ac?hLCtCeI88 z-H=V|ClcK`5HBy$cUWo8&dlh$%voJMa4P0%$N$Q>AEXVSWYzKckTRZDo=&P_;lE_l z^NVv^5iDt%AB>0#RELt!C%OUU3@i-Bnux)%%P=x3O+R+yKYr|VZ4ged;@68nq{@ys z1s6RIWa2NHM?FY7m2wp&p3ilqRs{e3}@x!hkJ^lUdadpWhwz!74VtHl!lo0a!1D}MS z>FNlZ>T6E?vn)XD?Xi8}gt^;DL{d^;vDhdL-|!_C&sRGpHZLNz#@c&@Jo(N@d2s}N z-rrmL`=6W{gK*dA@QK8OZ6`I+=4vk;KXsZLW@lmZ&mQFveqY(} zxUAG$sfA3_;2laf+8_miXQwcI=7Z&XuTsT{!8O%ckL%;u?v%(Js(spz=_ER0;o^&b zfuA|tI74U~Ku&Dp;fNY5QtG7A^e(yI#-d2Gt^vVyiOp#bg| z0`Ws;((uki=%w!v*$O&mS^XSfhUENb8z1j-EWX2_Goe1H@gPZm!lQqiK0Z3?wLvyo zB&ilW2Q800;*H7l&Ea1Xn7|6{RH~UIEfBl58ca=EvCWgxcri`W*x0In?)L~y2iKZe zYZpSs)Yd0gy{y@=ChEg5D92yU8g0EWqS?WvRcc_~bI96py*L)<#bamCuT(FC>abQ+ z7yW*7S8?vAO_8k)&H3JBk03? z#3UGI0^+{D`zS`U2&tyM#_5PBzbPxI5fje~v!&+CT3|X%ugbU!QD^pi^~EcYHvLFb zl@l4}3ss*8Q)|2te#n(0?U`A&u!M0+xM(h?@1U6x5 z{-|g{i7_~=GRVQw0{QJgGV$hh+e{0$*g)k)^^k)t~(XiCVlSvg1aEIOzbq|LU9V^DwqBy_qyjTNAfb9Y1F zZU{UPj6&dpAPhkYf^-DA2&z%2L(q(1GlC8TyAkY1a1g;Y1bqme6oOy#S_WM2$X_&Z zgb?aN7zq%Z)OTMTc|mZ7WiqAXpQ15ljI7_O{{+b z_Xr+Sy^t=i*fk9V!KVep5gU>rB#|(P3A5O9jE9h@$&GdHAj)HY3|7p~gIfre!7-Ym zKAdlW17#V(T2nY3PE?1&!nyp1Kdp&dvg~W>uNDqFj0K;U|Dr_=*1S5rp#ls-oK;asnep z%;f7F`D+s%_z*zY{~;u3iA5xT`rv;^j6{f!*g#2yM$!^nyaPFvV6jr=C{byWS>_`F zQq^sw7WbfGg89`zvo`zY9mv1|r>3#{gluFRh2$GJi#PBeZxo0w^T8%lT}QMg;3INU z6{<`ARGN?WrdZxJFD#CHaJXG7R<~$+#-yWAyHAtIvK5p~y^1yPv_i{S3k=Tm&5EZm z`b1Bk27o|FlEr{|#<8o6defXPnQS7cubYp(+&%G9FZ$O{W59e(6#$&A?MeNV*ibH0 zs>;`};YemnFfT`_DAAw`%8U(1aLXh33puP_zKo0%BMDmeMn$PQ^o8FVL78X)Jv{tD zFululD2FzK)8IcuIWnEDG>72Ar$qWdV(JkbkuEK3&0c!qzrbnk(lyAQgfz(EGN&n1 z`>Og`WQr;adn{rXi5C$)DJ7ihK$P*1O0>jiXQ(NEMn5o)g=|H`r1NPMqnqO#kN6}Y z&+BRv@HWbUZ&{Z(+JDeU3X1E_&@5FoIb+RXCX#EpOmQzyy;7O0Brnn$oaj^CK|}AV zQ76lEs`;6TJgI}}rXx3PeW^mzWvQf`qXctQ+|1?2Kt{Zv%Zd=Y{?bU=X9{caBBcoC zTh$kET9NVDWv{CdCtei8C-fn-u8cI($PM29iko|?;hb?y#H{J={WU%KpdeMuM3O3CF7rI)rI!#gUlCNF^h7 zq{V3AQj@ph$p!pOAe$A}K6IWX*cLa5o8x-WJZu*3i&C(Owk4()Lt-m&Pd<(fIeStD z$wl;tqv2iM)rcucl^^7%KAv+3LWnzvJHuZ%x$oQ)@OX3|j7q;6G(WjoQ_Rv}v1Q7& z+TgF*zC)Mt;RhUZM$garkh$+^uJFP;CpO!!D8eNoqVHJD%2&HIsVN2fT=PmoubCf5 z6?AGVk4FTX5;QQ4WHGKm4Q+L7Be|aEzRhfb-oyuYq;cjQ+X1H5x<;|`OxYbTEO0GP zaf!@%*9~=5cMb2v+j&`!wNCA-B18V0+EoAch7^k|zT`5>t0=7=mRECrZez;|j~hzR z+@-0f{7NNM*H{nKUU&VGn`kc9Hzi~hrax{t3dwd#nCpg1$19zC%F-t#E9+^_^k$xP zY35p{4Y1gln8_I*RCLVAw|jmY$Q7JzY2BRiq&%Bq@xdiDSAd*G;kl#I6c2JS$32DZ zmF9<-@~NHX=^R3YI#`j`i(3Vy1h$MFm5zghot-T@gHT)&C_8Ae1f6;AzEe0$Vp^lO z;_pVnB`4QrJ|D`Agd=Yz8GsjBq50 zkP*}Ed3SAQni!K{5;8zYc=6Vm-*dnLb2^O0Vdu4LDVTn9FoWzi=luihOs&k6btA6% zHT(Xx>R(OH^@_fJBKrHbIxW4ihVR+kS9^|3xr3Lb)WWIsvslSA^F^K#YUbxrDHpqH zzf~)oGUc=?=QT25hrL0{(S7hDI=E%8WS+ zmPW?UrtEf=)j)%h8*i%VR@&-!JMDGg@BM>+^xyu6VpAN7M`=^~0}XRn!ye9Xhc^}o zOqnoe%Z_We8;aai%dNE9dYk=jul*2z`r=>xn}7G;4HThR;g0GKeHicaP#{dfQG{vz zy-%?M&JYyXW>CS?VA37l4hr5;_k`?1u7(~4mqnXK4MI7Me2{sdj2o;ua8&QNvQJY8ipk49( zIn2fxh*@nHX01_Zy^S_Gh=npPq|(On1;#>=SRyr%n_E~~VQ^3w9DzdukG;wpi!l4@ zEfxWEvUR2e#d1E~bh)M&Gllw(L<=HlLx&!HgA6vza0ZNwAXWVGTe4!!hCK%(Idb79 z%zg(ABq^~~MKsZD^DVYB43rVGlu^apwBx(J+E`|%_2R5fXB10zst8!h)1P<;pTVtK zHwCKb9!uv&hf7>F6*o0Srl7cMhn#dgRYQ?cN}-ImM)>fhik~|8Pe#uhCP9nd=PY1f zv?MG(e#ugsNKH#qvlUsXi?qsbb=C-IF->ouzCfiMXEb zNSbAXpUg-Y?8|4yh9g(*JdKiWvw;}GA$(#}VpY8u;E2X*q%;}M(uK@V23~?FBsUK) zoypdZ6+is^1M3&lFcl-nOG*6p#-A!Hj^uo(MM|VmV60lx)LUw`&9?j7VW(a4k9+>} z+Gqb_S;j)__9lzB=EQ@qAW@QJDm2b`)6G4^d?ahM*`eDJXIys6eb2n{#sAnSRc7;$ z4QHNa-6I_>S(YN@CYYhY63eaCZl}GDI_rwt9{Ar|UtJSUm4}GG7RHbtFQuo_ghzs~93A9yVI%m0l-t(OTc=GiJe#GmqnAHJLH6OF1wjKU6_ZSdF6v|GqA8s_zkR%!3>zN;=uLs{Bi-Tj{u>fB}$i* zq9S&zYLm=RZ=vS2l(6fx*=DzWjyRPI73@{F^m(k`8=vx{iUT$wv7wBZ#ioXHB%`3B z7A`i)b(}_?66I=5G3zv(@A}2XI7!g56)IPIntM|h*XazHvg%;27D&H8_%^x4AUiIC z#LnvzUB94=qeu;eAyZaA4nKbvbalLZ6(n4gggxzN$SVag@|CLAs9pEz|Ie}`&(6Zr z<0QivVo&(R(tLcSdaZDJ4H?^Kew{PoAL{pRzAXZ9>11e$AZ5jooDa3gB$f#pMJi2E zuTg8-Duhnm4mshR%WmdQmGDr%ck^u#flDVtYeXpvcAUv6`6swej1(_bmI7re&xDhb zzr+A1%nxx=WXOGrpK_I&bsI8e+0HpR`S?qsZ~z$H^8^s*_v0;~8p7WPD4>G2^Znz2UDxAG zE|$0XI zTcOc>b*7mxmFi~!SUi3iaIK-q`1N%)aKjr}SrD&x@?c)v^!C8JG9qqCo3&lLwxa!8 zt##YDH&=8-IzNtEvJ!1J*Py` zWyYKZOIF-ivti4QJqIH>a^lQ|YjR^VxJPhN?B3#2GVbI&c=Dn!igJV$#lBfa(_1uI za^xuhQ}mG%Whzw3(4k9@J_Ck~Kz*XdmToQx^d^cEg|hAtaT7xP++sjx5A1}q(e%|hRrTMOZyy&BQ%E_ zt!47pf_}j4#AVNn-FT(AHPbnI&lNJ&u##1dsNTrAa%i9VzNZ{*da?RvzaPqo*-k_; zKO<)B8i=GrESiW_C6nRKPP(p{OZtgh^?oUYuiysrGNg08~twdQY3pEo5o1S6=5s+zinmbTfNT6Z)) z9}tO05|BhB2}wp$EK#UT&t%f*<)}4`!O=^dO1SM!1s4R~I;8NKI*JIA!{zY>LXlV^ zmB|%K9bG+r14AQYskD)#@k7z9j7vl97;xVeC3bhzCuZU%T0SZq4YxDd^jWzAb%S;gqRFuP<2ysIG@^#x(kRJo zyN%%}&@kB=@+tsfM&|H9+TrqA7G6Y=MHO94vBediu7na>P+I9_lv!5U<#fND{xGeq zWHpBiqWsUd_0%+>4mHsR%>@&Q9zL3;OSf)UpnRx(iy(KX{pY-piPf{9bWjR$B%#;%XFIETcmwz040p; z`oVKO6}7#JjkTy)jG;@nW)VT{F2<*qY#af7d~vh{HqLhYpEvZdYy)A9iBSxn8N%)b zkP?vezSE=%y{$;w?cMS6qn;9!*Wzd4Hu_w&h!~ zm0PvOt-dSvtM_$VzYW{CP20Rnwq*l1XxEt>PSa&uzbh*=%vAG6?#Ol0=1>6{aR2^b#D&=kc;QC}P6TjgNMH&q0Uv(JC?<|ZKM?e0ea zS?hc~oP=~Ypb_`RNn{Ue@$&+0e|4BIu3o3HJBQ`sokyktzFr2G1q3m`$-{c_!AXEK zhwT!AdkV}r&o4{x6F_q>j!O*DG@!-Ti^~dPnyxbEB@tuOI%wMU^0JoV?!}H>T$fZz zSRJdsxG$NW6#o|#2}gX2rLg`>-bei${qD80U}xcfOS_3RbNS*X9OAdNYrF`~-}l0I z9`WL*etRX`m;E+3dwmzE7kq3#t58Qi?ypNP9lfGOd}}K6^l7QXq4kfce(R@yQn3U7 zsGUA?@5+_Bd%~Z`zj``pj{SY-P=5uq+rZtx69D7OP=U0#Nz`OM%os}fE*Pfy=skHk}W{*}2^A*iDlT{Mwx z7V7`D6`uGt_*OP7799>vqLZy3K5 zrXeMX#`{|+U^|t7p;6OdSEZeRydb5lx6f)Bc#&5!lZh`Q*kQC0`HbnQ>ZT7qxy(M} zG`s+j3Cyn$w5virhX1O*KQ!W1dGP|7B4kImtR{NWgClS|O~niE#Ggtja;QRfB zMFMqHYnqc+3|+b^8yR8du8Shv^s6;KM&ojxtyjTLwtFwH4ziI&BXNwW-#6p<11imx z?tbMIBhiXuAkn2%rRzqR&-BR#6Wz9q?^L=UkfE!*!rTc=C5G5BSV-;SYM|v{pp3;_ z!%PSKg6et+yrPyubR*zy<$pV8yb@(~+eeJ`<4&^FJPBhG7*0h?g}(i+44+>CPX;6w z*ls!&^zrZ3RXorUI%qw)?I*JBwv#z=vao6oIlFH$Ep0n)_NyxWa`Kb(Q@Y%l4=G>f zI-(!?*H3UAyS>-8{y7$OGqmqs-1GXl7~{bk(r?VT7~{^{VjswLJrQb-d<{_g_J|S` zWLno(@K7GCX-MO)$opgUsWe!e>mW~hM@}Z!pjP-^rGn+gq07Y;0Pd>Pc1RHg``mD@ z0r=m_s|p-~tG3mYffw95v-sE%acEBS<>m63olrhjLE}v}(v5Xu!01r}Gm3|!)tN}L z?5uX$E^x1#kiUhT-=FFB-FKvT)aUK3|IB1+mMf6d$@XLYU%sYElpo3;zyHo**eQSz zzWE)-74ekQ`$6>{^BR4I7eXblk=V`btv(~gP4B1{h<`jHs?5dm#>)yL?lm|v!2Epo zX6K`T`8>+8WyoZ9XLe*Z%jHS`9Kd&jHI-XJ9?|eqy3VrfaYCkO6%~_&nWvR)jz}|sta_7Tk616IkhT8GT z!Dl*i0}v=VdtoE|rWGhzxp2E{?rm9e$-{U`p30SS7!_hb-4LomZ`bsKeci(PXE%NU z#CM6;cgzq)b}c3rRkBFJCfhJsI8>;4YBldK|NEJ4bpSG|Fhhxo=AH+$r|VDCT$@Bo z{hDHfdaYQE9LI`b-kFKA8*Kk8R@ZmHLX31Qlf05{*JapB7b|{%LM;8p8K3Fp(D6dA zkc*lUz74~()>MdzI;o)(523@$i+0Hy#{;b{r}0~K?je#?sm_f^hSj((>}!yI*eiK6 zmZuQ%Fw={?VIwbV2!tHZ&VA$g{cg_pyx`rHgVM*R@fQUXK3cNs{p+7`)Xfr7;Tf!8 z&<+i{#f$g5Qe(ZQ+%iMicJ?#Pn0Cy6x9={^wYt-V)S2*qf5K;E7y~lFD;d_RGuMP{ z6UD?3#^E-1;L=!Z9}(mvYmnZR<_?p%ccG?(`!CS`r7dn3p6}sGW7ryBKb^(2qLg(Ah`^8uLEvVAX`~s_N zQ6u{Ork-yb*yu(2E)Y;%uu}=hj7NN0Y1dBgt?{P?WL}3p7dlN5SvUF+e6aa z6oC^qhf(O^$1!#yKEHTTW#$oD@xY3ghj*YwwIg;-Bk;U6g8hIB-)Zf~jbjcq(kW_- z4g@iwN_ClC<3`^b#pPjIC#W69{)84%Ij$xCB3|CjQwLJ1MponMWfU$_R}}tNsX}%w znY%~U%(@jf@L>=o+R`<_h4~Pn6uW!^$3zIy03P_ikGc~6@KPnFL;B?3&XUy=` zFQ2-o8u~)N*YNFR(K zzH~=g%sYzd6hH>B$2^nCrjyoUp=RY?rnx+0mmDQUFg$@_X3g#{YbxmHV6CMd;<=R6#^YiSW(qqvR-fA07mG+&i z%|!UD(EmmI!v_Ek;8gNjes;lKwlb5UeNS^OVx(hV&Wqp)r<7T)YQg*w>e$^ntL2=G zz8sZRQKxQGYl4n#q|l^-{gp<3RYM5kUyV?lAeC*7X;^VSKfGw?aNH1du|a&5`uCP? z^VBU(qN|}^T-}eILRHz%(sFs!uMg&dM5fl2YgB7nbv4x}tO@duD8HvDY z_V-kEGnJj_%9xq0Mrf{k(7j`hi8tZ7hxZlQWu|C3Dwx*z6rj(4)8h2QPaZB`EuOZZmymvJ}A5SM!t^riwu_FMkPJYQ@})(FX%5a!0_aKKCI_IrGP> zb_m`ux21-Z9p4orZN1;#VyqT>gar;FNRqybONwlk zR~RSd7Bf)qWTni^AWNN0O1Fh;Y_Q3ER%=hnbB_(~?;$>#ZQ5J4-7u$L|lRPDmywr_tOQ-Ztbm!MZJ%TGIK4vaUZYA?59H# zu0ZEX_#Z_;ZMld){BhEBNn9hiixf+iaYleY9^*76BHQbcvBR5<_PN8O9>e<%To}R# z6GjK-;-PXa7LLomg17$%Ef~S1`XoN8ehQT4P*_ed%Fzq=2~*@ZexV0WFTt^*c?Bs9 z#R+#`>TIE=SD5q|7Uq~fQLfuBemSG%?V$#T(yLLLM<6Md29^@FdXSsz0GNK2Fx=cM zie6_Cg)tBPf8)RxN-atRq*UV#GGr3j$1G)~iRCOiDd*a8* z&0?!OJL8`p-1{*-y3fB{dDy?sQs)1zQfg?*kDxXRV)3=NUC^!48i`)EsNFmu$D%FX zU38x>`4W$SjoX5a-5wguj9WM1Kpvq-_@?Zj@=Ir=Ca{tI)nk(e1{plg;(oa4*&&2 zJYh?Truh=e9>JznKZku)QUXfN(-zcgrpMhEj|}hzdi@K|&Z$xWbdWO#-pTfGB zHjkyPZug)@GTa@>WpI}%%~aFOFvSKNfyHjP>3Vv{@5dn@`NUT~^NlZj=Osq84b&Y4 zqS0+69~x5}b)=`6{4Td}6R}LDOMT$vJh(LL*{g1Mvwdrn65b z8MLBI<>>Q8G6X=A;wS@nQ>T?uPDPakL~BhJ+-&&Vp5q7A)Jyo=TPLRJlqu`v#^S z5F^AX9*bvQ`^e|M_N|}#n+H4;Zm^n!W%@~O3e!AIq)5UNNbx)~*ZC^n<-^&ZgE^dI z<)`Jnu;p)u1&8$ayIkBDH=_6d-#3t*BVU=;Ip(^DKIB<@T$n1RA8fhxe)q@ip2PlS zXoWtgEy?6e%5{8t%)`Rbip$UO3FeXtPF~ zv#o(S%>S)-TOUH_Q7_V2=lT3xX%TvMb(4qN3!Ov;MiYI$65+2BefPBuMpj%)WM()X z3p1TKmHP3b9RLe+YH#0r;aYNLK9U;kS8H0*XhmC_;h!-}*gXH?2bWPqpKR z)JJ}O{K+SM=xn|}{IRfkVu`(p`}73Pk#$;HJ_tNojzvp{f~o{3Eq74(iu|LNmI-krNNogF5>0 z?nkN7t=(tdFM`BTC8gylP@)!rV2DA?f?)umN2*Yp9fBL3psQi(=}V{M4wcI0ft@oBAU)lNNF+u|rV&?;ngbY#(EnjWf#sg!A}LAAqPS$jh< zzSoW)s8kczq3&ci-?;H+`d9Ux*rNFN#Wpq=O({Wp8_JbpoerQf`+~;ZBL%%3d!=tMs;Gc}Sj9{X>vC8Vt)TEEM736A>|q#AYcz zD{+Y>B$1MhtQ=+MBqtZSIn!isY%1gORi2-U)M^VfxiHgHH#1Fh(^Z$YS?L9ks~XZb zFN0Do?32ZrSd_7)S!mAO%51F8!K&;k^@m*6mWRLkraeywi*Tq&NBiz@Kb$Pqsp6b1 z(dpt{3auxUYi0STJhv;*TcLj|a;IW_m3mdHcOCQINoRcPoUffNE!HDRjok%$QVs72 zn4Oj_dAVDOdzHCgxd&BvSfz+8RHo69w=pTTWJ?(y;qe?O+_{omF1^uaTY3n#zUKOd zvj=q#n`b?5`vKV}`h$R7_@Kt$&rM&ZOwON)gbU81L?d;><3u_|&jrIjOadVopb)wd za-}6gvQ>rUZYv}J!CbC%z(I!`76>6!t<(Qfn&(PMw0CrNb@%l4^$!dV4Udd!##ATA zC)AThi)jOSVf|Y=V|FqwXF?yvfND@Pq#HJjm_{vPgTuJ2$N4mVt>jFfy5L<3u0+?8 z8`-VmPIYh0L#*F1CP*TSSfJNkVE#Ugs00$TmXuU-GG+Ow%HM>7jW5W=LQE>u{0uF~ z$dXJo_E}SAmSt&qR#s$fO)zV7v@R$63UH*Kjuqv2(M}ZOe9119;z}8=mg#v-UexSm zEne5=LnnOiydPcgvx_O#!#5ICk>MAGe^jHR35YH*26d32n1W*oi7hmayj$&4FVz01J28 zJ8^-a|Cwp^RS){DcBk9x4}vf{I6OK&IX#151jTTIq-cf(950Acsa&bn>J3>@wWe;E zmhHG+tKI4L`h(%f55{2>C+TE5JTf{qJ~25J422^Iis1xF(M*)(0OVtWD9MVd=|((} zOr*f7Iu~e>9YxTyr8xoSNplZ5dTDIeQmMH4DiR#uXmYURWU~2g1jVz5A z{bhl<@n08O2@<^azsMSe7K0&ZCOKRlUm(N@Iz!ISFam`^-X=;CAeB|WGb`@OMoE%` zP?C!_B@aU+AH$>oIZ7c)Yl>De!b%AuN+}MIG88A}s6Z-EtW=_&rs~`Ll~c7;YsIGx zjFfg9DjhgnI#J4|>rm^}y@s1uMnGLMiuz;>b<6n8KMqWwHklkxQ%$YaCM|0qysV>M z*+2x@#8GlVaFI)tELT`xuCb2XU~Rd@x^jp5m13r>Rv?NcMOP*1lyxO#epwhwm|uzaH{-7B>9EPW)EpjPcl zx`T^4w9fbZk+|{7yFs8ndO-B*XEKP)4H)7-NP-60)fk30VnWty@}lv*r_f~jjvaN^ z@4kl{&%wMNxCo#!Q{4JLzJjIGRj)IH(^@r$LN#a5S5S z;N;L~J`KZBNi>>{zQr$RPc6gQ`0+AWD&Qz?I07PqG{ zY;kPdna0s!dEA>S*k)zCo2ocu_09jU298;KOTlkEU)}^bxg z)!vA^(@nPePu!nwvEAG8VCrRu|K3vn?!Zp(#-pi^P9I0b=?Mlti*D2Z`1m5$OfRYN zQ*@j@(w_ zQJM42Dl8I?OCgVG8 z3SydBXmd2;YPQsnv4X*C<*EA$THkY#R+lyL=CPKadD+%ugJEM6eQnwedUfV-JnZ-< z>$A&KPaX2oOUJ$P%1N)iCVA@}*$0DE!-nZ5M5N&e1`a0=0E!^UzjzkPVq$Uxf&!5! zK_onM4 zgGL)|)NGSY4%m!kXEBwdh>K#ye3U5Rr&I;BN|o|e!TJUVCs~(1G5YnxAR@{!U{IDJ zLvoP~OEGR-nn{xiOq*6{)~q7)<`rAA6eVej@*Vq_fRG5q=MwW}!HQh7WJ#srq$m!% zFR1e1fs!XrYGTBo5-XOvIB}@Oi>Dz;5*o>pX-biTR;pB5(xd@ELD7bRK_^QVh-}&D z<;bC@b#BmsePK_JOsusjGv3J(thFRu(fK8yJIWeNx=78HaL5>g^8tWiWni=?D> zDJkovrFF{4*dQwlD<@~8ygZzOf=!Bw`jnJxS60>!h1#L2ilnBdTU{MlL&F|TOGIGJ#*tv;`>!zkI%*@;{H+N}a;U<sBW`A!f5>y}Fi~m2G zCHE>KXFgSx?&q1hi>KQ8%(+}_u2uistuY}q3ex?QE8e@mQ`ij z%{w84o9DlY#f~6+D~eZ=zLVvrDBr8<*R&r9M`!Sh0Y0|)FeC}^i6sY;0-srW7@iFH z+{__VEbxWdL)bXrOUn*pBnQ4ScNh{6{9yT^A0HgG!r)2~9JA8kmohl+yl1`G^T8uq zpXUY*dTGdz;cphkAP{e%Q14+dg9L(iM4}HQk|7pb)(z)Re`@l7|JU3(dS(ps2 zGmElS1R9!BbPUBHkTOh6WGpQ0*f`L*xG;ElvRUBEARv%M#L@sUu?kXBiS0y2_h**# zwj*4*N#f333h(eK=F8VOKWZHvMA~jAYk%JC_>etWMfB_~34bn4Yh?QfGGj-Ak zGvmftn{bMSNt0poWTRNfM@LuCOtxTPVOb_3vPMj7wWVxh;K)&-Sg{b|#Pg$*%GClH zzF2LwZ#LPgNV^Vow%MsnpFR!ldGJ?tSB8ZwaByi55VE16Wg;WXLq(N~h9(dMVvmC( z1Q%BZ0f7WULh)?bietwPiYHGwLWPQ!CCg9QvW3ZGh=?Z_E(;4NC}LTJurx^&mj8{u z>&EXMD!A*3z2#%)Vr}3C5)%7XaCg6-oIA`NrseviZ zm%Ckvi>0Q%M7rn5zp~KQ*Wn}o#=^XtZfbJNEf?;(tFfPuYMJ>@)4enQU8=GQDDQdx z^a}`Nf)AxpDk^g{G-d<{Fe^)z5xH`a85oe{%QvjZq8NM%>1ts>ym+nh=y$}6dwj%sYoC9szY|s&K3(B62K7xiJ4NXuA0PBbU`YDY6<372 zjeMS65$<2)`-%X)a{?G=$9o^{UwKSh^)G!tq3gN&(-+W=x?b@AI0Tt7V|M`Ru~Bx= zd(U~(5--FF6F*w2T~wm*`DG}lrZLqrUXm0`Q}LBXNhMR=ORI!(l%%C1gm4iMPE{y@ zpD-0-b=yqdCQ1@)_(@@-Xp#4fl3>356x8fb1@r@H-nhD)rn#wlOii8LD@&q*ez6F} z*u*Vs7g`WDk zrMhHIwg_yJp`4%5yCn~ic*Dh5Dg;JiqACYwg2c$_?U^+Eq`snhzGX!w5;TTVj&5zv zTD^=j18lWSapuJ!nBNV|@z@keBI--9gQ=#D zr7Q&r&1z;#{6oGZ?^TLs^e9fF8XB16-_A~==8{5$DM?QS8Nfh35Gq?WRh&v2dE6rp zfqC+Q=`6+MedL5gg;KB5yykKe}B3WjePvZ3W_|9M* zTzs$-dzcjfYdrKst%;s+sHd)bph%4j%1FRGTs+Hio!T|`+OkRAb)`1mq@4L4zQ{XH z_gEgg*36Pq&68laF?1JoO=tR`maD~kL-TT9HIOCPeHvBf^T(*(vg#8Yre%x-~&8z#$E!6yiQ#`oRGFPm-gRJXRrAh|Geg7H?Mq+Yz+LNe`FIO);E`kqGKOZYznvhsalIK9(=g ze_oRtJ$sSZMvtDUs625&HR^Uje`44s#1P!9{wv$& zl{%?2^}x|_+Y_8)-xQ$~m_2+e*g2@|?i=^@`xuy3r)yh&P-dmQ98qIw_Lk*L?MH@- zQ7e4~Lxi3mi2jf`xk022E0ya992R5P&gU z0$?+nWJo$ukm#YMH4lf$t7VaI7xtaS;DAOQTu5m$yr}UZXBh!JxPlNt93q0x64Qpo z3Z+x7tKig)amA9BFTD`Ic>wBfy$~?ScLO*`oGu82Zrq7fP^dHpXh>}m3`}+f7K)R# zII;{LuIB z;Nn6O5l(Y?^W5TwCy9Qy1`IU%wMT(M&>kbvO}Jy^J=T z`z)Ob?f*~R7>UdE^Y|QP#SrJ*c6WDocXxMpcX$5syJK5T!#R1y`2oEPJLV~BSlH+B z6SslQ2!$`Wp4c0k>gtCdr@N|0!J;$u=1-MHOtSFP;m30Mp zyWx#>Q)4*_m4QKMV9iVbLrzd`s4`CCo~u3gBbFGa{+DQ)nUbf03&rz}Ao?+ZnfY-X z@N4pxIAmAN6)=DeZ$(}1BXU%G1=iSW`2TrAs`JNxmzsg zsY?>#zpZbw%9QxPk?Hfrk|v_*#v%~Dnt#eZ`CkMk{~Y_-i9hidlT3B z@m$Wkph1i3f@*%S4mbyn}5?eTnR zkR#LS-MjnX>^9wy2-sPK&Nj4QE^e5t?ql!Q__1T$VW=~ICV{T|MBvuM_ienHsstb^ z&ti`|dJ+4?sgf#!ut%O;G#JUh&?>66f5_vv^A5Y)YKbR=NU|#BKdNp`{9nNSoUHW= zrtdfHZN*^+vSX$|;n1Z9#UA2JLzGJ)Y}WHFQ}llF?74>&DflM~79KkHJ2xeB`0=>? zxO}Cn3jE2Vk%>}PD2YXb+gpWQj0YAUfg*<9klep5EGHT?#UzJ#^7Ww)Cn3`wIb zs#w1*)_#M$o~KGzhJz7_WlA-@^ny{r+2rYa_jE!%1UX_jLlD zB9|m)5JrCXL}HT)TlE@6>Urm<|LDN1JyJi@jSdohEy3i0{K!&no@iVfh>j`F9bY*6 zp1q+kuK>VK?~@S6@-v80&BS@>^u}?bC>j~!mBCSpg9~|QI=K}qhJ483b=!*R;h6`C z6IQn3TwBhbUHw z(=yF&>5b1G+g3hpN)(O{4Gh?tdyMJX_Krl2{aTIs+I_bCFjj4n;)^GwYD9qSJ^&D+uavG~%D)c5kh;C-L&}BW>Yi-_Hf**c_`EyXG}t zN1<{qC9$2tTQ>O1diKSm+STQvc?T@yUWgT%$GW09unwd^643=I0p)MAd{!-6+)o2k z>3!ghC9cj}9otToTE0PAqdLES0OBqY9bzv}9h^-x%q?Ae>%4^&XXsm$HbB!G10CNkwOByT6du}dteU8ElwfW>~2L1f&ve~V~ z{Y3P-{E`P3yCtm^tbP=m&9lK61Mz+-J8FWX>0%ihlb7uJ=4S<{S`3MNzHGYJY%J4Rjl>AexSsO^xJDVxG2YOs SqWNVA=zhr;4tgeO0001x3fd(A diff --git a/pkg/arvo/app/landscape/fonts/sourcecodepro-medium.woff2 b/pkg/arvo/app/landscape/fonts/sourcecodepro-medium.woff2 index 7dfd91c5bb3ff9244f166e941f8b893ca18b5d9b..0cce5e955e2648ecdc3552ec7986447d6da41765 100644 GIT binary patch literal 77400 zcmZU)V~j3L&@DQ)ZCiV6+qP|cW{+*#w(*Q@YmaT)zVA7?Ip@p0m2}db)UU3pwK`p^ zJQT#46;xFffPfh^f#89FfIvXc{@a5Cfk1cucl!Sswm5v~I~7i-HEsnbUZ*sKA<&6A zFgpktXofHt1b7h+B$3W1ND`cx$ckMIHChP^xtOo7UEIP8v9q&b)bcN{(Qv!oc=T)| zK4Ot2cSS~$(=>`B0Tk7apF_&`@Bg+w#`pV*Sr5v~?T;Zq4png(C)s%sur?A|j67Qt zj(40^=%JOdX;yGWgksGW`mH;^9cK1{e9D3LSi1(DGrh|M-^~Ce>Yl-6p|8RaKQTYpSYLs_qt2xrXc@7&zO(cZh%>W(fYi6H}{I=&FYl z;Jy4yCgZ!uVlQZVddooZH-dO3B=TwJuOU&kYLisz*R<)z~Y5;!Fsnt>)l8SZ{koowr2QTIS^+(q&>>#ijXQ@mwC z{0y>rqNtL(!QCPLCM1P)&q3!{FjmK)!-b1Y?J*8d=+v)b{{A4M^FGBX;Q3wsOS_> zSPzQY!EZ<=1HfBN_F4ANGtfEhef?pC7I{YM00oJbDiKRxHZ%=_S1&XcHH3Vz*Abcn znyytJ!Ls>p!2uensvu&7V1v_WfD0)}Fod%s3J8kI&%7XvXAW#@nh$2XM0P7&c3hZ- z0j~~coAno-jaJ1eFi?vU6(!h!@#AH7b0ogds`vV(-+b3kf6ciZC%GMm9l~21mc#2U z3#cDDrXfe8g+8VyPp<@40;~7*9Mo}Rn zmleat5m<7AihL^V&o=Lu8{lswP7DGeWJ!`rEh^?XI}+J7aRVSEpi}Ow51^i!J{VS- zf+W6MclQ?pJ7tx4H88}1V(|L{wAtUESI9F1AmF9Le;?P^ZwyO*1;J->Py8T%j3$M` z;lY}Q0dz7DY0$!3uD}C5Q(9u|pZ+;5&6txBer3D7p#H$Qc+Lc-SJ(-SoRp?`P~At! z&Rx!3%pUrbwJ~GuB3+zX9uP<`M+;HOh6|^v&3$hkKaZxfy_NJm8XHyLSG!fd-)!5D zos0-jwzfe+qRGtz83}lfWLO(Uj;OheR+8)poT5q4S^*{MFp|O@wUU!kWLeu@VBTgWzg>c?@gSRIWvSX0 z{>;aC8{a%d&evwviEdNM37|a?LdU?hRJBlg8NE}R-N&DmKHl&l+MRm6N3CN-Wk;qx zs-oZsViU;-DpO=EJdweK1?--TcA`l!NOW{`7H*<~iU=qaG(}Z3v@jychoBJJN{;56 zY1!%b+wG98t(Xr%m-qs#BjGGZ5yca+a}KvV=_9k-*P>V8_BpNK}O}^|Ee#aYpH_US~Z# z#Y(QVOP~3~yK}xi$KZrO?0n{GKuTyIzEPKde+&3-1(*1%Y}_>TY{LIoxuN4&0Za`> zJGf)ttz-}e6ssY!RB1q<(jFD;c?XbexD_{btoye6$o<{dO*C*dy>;&x_BF^Od0uCQ zuS31acRJT$utMOKk9R$WcI;-Rd zy=iz0)~@~Zdfwu$>7BZUGvEw-7wW&KZ20Ym>HT?KZs%YV#4{1uH{Z?x1a`CW02tO0 z#_@FZ`1(MLsU6NeBBUpeoFEE26pV2Ca;T(xmSEEzvk2zSoj*2Bp<+c!*z66Tp=Rx1 z*nq+Yb8Q~n$bE~H1Da48dko(HtydLjd*xGfMyG!L^YH7BaF$m=P)Wd-v$J_)HO^Vz zyw>eu09@k@uB-;GNP|X=4MgpWl<*x0a!eug&H*{4vgvEu=I!o{B~fq|7(&;k*@72M zAP<|uJ1=56&;V$qq(c{Q^kS0l=I+>;d~Dv@W**`ypC$KgtV~S_jV6$6I5(Wkz2#hcSFEm z$j}`q35db4qr~-yD^L-navDO4@&Qel2HzN4iktib&!lwGEJiOv?69n7kyx!YTA4-~ z-R!)Gc@7iv5OmYxm#$yeL;gkDnj&&238aB)#nbVyZqT1602u3gWJU%rt1 zW$;SXOA;@X(G>tR-UkR^%GiUHSu|`>t>3vOWO%9H z@s}p${9$v9{*6$93`_w|hh3g3gure};MHbC`xVS zJmu%_cwv1Y5y15$ko6X*kha>g1Ooo(>z~43m?GRI+stfjE)LNwS55;vs0{5J3@SiL4LQrCAVZ zA|a7LQ1Iqgo>0L`1tH?#`TUAlX?AhUZ_KF+Im}pML@e*jBKk%pAuUN^{Ai_;CC$se z{ru>zG*KBS<03HUXa$TT)M{EZiXGO=HD=6Hr3H=)2dPR@Y<5tX^g@bi%m0>#iT~th zSp&q6tQ$a3Tq63#r0}5w3vFJZdZ;WQqdDJ>roDs6AbgwqT#5JChdGn%6s!`m}F% zLOh>-Mnxl&3=^cVLy4F%R=R!$P9%vvNxV>0Cy3cGvv!QOJ^8J8i91&P!E7o~CYpO} z?v`Rm{R{|sJUYV+up`%+%yJMI5qNae_!NF~kYPiqM2WH?2u?3g)ycOOtCYy}D%sWH zjnv1qkz?Bm8*Ho&{l1KtAg*eF9%i$l)J#+$el|+1c{5R_hW1itXq8dp@{)7ZrP+iY zRgtIi$i=g?#3+T?(LX3z$Pb4&b5~}tA4tA=M3MdI$Tw9^6)dV4q*3T}*yNDv(Cm=S z(7z#&p}R2gunN#Fq2zi;yn}$`|){XQM5=?ML}|S)}_dBC?{ss zvj#}$c=1$(&9gSR`0{jRa5-F zB3)cVUoqHl!5XI-AF2aIEU&D(nk;TC1s4~_KOF$)lW|ePD$UX&tK%w(421%WjhY`r z?Cv94D3w$y98IkCa95FXZ?#0V%6^ce!#l3hJ^dFW#H^;$5@%z%XfDHPN&PxAF-d80 zzR}DC7)cy~Bm`N49Y!&loem^mXhCp{yf7Xe(MU20?W_S9AvPpXBv?}jA4s11I7wNx z1mf9BT&GhJET|+bOk!4hE2L0Tsbm5P1R*vc66S)dynUEH?=HF%(kK6VhNYo zr+F!QYmF8M=_>7njEZFgFTwZRc&7=@nH9|8fMG^5oIx3HA&GoX^HssqpQ$^zY zPOwk)yn~x_Ur8kJ{WGieej`j2cz$1=Ktnn!)44S&tt%R}t92%c<|V1tLY^A-D8RrK z!kFz=2B;K;i-iRtgZFU%Fb+{5IL7gGw-QkiJE(}v{R>3+HfDxNyUJ#^*(s{3le-il z!p#Ir#0DOW6fss#Z0wjMUXY?*4|QWcrb9wEDAWF)KMSep_QrTt8=3N2V-{~ z)Q|%2Cc?Av6g8Ep1~`o45_8kbM$iVM080RYz_*Pk2q|2b9$;E#e*FIy8`?jqk22`a zrSJ{b;!WV<)ttT^-e@^pv&-VL>79Zz1Kz|k+3_Ykd`|!8dkMrG@0aKL{7%Qq=hdBp zQEiQ7rQ8Lx?Zu%ep+xA3%y%>R=2Kc6y(ZgKZTP9Qc!k;=gRW6XXG;a&Dx1!EJ-!7S zUpGJUEUjw$c=zlsh{KM9!HpYL5|x^^)mQm=Eg*tn%p9j=NZwQYU1gwrCX!7w~L7z_gXFcR%BW0HuyLFC4Y;j5f>F zHaOVABXv`98;{lXLmocE-4d|$<+%3liVSQQ;uA#eWJFMhC%`?K7o%N_^dUhFyW9$m zJx+B)D&=)8p2OvaZ(d+ zC|V>mJUaNn`F_p$S?9d&@(28$L40u*iJdttm-L=>#=Lo*uj})k#csMmBs(zXpi=rf zbaBid%9y3a%|>&m<1ICyfW5?O>D=eWZ7t5$#r*5D&`L~-UYHK`5!`;d{a$oYicR7> za2oH6*x(`@+;uO(fT0}lE>pBgtcFY3(o`eYu=#@`VbmFr5ExUW@_qg2rV_5qndw{p z^uxy#g5mfUz1aXufdd=FZnt6e%G3Ni*-jyWW-3_<^_rvP!%fSuoY#4L8^<j`p7P-Ed74c(R$F`VT%?XxUW%O4%~turxX zjIZ#a%HB0vRTM8axscR9mN}Z$>39tpx6y|LBKIZQeePo9H#BpC7G@#(M5$OqiJ@id zw(Osdulg3-YD~LtZdT&M2~4e`50xmWhth?&KV3D%N>^uJO7jPJAT^H!ZMQ3KMp4&E z9vDBT!4$X9eS3N*vPSs(jV~fUG*e*AGS;=54IthmA||c-U#PDKy)N<2yNe5p*xtXl zuOV-uGN*Vvx9bjbr34C>wTBnoRBKSElkMo7qE9rb>`se7B(hYn21SAB9m5bzR;AZo z0W5*80spzs5vSrO!x9aK=m^u;WpiQ!1v7_+T8!5Kxx2z<=jjDa?vmfuT}n{U!J5OW&Octnl*I55sCoP+KH>_L>8kR~fmrQ+m@S&B>aXn}yn4OP)sjPmM z4-8c6R@dT&HP8m46K`RLtIc`h&|q-vH^NsNS$zPU0J>{C>FwEy5OFV1pjBWCmMP4e zXg3jgZ}>mX${YkhuFt~PzGa-~DkqE3_frxIwXY?jr0jZY)?DTmqoocfi^WX4_^}>^ zo$CDkeTbFiKXAjR>oG#rSL+BnzI_2#a%|tsnEBlXl0PEYS|6zbCO%)+h}N;2vbPB` z9%5fcfG)SN;Cw%P_*+KOxSe+sJCV3sdJcr6o8l3V)Eo??v0czV68)fYp30m=yto9h zTR}HZT3cbDDmmLH!vA)vQvFRyo4WAi#7oQ$F#M7flB9YIO%{KRlCJ}{fE3i8xZCSu z(&mQ{(ljp?Zx2O&S@-^wTFXOcZDY{9FuqNna$mh@0iisL+}%y$n?FRl*6lCvaDHPZ z{%d*$&BNJ@W66iM3p1XhZ-tL>$_X%I=XABll9D@lQf8Zx^VL#Y-~MfV{VmHdj&d1> zL;{0Frbuy;ku0@CrG)-3sLb}zl`VD$WI&=Bilg+zsQ|g0fr{4zIKk=6@&15I8U)GcA%! zA(1-5ur4vAG6N%~{M;rF{r&|+UsmSbGhyG7l}Ja~NB$@8Kjdo`yxY1}82zjmNc}RX z_^s_TvcmXBQPH>ts;-u|hze9>HNsJ+VJ2e@4gxZEf}^#J)PT~*07E1&U@##@7$Qm6 zsf?Od&XxWfK~D^~vw$}Krj-?*2uD#+5I7c!3LgWW3CX2seDd315ep;&0u4z~ zkQ78ZTucORI7jr>pP3Fk(#}Dz**4j4ScZ{k#B5%GBdEl(;}>q~9>xQ)lyaLQCrE5o zRZ$_~N?5lT>&Tyx2d5#M*)Kd~3QwZXb*Z6F+x+sC`IzAs@cj%ggL2m;*e#pApGT+~%z$Vj0jKSr`LX$#VN7xL0dzpvis@W|Sw+u* z)a`;xc;tr*i_e|%vPCzO9l#SEb(j^C(7Cy!S570hHtbSghn5Hj<&N2{>Ls^v@X!*L zkkY>}-Y%PznM%Mb9V(Z`9*QRx(fAEV*$*pLhn=1K;)=WDjCAnOhIa|*kj zTScp7uEo-WRDaNGy;o7`y*PV}Y~HKqhW{4E|kMWZkQ zff0!Y446e?0f8WqBr*Ah4-g4gE!{UfALwQayukG1GBgCl%>{la^T&xRfsSAPeG2`A zynIfzHlJbcJh)%Kx8rql94cWTZrlgyOZ+&fCQZX0SS=* z2NF0t{ujCYzo-H6e_UKG5YIL;AMp{>)g7)T<~Vr#T>0}?%blPh%z#A+v2OQ%{n%o3 z@0+RE%cMq=aC^Jx)knp4ZzNzg{%#9+SFccax$=)N#Cp#<1da9NIiANYg%QrU$PRkU z4iN>Bu{HapW;)C}K&^cG1R8?D(@|GohhC6LIRwYBY|Cpv(Xk0EKlaO&gvLY&3P+OX z8sjtw1%Ti)SSMMkGlDnQmyC+DwR+WNR6KY~(P+B2#?tS2g^8eXOBQ`(}mGxxH6wPpQW+|Cp-GaE^UNZx}*M98Rw~+9>=jG^wK! zrxhmNFCHSDyg3whk!a|lVsylElzh;0eGsCl3Dq6i9NwcP;DMXMv`wc^+fE5Xa9)#QXF4Xc=)g6_Uity{f_KE7J$q%ipq3CbbN;(d{Ln=8NBfDe{H(vK%)FQkMVzXNnV4w>}! zr0NM!*nY$C=m_X+r>;zG+jspf9O--e0PK7;mIGyI2<#z+M_7W;ci*A%l-a(yLU~Or zHMy^xwG`pDX985*!qGjR@d3~^)ywt@l@O)0l;@st|H|Qgy}kyoGl(jD_8Dz>alaiV zt8#jN&bsp6S6b6Swa;qm&h@1Av!f|gZT@K1bL5PEG+M75?F}jPe7O_+5&zn~_nK<) z4kx9ZKVrXq6A{&2K@lpM;AbX4O>adiqY|UMnW)I-T(py2DDriwf{@p4RK{UW&JJjQ zN@72XrqSz}IcxdaAe3+5+>rS2{CIlAK4uYfNYiiMLFpmuVe{5`p7!27%blNEqFwGH z_%yKwrNOmucm@kC+~ z*74TALK8N{cx=!KrW88lNo!QyGoDA9qPFjR8|jb%bG79=2A|=EwU~P=%C#IV=Ph%9*nuw=$oW<<=wPy2%+yIh*|PfVATOWYMfB zkvNfgv}GM(gb#TPDne#?gs3i;g}A?=*o@o>CD8ln(6CKd^kDq)I0#*F@lZ6!1`gEH zs9xfZE;rl^TEb%{aqy(PCojcF8HVk+MCHyMsaus_Pj8^2{@L{46ZWNNsa$6={OTPQ zFbg1XqJLl2MaW9DD!)lKt-R8Tr<&S%`#m%(2U4USkx4IuH%eC(6hq%rJvfK&W6ktm zF5@}VEn*-T=y@C6-6#ttr4T28F_DEr9uRP~arJ=xy|2K&9Q@A1$_5^Vvp7cL+fa2R zKT9(~qO7!l^kB&KlBRxAG=F=VQz4Ft>z@ggB8A-%Q1EAb{;6>QL+#9A<{Zw%i#k1( zpjVIIw8p=eHE!yZ$K|O>`$bYP;`L}f;P8t%AT`SQoBRNlDhbXhy&U8NOeNrIk`zR~ z_T~)F@ByBxds3tu8TeM1Q=d{VTd8UuEzM=p6EL!9*tQ@$e9S{3JT3{;RVkSuQ31!m zz6H2<_!mJW{nsRdr{VQ$GPt!_{)c>6qwu+miL$?J6=^T0;L*Pl*{)>c2091=nC)zZ zsESpR_S{;dRl8~V`Tbp(2kZ2U#JRq<0-S<^3#AD z)_w;r=I5ojU!|+3fP3$Q#5tyy@E0BOvKo${L?joDM($_CGC0=UN}o znLSG8x@NvEqSRucNnN;&K1I#JjisKgtL=368lbuhPOIoFyAv z{OH+%D)>gM-*GutN`naW9V=ax8-yblc;$zT9B3J`L1YG+5&NO=dqTuEq{CwpB%=~y zIhz@+)(}}lppm_wKPs>^YC4f>;|;|hEiJPK9j)QuvN7q?j zdP0PEtAo_^<OIAh~A+4>(5HI3U;l>f+&lz&9HE-yOp8{PMg4>5m zN$jUsuocYg_;HJcYjjnm2IjrQG0>U*pF7PTWiqtu5Xygzfq|1O1QDa2-8tRdD@C- z?Ds8A@J$Rw3}IVI;0C#C^8o1pZyQPy!MUWxd}64-qUS?M=7y1IDF|2;9u1dn7{BB zGmry0#S^wXz6d8{ivW7Br5;gk80BsK%2}piJ?J-e$sA-toX%4O*b4bWchW*g8PLYk zYL9F1ZhVAdJ)X7VZrko{M-m!0{wF{~0(X$6#g(dbo=A43fk_NUvPoM4nFITADFAp9 zQocekP&wNMO#3qsVK#uTyD5+fSK>EG_Xut{e0)KT1i8z2WJAKVDFrM6`t zSLbUJLn8F$+G|Fe4SXy5zHVc_0qnjAthPxcI~&0nXMMi4ao)q(6XlVlI?MD;x#{FL zF*!+ottN`Yn9Re3O!Ce_!|trBNcqUo1-Cimq0LbP>tLV(aiCNiw+!h-;h8DzhDClt zDHV})w>wD${Jj8dnUNvd=h%N5RdJbT5v!4eS17Q)b5fb+c0l=dig?gPbJhC+nPGH$ zmAEP=w*Mu3vzeV{FEMI5{^?6P7dGCo%Ah`>aT8-Hat&h1WvpYI$k&Kmg8Drl2i`u_ zgY&H6)wmPzuGgxZ-ywPryglXnc?a*jpA@yT*UaQ1Jl0M^o^%Zijhx+Cee;h(H9Q}p z;of!+1i@BbML$UPqbKe*W=oY=m&eD9 zHPlx!d*4SbaL;0WxNk5jrjM9|K>0I!k3M+D1RA0ed>DrJ#1!U?Q($w2+Wry(vM{_0 z%4>NVcv+XbgN}K2q;9QruH~rSo{m!g&!#S&bC%E+XCLt7HB$lQQeBa`eZn#C6SmLH zvSFk&bTIlI9KUfdp(42XYTj z7D?WAo(DZl6HOuJvwmF<+c^kTelr@0r)<>b*itb_wHOas_VphDi>1O)z3G92iv{`B zm+X2`UL`XyJmAE#Tv|4_INF?&IM&5m7{H;fF?oR;2$%k|=VPi?#FA{Z4AdQ4bFHSp zLx3nR;%>*Nw91c4NVts|)57?%aW>B>%az9o^bSJl97{pQYZgCB;S8x1Pg%U_z3Bd7 z9T|4j00OsvSK6t2)oPdo3$64c5>AzRw4u34e1);|(*bIQNrRq#@{B(6!`-Tru?^QPqXv1R>B#_{sx&zW=xPce>1SLM48 zUn`-@t&L~YTh@l^bpFABGV*@zV-A&?5-^8D>`}y+@J*=q=;qP3doJ6KyHS94TAuFZ zj=&pu5FgCOwyN&n?f6;qbs*144?j!}!7E?-{Jj4QX0^v=o)UuAPlRXs8@;)gvl^p5 zD8yen*kPb5XsgnCZ5@4S4dkh$*9$w_3q5#1ZN(H~FLa4319XAxJvHf1!3|tsc%5&! z7Mm7T>5lD|fEK83PgmL3Tn1g2iAtOMf$^t9C{`-{OH1G59n)vm zyfNHRA{Oz9X(Rr2CX-eRQt31K?tXm(KSq$1M{$WDUa!l$|yfw*j zi4tl2durBA%hC{dO66!4*_Kdr~Yz``vB^^cvv1 zHKEZ>6ufz1Q{roXg zMlZlB-o-26ny!>#CNe6ab1o-2#9)0kh9)GZtm?MTPS%>IXL066SZeg$;!Ez3`z>it zqtY@Uh*wf&LJb|9jaaiJ;vf|yynzvUBEqnzWR4&$RudFL5$lC6D|2a+?Q&A+s}|0S zv#vMQfQSZ$pn5M-1wye-B#8ahDw>Fc>z&7Sjk8SIq>~Rwq@RTv#z-0byttwrU06G2f_s{g9gZ^v-DK z&#`{zXb;PL%-2$y1Me+Y{^_&$zBu|Pr}?!gy`(Xud0`9v z50ml_9K%lUq&1vjK9QErXWE1-vgvs7_nP3Op@Z<6#ObhV`YCXLioEts=1tZNWrp3R z8)};lTAH9`{E$HXTrz*UbrR#xpo85$`OL2Yi2CWhrSy&;s;;P+l~X&acu8PLiQyW2 z>Grw{Ibqm`&1ANdR?&ei4Mt&Lw{KwQDSZ6+KLji1lwSDfwtOow5s_bm+BdBzOy*M>g!$<{g9nzqa-)KY96PC|M=32k$W_QD z0?~#q8g{&cO>mJOs52+M;WKP@-0(%HKLo+55G_YO0O7A47ygo;lE_JV&!zhoqmC(c z4RXJJVyQ+p^W%#`&hp?8_w|zEE%l$2xE&{OTIW<>21mCMS8PnU<|Xy_;*JDpK9jbQ zl&YIrlb8@!@xDK7$Ecv$7Qy4uHxN}%PW3xZs@qH&I@-lPy~eiod};UszNgnMbrw+*B3vGU*?x3b5#NG{~X&ZwCMBYdXT`9t4E714kIXd7yc>fxr z!2F|nvhaNn=`H=$A^$ zz`DK=?GCkX2~RoUfu*)TG#z3BXY#*mV?VZnqK!jIrBqo{7cYvp+K9dZ!ie_Q~419 zN7n~N{#U)n?RM`L!?nLiWW%U^Fl{)2#lcB?-H;qE-l4ZmOY4seThX;#RqMvbFJmmz zP^#fpyOMsjW%r9FJi6WYZ^nH_FN|Q);O5?mrAG$98(FLZ=f zpbQzk_%?YW@Wlyy^<?Nb^X>| zTbiELHi^p;`RiE&+>1>6=7pjn`pzv%7d8c<*WRL2uL*39V&4Mf0zXz>mZy-hQ7qj`SXDisMD+_~po&tSU5|o2VO^upg_x4=DNT_-2Cu z9}8UIGHsc!6Uk3*Jg#)}$G&(RzH&%4OA1Tkny12preXR<)_Qz8i222N5}Pr-D$u<1 zlaj)A^u(hHlpK)39$oi6v&`2Rhz1$ztDQGN);w^s>_zf0==s6 zU2*M%WD(D}&EM*SlBC6U)+c|&iX_)}J;@9BO7)juq9Ce!J*lS66Lta#jWY*Mt|YN^ zlh$Dz+ZL=%8d$U0n9{$=gB=qBG zGiAo0VAe76Rbdv&=s)>by`5!}5S5c#)3zAh);rFei5v=?+`l&2N!vo!bRdFL6X6=> z%9zV@sw{#{>#I&#d(UYl4P3L*dLK-)KqY}h*R!`Hl#RhdYFqH%^HQMVAv%bh+10K2 zw$ncs+=y{>tS3y4FiTJ|LtO=kL)6WPru!qp{*!NZ7^M53WoVzYt_#kxO&!A8^WWk= zR4HCAd!dznrN@NlA&FlRAbE-!;Z8CFziLq301d9YS9L=pH%FEG|gD(rxEt{_zo)?zwntwe~>5!{Z zM^@2cn#HIW=K6ZT^XQSkK-S`2L`}r4t?s*5e4}|u+-dE1NT+!69^W@ok$nJaPMi@J z)ge2mWrhS?7KnBh9!*U#d|)!ki}Pjd?Hh&;2NC2vpb08m{Bk1WH-w}?QVqXl%U9vy zY3mI3@3vU8NL>U7X5x)m@Fn36Iv)5q$Wn z83XFo1~w;P*Dp{ts2O)w`@kgAjCRb;(mLQeh4}7~5-xFRW(ho3;uir; z0I)}Pi%*f4NLivUQ^IQDRy$Q`kKIHYf&q7Vd?WSPPG^vo@Va;TU~_ef&}*E^Zg+T6|m-VTbx z!=1pJ`Au>kj*z8435KzSuNr!cuFFLbTLK&Y0ah)BolUWA>eM6satB)Lc0!`A3}(3q zVhVm5OwA|@&?_jK>LBf{P$|)Ud=*VZ_1Z5(-Cmgb$hx8eW>V?sY=!9QdcIu!HW|PA z%q>8dlnJKZz262uJTps}6@kK7swhPkNoIsxjZB;71c$&?qSIl-j5dmla23pKAaL7ZvSDkEDW)8|V6; zSj#ZJMqmE6QV)Ywm)Q~=P`C5T2-z1#(W?H5qAf-PRlyO$Xwy6mkpljPH6zxT>p!=& zN>J68m31h|dyJYUw-A$bdb6W(e^(jL*t&T$(20%}JhaT=M~$a<-NrYwLH=1a2!1G%4GE4pd2Fdixp>ziN^54>7v%xruwftA1d zSvkfSPENCggV162-s^ArexfMTNHRd%DmztwE&)C#x0+c0R&s()CTFriCZgzHTMCX( z?^%UgZW=O+H?fMB$^jK%a`efd*+{z7qsU&|5?0ZOgpLx`%Z(!N&dttJqtTr5|LLQq z-9lQOJBFBuuAYpme)9PN|8{Y|=gvwfg6-4|IU2v-Yu1-G@N0cJgFv+~uR<=Z{N-wK z=T6g499l6_5CEl(R(^+|6TpG!O&jr{8=o^^O+?67vcSg6Ej9iQ8Hd!p)9nphtA4w| z7COh02#t+;{84KJ;q*>Y*%+RJmB3^c{yvv}9GS$-dUzmf0_{D1ao8xmREJRDO@Bb8 zmEN*lcM8uPE-(nu%d?-*u&BDYq<JiOIFS#_MvYEb|Xp?$y8X3w?R*CK9MIC!}6_ zS}}N90M@BOuBCsF2RH8M8)FO@O5ey_>utnef#H!M`J`V4NL9&{LTlkFCy3h%HfFC$Nc{X6@n~VGM zKj)gZ+3}^q3f{6*H+qeZFo1-MQd*2Q9H#X96Q%@>zKRU-^_XTMzpE;}f$t9pmeG}$ z;ORVf{WRF+8#w$IdryhBKyirmA;oN*<&bKVQE!Jh5%gJ%y}FhMI+K?B=PA5{6cow)O;CF${l4~|{vSl_SRT8?Afkdb&DrG~!_x^i|bA$LtJ^w%9O!?uNb%37h zp#tHZq4F*@mXWFs;3#{9YDv}v9zjPvs~|5?Om6fiyzBZ_2(-ABu}{gdTT2(H{9UiB zgFKbVWI;@djhAK%cHH;JQEL*^zbK_kyOG4!wh5R*^?-yBT~OThe2TxM?na1#owZRQ z7&1EoO|hX3XGRGl3L6AFLQp&`0px8+%=C{Zo&)SbIP-o0Bew{m=)R#yvILH4<2eJJ zg*~feCsvfF^FS3Vih~@XRc3w@p^a3x&R#iXw0+N&2?eE8pRPQ7_ zUJ7&9<S%v4XbCp87U zUmAb}H%eEzz!@Wc9na#Ca_NPcR;51_4W1uV#pEk08LJzt`|E-$IF6`|CI|e!zMBFx z2!8B|!@JG0M@k(lt`~pN{J%LL@gyL|;bXA#9#ltjCMc-pPpaONB_V=}F_j5wpUTTf z)OaJy`bRWN#=@jguWuaiRCbxSZDQ%%5-k|_anbombzIqe3_a{f`8z~jsvQZi!F$B* zEc!{o-VE!ep*n5{X}nt^(=CfA_CS|Q4yU>xE;3Z%ViuAi7!Vc{_AWeD3=g@@p{`eC zU1mR1>AvU7T}FquL;feic)_QthDH|oYt3LGm z9_XV21(Tg;!=L>KL2^|XIxZ21!@Jo3I9t0O%gXt=GIGuQHP#gTj?ck{*d@8<(k03Y zr(Hjrs8(@)r>bcCd4*Gd+}uS)sd(XL9+x8L5zDLty=2WTVqZZ|AAdte%1ES{M2_s> zDJawR^9rlRHLDO#ti`D$hBbLnvHnXH>n5P^oQSE?eI0zi)i$BlRSAsN@VAoQe{BQQ z98Q#9WJ3E8vyNhsNZM9PWltT-q&F%bu4)W6bA*0X{ix&p4mTuG+2iFHEm*yZpaIG#PoVD^p<3{iZ=h3$?>&CLQYba8W`p>xzz@MYOGsJ5brrj2~N zpQCNWXR)2^UzxkE5DLuKH|Tj^P{S2DA(%-OG^)B_7roH!@%J8$PE`3Wc;nD%h-9Z- zUMdZ@%E1Eq3fk|;)UP}mO>@ctak5JefvNw*{Rxri82sojax(70=vPQl;RH5$LNX#1 z3IZ03W_KbxrW*th7u79q*Hawj;D>9%{bd^4@1P5{;}@|}dcg~xk}@TO4~!m;v9gSu_o*koRJ(qa@>%dhnR_TSTimESM}A+x^rk%wIHLwqy_)U4PTOSXYLeYqJ|kpK12s;J4;Hdm#Nfvs z{Zt;ULocwq6ndYBYsvX`sxn9)2Lk4AKEb50(Sa$im~Dl@o8vqq_~vvW{|J5-yPVGz zv^e)2uT#VR>%iYXO`^I45x`;o`n-HV@=2imzwdgT1gPf1MZd^+YE@@#%XA#j2q;#i~s=_Z)9wQ z-y`EiZ=p%n`UAOg6xIMrboYv4taHRFLWo zK5>Hs@l{)W0p8B~L6c1O-bkx}TO-Za$epW5Ugi!2T9ueLfpHJ(X~3OvzZ_^*p| z(hijqO&tJ>RN4xQq!BQM)P}H(bQ`wZ0I}rJj-U(85onXpzXx&jijHBj0N+N0Ptgv! z6-Pd#CpkIW)&Jk`p(hmfKNDzn+c0I@1E_dn7H(e1ybzo{Y||Tv;58i0sM_2;a8sRd zv$Z;=9iTrZko#;$^Xh$q_8_-JZQNhL9lH(i?8foodrvH+{Z9w z0Z#LnoJio#1%xp{$dO`$Ccq5GoiAc?~tK|x3`NC=8RVg=w- zA&ddf1t1XNJB%@FEwcm%M7Duy!^DojTyP)<M+xTixZ89~hxCn57XIOfrzDi=-1ng5Zg*tRSKhvT^c zhZ#PCxk(ErC1-6t$xDfwNtapJ{nx+jEuZDP*j!X^>1@^0w@oxpv0AW;<=BR?*{V|y zHplmd&u-@GaLl&H#?3f_kWr`PJqF)7u<471%zs|Af8gZX8vBm)^z)&)B!@EDk4>H* zQt?DI5}0LTn&G<>SSnBOLlFX9$_%D7leTa)9+ETJ$(YqP$FE;4H8@dgxX`#wdR4Gr zX20FqZrz)MF;N!cA>=BqV_SIJgTVU0K2 z?0uVm@SR>_q4$2Xnui=IDPA<|oo9C33#(O0kzQSFZpnL562V92ql)oeDL{!m51X}s z63l|RK<9WTDz`mAKwa_CaM+Yq`N3_0yOz=ae*i;3yuW*scjaAJe2Z6Z%N?`1y5T;r zxDsCYefRiw8xxPT6bfjud)mOjwk-S_{z<4Hhi_sC6}4(<-_83m#)*dx4kh8 z9Y1>;$E>rD*Dnln8M9%g=Cf(dBeOAIU29vrRa(f3)~)r-nvS*Y&AzycyRmn-x_f6; zXX-f4?e4x@7g!@KK0%DZTsrqb2l6e2XEZ&bzkZh z?(=iU)z81^osr?!-a-J#veBJ`hLyV!PoWO?CbXXA-^g=+wV*NRs8e) zdjYGDEgk!PeEso7mR;yH0o>cNG{VJ^*S>0ImRa<~ffjr!5ge zWjGPO2j?JRBnT-*4kB6T>SzkO7v-U1REN6JXbjw}Fdr-s+l0YbG6wNw@YZ-8z8kmT zEqEROKjBRH5WYkP;Sr~Z5V;50OnyL8WS(S5jx3Q9sZzUBO3Fx;QW|AayC^orqXbkm zm7+5APPB}!p&j}$UCu1SL^D&&CMKDY*%R0@`w_Ph*UQnlCax9`vgexXHN54%+h?zR ztoZAH#}Mfyy`^vb@qQ1j{o_`D*8e!bG0u@s1Fdv&6t?iK@oA`Nb~Oh!Q=5ZkK~rja z&9O|8)v{KOkQd~loXDBnkx?>M#>*s`B7-tRX31QcFNQ=pKKn<&LRaK#CX{Ts_mTK3vEPXk>qrO)6 z8RLygeZ&1^AqvumPEtTo!|Zk@7pmdzexx3ibqSUc5*?G@UA?Ssw`r@-0n zq&Wqr>zdtNZk(I(PWCuY^kOgb4tN&N?oaS(zS7_6BYsM-NgxO+0y7u}2|+Ck4v&X$ zs0@Q)G)#qZs73ciadbW^i;=ihoE;yJi;}IAWl3y;CfW4hbWwUT)uqNXKE<-bv%MKF zi_P?`n+x;&yq-VG%R9@fBiDc$*MMkw5_`13iEZC;$X#aQ8egkB27#gh3R+ zT87s>Ay^mzqK*NKo0CTb+2p%AT5C~)Y+cf&zc$vW-@}uBy5? zqPYlH;{Fr8mG?Dv0CqceNNl&@8?M21xB>UYAL7OxNUTTT#6_Y_elK~*F|tEi$tam3 zbL1Y$QY%oO+Dj$r3-r*B_UN46N|Urq-=YP2%B(X}Oq+?A9z!vCMthvchFBMt%?3e> zkO5tV+)x3lvo5y*=f$PMLzoGRUf{ZEJ_}! zTB{(!O1y;F^vOPWt&sCJ(=Br>8S-JpA{pOs#wr|Ln&$V{+-H+Y7P29a@W zcB%2B+}1gJeyjYL<)r1q;_cS=O6S{tC_m~LT-MVzGskHRjrC#Kg$k|9LvJF_*8S89{Ws0j655(DIz;%o;Ntw@c zz*grv+{a8iY^3!$gB$u*{LW3^;z@7$I*;=V5BY|-yyN}YyEG3v)No=H*=Wb>!ivJT zF#cP9=~w=~KnbRh;s&CpXb^qH7?Bn^Q53r(A#RACw5-IGG?Gc$AYszB1m%!Smkn~V zd`ND}FDf%iw6a~H6ZsJaT2lK7r<1#~m`|(I8rF{0 zuB^6ItTNTEeNEClty%qE6}qqrH!XG4gLXF2>2CJ{lwfNR{i-+g>nO8z3bUy*dPB<_ zcOz-EjG1WFWhv4?J|(qjUZt<12YqF+h`qrve+1g+G)?M;C zw`D0-_k__!i;O)u4Z4JxgO41>2IijRbxqvq>hSd|DQy?lrlz*eZZCX0wqbK@y&Z3> z_RtR5v@P0YyJK(L1zWKld*u9=!*aZx0H^A(j_y2h|Iz)>)!e41c|?!zX}m;F@d9t; z(O$;OdO5G?RlE=VL;bb>u}}L>uu>oj!e98{&S!HCrv!@ex>yakw6+d$q>U3H@|(B^ zza-=BkFA$GR?}KryRWsi5@P!SNF5@Hne=IQS zws_dl53`%4NsHeb?|6p+`qv7eVL36Li=-Wd0q)J@(IxJ2fbz)j5*b7}#d9w^_kC5Q zhzL7&pYB~}0?8s0B#bFQbP?te;ON^s*{9U&Bw(bWdwJefTC2~a!;;Tuheh=vBZCCJw z+J{#@lDgNC)cg@e-M^Cni9|%Xj72Zb|;sLoG7Q&^*u6m?M>!Bb-E(s1km3FXxK3Q z0`XPeqCtVA57B*=yPtQh3s#zk4r4d{{q;M@^m8oBRm%5EF-YJ1YP8hvF!M{a^Xrbd z|H^pH^Ny21Q7m|CO~`7(YQX!Jcm=Xw8HY12CyH`BPFz2V@L!Tf(j({dLDKJA4oMii z)p&f*X+)1B>>wI;lFhShK>UXl`MEbUc zj8G5pef;^qpw8LZPoIv#rQ(%bHUGe&AXJ;>za|6puOAyIHP&F@SLA*B*OS&B4V2hs zi;*d#h$a-9CR$|OX+6{%C04(`zubspPBN6x8dEN3qA%8T6Ny3!6!Q+>;VH^h4(Uon z%oI5JF-!vBB=zAh_Qhb0KlR@!fyMq@xuWR8?~X-$YL=K3BS+yNrnkY-!6!MecZ}k&Y|4nC=eR`SMeBu zN^pHI)-aYLLd_LtyI>X zxGvqUVj~Mqv_4MU)B!2=8^7FC3YQ%TSrx*P^8yzT(__ zKSUt6hV7~K%$(dQ(oNy&U!?p)4g4}5W4po0VNgL zk!~1NOAZt&QF;d8l%|2_*$T?qqqEMfU>-Fw{{taM`rK!VT?Ge|uSHj~+U)?nH8D;o zP87zw9v_h`pOENnc!bX~4*DJpCj}8A9O!9+Txt^-Ha<=O>j=nU5#}IYuA>AmQ|XqY z3I!Ma91t!0TR=M&s?vRVjj~%IovG9Rs*&vsDC zm)MXEGiPT|B9<^e9bCf5|8|l1cqdO3V%mYwi*T!R$7tTA31MXQ&~wm`ubus`ZUL?% zdT~Z=G&%zKyo?+6$~!4GVDHJWN)T6l}sgi-4c*N4p{(0BX`>sJN52IZRkSNfZF7 zXA+-E;x74<5O0*pIyk@*=H%3uz|7@jQ6|;iz3aNeUloe&9(?;SyND$uxFrM2W9wS@ zU$2v}4!rV?P(Dd?4RtGMF~C`GE=2?H#0coxHd3gmEi(c9L!uwY5DGjtkN&N}%^8Qt zKO%A{aJT4oey%uf!54z1O`6`F2hn|IoX8ifFn`L#Lbxv`drU%1oi9%2A=MGUermVg zcwoYCUR$1O)*&4b)~n!v4|I-CBKF0+d7uT`1ftGcN>=}HFnqg%&Y{3g0(Ce_)NrZ7 zQQ*V+@`LMe%5F}A+z0ldve;a0&YQ^2z4g`#J1*PqO-b99Fa6u(EY?Am*V0n#lBczm zo15*8t2Oen5{L~oQtM8rb6Y$7Z~vp|ixr zUV-^<5Ilund?0T+%6G~~=y2}dsN1;Y@XX$kUAiWa1Ncl4P+ z4PYYNT`O5L0Ds-?LJ=X<((g^{>YYIF0w8$sc!~G_m7`C2PtkB*-*s{c*;kU_Eh3yk z9-+cZ9_(F09{pQ-%5n^pD1L65b%2FW1`B?E0PEO;C z%`V4_e+^@i?>)W{fBml`sLmwe{iTu7pmzo9RW=$W{m!Xl5-rD0CCgva*C5_DRoF#K zGTj6{Sp0g6Ee((GIrKE4pZDN7AMnWjI!E}%o#csNdEQvid##6`VrR8db1D=HnZ1(8 zG7aBIwhDzP70Ujxyk7VlUGiwzDkdEyBq=G)yp?k~o)20#$tE=zOL%OSqj&m0Q4gql~oNy^EW>b z7L+H6dL@;QV%4iCy;4IxuL9Jx46V77AFG=aSPV>v;1VUQS2fGfrd@tMM0i(4-7H^F zw~Eh=KzHa?$h^lgw9ei>G@z}~2qKF5zJMT{{9rf6zN`yIy&|Ye3T{uicbAfO_ev?W z%Z_-u_p9Z^PdY#^=RI%)pNN7u2)Yc~iq}Go-cEdYe>!>HYNMu-aIyKF^lrv!eq{Pp z=&_erf6F6wI@y+3@7#_(fOt0f?y1LcEXON-yuzW%Hs{twfID%RA`N2~MY2|W5Y2>^ z6Q8>_?gQb7LnJKfSS(h2;LMA%?~Rcbstd}KWE%klbp)VZQF1(QO;NYe0c)nT(sV2BlMe(G{ z{GfLnyGOXd)BPeKa?0<#Trxn|^9;b?v9>o(y-Y9hnWqpC1;Xz zEwR?0Py0?*r*a8{v^Vi%!Qpm$yk#labC9d6;T`PYWCRDfvhk;)xep}TeWh^$#}P^T z?T)0i7PH)#lX3Osj&z~oWK^9=nlTD9h`~?wX2>A2C|3;hI5{-gc{8?q7%vn5IszBJ zx7MFu#^mP%R*wgbsa3H3W~K&Ax;(+|3>T`13|Wmr3v1h`ue-xMlLw!u_ztex4v(1n!O$eu?CjkTNDWNBa@rBKH9* z06i%M-m>{AE^&d8u){=sHQ(rdmrem4HMGBe2Ca>xGO5R&HM_wB z_XUd!(tO98E;uD?FcdysHJ56+(o8LNnkF@*;r7%XKm)``7Hn(9zf}Nr+&!T)4*!CU zvsG3gard{2Q=4L`cAPly}-Tf+}o{WVbpisaF9tobFWJ%I@YHi-BBTHW8ZLc=s0zSAlYOoYRFOG2n0AhN{?&PXK+e;%tA zl;#qKJ+(O!0v}-AKjdnM*aJUsW3>`OmUg`Icx2!ucVG&;ald5PlIaU{4`FPX@DmkP z3!hwnt!X_Q%v&28jyO;Z}_nkN=Bb(hAnA-N`yuf5MXFb4|f9n)Y0U*dJ+0 z%hm0C-1y)(MPKeqlG%3wKzhd1Z|{*>QooT)$qQAZ#oFps0nn*}cDB#0xy^Q#ZYQOI zKx^u@<1LMMBBq4YF({dQTWlJNDDE>?ijMNWH#i@DxQO95Ca zPN*i@J4kz&{f&|v6qgA4Ha>jcqQU?4LSp`fk^no67Sj5(-tk0p)JHTrs>>qlT-J-R-S@PH4So> zXFdwBPCv7w`th8Z^bc_(n8_Ur2nI4&yRoFB+^jw3qNd5kO_l3%87 zN;ErxCcI)lCZ08IXj)NjG0ki=Z8%|nQr#6t_52y>@5A4tY2Nl_^4&>3an20rSywvR z_~)hdz^PHlsWFhd-2j~J3b73HtU0)bnNz~x@2K6)^!Cu<@JagZhCQ79^&7$pBO9z9h< z{tp8biV|XxO>)A^ydoOMbd633Te>B~6-f|xnw@BNXz4J`8ZQ;susqFv=X6OVJ99l&L!3M#s@5rgnZT>gbtWAh1615}z^7Pu z2%;sv$?>4I=rIs)Nl#Ge{7Lxr74NBC0O$WH_+`~eb zxL^(i5tSoQTa!9RddGR;^I_)0p;D{j)vDOeO|j~xc$UEmLh>sIC9~>lDapR!B&~>7 zvXqVQhPY#|rW@3BeP@bZO);qH2K7TF2o_O?L5h2RUw}$v6Dm{cjT*0Z!G&mzfguoW zjKEn9BD~FA@C2ACb&Q|x>g%w866o*vQoX+Wxkfk z+~_2;k__U9#JgjAi1%N%F@973lt#PSy?Ll0ymFw^rfe2j!(JlCAyX5*vqw6*ZN{_a zkygCiBv^bQa$ciV9!|xK;;?L@eB}mV zPGK^;HU&6#h0=Zn;6=!t?2)jmu89wS8qDL<6Q!)|2+o?0ffp&EVfTrjtB?L)#%Z>3 zq0D|94teGL{V#V4?jLX3ykeQDKE>`WduRG!k`OB)AvEglJq-G17%pNe{Dg(GZ#{2S z0^KZQ6A0@a=JU(cXU|mI+X-HvtUM1f_$22Slj_}MI#eNh0PP0{`5ND#$br?LO{D7D ztHtHCT$i>|zi-;s-mxg5)2$+9`JyqKB!i#@a|re9B%r)|I>eN@^xnD)d434<^0|kA+3H=Mq73kh7{mY#8VknEys~4k z*sq(Fu=(G=_*lwOleX$7^H!_<&UsFi7j|n3t|X|WFyt$r6@FXb4fx#?r%ikzd3nY- z}KP^)-I}`k}^o<^CG?`gjBO6t3e+|>9PYXXVX+-fn8;&^M3 z(4>amok%j?RI8@x-~M58dFk(a)OP;f4EZp-o=pl`J5XsaF1>L}f+<%+ta=KCi)Z0S zyTAVVVDiU{ELstr#cHXesb2m}>Sd}@IyxpB>rF?P zp;gB&^u3?Y{z2S=V|PXhlNPV!Um#1l5dTEfq|*~mQafAoNvdicqk7_*=Ac^RRd*g+ z(F-WkYGbAcN?N-wMrowFt-&Qypn9HB+urZAK0|*a1)Xj0lY&mqY*NtQ_kPot;(m!x zKdjO<@R2;#_eiik^&E$)A4wL?CwZOisU)w{_Xf%9?@M*LU%JNBZgugBBbd0C`W8-~ z%i?J~8nNmMy`cCVagD`Lf0>dtgtWbrhdy+^H-q!aeM<+pGj)LTmPDRyzC?J3dAvrZ zvnY)MO>cO9(Z;m}=RPQA~+#FQ5a@4J8i9;3p zxq^we8_DSS@UQVmiDZkSe!?a9f?GqiUa0`Uy{{jcX1Q4 zMx_qf_iFuDX%yuhYB*W4eHl3w^Ij<%shADVQ(Iy4oxBrjX8j7Ri_RpaeX2Ap7p7_? zdAh6Vuj7x=XsXUAh#g1^pFOFL;by2A0VGCK1Y65oH1GT{j~Evwxf2k8nn__NCfF7;$Uyt^&u6Awc|@l#BMRr1;JoBTK9vS?YVdabWPw7cI!uMHo%6vvQ& z)U|hM=hwd0U`1`5K&Y_P@2@2+qjxV+{nzkF_55(485ftl9sY^2yS@w5KlAtt!9)I>f@BYA5C`$EBSDab=@`eH!}Pgl(lMZv zv-T1qpI@iy&rUO{O3|WwRxIOId<1wP5Ey`12^@CWaGTQXcocH23UDeFDr`M0-g*vb zh(}3R3`u+GK+Hogh7VS)F;h?oMKfLbwx}Rn(#?iT;C)cD0jya!P`%OgTwB)1X&Onxt&$C*a{K`SimISQ|MXs8a z<yi6N|6D!9|6|fdJk(06(v63x3El>A)S#90k^$-=?Q%(?M8RX{ zzp(9?NI~1i(&bBkN#pbj6+;htC9xiIY zJ<$AEGV6HFUMH=ZT&y`hYdh=J&uTecz4>}|-Hki69SfV!rjsU#d|G0;{?m8g|CIdI z>x)E%rX&GxDO6V^X@TrO4bR0NQj=4z7cutRuj6-*hcw777d^pScZ0Cckh9+dtU+TN ztPo#%4QG$Bj8znPK;4jVPM`_neVF(jdH0d}1=D;NCn#i=+VwVJ-G**e_k47j+B3wT z@SMZvC%N3k0!aDZxTmtG%b&f%fr^SlR@aZZq3N+a&`yL#;f+dqN;tm%3_QGvAb%lw z`C3v_Ni4ERPI$90!%xg^ez3HGW;OdYU$!OLTyDqaARbL%Vfrx|G?3@VD;yrV4aAe zLXqe3SLiA{uN58@a4H&n5k*C0SBHr%lBhSjk96|!-^xqXM~I@d$WdNkVo-)CNHl-F z#{>7yRXwqFmVe`!aHD6{VWKrN3(ZU%$}*Ew%g<(dl^^Fp?ZLN)pb9!RCoW&pot>pa z9#&dsSMKy(LJXPxQkvy$w=#A7!K*eWxR;-c9t5^kSgLmIE7Gw_MZNJfN3|I)Nx$;eZeJ12dEQO;JKi^>Z%Zy;=elqvY53$xLhE%D zteTz_OqSmhdjH4SsShbSEHq5ckV5#QfW(=uEn~G`E^o8SrK)>K0#1cQ&VGsPeG-Li zxShuowtbV{*RS~#oShwIv1vA;xf_jLn1|2KhfhWAC*}e$O8o-Ckv~(5&(%+L>?67a z^1NwYM)MRJjd&CF9RJID-yylq+lq;dskFJR3UGQQa?VQRo>9Pq8Xf}p8mFt$<$p1C zXMTaR%U-s;GJDWGgT^V8QxT_iKnI@N>hViw_pRrpmj}8y_>XN*oW&Rb_h;cm9N$6F^TTo=Ri zV)j0{!mO(O?)=7;FITK|Uf>sXUe2qr;Z5-$ev@BK;jptt zYdYO>c)8@sDl~E8rX2$*9WxPsaNEGu7b%H>>W)5v));`Tb?eJ_JUsjNe4JZfh@LkH zrZt;L^YL1P=xcXZ>(n}*4cmn~XjH}-dwCy(UTqgh5H4zhGuaJw&`!3xyrd zt7evwQMmNtD&w<>FROq1qe_Qv3f-N0;(ncen+;jtuTFSodFYnVW8a7@kkbtmxm2Vw zAMlX#J12AImP6{J3XFks**bfz= zi_tde$pwDIKs{ zM0M)2+BiBZ9jYNJCvsM(6g>NInk3qxIxgkpX2W9%^b}UTX$!wrNK&;Fpw5q`xC2JU zuFYbXZ6Uc!Cs2n69tvl19e|k?2Ly)gKfC5yH~yIBfWtnmZvP7TFRy4c+@@ujFK~_6 zRGRlc2h7ZcSjIYG-jpC7YVEMy**lMy&pMmom21^D@|6cQcO-{K{!$-N9LCgGP6}?S z3eY4nqa3=H$g)xV%D0f{DneElM9u4|S->d?NC{XHNK2LWO@%Tx3Fy8U64hcv-k#6% z0kI0lG?p?ZJva^^U@^`0yNB+I{sg7?nfJqQDM-OUi&@TXjixWc$fT71k4Nk+*IucaWB;rWLmC&yK` z5e3&v%mf(zNFz<})f0$MaO#8VE`OZa_3;Vz@;MrP*w~t*IdzJJ%?#IY&HwEkPc5^| zD2KFwfca!O#t=ZTricMx*&-6^SG53of+HOLW>?I<8sh?`P{$vm1@>4iw!E%OC;2TN z$o~zPEoz?rzm~jp^P5~Utp4GJ#<;24kMpJ2o{Gua2R@uQ)u=*@C88laqveWno#h%j ze&uvHOfckyV~oZp%pbwPp(cy58Dq#VV$58$kVZM#@BUoD!sgi~eMoclzPzf~ZJ0Mmew^CtPhUdOX$;J#DZJ=k%shT zDinD0GiZd=R`S=f)$@rQuE;CsJK2CL9VLHFAxNj*|8-2I*mG~W7%C)GmaeuBF#=Zy#on;xA&tH{o=8SrHvZmAZ3Q@jY8~t7h)A>w zm#!5iEiSd~kNwUY%|fp)p|c-4s77wh82Kv>K{|JKj3P(JKWSn;rPctHg~$rOl-n>w z--vb1Ruhi-Q);V@D|+^tQMSdQ%vuV^ZD@Jn69#L(`7j9}_vbmCJuInZfuT`diNi9J z4mo@r&lZykri11kjD7*QmfG6lI^fwOR#H~3WfRw9q0Z*0;iCNQAVsVDN4OsaaqkU` zkc@auM4N7ymXI2)o7(BPt+@LEL+hdSGn{U-pT@6USiimGin75)J`4d%rB%yR71ZB1 z-pY`v#_65llgmh}Gy%@0qOp}`19`ZIfjfkg96K%e8d``)y!89G{2uq8Wj3V}Yfuz` zm3pzzilfdLZR41J-LONWolLQ9sp%9>hvi_6`mXxA6qAP-GTkJ7*c3F9`a56@Rh-u= zpcc~htHK$kAmKq3?|E9@kN$S>>{Hua?I&g)$3K~X!`)v+Bt(WYU{}i;A&bg&fdrJggCapdQB$-U^3H+au(Dc za5T14snEcHU^)P8dou;3!ZB^upc#O(6+X@kln!9f)_ zG>N5=zpO;dzVMS@>CbP6DF`4*hK7YcPNr(EhHIkZx9q#_Dgw1C+{!9R?xVWuy~AtS8>o+(u*vvtPZx) zvz)*UlaJQqk9FFuQ|Z`w&cX6Z&}T9GQA*VL%^5ox>2I;a5rJo(QTY)k7H_S34*B%8P!dv56pmZMHErD!7Fo!zvCt22uKa{;u;3ALI>tx-Lw6g4e>fLp$4}IE+uAwwV<(iNE>xKU=T|%r1}xG8K9LJ;eLaPVt)#p zEAKgkKcvuR5@zHmW@TKMUx7Ds!XXUqXaz@N)%rEKC2HWkj~HKBHVJB17+ikJ+~vHF zs=|pz;HpBz8X&87>gXuuX(BO3?Hza$E*^l zbKCG`OW@XqG`;<%eal`k#8x?11d8Es@8TP+7WuCIu5>0MoxOkVx?E;n%)AsqU&bjz zEZO?l_@VhqKFo@3{&LM-h* zJ4!J9Svg`Zkvgwk3YCgf)@)oC24Cck9|t=)%Kgw*IYxA3LZMOGxN1y8E3{_IR^SX4 z%D*KA7gm5hOY3tJs4(;Nj=pgBRx&sysZhYJrUY19HfhfeDk_11#q2|2uAcrBFE-wz zI^j%P1y3|;JKL})dEBT1?`Jrd^lQ~xG&_ywrYPjkn)_Sz#_z#vPlI)x`S137V&HU% zxbe=rjND@L{fe~!cWrQrg;}oNF*IRs!kMC~naj@UrqnXgon|^FvV|G>@GLj_(C!$$ zsp5CPsG|6{`(=m{Dj35!KWefk*i@~BHgiS*0irUiA^muWbsnepv*ZgEGrP^1PxvQU zMMhxyKwt~5%I%=|bP;@`_J)eHR3)m?TW?OXd_8KD7 zQ@gigC}x;~#7F>JV_?_F2*)Pz$KKc9ZHXM8O~&%945QF>=Ru>H*bwEU5n8f37|XwNpYwW~u!{#+Y2b8g6FrJSOvFK}q$Vbp_LyhJ5|9Ra7dxhbIA?-j zUTV><9fmdN6i{$h(#JN!Y{G!x=pbC|J6+!*iqK(aWVhYX_4UxNe?+>5R~ftXkjc~b zGsHIR2;;F9tUQFNXd-_gw%VD^yU+_Yt}#1n(g@h8rj!nAB~@_PRzT?%OqfO)5ANVP zkgGOAPgt#S$&er!@C1gSA!HEr^hA2oozSUBy-#M~wsHG;6|IIrr>F3nr2R7cFg2u0 zqD*`g-r~wVtenZIXXeqC%NCy)`UVe=LsWODg%g#+Ry8}uk#56ww>46@^+@)>Qf93n zk$#{u%4R@u45N!_Q8%fgqj1k80_iXJ&qdYYP>z)f?UH&O9@^0i%uE2Bkmma@x3;fg z+@4FCPzHqPoT*VNlcb_PFE0~ps(e!r4y(w4SB$hEtZ$SEhwuh@*@}-6Fh)=ZDUiX+ zV;0`eCE2LOMmT#+&{M1v7OyK9h#iA*+`BSIS9MgegD?@b(IPkTPPC>0KId&~v|niC z5qsV4%bv^m3#}QFirue8dOl*y#?swuhE<;N1 zI$U05;0eVLr0|#-UMbL}s!`4K=eIQPk>M48eYh^Kw|b^VuYIV5Ru1*J`+$F*{k5#l zLM=L?XAJX#*_32Roz52-LeZi*X|U0j=wzL~y7?<{AeEI=HqFr5!UgvmAK<#F*J1!T z%i<|rIC8E1I>4+J*rI))3_9&6KciWVJ-Bds?6f+w_P;vG;N@AV8_x~zdP zce1obm}SG9mXizv+>^8DtE*dDG?j>r`6C&O;a7$|2x@~fHvuGr)tHXLO&!GjH!1tG z1`z42)?n!E|0cMsjYu^5-76x1@W^iX*Fo4OrP1p-D?I+mSPIXxBs{V#l`7(O@oH7ADi9zMeJv>^|!xzyTy8Iw=g9%G8W9G^7gL0#FU z*(*#WB8T5FjM2nuMW~;QV`n}07kQ8anO`JjqRTE)D68gT4PD&cg`T&tw<87%YsKwD z(ytvkUKPi}y&EW%k8NXOxj#U|T`ERt@hhIj09+m!d)1b!V)=yTu-=N6!A%jZ-8V3m zyA&}sDn4aQfTHYEBgdIY4Clj>O#f!R&Nv$v$;?q6o~OQel}?HjWYf2r>J?w_u!dVw zi->0^yl8!RSx*nrg zw%E+hs3OS9P`&ia{l(RRC?Gk=6vY7M%tIn8`nJ9Hf*X(lDVr>L74M){0U3ze+f!^s zrPg``i-<>%6(P#!frmt#GXuOYu(CqyF*pXW){zNzbA^mVR98bQR`K2^CjnA5r?FrN z<2Qmx!7Xo`uRCbIsh|D^ZED2lTP&)ATH&o*mINUl@Opq5CJa7l{`1iSj~7RSryuXHlR!B@(MgKnvH$3cuD z?!%H6E69g6MA5kW!1mjI~ zr~RI#@}~xlTYmhB(aWc5>Q8njG^6ysh%yJ6&`bSlzQRpb@c2Lm-y#5{jrYi(5B+51 zjoW^QP==HK6lg*qA{^Wa!`*`-Pc$vyb4QJ}w_SD&WZ!UjoUwCvjG1M*&H!yngKe?= z-P0?}8fOE!v}C-?HS83>erpxX8mC51v4wX!M!#)F8?nZ?7R5UBONS(XEp*Vq#O0Om zue6Cz}X5%UO;gZej23Z3?RfCT7ZEn_O?_oM%#l|r83x5jZd+M&r)M#9bPCE7| zyJR<5cz}B485;Lp3RFGUD%zBtvTH2JHt$z_pAQ-;o0V1!ekJ2=tR{MC zE;|m11{Dm524mV4Ug9+U_#DgrzOuaKIe*t|3PDPiJOX zZ}x@tQF2)Egbh|^FnNuO*Wi|?YS6Am_kw#p9pson3Nq+P3vJyaAbz`~A>3b{ZRSXH zjeg;(hD(G)ki&Q6V(s(rrCb|(w{g3$)x$KEIfx3Ha#Nla%r`YMx48Bnl4Xi=f zrt#TeX0Fl>`!$#vbV(Rh=y)Eof{F}mQ*p5LZWsZGN(ccNSjp6lF;7FMWbNF~S#jv{tM z4_}3}X3iv%8m-DWkorYb8CX9jWa$_kTSt%&g(|8-4 z`q2E+-n*guRdcQN5s&>ML}e#8*z^!I6!Y;X?u1+-BXa7wI7;ebcf6_w#gIO33u&%b zVh)2hr#BN7HTGuo(J>J?PEwP`PMM=2$ot#07`#&csf{K8obZ_~ktKQL9v12j@U*Z{ zQlo`ozO}=v;((M3K#C(NY_;L9g(A^;u;32c>iPDo_Tme9I~3B!@nop&l8RB!zz3c- z8)VRuQxB`0a1y*V>UwRkQ$6@|*Q*UnG5Bxa5x+ly?p3iP5#A;r^b4Q9XQK~Ekz~!4 zBUQmrOUsCDDT_0tK*?$|5u-YGZ~(8DW&rMnYnNgsK0e<`T!k`CL8_viJMlDRIb=-s za$qULDo*u%Vx>_{TQ!mK_Fd&nDe-Fl#9fxv{CeS4PxTzi9Ar;j@-OW)XJVIm*p=X= zQvf*9UWw_>#Y5j3b|WR1+<58Lq3l|BP5R?+8Q*2DqvT5WtJ?WfPuKn0tVzST?c0FfR_iYGlG#?w`RB4fv6#VxFt1r;@LO$=+}F{I5NJ* zi&^xh94R5ibQPHkCEw^HYG;ye!Va~DkL0+f200;UPe{`5*ivZMkGg@WveG|sF~JS<7!LkR>tyTy`aOED(S>y$3_YOz#VA~Dw48COUT z?f^SL#J{P((RPpKxZii4U!CNFTFis_J;*I5wbbC0>gAnl^y?%t5|6hp#qq_C2TVjS#hEZWl3~mtLa=?LQ2g8&^>{A2J*!(m4@9! z%a#%vDuHyrma6M0Y`!gB8#pDez6_0+&}&%b#ie+^Tq^1Fn=318VVF=0JXx#v?v!$f4hEo+V;K2Y_!%>q0P>#%2 zk6{M#_cAT+SIGhqBdfn|hfe?Y*6<8hWq^tXQ5@<^rLEDS>!AzruKVsJjn;EjD z@!*>qv~|}=UQWk&MgXH!HAEFiu4~l_$Xg`Gyl3A9LWvVU<0HbnA3<;GID6e14tXNd zNrGe$f)kNWO^t={Q=Q|2HL1hQal@VU$DL+ab_+@*qykKZ{D5KK4@e1Imt_3Xq#s#0 zcr^VX#DDvXvq4F!c1WFr5>eDaiG;My81>#fvUu^!+$sk6MEBEn+DH3n-!37g!D;MA z)G&W+?p2c3A>*>HKxv2uNhrTbZC+yqLRG?B?)3bdyC~XqJERTS%p30NpoEdmK%B58 zP?nY~SN2=#vD0k8IF*yf_#$6mINjj=+(s^j6U6dlb5{}a4co9goe~IL)*RH`pNH3K z4fDyIgJ`;`%bJr|60FQ8wLhHAsx`+bjE0-#LO@b8j1W^0s%;Z9K&+6~Gs5dH`L^sj zY0{>(0~MwJn2sOUA$XqCd>oL<;T86(l{y7~im#isMINEcnrjEWIn~YcNhF(gdRr!G zPhOin#uNsCx1K+rL;Yyfb7B!u*7skI+eS%*KJ7qb_!I|doJd;Wxx5zLC8|J&uoe;c zWdT)8N1(Db!6EySwlX$_0uP0aLCa!Zr-@&4%45jd z*Y2k)dn=IYaFv0`1ag-K8(U*EnL-An0V=5{LKiYB--NkR;ke!KT!eLk^KtKyo zHcLef$uU^jiJx?rg3!YJ9BG<_r1cF>U}t`d@EB6U*Okxj!p!`W5hSOB%G^?Xzs$|Q zXKX4n2q4GLgA&j1EbqSEwNIj?Z~8rrRSrU_NG#$C`I}Lb>3^xR5Od7ounaDxRAj&a z@?#t_HvTftJYxei3$c_b8|mMJ$Kq5~lUSGlp7bPfX`Sy>48lR06)`x1ha!n8Icdd* z2u>gesVuJtYQRinCcdWX9Lmo}y1OXo;bD+fu4?{ZAHp@1!1ZoN!*U6o%(Z|~M~+l4 zq4p+{^=id0!j$2TAU8Mjg;7wbr0d7B@cse?61(m@JD0cchId9weSOAL>`mTNezH^9 zp;o|jlT2KMl3G8o#ow@p)mx|4yR(i)e*L}r;LwliziZJ|{qu#RnZMENm>wAADc}tt zxk#lF^jH?^+(w`0+$FuD=l)i5{nsoDyz!ge@XoXd+5B5EdoA4_s@3H;*TE7Q{pwO- zFFjIt)e;%wc>cE%xQl0*Wm=ULxavc_P^(?sml4zqUTwhrgWP5q!^iO-e|m7QYYOz4 zKzZF5_qxe{Y_%1bdsbbWe1iEj^T|DHvT->Y)}HzN&ub?a1h%|xugUea3>hx|5wmz0{bLfBdD5==d77RRXj*8Yn0-X>*5^#-AJP86 zlxvRIvXaKog=T_z{=7YD=S;4?=`{svbyN{f*DAO8BPxdQ7wORC!M;N?3XOL;9BVP0 zJ3gl69I{mDajQ?gs>6$SIByR83_e!o$g~ z`);A@#|TF7x%YB&&grwk6ukJL6T_o8H-(C06Y%wS6<^8qXyQ;izHF?r5XZbP3`l|^ zKEWn!!At(z6CftW?hGPdng=1?Le#ukZBTRW3%>HE2|7Ya-vq&pi3scbmFhruA+(6o zdq2&ZN5HtjJN@L^wNpEpN0@hxEI(*TrL!QcQloNPt)O4l^pQnie{wTuFkA>nxWVi~ zL4-ZBC-bPKhM>ApiVvKe!UIwY^_+8~!mQV!xOwRtOIJ@}qC*MSeER4UZM0|0i|_S% zI$E!T9(J01`aGj0NPq35qFd+&`l;Mu%o(r8R4?hUETR>Dw&(9IWB~pgK-&TACA|au z`GaA;=hXa&x==?rc^fq1HM- zmzaeui(aCo#nQp<7s0)@87#m?4|Xe1QMv7lg_T#3Yk5?sU+|&d58kVf*zFxtV@^Ou z&9*JgDD+j$V@PMccF!yfcQXgj{&4X!A9bRsFyr2KZ&9Ff-qC@he9t{SV_s*iR{$eL zAF4tDpzLUR5579#}Th9JV107-nLsf4XH5(xfRzBj)xLMV*>~p=hV|P*Abz<7|h4oO7m@N_cn~Rc5kJYStNLM zqZ_2xd+~_Zi`1Ppp54cZqSn&D1Z>)kd5lvFOuKLA6nPADQPdeY>qR7O#n@gl_~Q$T zvsm#Lx)f*GxTl8GIsbGkd3+#SJ}WQ7enJUT*&b~;m`B|P4G_gz9}Px*c; z8RVNpP&h26MYI)MBP7-fqhx0T1OG+ammV?q3#zY~!q*NMN8iJ}JjhM-+IN#V#j-V# z6-)pvBi4~GZN+ev+5IuG4VGG~NS0EJc+mS*dkQIDna4uEr>S(<#nU6-xNEDf zEFI3b86@MieE80hHyFapPt0E12ZX%e`VM0^czQAgqZcZr<<|y4xy}iJEY@{n)`J4lZ9xXx?AfzJOI4&1_pQ!Y-XWN z;mo87)$WM>`&@H6~NoawPJ?H@O`$G0Py6*(yEIG zezc_6AG}O6ELSq1^fUr?)2CE=103A1W=Fz&&0e@#I(YHL&tL9%Z6iJyap!Xqfg@OG zhc+_7`X{ddTZ*rG2${tXTY(^@cma2O$FvA)`mW_iT!d$g;=qLaY>2`x)WPbMivYW$ zr`rxlr)!i+ubGHuH&***yxgo6fa`&2urgqX!bB7F9E^WGYJtIBcVO!6Ij`ML!JVDI znP(I1y!dSTQCgnrX*jJ-UEdS3lm2~{=%%Vizvm5UbkzDHwt$Xcy2j)TTkt=j1+Y>` zO_kB-JC4R%sy;*)UvE`DTR59Ir=W6-W_P?S4rCX&0_C>I*#UQswmUcU{6`Qd) z$7+U1e3zUN%p3Rf=Hty8m2xPElK|okdn~BIeP<%L+L!+z2qbRiLOKCzQ!R5amCm#k z=OE@f0s-Lm>Wv}~m1j0i=Ivi*!>Zq4sPuTLO|lopaxipb7P>3VQr+kktVUe_t=R3* zJG;fJ^xA{Z>H6cn$C39x}$;k*N4~8 zxZyc%xvM2z+~H)(dfHs6O^-hRd^@fBc5fihJG+OuoRB|lGm!kT_MQgF&9negR>@XT zj^?hhF6=TUfRXpET?A7u{8G1%1HBw`iY(e<5DRE+>&hk%krLwz70x_s>(y`aZ5mtN z$^$4n%_0@e%M3VM!Cn4v`v6vg;f8(p4F{Jb}{&LA_c=9DBqDls_>2Kswwcaf{KT+G?CT5w#u2whRiZEWZF)tfh?0X(!&3!WQV0yhwaCqtznhMo`f92dU6AB z8X#6O&AV^;DPntstqz{TzJ|=83DzK6_!I>86A}jSPhUKsVbirvW6fqB4wOd$g3qz*C{sLat_QPw~L7WcGtXv*@W4XWyH+R zHwXQlpNS$Fk{nXSbo{L-Ud043>3t3eM7(UM>DaU-_fo6;P!t7y!%l`c+j!?4|6mNc zlS9^AXh_$3YM7&`gjn2Wyb?mdeJ(1pM|z_>P+(>mHXg&K?}(~n!$-f1wgyVhiC!I0 z+T?v3cj)E$JDYyE6ra95MT1UhP@q%kovg_#kkSsZOk`ajeJA(*<3Pk(5b#k=J6<*; z0iHNPBD!+3LEXJbEF3Nr#evKPni?w#6L-jnIn)FZ8xnhgO>O?-LNy1kxd0r{9?QUN zn~{jcjZj3%J0dp)YVO1D+TS`n(Z_FxN({nrNENvB8i(875v4x!Dx4FSKJ}-4{Sg5{ zq?!8oje7d{n@*5dcL7uxumCe)vj(!pm$}$4UbuDJo^FGV3;F!X|0&TaW2EaG2jThfTC24*t9&(k{?;a?{tVo>^(Wo=>VAHc*~EgHO%J zI`ydqr%qx`f7-J-Ot6C{dMS;O+gDosu&ME)cg8qB&)q5RXE#8 zkX+SZ`ktPv<1pz9hBwDygtNzHgRCv)PWG|&2eGFqaOuil@x&w4OS4(#^my4OFjHS% ztLxo>z&7hC?@}_r+vg3$!hGzdgs#J;teIlp$me5+?|>)-5N&83_16NzreE|H?&9Q) zcpi*DNym`{;`$^J^Fmr#%dC z4mCy@fZV!jfUQ@}$HBzkUfACj8u(&3n;u|YJvWyf^DsYG!5A`wZ@Xi0lXZ!g`9(E< z#Dffyo&}70-K(kjCPpY0g(8`8P--;YFxT$5szv3bTs)}E5I?P=OTPq!7-~Z2T68D{ zL>w}vO9|MDgoeawCf*M2Nj=j{HeVuq-MqE0kM$?oo`dWsvD{V)89s6fo|_qrglIDd z>7Xj_PkQ2m5W^hKE@BVe3ziRUY-GgO&LHNoWn5hCYWZm<~&Yx zjQ29ZT;!IpCu#kDld_jJta!nG(ef-T;&KRL&T$FWq8jbY2`DRbZMe##zCZlK{v@Ai zWr|7^6;b4Xeo4K+zqqU^X?5~bi<038cnDG(^a!4UO%0Fml`IABCvGv}hH^hom}Nan zbaRKL6$pOT)4Yf-rKEK8AxiOr>ZFcfNd&QVSHNN+)aM^!LvIKX6{wvAem(}$5^{j{Qf*+j$JSyj@5~!{MMbryHwL2<$Mr{`Xz-5UcZP|)lDj5KMW7sJ_ zq}+CHtFT4DM+Z0#uCtmwzJqZ|aOQ^D?1h(}vr`d~b51y8weyaxj2q5bmwv$1yK$HI z`e1O~BZSx!oZ_cph>chF;Q+?72=+W3&qYB<0izuZhD+}_4s|Z8QGlbN2!m$$)KG!T ztR_~(BN|g52^Gijd)SiS5SLyghGVp0WrrEq+^=>q%Uo+-OBi~Xkx}4}4Xt+(hI~;p zC^XGMcrEB_O+G;GCYPX(o9WlrejA94&w~3|3f4mR_m98Q`oN|8w4bD1R zgi$eBYkAIk3gwXGuro)zgDjJXk099wG)5zE0ZF))P-JtBnzpeURtMeJ@~2A_`7b^3 zAPGl&Pr8@~*ixG75yufM#5$O8mkm-TvFro?h{dnn+EweC&{QzK2eKFjbC~EROKgLr zN;AI=!)@zUy1+Ld7wIa>PO>ux!J>JG;GbUxM|eS&$#08R_iAu- z9C36100}GnTIMIgsp}St2VPiZ+L*bs5$GlMJ+zexz&aKHJNodBg^2;6W9@HW7^;K^ zE}d-Fzzds=Po(=CUT|5a{igw(f+dXpb{O#IVmZv>iBbU%B^CN_AfI>te5&q%9~J;? zdkG{LWy8xpUV6^tp?zrnw7BsdYhO<<(>spt&gI1fZ`IN^BLEQcbF1=J^YuL>!oj4K ze4<-Bl1C_>n}4hTzRX*k;npt5`mY%+9+a5xzdqT4O?L&` z@{yqd28T!cYCy879DF(=Kx%4-7ld)27%|1dE>__S5SDciynd+n6nqIn`E|_3C~x!e zx+J!|&ElrwIX5TWBosWovZ6!nruhz0y&kaAU`ZCaKL!WU?XSYboLFc^WfaHL|(W`)#>!9j}0QCG=XeTp8D{xEkDNEs!OKW#OWu|BZ z6SVbz!$3U($E2D5o%OO%2at0xh8Weo(CJ0&^5-2&B)vy!tVv&_p)_a)T{%=?idDJB z<&V1nJjk3`-1m6jq5)MKry8VT*-F1_6dS!={r!RO|Ggm2Z85_`@eYR`l1KQ{#uS?n zjhIQ1)8Iu0hEl*aDQxt)+iISx3Ca9%{EHvAp;~m#{d`rQ?la1Zd81S!@5`l_94U-z zQK((RKL3Ak@@=P;P}&qO{!kOrh3k|nt82nbp_P3oc2QiiZwz#Ow6+ALJ}h$Dst;RD z#K=X5zW6V%Ax5d7hxbKGFj6(>%`XD#WSexe_*GDD+kXbFk^Yk5xm1XGn2H7G#a3dl zqND|Scs~ESPmo{GuNHY6Tx1>nB%D6`XI7FreRRX`1+f?n!;S$TzzVO6 zF9Y;oPu>NFcxvl;%ls_cCmF0t&QF}=bED3@hUUmg{4WY!A+Zvoh(W^I(6PU}+!DFGd6pVy;L zDIyGwvR40m@#m|zmn?ajwC-=2+shScfgZ*qVDH@jjgd z;_cB8KA&_P!B{h7K!a@U?T?2b9|4S10IXcVfw|$hvVR)J*bL@3$13f;cj4tH3VO$3 zl|=if3~1^VE$szZHT)1v=o=*L>+G*HXD{sxxLsK#Ha$&6i?>~1c-aW1lUpA&kZw13 zvmTy#60fuX{%voqQ5i-1VrA|v;49Tq_{Yktq8kVfTaS1`{s2$!n{Wd5cxO_A;y+m| zIjyh}V(ozey+4QGkD%e7cea~rz_QjeGZAfplunGMYNVTd_8_)+4JmCIJJn=23WFd`Q#yUmJq%l2a+G) z{orNKCVf9)l=@;r0oT4Y8n&qRo7K@Er^^ZFpsjlQfBg4c&SQ7M!wEwsIisGVm!lDYeu9T} z0;=6a>5&k=z--UP(CJfdy6uszv*{2GK;E=IWo^`9F%YyENDg4(MS$9r3E)u;EYQ0H zf}U3B6DJV@Nl%;LY{XkoCa4Y)?~a6)^UaPtECAJUOrp|<&aeH7)YE)YPfG&GEbD4< zMvyzvs*nJ(87_rlSy`N^E7f^Uf#9g?_X*p&kP}C?gwr2N$J)V&>%eUdIoILRLg z0E3s)TJOY)^y;^%Fu_5HGhq(H*i5Z3yP(4geIZ~F5~L7LRRG4CP%8sTJP2Z~o&F+0 zm5SRko{X5m^LoE@)XOc9Jyr~Kj*hgTf*!{o>~ThzcuQTQhJ@@VK|llwlgO^~T@ zg9jH7}j)4WJSj8y|+Q~!W4ms?H9*AsETwGKkaT*4mF zXw&IU`#-G-TP1xg(mzL*Nx=c=7+R*yJz$0v57W{WLMsmsdu^q|N-T;`3hiUign_=8 zx-#c3UZFTLFdSOjuaGEd-;+zMSR}MQ@lfQXDYBvSgJ%?R=*4q?C)4TB{T(t_GBZIGm}3wQzPvFQbOL%Pjj) zmY)KrQU^05R1}NZKx|VL^b-5iHZrTeGoFC8NTt3((4^6qBHct%qXm+!#$x_fX)&kn zdu(Gp|Lag4{Q zR(Rwvjw2{dIALZ;V)S11UE2Xa*b$L4>An26zZ4Ym<@ZmPG_F8VCUq5Qbm#yR#zKp9 z8KG%ykO}wE3c~AFE%}Y^qV5M25W*>m6ixJ%16<7%v|nBJ7Lb9gkjwg!E@ivCxhP=k zxF%b3O|XN>Pflp8#(o`5=XF2g5#h}F(2txiAyfe)E-oaYULR`lKG!V!`eC`g$m%ru$~*CNLk@Bm6X-bqn#NE9Iz^#t%lQYPfz}tPt||Thb+dIoib(XdUp5jcYk_FNjI^jUn_~icHh5sBk`PhxZ!5QRUon^#2NIys|`FTwF zbTm8N5P2pT)SD);1AvFFT`JG`z@c{*lfLtW#zY zqn4Q;bh5Zz?G^BmoX3|w1nX+;7=U%zo$rZz7)^TS5Mls(;^iidUpnO-^K!3gA+AiH zSO$Sh->`l#aV)J)$;{85*kEb(n`Slu&Z|YyzI}o&LlTMk`V1t(XC2OVo_Nzwpd`-f zH+{fpUTWsqTGg3);1goV#mv$iP9HvvUA!7}P_cGrW5pPS7XK*=b$D#JVLRUtTcCiJl|SeTp?y51WB4ZV88lqQ{?pP*S;zf z1nlaOBSDJBBqF)r;$VTmbPD7`J>yK~o5?SH3vep8%8}~yi>!iNu@t>#s8H#JdbF>q zHX|XVOI_P4N}vB)-+)iNFFDsE(NAJF-qa82CNCWwoB4h*+D_Sb(osT+`BwzbE$@qd zlQ5AKa##3v_O+z)F|H?{_0JT>Dlq95JM$~j1`hdSDzM(ch!bgr*{p;BlZ_fHH ze#U?vI@ztiW()N!;=w{lx$>sI6x32=%Zl$NEm0#J;pv4{Rq3N}IE7Em+^<4>R8ncY zQn@x^Fwl0TGHzeMB0}p}0C|~|_7NyBL>4+6vVJk}A{L6!M8tyAgnkJngg^lWq#N-5 zWlVa;*|Ve+<$4J2*R;|@Pu)Yuyd8`tFy&LEE!0}n79$J2@-5&sqdGUC)$VweyW2aR z@dM`h$^z2M3&Z6!JXF-+8Gyyiq?T%jjDkrfEQLCH)k)Hi~YYTG1$9tWAGxu{Ij=v<;DrdM@c~g%A$d>Y1 zRCW4DY?{}ssyAV7!~>RGkckz5VK{2il1DIIZYldDh(>zIRt1~<8Ym*Pa9|HnE;J$C z6-x#jWCkC=0!EaV^D7p~*8xN_5_)xSD6lw~6DS!85FyVVnWK`0qR6}LGqfI^28Dhqe2|)o8kKesD!}`0OuW9H`n+9r#(64ea*LEQU7sT%KhG0_i*UKb~K#+CRfp z&K#0WwE0R?KNr3a?u~-)XPGpawh~~Kt?!dqszHZpY`TT-bv&U9~2TtKk)(0U3 ztA90aT#$E?zbJE!sf8<*pYOownrU|sD0>A%2e#KpLTUf zG<|`2&Rxgm%!y1Sdez*)tivtsBa${BaNdkleJME@8%XTcb>|_R`1P0LQPt@au>6Gt zb*&k5IcC|-d@+;(hLosDOU9tOoL&s1Aj;_y+ZsYe48c-Eqd>{a8GHT7|@+>_jkQ}-Ecz&_c3ZD20Qmy`eFXX*fPNLG|ktp2r zr1X?7iK7+t+rfPzlv_JN{(>sO2PgJrECOy1`|cgLz-Dk+)zX7_+S+2rz~f<;y%XH+ z((b*$eQ3{F)Hu{#*;bpIaxsAK~tSLz-sTsEpZn-1(2I@6)kZ;ZjL; zaP~f$-%LMUJG{4d_6=NUr~2Zwh$+HIsq(S`-#4g`Iq9M%H(|Ugc`C+zfxr{>pJU;Y zdyZk05%|vP=N3+6649#`*5ir8Ezgzq@xBGWZk{ai@z(37%THGuhU1=Zs;W0=^X$HY z7s=$6W)YXTtKOHrMib4m6+uRy?`V8bIUC-)4AB8FlWyGx9;?@o6?mMJS(ESE6xXr5 zMkLZ|D-bDl#_VN}8d{EmE`U2B6;)coK%U790pq^3OgYg(LswQT2inqhe)Da9@{Skh ziTACG?}>sqj*kvA)CbrKJAT_k{1Fm*t_S z*jl}!$Tfo`rSe&yN(LE`aUVPBn-r1ds~2h*R8*gUs!#AJ72D7;FIk3l?QRp?_v@HZ z_Yr02Ia)DEp}zd;Uyn`XLixMv)@Iny z!I!na0FRJA0j_j+`?MDf8RG0Mk)u3sK|)25Zh)dBPtju>w0w-^+O)Nm?LpyM$sJn{ zaZ;rdufGcxlz;yIoCIeTV<;gpN_`jbNyPmxkQmhl)RBM}K}PrmszA*b z2$4t=bVM38I!%^SPzGR?hq~aGB_zi0oW~J6#)G#@Rm@h?!ouKyGXen;vzQCKp}{#9 z-=F)3pKAWKspHQM(h2mL@*a)bdtFcOBe_<(&${lJ>mM;9%~1r9Fs6i}&n> zO(sgdKxoP@Ejg-SONAi72m%a`m^|ZAYeby)oh4r&LA^iN|5Up%eQ{F0*%+qba?$ll85f7L&siEW&dq(hP+3)i1za$(#DoiD5)%*kZVTip(l+Tr z+>7{L6=FaH&cjaUd7iFgq#<6@oFMh*70~fi1wG*Or*U>r&e9{v@Z3CsgiW;(GLk-+K2e3_?KjI^g0!gT!0i}VZrV4xIS1>-F-%mBPb zN(Y3d%J9Yb{6cSMOy|N7yCOwuPGXT~yZ^AbQ{(ikU@2?hsSUpi?F8rnm^g5O+-Ggi zfxFiSP(f#Liq3L)&_OYFPESQeT52$uHvQ1JIcE=g2}*>MKqD#=nQqj_z@kbe-KkY? zT0`gusf^TeL0b#b3nmacDHvsIl+-{t_cE1Cr%Juu8A4?so*4kE~ac|Do{GYJ^SQc84lVu++*63`nEuBix{3MPOdNReo-lo$soF#%l8 z5r9mvbRv?@&AO=zPr0h}4D@xNNq=QR`ZsL7$UZFWo5f`R)j`=@;F$yhq+L%foeU>W zQIsXOLFXt`9Vx|U1&=%a5ACZ6{3!oy>En`?y3Vy&kA$4iLW?9A_`;Z5d&MVMR#b?dfedxyrt`D?|gu0>GNwm}kP=jCHYb&Qb40RMD zIhV^5=qEpb`}Pf7C3S24XyOx$_*Ux{Q~H)DudyeoRmEjgibOtQNg}&G=8l!*@n;xV zc0HdKZGB6+DWdV9dC@IU9Tj2jkE7~8EuXmj-ecBsk+RrB-RiqO!6_c7^*AYLQ6#an zR8n%wMO>Cy?dd!(R_RxC1myLcP!c@Iy{g^G_}Td^(@qfUX_RO}4`?LX-+6>DoBC%5 zCk3%p4Dpj3pPrU70qg#s&8E8MCK0$9gs7BLj~*PFD_a|wDpB13%Zkq2H%zUuVV|`g z-RR(E?I8eQ`V|n>$K5iih@A${@~x1p8f;i|CcEq$fY`@$IX{#RcaF{MYPv(j$B|x5+c#d)6YjEOyvnb=4`F=oRl+%R432xNrhxjXM%Xs}pOc(~sY?EAA2+_D)rb{^XuvlK7#q}DGuRVNB+<`(!q!62B?fdNpE$?+!NxbTuqmtQqVCPM z{W6@n`WM(YiXa6BB;+8QhCVz=NeUFtrX27}1N-qhcI^!W0-k-ffWWn{mLU|dDS9)4 zTmf6 z3B(l|$lE4m$YsuhW^FNOnefk|A8RF06r;O7i~1&g&yhvlq7Zm~7yy2ISk>aO-kU(=4$&GHf-w z&X3KYHLf72d|_!F!f+sIqf{26&)emO+l2PwvM?LI*W9}tHMU3=qF4t4#i;u8PY2Yd z>VEp8&y7*-Cs@DkH^1)(PJZq+>7}ZW_GT)_LoHtb@E`5W)ak`34*G;o3p~;hnTWK( zOP~7jCNPN(h4(g`L7Kj22(V~~leq^&S`msA0P6tz^()nS-Xael+@A0FcR0KgHer=m z?@uErwUW9Rf~Z^wvq~Ry=&B3^{z`#bo4k0+n`;_FitcxjH z`jFe1h)RYta|a8VD3)*kRgUVj5TUrCtZ-#On^0#*WA9Z92f{{w}|csad6cgV~6Kmi6d|O=GD6 zrx&Q}j$7;hz6DDdns7?^dr-M3G|^@Pw?WOa*j1;7;9BeukE{7DZ&aGi1-4>0=9{e_ zo7grfg5*dlHsb2Z* zH>b|N6TX-7AtbUdD_g+jHLMJVil0~`j;34U#D0(z= z02xv_(QL#w@g|ivy@@xex+%x;1vxFy=I{M7n^@qJRC_>;WmobFR}Yzp#5y(2Sk35; zxV6-c4HU!1NnHaCn>Qff#f8hW`#Li%)%n!Tyie$=I(Mhh!bSgth0#i6Hm}(|D zlGBheiWye78)?RUVWz_+x0QtvktrVXD&VrN+Nr|V0GMS~*J4_;M!*LfQ{-SuD{A;L z>V64~SVTJYWu2K;bB#;=uVGOd?e#n&Xo9wf7arsh^= z;QD@%5!^mJg-NQNDCRbkaV2L z5^NmqMf<&hbY65yhOt<_!v-9^=;+hJNd|>my{}AOu)psYq5ey6T{}^%vy4s|#q6mi zhq!92P+ZY*wZroq<>IG)qGZsiChaV;@?ob#6IIv>Tq@yyLKkuq?Ko}JG3d7)Y+nG? zZh`}1ZPL9`37K@*B#`-5A8MVjCjOPQ#ET2K#7QEDMaT z7WsH4!%u0{R)-PG4$dCDO3d^bj7R-ZE(}d~q818V=I8SbQ&y$@7#1#3mIA+G2#Qts zIW$p?T7IUCjEdkw){F>qQZX{Mrq`M>r3QzEMwU^EU{_ASPfcydq7AV&r&Y`Wv^LZ+=+Xr#5=>u&9tMQJu*Q^B+* z1Elj4pDE7el7cWdLQyUcO^7_3P0VqA-z!{h znVXf|dk^P(=X&V-zX1PxrPiTghbDf(Qhug{3R9ru_6;fKq}}yt(X+HiZ?)$rOje3U zg;CV70?KR`+G(*ppiPU9zvxGvO~kjiS;=KLd!l;0*4Le|6-`-4p0PJNXgavIEa9>e zYCZ~{UOd>Z1dDLjVcop9J;Fv&eGm3&2YaU^zBUbuGrU;gC97WY^f`o}6(?pO`v8e( z`{L`$d+OyStdC{3UPgji^~QjUW`Y0dm9-8S8$}JbZ2Tfk7F#6Bs*kP!6FL=O>n(b} z{mI%B=@=7-Mr$xhy%4fd<|f>?Wlv#h^pmnQEZKXTs(nSM0mNx6WKkriP;sxmHw5|Hk;n%ur~V zG{jVFlX9Q%i>+i}aGPrtD!vb1-#%j}(Ba6moBEs1ASR#h58d=Ykg#7)o<^K3y>JP(?b1L}^On>CX%Z_=C+x9$2+0 zpq{L?WJM{{w2}WuMit|Tz@R%@S+L=X+o^+xW1Mz9+;0gqcfw{I2uVvtUg`lNxcY*) zIW&Q*sg%c&fqHfi@1M?uX`DgzOyuZz(6LV3ulxyM=Q@CI3wh^wIi@&uYz#O+bDOs_ zmSvMGM?=S@_mdkEv?(U|`ST`Q668A;*BnVv+bBBtX_XlK#Etw=BnE>kz~MNxVFm6B z?;I1!_|94W+i2a#Xu9RzyEbP8-4f!rn~4CqcZFh>OQ}tGnyP@Cg{T4*C(Y)m{g`*} zYf#ox{w@)h5np!#7m5X+1acn+ly+cV$&bZZRzt*?yajK(;oZX5Gy42T45IkbSe?BJ ziau7BF3p7B!-ZFFAdAvxTe()oZ^bYWLbR1!>NBu(eZ0tJO^^P>6IF0A)2PSc`A+s* zsJ+7mseJ4zo5QNwaAWRhe7Y#fNK9987HdS#9eG<^i8(G|fUt+nMxI!{(ZAMRXGsl1 zhe|ZGR`^dwPS$mX(D!Vca{w_w&cE175kBSQ9q*HMdt-ZJq(2cAU?ht5?{v6{eX)@M z5`EM7QLm}PbC4?AO)-!XN=Hs9IIyPBx)oCx5c=6mTAQlyOr!0$*ILU_e-MtY2U>a! zaMp>!T_bXw7i?-xR>Wu)hTDP_zuPS3aFbW(&}F>sJlI)vMYRG?Lxxx;S$-+&#Qhq} z>6GJ`+1j=cXSI#qMBP>}!~B%)=fR)p;Es>R)*At4&C?SzB?#paVZUn02lr64QThV` z0E#M!>ZpwrP3}yrsDe^O)n*90WFjlMkh|h9K#wsMdN2fx#-EQ(m?&^+)B@8dYvTV` zbBToOb*#Itbkw1$PVIUi>KoXuvL)3rOsNUcDOhix)&4s*##hQB1sQpKW!V)+HMMiv zpS3r>BGL6|;VO@6H-*PGc-wx~&v=)AL@Or(?r29TG;xA4x=VzM{nhtMF1K!FTt1(f zDUp<5!64KPs+9WR6cm^M9L~!xZ?QIO02AqM@4PX&Wj)=+!hE=Cy&JD()gX$ly!+O@ z>t&s@kF&;0D6?nTec5zQdnyG0c?_m#Bhx~uC9tKERGuG>I_|<4paF^ zjet_k8KkC-JR1rUjxL3V*3%*a7SFzwnTTt?4d@A5Y0%?pS11^~5uQZhnFvoLZw(Q+ z#)c~sSoMyJN8vglynQwiD+s4+jJ=+Ru*q!LY$l8g^(=G=wzo4MQWi4U zjh2R?+$iGrj5A@WyD&Tmx{(B8Jx&pM0AG>7>29eW$1nhnk zhXb^qcaNrI)_I;(&6;O%o;Vn-ie`>LdWgA?+p*V5#_2%>5zlX;*Dv_77@Jy+g#4kg zYfyT#G-;yoin`bnvFztJeL(eybzmA;g$Gq8fGrPZtr)oWs_2D6!SCQ#(wcN3^U#Yi z+gYS%dOQpdFKO&Ias&hgB4Gp}kqu>Yj3&?TzwcjtXe z^L1_hJ?-5px3HYhKn zt^W34)@ITjx+iG!K%8NxJR3L5eX?dH_ly2NtC!tGzNVLXkTWM@?pVwrxO8o$@2tNq z*pZqio7wU7osX{`cKb^uGUCD`z^{yinXr!2P3~7S;zA$g{!4kJp)>B*PMc`Au0Aza zR_?D4YJ!^a=Q)hLLdR{xRA281661RvkW2LTW5cWA$eD0clg$XuEOXl;Ta20V_C7{Y zxSQRQhSV*mSHf8V^dAd(M`@q6P`19_|5}Zk!ljs9sEY0kX=#01)%FT^*L{@cO@^LnwCzpQfu0G@MoD^F0oIIH~q6FpmHKF*3_6M+f zYGz`8^+omQGSGt*+4a?RORqQ&^l>>Y9c{J1CZ8O!)5XmZs5r>(P?{1 zj1o6-C$dE75G&@_Ou&2B_D-wkQFvL(m6zq-bG(#A?YRMbBUJ%^582I_#er%}0^%U^ zp=dY)X8o2ljPbCXbevl4Lj_c|vMq=`=_?6H9uLRaee^qi+rSb)!*^*D(H+>& zCMw%8^!G&DU?m$07`%B&8>1vXp)rlXYg+qC72+_^HZQPLbZD;{(-;=J)H~R;^C3F2 zH)IhJ(V3Eu#)9lXRUs;k!$S98ApHgb&X9T?I{^{YbLuoDiZBwLas|{o=jb`Lm+#u% zSx!DzIB_xdo(0}-5>bbZ!_X}W)h~kf;0&(0df#U3P}wZs2tl9nHQa|-kz+R{dYuKV-FatGDp1Ebv{3{^gC0Nad?G=smHI| zd_LsN?}4X@Hq@&x?@>O#u`l6!LI8TA(sBDyL1~ifx3dWPG5{f)MZC;20Sfty-(QgPec}4B9u8T& z3OT$pz5*CuHEWu~c{wjX5KJF$PbG)q_Avz67h9V!bM1DPPx6)--8RaJIkl_{^??{|Yq-tpb|$U5?Pla+?>)(XmHlkOvf_;#--=C4$+2AZQMos@4#`h z#3o!Gynn7NIIGj_{H7=W@NoEBt(}hLqFzBfEoXpm&cr%KEsfs~ChvU}P0c0A!_mQp z>kG<}B*+2=J*RJma+Butb(Z~@{rU9Fwd&R8#1xx$nNL%Mdd0DCV&vP9Q_bt_7oq+m zMq7gb_xTjuK%@OfIOHYU8(Hd<8Ixbp;0bF=QW*rRV+I&(ZTsq$A%q6 zM@Gz8>^HCABd_ORrMs!{4Wgob#WiVZ9B=VuPdY6mX>8RnE7KL!KKnA3T~D2=>Akf5 z+C%!&w3>5td^KMg)$dsTSbGH;8l-Q7h{|e@WR7%Nl47D+v$$*=-ue z69Bk~5AY{szE)=RE-|)`l z>cZHBciUc$`Jih7xhB&dn>;+|fbqRC|-_Pp5W8fZXR@i@u z=RYRZ4<>Rn1DKaN+2yUnlciqLtqem$W(9f*i^6ts zdbMb3h(zpjJYXd9yoqiUn8K?ktf1oDTeglN(a23&d=x`yDY`o#ZW))|2K{{$lJw?k z8xLn;591y0@X4!9%*DBELSFK@yeLH|A$Qg?pO$S}BArma72&FtHztw0^2IrACEklG zGKViaU3QKBHims>^Pt0?J1=8v0 zM{LJD^6{I)=2CTP&`v5v5+bitq|=6SQmc_nBo`+sU>zT&)sdVT3)rj&WHu*DP|^zC z-SC>Dk&NQ9IW`P<;q6lE8iB699s>Gqqkt{gon#^EPp zr)gg7QnV&c*i6g4KC zkxPuT&^*Q&h&HPUeI}AH2QEBDsylXN6dTBzbu~cU1QTS8XBbQ2dW-Q zC(x53h=CX~g1txSjDWP>Lf)%ay1&uXZpS`RqZB|J4>YDlPcSWmwXBA-)Ny4K6oKd> zh>G%SwLP<Z!bpazrOFG`A%kA zaXbb6=#x|{wp1*Roe{p7JEd1kJ&*+Y-*+q(x+GUc@e1WoYhDU!>nF`+sx;3m!`6st zB=Zk!icy8KN->hGbvunAon=a6DaK0GMz(zFoxCG4P+6Hc>nBU@EJdFNYM*+>61LA+ zrh0|`PGH1Pk^cEcdJf*$!EczYg1*63Wgb;Kxg}Ntp8&r2@}>l6n_@pi6!o5SUX`ar z8bm=IZ@OM6fa4Y!v!G`S=BV?|H#G#PMU=2FtNHTV9ty(en#2m(=G5^h=(FxC%Z zFlBeaq#e14!FTxof0fi)Y%YhXQYmS`wk8!i#EROq-dktu7lbQ_UDlmBmSOJUaPb{m z$LRt}0O5&xSO@kj&?i{gl~p*+4E$b}!%Ltx-GKG75B{OmB9GjK(MrhFxKT_aOwEY5 zwqQkB-&C22wY4ukwTe+s3IUg&-@?_VT1b~dG~C?!4T(u#-nN?k=ouA@j8(RHAmdm6 z$W)t(S$YP?kk~ye#7+>dK66fsh8zQ$o4A<c{dOl`DX7ck&VsyNkiK#79#fAiTq#DRY;{m9+yYIdb+ zP-vck(bMN(yoh1Jw|aFt?dBn~4~Mt8Y* z2{SY>EAJ4|h6oi(M+Tjaz4++R>4GsK=S9eT0~|r&Y}LLYjF1f>`n#8-07n@WvlT~} z7Vd>2@sl^9l5R4p4AV{@3cr02gb_c+iN!$P^N~ zR;J*1ZNFEA#Zxe-5&RPF4qKtWWbNggqjfSJ)2s~Oq%dvJGV*{B)0&5L&Z^NNHoXSqy>7W^w||h zW*tW*{HrKK9WZ8r5v%a>pteP7@tD2K zC7UnaiUnh#F-CkbId9%0)H3GcH!yoh_Xd!01VnWf*;t;SNwQa?`A)|adC>Fx=+Y$C zq(7^C2x_$x*cg?HJqTuUhJ-wTEkM0yGUL?*4=;1@PK2j8To6^-sZ_tqgC;3jbkFm& zRcV^TClg#c9m2JmCdFbx1&V^o1^%RpBOjz>bW$t=nN$T0Dh~G|%)3n!G|DuD*v_9+ zura7&iiugx0?ERpdXPb_v9V`K;Kh*W6{OKWa+L=rRGIy2N^Tw<$8ij9be%<9 zb|stL-*qY0a-#tz{+Yo&Fri4p(HJiX*G3bj!N&8!;*ZnrxO{RIwU1K&Y-0cUaXQhe z&>`HeITfn{BJ!$HVh>L`g@Gy@pHa@77!M5YGyR!vOrWAT{yg>XVOHCfbY^V8UYwY5 z=Xd}3zR}?DmZtBzFag)<^8sNWVD%5*Y02Tm2SwzUyy>)f?@cE~AJ_}u`3k>{I4OTJ zC#2O-(|uWlocH?to4dI3b@>9#GjTl-{=zR6t2aA-u@gk_`Fpwxu*;sVh<2jKerR<1 z9Bk*}Ob1b4`4Jww^!YvCbF##bF={p5k&I_Y-DY(`RQb&@z#<%FcPkhq(JTYQ1`@Qp zt8loMSsD#PzV`x2O2{-j0@~+_Q3=zr@{^%{DDUwN&gC%=DiH?|= zDPI0d>LxpST$O1gLOKt$!uV7Hz%wbY6Kog!xSMZBeNC zCclzz7gjtNpB(e_3Eru#4PWMzx1D%b=z5l=c1|CYl8VS#{2oY;Km@)x-q9C$r}t)m z;I?xh2z#Nxc8u$GY*(0KiLP%pB$GBzVP#!cA|$wDY`v59*3m1D7JLPO_>NY#!e&Kk zhE}v&Vf@!;o>n5~REUfj2RF#g5;evacxftvIGw-bt=nc=q2enRa(t5;(rdIk{$hveB8L1)`b8y3ih=0H(=QH@*jt|>EnA`Guox6c! zAI3$qDZ7@*9kBHX@(c13TaV>G8EEXNYx9FC&7r;#SVL{4Nkz; zPPKn{IRazJsrQQysE)^$3*K)NP-L)Ontp zVe+59pJ`6BL3-rAP|rBqD`&K(ub{2S@lqRd%DvZalqL8C_m6jD*8K9VDUGru!*V{` z#hmGvHdElp)9G98V^FjJ zPl6_++4}{)gp>Sp^#b+t-i4tnBOC;7kS31zce16P*+Oej!`pV#$Kb?81}upLS1=A; zG-Qj2`fqy~zaFun6i?f!gI}0aXeSm;b$KZ3DrSFh7g-EPPRlH5x({=nGrA}@8COX+=8$0-~Pop(Siu1nSRwtak$no(p*)FrT zh-U9s`w~v@^GWniIKc9f&2fOGK_sFOaDgmA+jL*KF?5ThoWi`)%k#H9AM(zvz-h9I zn$Us<((6Vole1VS_vpMpRnn!Lqu*(f)V5a$c-rrEpPn+KdH~q`KfkZdy{D{<0rXkb z!(snJgg{{741f3&$0?8kfqMPPAB_-bXRc#T_jU-L@s@UQ;w{5jV02gKjAPTFeuvO2 z?qnwlkp8>h@=$`?;T^`^Im}EMQ%OTo-B`nvk;+-`G*4W#d%La+}zetd^wY?0KscM7=YU!EU7ue+gb zBQ21dq+-_5h&7g`8UqZ9=;;f1y|f$dN^9^2kaJm~R5q=C{El}i{!K9RnGSTcRi(oX z;wtyes`7gd#W|J5EZCmqolhM$_g`06c6|C0qyIJk-u&G9^m9!6?k(A@@NjUKxfoC5 z0Fg8N?3a=tVoPaP5S+WMUkz6`glpU_1J|(g)&an#9B!9j!JfnSG0elT=T@0{v3L31 zHvsEF&d>p=3c8eC?AGIO&qhPFK1rN=0r*WgJ#@VI8~<24f7Q3)2xtjV{7v;+ZSw3} z(2`dpXtnBwf&I&`Q%S=wBXss#)kXbSR(C#eFUVJsUlvps^`Nis`XX`U@{84vo}}f= z&hyMzm$N^)%j(XFH>a)5^sf z@pQlH`SO|5BQ>?Rt-m+I4tH@m%ZG>bu4{Bdv&uhEPeK5rK+L-K5TN0$ERvAJ&$FPB zgKL0jvwsxRAFoCv6m>;#gIk>wR#4>QlbCM%tOKU~0>BrThqtKOEAEWTSWFQig9gImPhMg>k^EjGf* z4ccS+1uk(P8^$zps_p@&59m?M9RXZTM2+D0+&`}=zs}-WS$VFC#zJ8`cOo1vC}?Ub z9IZEe&Z);#3)g{j_k)9$wx`{+iopPPGuER_T_sCWp-+q^SS=ebht^ZyfL5#m`~IfNAmR@gNg@<=OwsZ2RrH z3wfcqhad00&FQAHi*mGB6$^}g8H({~+dY0)hOOJ$mP+?>MzG-o-N`wJX`2&lHLl>E z&;RFR_j%u6LTen2*3`kX5v|Vo2evz)$2Qd;aRTUZh)h189fP8QzQdVk8q4FzxDXE_6D9ZMsN|XL#R5-#W0>pj4m~m zf#BQlj4gtS!%}@*rcYiE3TJ1o2KvQu^;)TJYzxa=L3#l3xUOQAxw2MZ)~i$MOc@fv zqVCd9aJz|=>`%B~*Qj{1Hy7T$Z|iGpM~ruC*V*b@#fk?Vt?+1OIL@Rx z!gA98cR!WeB@$g-xGE?3mVjQ6uj3` zpVw;)%PRghd5sGo9m{48o0}vxW?p*Bkd4gVlcmx7ny*oJoK?P2Ln4?yH_<;lc zOypUI%s_yW+u!);4TN_v@wDCLH~v9a6zx2AH_C8`94nEK`VcdZ4Ih@`vHIvD@*YE9F1;*0jBBQG6NiHx;#2T*;x$ z1`bVnitiw-{yRX_@{ME#>^tw~V0UhqJ$(thB=KFmBjI&k@__*YFi6gEw=b<>_@tGW z_NJXnGkg2exmPl>V@<;1OCGtzt5H$KRzI3rsdMQCz$&1n9l%}*#2GRt0KTllNnO4h z2J#O3A#~zn(BBgRBaYwS@}~^gL*yvhDTON`IRo$`6cVq9XiXTD?1jNML0F95SPEx* z&R^5O;21FJ=Jo&h%|pnjqXkSlJv~m64yVZ!bBG3bVHW~5ekLl zk&32p-#a)9*FINL0=A8{o6)D{O=CN1eQ)rLftX&-fhB)aAnoDB<)40&g2tEuZ6w2h zCE&}~3S>1Gl?A^@-V;0kO%hMRFTr?LFG+J0aN2ROs0yod1%=X;?)!G`yjoS{cf<+% zbs^pJT>gDh-hr?0Q`Bs}=S~lgff1IO^;l^3b|6+E4-v$aSO>)@)G4Gg3m_#5jgMU>}6$4;evGuS->ioY9;mC zP%s6F4v!=S&r(%9b8d?35Rh>;fOsb-1oesrr#QC#1}2{DJvsk|JDZEIj-yFF;9z)r zz(WKFT7`8;@bKvo^o%Z57N`z@hD8w(7CbhW=I9nICVb3J+7e=BqwcpIsNmAX=Rsl8 zc&25ANGcW7k=RF(v7cfzY5jJ%UQjQ5W_LK2#;I4_)^_=G8coV8wXATR>Oo311}2SXMTcs!Yfb~o*az`^J&k^fq}9tN zl@+5#RPZ*W73psgYb2M(K0${#EfL>0trb`5!0B}beCly~YV#h>3e{%0rDpolaR%l+ z-c;(Wdqg=p5oFmuCEaOt&4 zwdvLxh^A%Y(bsrV2;Y<=X_Ma4tTnPt_B#n78C%Toy!kIhNAblYCTl=bgLa}K?#6%# z`g_Z_4G;9^zYL_Qw9L6A?xbYRsGR$!yO}Ak$cxI0?!Myt;taELAYOPIl2GU1T!j|> zyIy^<%@FqR-2c>b(UF))=&w3VaOOoVi10ZK91n5e^TrV(+NWC-zY?9i&SAZW_2jj9 zAJc6GmElQ6b>16+$QaJ=dUcLXPMn?#gAoR)043GO;rxUoAz$ZTHS{PQt>mv*{bgK>VKFqb^OT51REqP66z~ec7)N^<- z;;^HS99A{A{1O}={R4kh=t4$J*Ep>)GIeZn0qQ76qwoVyPWKQd=IRk9ea`O_lm(l( zUlmR+RFa7~70nmWn2K)SI)7o(ay$;iO)TJERL-T>_;kVPL4MD>;9V>#!UW&#a3~nC zbHDo=p2HS8(j2=c^G?t8C&ouKa*_e3N?T>`zC~t1i^POD6=BST6O)ikm% z8LJb1QzoCYxhN(e$Yg6J&6UxL5&BS9eyd4<5%L@PAIfpA3P&c_kN%UZV!!f)4SEqq z>0~TW0TYjpSL=QldmALixt#(S7&bnsgR#*d^2YoFpL>L>KR(sDKt7nd`;v4{daL8V z_I!;)hwI1{XwiJW(%TI~Zh%$s4o5kh7aX0^!w^*&-=6gczw^{{pu#{Q$O+WvdHvk% z$+r#gVkm{Z(dX3F#?5t)oG`)*kK<>F!4E&v*cSh^_Q~%D8J3|;|A*Kb zRfIR!MH8>4_L%v<{*}DK(Pd(X#J^(ne|e2~!dfvynpQP9P5LvhElaSPfqx?UgO><- z;)RV+{B`ctB+NjjE`6y+l4P3A8NaS1;@-O z{R91h?Y4N|1zBBtYPpCSA<9K#@qNjB&Yh?w`ec~q9p+GiXqRTG`AJd)p=~d8q`j*) z6lxT=^;la8)&&^Cbd3= zh;aWTH z_gekLtWBj!x^}-&?*+??1uxhjQn@?`8#u^NPa-j)o!2Q(U?O=jlk7zU{7Q~ zpJ5;ek#Xb# z?bxAaQ;6N8$t2LBQKs}Qe(H|dY?$dx-V&^cq1u;pm~oJ9bZE5N0Hl00%XBAulsOLO zN-ig6gKN4me3h_Df%%%_Gwqw}D_KH0d|TB^D^WBU+5)N z440^Uc1Y^c6v*>Y3^LC|`_mGY#q2j-rQl?R6n*%PA2hek18_O97mFurn$4n z%-=VPoJ{4s{^&XT^w*zTKv6y!PbWVMIAdz@y!dW)DTnKclC_3&tl zA92LIPSz!FDF34O2HSZ@%qfEkZo~utXpj$d}gJ>qO#exeVJk*Ek4T?0#=`U*rLXZp!%Woc1@GOAl^-L zC%=@Rq&e|l@?qqC8Pf;eng?U6gGLN|^5ZWv=5q5E5aL$?l+?P<*ZARov}pBBNv;a} za_0($)gkGUsY~~?chproJ1qCl1$(^1vLq@%@Xb5~f5IpGQ{0Rv<#^n;r1~uIpZ#C_ z$doq`sGS^JNcv^WgeEwy3FgW7%>NyT$J5#9xGfly?PN?ww2ijWN!Syxr-U8r>^iJN zi7l}u!9|5Xs*+(nc?M@>&^L?0*k!tK`p*TG9Rok2s?0w^y_?IH8uNuN3=xz20N8gC z=Cl0`T1QzGHU0<{8etM0n@S{o z_12P?^d^kFLlne{^O$$!$#0LXxDn$|EkOVFQ+KExvSQx?_;B{v}ya(FL>F;DCMV#K~?JcVnZjD zWaFhl@ZOU(Q)3#6C@-pr)xC@j4t8UX0C?a=7vLIekgYn+wg9IJo2PUR0Q%W2rkplk z!4buow<{dM`XatxauBByyjQ-t0_AS@gjbDb%ob6F@z|iH=%4@I5?2sp??mIsVirV( zh!bmbYWlF2A3yso6tS;^V?K%iT%u$7Fn~&XvmN5d)R+mX`A64c-K;NAHGZoS+7;(r z1a_Tnxv?d3B*LqSK=#+a{IFn(l|?=WBR(%E0K4slmGTc z>w$L2IlAl+o?NR4Zz2ZLZ3yszY_U-Ygp-MWs_{9g&)Jj!2iD zQy3|wD-9!ZwDn9~D>TAv^zkQ|V)_LvT)ys$mAdwAo^bAkmmEHGgKb@7>%cfyC^IU+ z(CXS!Lrx)tTHSXq=2f-a#$|sK1o-tC(Vx;|C>$^ei?9dw!2vi67vpkVi$%B>&*CM# zfdW*c4PEelcxI(MM;=3>l91FCq&$sT5l=$Fl1MJ4)YDHU`KWQy%6O33b1}>jjK^rk zf5InrQYLqbX6u}cvrb>xYj$t5ZQHy*-D9@J%0^DQpWW5!on(w;?kNNPrhezmPt*oEqCiP0oQgrn(6HkYks zTJ{@rux{4FhCvq#TBL1Qa{2@*(uJWeleuK!O@380b&E;M9$GGKfbW^Fgfi~3)9!w9LY4XlL=kI$K5iD222QJxO>S2Meux}aY1Olq;ikD zG8904elsP&Vvx(jT^VeehCrwx1;q_XN*{$+I||>o4h?n^0y%FwohNFYe?(ugn{=F? zMm}mtT8t-2uk2@j&}AO!TvrALcLZx9p+)I&LVY2@)%oBC=dz3<8;Rx9Ck&=V7OdD? z#!$%f@oO3t;At#G3-J;63rdV~+=oCIqU_tPz1~nfGbBtM{yW3Kt*)e%P^_{r{hrSZ z>U_RW%KGs~tU@Yt8ly@D%D7g0!JXY=@`ZoU^ zNu?IKkwnx>r0|Kd8#JbV?>C`Fhj_rhhUm|~WW5!^>gq|r4c~>;2A39HNh%}1;GP#e zf&fm1g7EzmV2{hVKnXWQrEzs61&vk(r077u`uyMNpqUj`o-G%is?b*mzK8@Bnfa-k zN8W@$a`z2okXaYZZsHN4`tq=f#Mg8K8TUx>d0KC>VKAIdOzBj#`fZDMtq$ODXFyRM zfhHaAjr6a7_8){inS>gOLHuK35Uf>n1|7cPw3eNutEnm)rBIimAR}{|a4orYB%+=% z(xo_5!pkvX%z}(&O$9=NW15}To_hA9jSM<=e!Bq;Na0rKTNB=|}R3=Gzl zoxqg|iZiK!Cqkiz)I7a5|1oRozZ12r_b6JKdIoYa7tkp&Kxif_QD+)h_#!-VIl z1Ff|#>l|ZAnZ$N<^+W$j8ANoY;o`+?R+gVwsH!p;st_c)MEc<(E-kTy;%JZqpQl+Y zK8WT=LR5a8QKc`W;3S7p0t5$#N*G#y$T;@3p^)SulgZkLt@Ac51Q64nL6Tb-CiVYt z5#L?m;FN2L%#Z?`NJhS4h`0X*WMO_%wGLE{F$C|>26jssBkBh;DGDmh>QW3Mn+)_M zL0AWnZgl;3(Gb)P-ArhOJvzLP3mzNdjVD3i=}2!fWd~><7s#_i2&=%8Oi270G$;xU zf;|w@X_Acq*HQaO!Uq2re8!vS88e!7$!H}U`NiANCAsr*LG z)mL*jb*|c^M(eA&`dvAkk1Q=4%ATy932rEC>#+uWp}7kP8&(eyvrY{_mf}+hwzHkE zok$q*!&pi7nz;RO2)z01z0BWcEPKoJLUY1-S!N~apRCoL65j*p`Mfj}J`)hdv+PkF zTXz{g+Pr(;5hd#7jaDxr$*zC6b=T}UUbi0I`apB(Na^pTNzPrX7oB5-cy(e-tv-)zi$mkr^M}CWet-s@#wu4oo@96z*=ir*|xn8W@*4ZP8IKHsU;05 zM)$L)zYe~Nxu+h~yQ@KbuySeg+DVfoejj*tXE|yP;HtcW)-bdWtAd91tu`yyHgv)7 zlPiyivTHNUX_W%tfu5|>qP(KvmFZXw6?7FpNnM8N__VhUTlygV1b&EarmsmUN;P-c zk>SODY{*?ON|BcKn?AB+2E-H5w}x6MWkrY2<{JvnOxx1DAV@K%45h>7`gT6x?a$w3{dH+G*c*uQDvL1yq zLR1dhk)~TY`#5l4_BDT7XQko4_7_Wuo_R4MW$+a%iqE7zb3a^A6e)P~mj73yQ-Xpj zJZv!7MD~txJy%no_F@*tuebjx0QU<8?`u4=x)aR{$k<_8LS4g-OKsM0QI37is6<5v zx(`K_T1lLjWC3+Ps1Gt_^+^wj4XPjk*_w(kB1NXIcd6xf*YY;biRzk`C zT2JeN`A@0Db`Sf}OKlH`z32=yQ9lWE`(I8-X>OaWm}U?>uau>BowUl8!tI6w#llK=YDpnL6^UkH}AY3`+Wfhd z8&Dw5V1pm+OdEzIkk>e=IH@J+wkW#4O@d|#NM%XJeDm5Emi^f+=P z#}W$?f}2n>X#`0`K!80`kni{%5DJOZ7}Ymq;{KQRf|{CyzuNXu$f-0hV6Q0%>VR~{ z%5YRdvn*hpW1|oDd-ITHKF=wI(GhzapOj=iaOezc>^EwX84KuKGkMXz8TGtm{gvFq z)o$Y92aXj`ib^cH;BBE9lYeRSZPMz$Mch(qL%pVx)wK|2P)_zl5Sp~M;(uW|h+yPS5ts~-8RcNl zeQcN!s=eUGxsgIWl}jXrxgnd??V~NDzDZp3zNkF*HkLm3jet;8Do*dY!)kM5IDl|& zb9aG}YoYg2m$Ghk?mtTf!=@XOwW++NDt?*kK*@qA0E`pChx>*I9A7jT!^Q8g`(J&J zv(7&m#hvS3^Ij$L^;S*$d%(na1e8nL%z1bSrlPD!cB!&B35d@0U2mbT-vjWJLmXUSW zzyrTo%f*FIBny)f^H9$LZBNAN+azlLxPI@odgEN`KADqZ5Upz#uT!HP7OOjSaA>$| z0S0BtPAMYvfsg6`aO)8xU4JheukJ+%x;!3&s)5vTI4|nu-xQxMu2tW3Kl}cvYd5?> zrC`Fa_~R_h&G5s=Kj`BrUQ5?yf7wAix^?&#;BJDwF*WpsH_#tE?0@v=2=@```bYM7 z3ibUD1$Wracd?xl+T3VTZYvz_{p}(GP?#>rr0tIip7TL!*T21E)I}iF``1pL+@ZDS z7mgqE26}-TQwon}xKBtnI$nZAd9z<|8HpgIM9|LNHo_j~*UvPdR7X(eQ9HN?RWj>j z^TMFd|E6;M8>3yFQp;BO+MDbZZe=exs*cx&r@wZfS#oUTJcjfPY!*Qm<1+%zm1ubR zotE1Bi531<5$c`*?`L%|C_u&S&f*~NVBZ|9^$lJ!!y zGpOw33`}E3Ttqzh;&CRo>pFoLk=?sa;^H8MOWL%*nX^D8&yoPbK-v%AXxn$=I zC2+7I8UxnpwD%&2yZl#Z*ukI};kg;3n33WPf#b=Rz3LH$e zSv(K{{*~!Q=AK_ray85+09K^{dy1NvfvKENeiB12)1dLX#pd0HSf6_vjh(Z~h5}@z z@tWskpbaB!cz8#h-sLre2uK8zMl=Ig2J07K;OfIVBTAVu!Yolv-kyt(_1$>!iE}yZ z22P|YU=|^w==(eB-uo@RaAQ%_gR74}e8+$@!ykEpkmTrR87_%3yc-|*hro&H&LHCS zrLZs9;6>&41c$OsIvhQsVtd1=j%2!gpC3c*FqM=uHiV4tcS?>ODDe+(LyWVS2^yW4*82bz_hYEhsGuoa-KL_+b@R^ZFf<9Pb!i|BtHFx1^BFxy z{Cfyzvrsw?XK+T(lkKJJTnf9Cob9SKlT!JNX$_;o&lbbU4Js<1%`)W2AL^Ps zvk)~$Mkan4Rt>rlNzHI~NFGh(4u%K#I^!RNg_x*P_QFNGa)w4k1poQUuq2x$(OD2sFQIxwkfi zb_ihzkqC(h`3OY_y%0uXn2E3yVGBYf!hVDk2sK4`*QjO~PV}oj2qIz^5*82{wNa9i zhBV`jgpqGT6p%2AXox0gQjrj4CPW1ZqizY&u!Lw-!xY|4ITA*@5~2eQHzDT^-XiEO z`M`a6&k?;up4Vvij+(FhP)l7sS(;f1CL?DGDrU-@!qSuzLI=26@+7pBO$gpXgu!(( zCqYRnU~FI}ByU0g zvAyTkNB*j6<={lgmCVGmmcmXNN7>vJ@=_{5xnR}ejn>P>Q-wr``mZ6;aCYI6!-b+c zUBv?ol4YTt4}m8aeIY1xir*~XCX~3*w*4IcWB#$6o`FP_!9W6ZGA$cAN>KW@XdUdV zwq8hMq`p~o?dHGiC0YO8&q3eD_woY3OY>lP`iZ}4W>;w_3eHF9WsWVEWX zRY>(RN~8=qx1Kc_hMSLzAC2_20OSDNA=S}|i$+LlW0rQg6~St3Wa1kRj@11B-`=92 z2py(<)cV?L%1b)1vjMvd-RIsR4|w^IfbN&xW4F5xdDUH|kM@+dS9U@KfEKUsEI{UV zR2Z<0!TXvaND_=Z95P0E2R1c+GL*mjrzrml67&W&Yw2jHsGe2OfTU5>hEH~nyibW9 zNnT7#*JkPLi)yN+$zNB(8bz%rh|c!TzDHwg^Qv`~{9iAADIWMZ{kbc@M^1k_{ee2_ z?Jy?)(7ZA`-*kzD+!^`d*x2)0b=zodo6ERhV?}XoNh?{bGSE$YE@j zcy$;nYvPD+hn;XdMoGR~+5<+2s}k2)GC&3!GA$u_1JX)K@`UbU?iS~4?9mCFr6k}# zj4Q5I#>-Ah(GdGn70pRwfJ}8`l=ycN=Wv|*5cLw+VenMP&QG}+5R%Y|tsx;=!8Izm@J^BQO}YNkvH@x&@Lq$tXL19H6|=1V&RA}Pr&LO>V1TSG%sNiCfQ!Jz@9rf2({5rY&*vNYt4Cfoo z#DQRfDVf&mUxj3 z%tkLeE{Q`a>V(OXYs2{%iLJyRFa$F&5Z$q@oj;4uhV6g}I00MZ{NNf?aTX*Pa0~{B z$}O&)beYkn*f$9ihA+g+0qrR>&^be2cDr2_H6Z6FoM87&;!=uM7R@s-9Y$fDQ}{~C z7!XHPiJ!&VS2|9%LlSdtD7*GhWgyfNb=rzUF^K2K9QJh(CqZkFJl(u(`(yC8UCX?J zv!xiPuB)WN2-d?5Ws@I#Ns&&&$(_WC6RyJ)S>7nnT`X|lEh?4*GTdH@0~k9VUNTbj z1FP_W^q6pmqcM~(-@T5p%uc=mt9Uk4Y;o#aq2g=zxp&9|79SGO{nC5vcK0E#x~otP zPpFyJ3(^LHB%J4!DU}6H*oRNC7?bcOreKRD`Ov$8q>j+xn_Z8Ijf+n}NW_f@TZD<2 z95y2*2^Q!W9i20~3p^ z$ekp^uZ)xzZ!&T|lvDyF%Gb+Gbz7>^ekas;*GyYN8cHRJoX>wN(qScLEs_E>3@k;e zsj;OgDphQX%OdjGQRoqfAo|V^+M;F*ee^VBOppiiwNy;aG|ZTpFfEaJb^_AWqGpz6 zt)NKKnl%bd&4#2-{T#YJQ&(=t#KFbu5RJu?KsMKs`i&;dwHgz17@@V5G}khiEH;Nn zls1<%3n~zJtnUA^15crOm`OqBb3yoXK$^(U5wA%)uYJ15s5Y(850vPHX3FF)0&X|X zY&<%n%Kk5cA<6xO8}&X}nAGZwQAyz!7_&a~LSt1%IpM6+q^FnK&pUChx!?79>O(vD zdSx`v#e8;ie3Zi4&;_qBXP_5tOeJ5QoZwS|QzV1ZDt7I(uZ*t%!CGr4Opz^`NstjK z$(JOSlvPgo6-74~AG=yKtocadk|Y^P3P~wxBooQ>NY(U>+49ds%h2wfB*-?3m!V^q zf8{Me8<9Fmkz-q>tG)&sZL-;xS!0Xc4msr#97AIAv^AAljS`RLtj+#2I)OS%m8+Y6 zh8SatITl-Pt*xpYcG_hGmdxVoXf8v!+oZgZP|&w_-aAd6?)n>Qtf}T&Vuf|K+2e>a zs*#EmWq~dO5n0}s_U6Cy;KLwTyma|`7+{!jrkSVIO6zU6*HLGsQ8=oKn%W?FV^pRI zAC5X_h5FfyLL@Yz-nPmHJM44JIj9_-rmC(kkpkmxL-lo1D!xJ`%2cSAK}MKhh6PsJ zSPEZu+<6&!C6KM5J|ktWcN?)k=S9s=m?T+>^j2)7iDp`;Ou0>VI^cv0vI+z`M^i&i zDwMk|+^_Ve;V)dWY+dwGVw6c{S!AgSo9%MYNf%*gB7>`?u^=_I5&!kn&{yJ|Nw7$9 zmRTiju4@6W#Ld9$kaKKqsMXe(9j5oz+W^D(n&9J1>j?cE z!6L<3W|g$8>nQzZJM3}5*A6?8a~-YESEAe%w>(gl`ugghX!gcC+V;ozFm4MHRNsl< zkTLLxc~KtpCu2z@K$vLpQf10dNtZ^d)N9dUl^#Rc++~q56ZSf2+9~IAxhow(iFEW@H3`09FnAp+EgD`G6x%IP0S8?(84_+0mEApPTn# z`!*5)2)IzYEWsfrqZJ^6C8=GW$X23On^gvkWTGn)2OM$2Sr=V*Cl9+a@!Y%*+qaPf zK){9CRY?vJPYPOoLSpLbq(w5TTtzC>&Zg%Tzp4#%={8`aQ9BQN4vzz7oOj)Qzj!mh zK7aVt000KV8}X=E1gB3DfM9V?s!9Lz#U-Q25G=>~j*=HK9tLt)wHjYU|HsUKQMP`A z|EW8M67QwgqQNKS-lw7tO1)7aM}~)zlUC;UB)BQgdC?+sroy8fbHo9`whPM6D&K6K zpZW2!lvCX5E6(O|G?|0ZhR3d+Vq+*v|HsUKQ6g&m-`l?iGw7w)q9LtKu_m=DlzO8; zPF^<6@?=VLPlB7`65kBFD%KfMjyd8$LYvhd_cl#xRVb3H)3zqyQKyOol=pFefyOg2 z(7yAHgg~5^%IQ&Q{-`sd!M~SXY198bptD~`1hZ+b5yQfEHO$xt*;0S2FY1kYsUE|9 z*OE=$P#2Y5O{)WHQjN`zgoC#@_SC=_TNP`I)y7I<*|B6QI|=L34N09>@;d)29W!eOM)p5la|e) zal4KP_8tAu_I_caMK;Uk*&k1Jcmy^X;W zd4*D|@18q0Lp}#GCM#Ho@Is9rVVFrKlL9JA?Btxr(v4_dycris z5m3CRs_cRNSjMj@2Jhm3bbZZt6E=~d)p1Pdrm&VmL5)_WYNguWw|9%AQ(3C7+Nw6I zjcUDGt18rLwQ^v2L}}@uDhstZk<1EK7*~l9O$W*4_-EQ81d;?eUI{z89fSN{L4!di zQ3sM}=M8A-==kzw?^jADWy*x`$kvmhMB_OZ#*X*uOuBWn@L8YBkW4O}ja{aW>kapd z>*6#LwA$&(q9>$Xvej)kaqpADM8l;&{mqvuedl9x{G^^SFAxeif$9-W^9+mQlfeM9#mNf zYMq0G@0cDLh{7098SDA!Gx0LUFJh;exdjzQXaJ?-m}LmxXET{CR-4`7mfIA_#2r_w zSy)`S)jOeT$6uX4S(`46|J^^3$zpT3Jib6E5=*2qxk9N@YqUDOK`Lz<$J+zvK%38h zfttF8rk1vju7RN*x33EmLnB1u%!{2RjQVJ zKl1m&buK~!C}v5=36ddYve+Chk1r64#FBcq-fP*Xuo`<@lq-}fwMMJ!)p=_yrmgqL zXk~3hueB+%Y=B{&%ZCtFgp2An@9c^DNToNsbS8gvi0fUJB zluX_6LSTW)n&9>uQ=*IRHrd)ryr`zOUyULN-gHX!J`XCmd%~mC?#$WEIlqYDt|0gv zIq%$jg^qHr$2isnU&KXS?8RNeC0)uby7bGqtjoE)Ta1xl5rNUJStW7%$+QcpkCRFg zNeaniQ>((foQQlM&_5i}aHiwB_ZRr?uALzOy3@VGWNzxNMk~4O9(!0EuFz-^2OPeF z`Nq4XK(%YOy5S#{{!@!;^#nYsi`$kLMY>+HJ$EjdT|31ovpe5ixIZXxKFIojFOe1{ zKW8**Mx}Z`{BWCbhd@%vFcV5)ZT87a#!e7w>TA*5Z%7()HNz4dv|L0!NMiS>M$I8l z`d}RMip0ML#Io|@rHG-Ff`R(V|I$y}pRaWWlf~BNaCriuNGy@c^k=ci9H4m*9QiL5EK$Ef(Sa$iRCLA6H!DHgPB+?#1T&d zi6oJZl?*b;BAXm?xruwYfmZPn0}M2ManX@e(z4qqYxZ0>q#fOx$f6(uObkIYn(f(y==(1raf z+T4T8MxBaI#{1U|hWhw|0sIN8{RGfDn4^FDraj;ZlJ*31w}cqieOjOwvJG%39U0X+ z3jFflpJ>ASBfea|bvu2fmbqE{KXkKuRGLabVEFp78r$w#eOrFRNTmaMCgm0s#gB0*E1n3VPTy zpH*1i`keWrMg{fgYh(S0jN~}|0TBZWSj?{2oN3HtHp|)J z$Ny^oHXFX488WN1_<3KEITGZC&#j!MVBPFeDLtASru8eXjsI-70(^6+W^}nxV zsd7~X+=Sc6FW@zxGXQI$^ZTa=3aQa-SnB1=1B7<6<*sIZV@)#6408-waOCL0S@YK@ z&=Hb1Wzm?bceCmM(^gA zWVU_Gqk?*UoHSOL`m#Z$VhSb!^f%Vauy*r@=1(QO8797k6JIG275VD3kh#AmE$P3# zm%G@qegJ~`=G3iM&Uq%!3&EY#UCrxee_X$%$+%MD9Iv;g2n?(3bb5;(>NoUi3lHhV zT0f$vb;*Z!>$L7a5xfAS`u$xyf4!ug;S2a#xCsUyClP2ah9*?uEY=ljkG02ux0S7KJL>=OBL}g{U&1%LaGk z$pQJ(g0EJfD8RaU^&2#5+`LsDjPOtX$D8ASXw9Uyf30h4>Yc*O(5ug8OjU&|fGg-b zzkd}(z!cNYZxJ)kvb0&3x!e`3YBg(EQ}9#Ycpu32)nDhZ!;dx9{0oj9H+gO#8n5ac zhn)Yy0U(_{E|8uDD$=7leloq8E@vkXb5#%U9`)9ZUD98@e4T>N+V2uT>HSsyQH77! z_`~i?rVV5kq;mTFQP&*p^+j8)Ft+W_-5ob<+V5a-OZ2kD8s+_NYrh+y%E~pjY@|E= z$^DCu!c>1=pP#m^6T7vF*_M@XiB>eUbkzgLhzoUG7u`(UdK--@Y}kIc-)zfus$*so z{y?n2_^NOcB$4d+-IQINYkX5_aGVJE2Dn81Lo#%zo0eI@rvCpPb0#-)&H>30ngWq& zke*IrE|PPTl&h57rROa-e|fc#U!cVW$WE`SP}PO0Dcq7GG!$b(olPmxw35v!!^~1m zFEgM!o-fP1vXf_F`4(4bQ3aOO-O{>QRc~wRue`n~W}s1DH{A9n+13arn&V`1ooSv^ z&3B^0#WiD0bW)*H!?rs}AY>UTj^Q7&bw!^b3)wIj|PWt?;x}PuWy`sB1tK-;Z z8)bh}yz797)R<9<9gXz7onExt%c{I;kJs&$oP*jTRW?dVAvV`Xcq$}iZ>HIm))1;5hxhXd8K<&YYqW1jN;4|G3n)Ao&hQ&WZg>iR*HJGK?o4b9&*uD+vqE8Ix;@`D=F;<}7JYseXkrjmKhQn6NT zHUCa_bJ1CLRo&g8-f*jboR}oHYrFOR#&PR5>KpZ&@t^Il`!{@j_l>%i{}0Vu|xoM3S5_)0#6m#cmvet0Q<{A}aT-x4jfP%S`PgR~Q(EPF#CW&y$wGXUX;*?1}wm;k>FU?O56U_DX^ zU;}&wU?U<6unCb4*o;U8Y(ZoIw!*Ig*ap7^U_0U~U$Km%$JoUZlqtWwdfWl*jt)QM|*x zFOL84FJa$Hgk6$g>F{`|>GA5OoV<=dl6e2=ASHmm4zdHl-$Ty)6aOXo^#6wZcpo2= z;`)<=k^r9%x&h$JP(QxL&!iH+{4%X;4b7r18j>~!+6dYTXoAiFnxUHj42RBjIT3^a z5FwWZp#a2DD1t~J35~KK9mois@`sG03m26^7LW=z)eo6xE?hMZvVlx+R~zI5nc}Tk z&>hGee=UL@K$f)7D(DGhO`tYGFCbe2vOg-x2IWAV=sTS$Hg50WjmIq$f~`P_3^ys*4wTF!Q-Wws`%{+60Q$V@QH!rvVP(Dj62rdFtNU23ZH9%chX4l{nK;0;_dvFt= z9#q&fxB*Zv%IzK81*i`j>>E4;s2^MGA3O$V0NWfGJOOAB+bs^B0#w2d2M5mp8bYN* zgBpN_vCHAXdw@o8(vkc8-%&X0=&gdkF@Ek?Tz1^L<8j3a!7reRRL>+<&tx2(d!PVl z(bmO(sY7G~l^qxbv_9Amw1Fw^3Ely;mjj+Zm^}d93?cyN7HV$?Gl1@p;@w~e&^<$Q@@W7R=50IPU%vDunrYvbczw$ArlhHYRY z+tq>tQ@f#OS%_ zY+id!2Mx^(1H%dn>oFW0Jv^c($jDxxpm>Rj>NNmB4kUFNMC}d@jpwwqUePfUFfmau z3wa|fj4e_;K!OAki4sAQB$G;!0+uEnN49J{xpFDx%coMPkXo@~8s*AEyTko5JXWi5 z)=IT5&SYrDeI9DdcNbjn=Y1cl>F0q5{_@a6{XO!?-vEFCK%jrn&@W+9QLL}HrVvO*eHS0V}MXVw!>U<>91t^r&4w$OYGq(!ik7Go$afgQ9ILueW7qU9J)D_}RR#0c5|2Wcaw(k3`W zn{g3sfn&54Gie(fr|p%O!*{~qNm1aBsCbqD z_$v@E5e@!{j+co6|HVX%S72cY!^Sq&A~)`q*bH1r3oIF#!Qu)*=UOlfksNVSz%VJ% zMJgB}HR7cSX^nQYLm1uYW~_QhlmW)ch$NX{g3L&k1t!Ug6xm>k>`0XZrpbw}a={9@ zQ6U6Y$%8)f!W#KdDL<^E0IC#(^%O$2!mxoNQKKl>NYSWO3~ZuU)F}@3P&~#{0_>$k zOrRvVNXghhDR7BWv60f?GNoe^Wxy56#AeEZtCWo`lmpi&7h5S0u2Vj?Q32efLhMix z+@fM!t`fLSrP!%5xI^W*LKSeADzQsd!LQY#YK;)mT6j=(0a_0asUd{75gt}kz-lu* zqLzT$R(Mox@QK=SS{)&zo$!>pg4u3(j(UQtz3@Es1;2iT7np0?2SQXE`KczBFNM40XESUgc@Q`v-X zqTqu?MTJ8b`V2vgjMDk?mCcX8K!-TOS7Foe31tu=LY7F8GF7S4($yxsp4w>4P={7+ z`nuhOw_uCa8Tw*f^kjI5AwwdJ8+X(WJ6y5TPRC5x<+$B;JL!AhJ7urE4w*9Lq8}V| z+98LXHEr4@$ILkIq?2*^y%`h=1p)$PlTGLb6ciOWII8jRRJF*2C3x|oVqx)AoOrJ! zNOM=ZOwX*g+8ccasSO!sx85dtlO{RcaQlyWC8Cf50pS4ylYxN|bLLFWg$o!S-a8~D z*SK%8^T1e)=f91*RESxgMAB4_0`e-=HMp+kMD=L5_tUBd~bTLd-D8y zEo`>gBL^IG-yw(8IOdpVPB`JYTW-1MuDkBI@4nj}c;K!lp2p3$*T$~6;j+t4y62vU ze)P}ppMU<_V)&!5%iee~uV0GSBeUg=_wzEc9O4a>XkeE0&SrxQnMLT^U;f9ktbYIF zKJCZ-;@w zq6&X9zN-Ga4;rS_`RX$OCiw!vN z?|@NkuWKSl9+cu$G|VL6U$%MzyV?)K0o1H_SDsDrGODv4zgnh>?lV_eP*WH z_ndgzScgnB=IUlHjD1=mf}b~4cae{}&Uf+$AIWdWaA}+V(qPGJN|3vV+KC46ZLSf; zRPxEX1nX>}i9eM{FS8cw83ItnF(Ybk!5Pw_a@w8qvJECT#t&En1=BHtPb+@erc)_S z>-i*7m^E7x3X(B06QpRv+@oeW&LoUBtCS58&;cT!xvo^QoXNa7f{vdwbmR8mC~+qX zxhPyLBEW$E;50E8tK+Gp^5G}hK+svI^+G{n&w7GTlmObS7R8H_C${7&o$*-pN|xv) zbj7i=as0<`taeh&73Pe*yrI7m_}Ak}`05=U2Tfq6DQ23dT)A;(n`(*I6oINwthLSt z`|Zz;dN7X&?apft3jw8g1>xvkj}l7QLJ~z@d@WS|A_XR|c2m@5*Wq!5h2o;j2$rN+ z(iWLB_Ngf0v}g;B64C(`;fg`hGV)Bja~Hj|hq>GZl0xWQ*J)e2vTsTPhv$T8NSdUW zhpml8*Bjx3yIsdPQ;~;Q@1`YgIaan* zh*ALF^F42vX``iPDZcVdM9W~^t?swQS3TglD-Fj$VF;6r;A&Z-mCB?>3Zg8&!C$9Anvknr?XBYe86LZl-qDVbaFit_Snp$JQ%1LxA<>D6{B;7li!_RcL&9cKW5p z*TN`S#A`vVTp+7>K7=TWx%=ruSoPsa0aqxHt$0qz=m|Iq#1(gg+`dJl^wmzPeo+S< zMl0_iH&ChGYJWLJCwpTk)%p?ckR~(}#_(HQJkmHEtW#!7kfzVFybf|`DrzHP!xE?UxLk=SryJ&=G|8N$Mf~C zHu-1k|7x7(>hm3Q+FK~X9yi`u=PR@X_d14=!N!YD)#q7mp`>c3f+bIfa<$}unXcDW zQS)+NJkbnmlI%EHZXWqd^V?MYn5#-g5$j|edrqF;A9S2edU@{`887}5jZ8AEvBnCe zrcTjpOL`g>Z?uJ;8KU)8MIGyS6{GFer5(<-Q1vOw&9s4X=!fBMhOyf=qwByL2r||I z=_1wB(txoYLJ)TXq3gw;vasHL)qU;`yNuoD-A|TG4TI@l&W#@zl74V(VLRx7X3=IH z8;lei-lP_7jUmABb68*2Nuhm{=>o*Hwv%$wast%;45ZX9gF73SLyb@nsuM^m17xbJ zYXma`T{%2W1cln{D&gyzt3oT^T{U7OagEU~6|M;!GU;j)l=I6?Q)IJPeVs7JIJpAA zg zrIZvp{F|}j3*^`R6yle)eVg#5k)BbfYbwem9ti>7JC|^&k8M$?#9)De?W`p``xviL z`033FN5_!?|8?VEmKjU{_%@#tcTS4}Peh7aHhNlz2$}rJ=q!3?WHK2 zpK73w+(xZFR_HiuwU0C{eU@D)Z}G<2Ru;?IVG?u}2?wl_-vWac-&PS~G+I+P@02W8 zSy`Gl3+=$v4wQ#_~vgF$OXPgx={#v<{VuTUUCR2TepFw$)|P#w?lYQxIu zoX-C1`*W;lRDY#0_|G>iigfFt^~ewTPenky0lr z1leK&a6$qo8XLif^C#t5FiYZ%Lin&vpq+Qi_W}zfVk)5&&-j~Jk~Br7CFptH2Z=;$ zgwfguLuxBd5RJHGPb*!)i%j`C0!pMh!KFg5cc03fjBr%GX4ob!l zzuXX3-dHkh{OKq#sL>_(kW`nL?c8(Wf|6(2R>GI)@_G!`-dd0O^w1hZd4RFzQB;IH2Wir$(JuPnwz=__lf{TN^4T`#Kme~#vzgy5wZnF zd0yuL*wt1{5%XbU{W(cU>Lnkz3smvaEO9|#4sycEBERB%F&Kwgjjbc|Dn%G5Li7wv zieL2UXkvOM89naBxLQ$1d-9!;iCOP~SY4W;+YN>QXSz#-ijtr7` zyYSJ;KNptQ{~1fvib*Q9Tu|S_R`> zZ$Z#$a%F)omKnqkNBo^rttjgg=E2cT!z`z^EJW8YX%1*?=$>(SNRED)SWOP_AZR%z zKa((vU2V z7jQ`c!U0MKmSGAG3DHOZMWhoz&;;@A9Pu$*(q&quN1F9UqJy@`PYYri z_Z0!FRqGN5-vNb^Weq}Zt1;}=EZneE?oYn{^S_KU!6(w`gKWun(ll<{%^SZZO$MnG z90KC&9}Eq)*yJP`nHhJ@vd~J~FcL?Qc$BFxXWqy!Ig2H}d9>|GOc^JMd$(3M9P<0v zXEfKQ(yr?B5R}>HR5bMsj|@%Zb|g$BkUKb2@T<+kw0r~!eE4~eNL|HRiu1ksQ8+vk zy_pPyE?(Co12I8xQE(zn6=|!Ht!>}wPib&bLGYmZ`I2I5>eATD66(^Ct#h3tb1Q6> z!W3nxxvfgk-?CuyAIi#RoHsXfeY;Ts&=G?FwtHQwv$buuaxJB)^_c3f0;^e$vz+Jd z5)-serUtLWUB;!UZMat*8F@36%s_ zOC0;JAq6TdZr%s1z+@}OFpHl^fr}P!e+1;iM}B4s=*OwwW^<1=ZI$5n$Cw6PZpDmC zQutUv`_OGep8eAR#HuPTZf6Wa%kHk^siLMBYU%bZ@Y>UU8JR^Gu@A=e!ib}%K-b__ zwwe>GfqL&Y=9!ypL?EkjubmlGrJ#~rQsv_)*ir_VXMc^bRX~@26e|_|!nf>0!URD= zZ;IM1sGeqT1urwCg=XETw~}FU3XP@rGL{aD7NKonyAc|2k~n2|4Y?Z(kxZoii0>I! zoupEVNj%Vz6;xIv`~zoTS*+P3pBYO;RPCZ$Rbn~?0{RLbUI{C`w!{+3a3%s8xNG0N z+&UCD_SrVge;tBc`fq*@9ny)T-t{=1BYk&z^+HKg3|hieA3J zNC7@arWi6#4X4`tV*M{)2j4$_U!6p^tKvcRzeB;gSzvb${)7Sz-qN!=(TRB-1}b=; zs$s8lvKa_~SXM8%jEVMG?$4daAb;5Lr-Ck!o(aT2_zotlGV*n&qp4)ZPm#|r9`~J| z{1##Q5p5-^>an%&kL}(d&Rm4rNNEye_65)-F@Kkh50$h+S!o-#bPgjVcirLLHEKOj z;+=L_rNQuUGkL1z>ppBaZ6bK_in-!V%AdOX=if9c2B&e`U7Jl2wUlwv;4mY=2qg9q zYx9v|!iz66>?P714~O6q8>F-fqI;qU$K{)uRIluJCHSQ`OT}{3uAH?3l+du#Fl+pA@1j+&RFL0*-)z=_?L7RuZp!k#O zK!1?a-!um(Fn3-j~z z4K9tjqBOsqqpf}7BfD>=?|ovAOt6a1=!eu&bqSkUT1Pht{m&aY^v0^xlgO0U4|i*S z*{D+n&*S%p68FH@n_o1bIZcGsqH!2&QpjYt7>e0w&|60fonFeX{!$Tee@d>CIp{u>(x)+Zn$SAzD5CXJz^yTj^@3u~j|I15;@v+Ki*bTMN? zLqnEV!kc*~UWD?N$+o|cF!i)5E?_nGT~cqhA-{h5SD+pQd6YmPa?YBxHCaWjZ|B}X z>0h+jRzF9@F;;kI*peo+L5T)BsxY%U@M~f)W!|-+Hx28TK=A(5ezpxiZ|kngn-53@ zK}7Nl8VB`9T&lkP?9Sefdql7J#U=G-J%~Qph_?1_C^L(~sZxPMV=xO#{sR@NHmT~g zcRl&Ze)vHo#P!(sJ+7;9&FE$6_M4Fw3p6Gml6NUW&5a;k&4V>Yp8?g6vWoA}ZIeF)Ltp3;` zFlos9+DS(w591&Qwq&3hi;tv8(TstjT2^Lkwka{2Dk_d7RTu&)#Z{9OLo5RY(H(D` zQnwA0rJ(2&WU)S;lOqQyE?iwi*fee5u@JUOWGW+KTR%dH0otjK1MP%4>B|5r2NZVS>sPHVTN~nkmCKGyE7mJ%b&g`SewbfNB zBE@yKI5u=^%mE`F%}OuxyAOI%Uh=l`=8XD;SD4oBpZxr0|NArkbDlR?XRRgETyOCi zYYuja9t1T>ZA&N`9?)evAv!Xoz!2~QNhYZP6xh-#)(1r?++7|+@V zbGVjvCtmP~xiM-83pM<#MSbs`rNP%lHjZ_Bl|b!<0~GWT*eWq?et5pnae@>}!xeL# ztv+fUvu87Bn((&&`d4%rZEcnL!P^d!+%rLt2Q&!v@XpiErcLt$%gqthaICPrrtS-K{su=ugvmQbDjRrBd=$oXd`~ z5yh>!dUATRW}kn)>DNym{Et8O>(3^d!LFbdXchUoDsE=g5C=XBx|h5wbYvcyX(mpC z9K^I7A=1hq%gW#%5HM7pu$HW^CR$l&tH#_>V|>o&H}71tOLra;d_{;eq{lvZW9;8F zUoYg-3if8eR~d|+K>8xn1EA?ge+Pp*LDJ4t^ zTEd9omV#1_Sc9p2zsbZ^vMKr^rBh;NASDff3uUdPQO$()-$;Q(@w+OYPha3hL+*_f zSD_;U_U*K{%;THtd_kLZ9QHLdOvFyinjDlGq7eS;AkO!l{5oo*CX$bGIS`hg0%O#9 z_gj=7Vs^gBAr+!H2+r~Q=}lKv)4RQi-)@X4QWZ9a6he823Q1j3`Iidn0Ij;Z=G~dd z>x)e{L%*lGQs=B)&v4>y=#SEKKEk9Wu8uk?LW^SPmw~C*2q87x!9*q_6FXB!^J#; znXwhO=6C{z5>(Y!qRMDp&ol0LM655(j}-uX8qkdzmtD_tFKL&Q=eT#b8^vU^FWo&; zbzcYZ3ISDL_?6$pr8|TN6bOQ%uPAX6(o(}SQv7HO!P5J|Ii8E&oQL5O8?B7HOI>>bh44h)F4BGg}=@hVA@lH+S|KD4=W;5y3F7 zUZKGf9@^2c#8k~;TT+Wis%#9>@mB+9TGf=Ee%CjVMhTLvjC z@dD{tDIFC%;{trQuAjzHynSGxBku7ZEvcKg*D zC`2xm3-R=KRLKRKi4-MQm7K2DDE8_PH;gP_6)8HI3rV?FhfT(9U(RLZ^_xDWb<^66ks*c=#-RK6(f#jEOel#kOVWTV}oQ}{g?#6BP%nRY^Kv7`AEHJk3upPX->{0 z1U9>w`$I|)$%B$nFF=+6LS^yuBlcaehlq?&28oSDs5_h`djFIe&Gf)Sg^;1uo?~w` zQ|xJqOQ{&>i`d%!J`DdkFIYFSP)cI=?wbi3l~%9NtrfULjFPTWUz_kkmQz`DhBe6= zB`-e}ouaA2`8dPs6Znf0O5jR|>$=n^Md(POTEJ z9RUzgh1E=9oL63)i7=b9)s3V~>_w}IFF~>b2!I2SK}fI}gKdmzM6XFVtx@oXqW_w( zb%{qQv_7cw&v+1%0-;6=&|`x2nj~e+_|Mb>nOWPDI!itrQ-wH*_L1raKqy3sU|P8{ zhBZr1*zQ|z0Ed{!4FkcDzeW@XU;A_7l}2Gx_1;u9OI4NF&q&2UKqF}w?513>0!WMY zokIg4N~25ie%t*Gi@WIgZA!GhhpZx((ij*N8jr$jrP$&jwPexMgvgIINT(i~jghFf z(qg0}xY(H{b1IGF6?W2Amupj-0#0^B7Ce+v!l(A(4wd!0&|^LAvhAUy%Kw#4CjSaAyZ} zuLJ#WA^)x5L98f?e<=FHyjY<;KGjjn+-kMLRccQY2|uCfSkj^)5u~APuocDO)EvMB zkTBtr7%9PU7J4EFa5TO&BA|~G&q;@9By=emf94eNBvGMCR323?8yF-UF8l8!2PIT8 zsqB&lL(>q$FtawUqoIxhZe~xJ4e_`ZYATY-f+902(()=&_Lq&$Iw5!VYWm!ZQio1; z99PrAgVakmjasG6MhM=P8duw24*yEdZR*?h&#d4$vpIU4+6g-zrExcwYE-t*Ry2vw zW>Yjai+fjczbsE`R&#SOaKG*@JftC+5UxU`63fNYVQk(dl>!3FL*gW&N#FtENdG1> zz;y!^8;DI?$R;0-Rx-3?IPkgLPYbk=t;lJ$!`y1uFx*J4mqX(kQ6XIUNoAlkDn!On z39pJnBS22LMq@)t`0ymuPOWJwF0qFk$sl)2xicYT*ljs?MITn&aS~-vqbiFauAx|% z$kS#ERDKIV6GP?bq&1GiEZM)t<}BoXI;iBI=w^N{m+=M;OSY~<@AiPWo0Ck=(9xDL+gBrF)^MH{olo{skQXKEfnQyG zSr_S>T2*DVkSpq|Zc^tRXlDs;dZbgs}iVdWmNqgn%w{6uKftL<6IJ^AR<-W8* z3AIE)ZfNO)`Bqw~f9bd~V}!V?gDvfn42~(pR=z324l|OUdC!L0pt4eqm38POmC{#w zKWQauLu|)43b01e0Km4ER4#md4_d32Th-{jwJ2das<;MD&&b%4KgUNNa`uuZ)g{}o z(rub@Co@l<&K|f6WPu?_ajD%uF zlkY?p7}x-BsK6k$&diF@#8MKITKpn{)k$b@Aof?jkCEzm6p9ZHQ5Y5s<3ODs3GjFx z6c}zB#jn~oysuB_AGG`!-)ax;1QCmBaR~#pH97A##tIz0JQ{pzRI|H9`pi}Dk~ zVHTgj%reIc>*UBjbwt!X!SvJ5X{0PCsv`&cML~fk-2YCyAY71f(BozsdW^IO;{WTV z+7&FrSQua*-rt#u?z^Ml6Oq4b(0`D8&FQI=VMLc?uCxSbFj9~g(#?5sa;?kO$fTh} zfKwkm>94|tzO|yeAL$(b{+Gzq7-`plLkVGLN-RrtsO}+_LzCLZ%NhWUI(5&9qj`)A zw$Z$JvOdr`h(|OO!XhJSwxI(+rr1JJwlZXlwH5Su#2uSHQ)jXb*lG7)$31Vo!jFp?uJ804gaZF>Z(`=f4&=I0{)6SW%3)k98 z)l_!&Ly*V!cuV3X&Y%a;lK_ZnkgYCAdmRvK(e^GQAu4R0VhQHFxxBbejo$xwr68_} zpr8{0iddMe={8^J>b5e~y3=n0ocQA%6-G`J$(_*&3F-h5Q(72RS(H6`oLoLen+e`2 z#9CF@93J}I3~Bw25+z&Dv!|0!2!{TC-ubu?YSzsPD>j)->dxigPw1D~*7e;yq-k`0PcO_s-9tVUS~S&cqs zd9b6=ZePu~76o(_c^_%TjVjU7*G6?$yMPH55&jhf5C{MP0r_tPLjO0zQzK|XjjG%2 zE6IToCKtRXEg16`Y*J)O$w@2AY2cj8&y}2W2>5WcDU7S$bQ)Mb%(}^h`s3Rd zCN-m8->T@6-si~c;!NT^wBXWWV(ajn$IT1vVtfqBr8vj3gxl{NIO_ORF^LBH|+=UYXl+%CAe>u;E;zz=JI!vqLhLCn$Bje2i2w0CHW zHB|Oj$ozEeD5Pf}6dv+mjb|lVGuilyZ2pF=Jv?nLsIzwdv!c`zNsD9Eke19@(6V~( z#3~3S7s`b;CB_NFTvk(AF2EUKORUAR9D;kU`}tsEYyDoceU2)TuKpErWV>92)!(%-moi(g*xxTfYW^3 zHmf#`3M*>lMCd`nuV|d51+l7V2lgWQTqa)fhi%D~v=8jZukb06E~%gT&LNbTwN)`% z+v$U_(~vDH7L+iEt#su;>z|@I>S}TQR_aMw$HE+Eo<5CjPF2v2VK)= zBwkryEtYg)wB`YPcbK#_d;}wm4nE6;;9Xz=Iglh2B^udn5~Dy`olZ9fN_2SO=%>Ne{;s1c?{||}K{ckSPA^v4j5DdXUv9L-@nl~CQQ@CdTK0nt9v%g|g9ikCA zP2takJ|-Ay7cSrc+Wx6@B#Bg3C6P+MTs)0&p>zV&?|b3gdKSZFrhLYsQpE`P<2#1? znr}IJxnca>Rp?cmb+YwRdKvNgw%-g__S;~7gNfbk^m=ez?0e3qd$t{AouOk~A=lUP zN5D!B@O3QuQC&m)sh6#^%t|scS)5lX{s>Oat-Y{*rh~T$l)>(K7q9Q!c5?%2QHQu# zEtb`9+pgY3K3G_n8~Oi2ia1iUgW~BUYpb=Nw`-@@RiJac))r86qgLD*h7`)%s|7Zuva$h!Xtv5P4PPCEW6XjW3JBw75ywb!kz^z(L*qv!p#WwR zt2ZR(glE;deT zF*u6gjjq&2d^3^(RI>2lFnw4>J4wihX9MJ#LcxM5`B$UumXuM=r7oYP~&HKa;R}R!vbfp#6YAW+#V%_p+Y_dnKv9_{i zp^)2uD$17G%H^)lMPFvo>Q#G%bY|NZ&AatQ_ku%qRWL{od1qw`g*YyR#e^XBB2c~?dAt>`bFSezsEP*d-I#KS|0Ln zY!#rG6O_&hC{0tSM2SsVE~TJMS*X1K04oK7%`0_`Dk>`JRI187FFuWVD90+*|`6-!M*>R zK1c$TKq4|PR1i@`xlR}xVZlwx&jVo^4L@Kkg6KvHrwaQ*q}3m2ul=d- z=J?VS$pp5~)>B)=%Q%?t_Nh@ZZ8P{Q_a5i#YauRFpkK>V3BVeK?WKM(+gR?SI4Ln` zF8*oSuZwTf13o{Qu>hML#xLO^d&&0Oi9X(yJk`LA;;L@KFe^nRY0wu0#}xb{1i_cv z0Ccx6xn(eXCR_4!eePRf!I6TdRb@DP(1^)m&ZJc7(BHN?uXzX2WWUHWl769*euC2h zo*6*X0)pRtskp8rLJLQXmj9;Z=JmBL?^z8q@=dEJa_mp8grGiuiUH;A2Eix1<;eA| ztnc@hC_C(=6TCv)nMTIse$^qik~}%ab#`)hk!+sY)if8H=tFJ^&mDA!4)j*;wXn!Q zC*%lNuyOlBPHnIa*&}9h>e8+fIFJ+sDfJd#}Z*I%3$VCw6w=fb-Ua; zN`-$l60RO)_m?Dkryd9-JdbGwJz5i^h1(&7z}%ZqzF~928v?`%!J?})hk!xx-*?iY zlFUi&{En*jqL+E+4bjX=OWufVRuKtfHz5=USmMHmE=gfO-C+6QLC8Vww^oGz`Nxh?UqrM|(z;E+RC*P$isj2aP zkvxc`cV8r}OFX>4J5A_d^$n;o+Ei3_UxMxzo+}#xiJ9t@6h0Ci9kYUsL~Q+gC@aaW zbU^rpI#q?R8dSqiy|FH+NO9!vyOl&~6Q=Da1ZVNz0=4r1ajnKB)~TrFG^iV!`Ha|U z>!@RjV$okh^)1NNHsHT=M^{-06F&iDx=<6Kekws1&$*9 zGRQ*CiDc?b&imu%sh_Qt>~RyWY6Njx+U#5{pS@l*7J<8rs4VrT z(IO&$(1fLfKTLRA+-5yZ-M&wRAi^K-J^yI)<16HqQZz3A_ATu$7lU0M@CIF)&+N&4 zmMUS39z*4IZc-gHc`kkn5mk|$nEP8!kndz(x8Kk^(G89JY>(yQPAA#7e1V8?#oY8Z zdN^lX2!#d>P8`7{?X?KT4z7gsE2FS|?7$iOh%mQWu~RsZr)uf#nk{IqncL2UTLR%( z_st8j*K_d5*=+K?s{TyhFJ7GUC4jkmnkKI`aZbS~n9q+zIw`MW^ZJg5X7j>00}^uH zvT%nk(K>aQ6wS=_tmQDylMMLvuNu5tJe@G~aKTUk6vq(LP#juLsR+4tfeC?_wG5w4 zCR(my68LihJRbhMro7qk!~OxoXScsy^ou&|+5IjpEw>d_*QCuGjIYGf55zraQj4^6!vs5z(FEZIJwcF^U6&5l0OXW$++0k9$1xb#@m)pgzuSF|H!O#uTK%9qU#P6&E1B`fRFe z&%Jfoy?7>k`fG)7l32aiLF)WhKkhb~kDiJ`KIbesX#%eU^~$q3!sE`;{^Vgkzp3aF zKP1&DhfWwt3{#jRLFqIdD8q|dh5qa{;2Vl=jOENKQ~#-;a~rSFeDy{KiGv;v`pHb` zAv!(M(>*>@&!a;j@iHNG*I8@vvHa^|QM=aRY^a2&7-L}t#I4fT!%@bBts#HO;VubJ zFFaD$xXi~qLaL`YkD=!-lWK}%=Q*)-5mcLw;hQ_RjR`q??Pyio{6F333cjHuHzu} za54=e6|6mbww}BUvPya$b-4n}wLHRgU6sr{AAG67g3Wx~faKDPSJwuqJyGT7Qr6n)ivilM98=7g;4Wmm+D^*=RZoRN4CXV&@ZUaE`93ykBkZg< z%}Heq{^lYl?`L#E+JBk^5DKaK&4$<%oymU2A2dF-AdnETlgDE>kuV_)pF{F>_DT_v zhetn%>v3+-!kuF~tTSbqx+vR|8P#m4*|i{9XxYBD^AtL{_+H8;x5`;ac5jT3Z)Yt& z0ze2+SOVay;FdoR^2_PvR!B>}=*qVmmcie-DzKqDWEitqX~^dYNN`<%b0@L%QX6nq+9l6a zZHEt=pgJZg9BR0R;%j(fXqxbri|RJmF6xvZ+3R(ykf&`zqO?Gbs(72Q`j3o)b2%wx*uS%3Y?6-COm)`4 zL%nv}Zo%G@Y>9w@jg0Ja0Urm4r*@V$giq3tzCzT>zu$2Y`@Oc1-yJ@qda&K`@0+Fw z>I#%3cQQ73++5}<4<9Q2d7)f?Wr*DvXg?3nNsd>5^uRT_2N-`)E5F+Pq-!eJnS+7vZ3p}QYqoL)RX`a(ifRK=%hiPSroy^0(NdMrH!?ID=k&-`QT zF3qW(y?iD_@GPDVd(F{BRq0C=N_4yj1}QkK5g>$oLKl?7D=YWDA{kwx67^fT`nTeO zC!=$`H-DVA+UF+@d6v?y1idlc_N8mu!@@J=NJ)%+tw|iVd-Z~+?`%WWPjCu##Z0*U zO6?lKy?9+mpCs{Ees%?rP>22N{fpK=i!CS4#c2Oi5UyymbQ^g)A&gEv?KiW{`fFEq z(3uI$)2gZ7iz*DhSGEG|8(JyWmZ&}50jvbfx!Xr}=6j-;>nb8nTlINv4e@9T#g@@T zxdwMzJ08eK|HkKN8OsU3cgtCDrWZh@PH}9)iZnvFL{@>usWUt)$60H+Yda-W40Mns zgr(cgA;gM@)}eGN06_ioeu+uav&Ivi=Ii#;YY(L*|AhZma2YgDL7&YKQ~X|5YmGknY??z=*{ zd9G!%&f@ZG;(yn&p_t;8>Zu!N@BU!+sme9h6Xw)Z)WSpZO)M9-^B2hV<*&`RKQ6!Y zj%~sEuPacFBQ@2ZzGh`$aC(StIexy3ljKyxietO>jK*IYZT&ewOmhfvQ^{k>jlXAIJi33#{(gMWd@qCvHSiFt8;7CT~cbX{ma7zeYxAcBL6FI&q@-r2%78`&m%tZ z&VX7%LoeAH#_vva!pVn}z~W48vuV+QlcMnjVelKLx~-yqg_p8xj0l}>i#6Q(?Ecz~ ze|HI{zJuopF1P$11C_-dpXp`eSO0ZBfNOmr9tqfBkA8~iw(gr2z`qdThUPgAR&3=j zV;Vr3q23rf{E=+<*^#T?#nF4|on+qyr|;~$9LO*o(GlErQr4iq6ZjU`*Q~x`Qi|u+ zkMx7TjdunYPUtFb9c5ok)wnG0Q&tCTcrihN$jI0Dr|u+;6o{(ua;027JHzcQuF@I; zAS33z#oww+xX`n>9(_a6nx`>GWnr+KKt{=Nm~?}0J3`u+f)>ehvqMHlwy-9n;cDGR zlkg+{X-}8I*jl>wGIkvmqsbL)sPG=`V*M>*eVa11z#W;*p1t)83S}1J8sI|ryu&X- zN6(PA(%V}fVhYaI99Sm3FK$0R>xrfdf+d04(a>emiJfRfrq*{Gl%GW1+2a;Iib2#C zoQBrGcp+m3l`y~u3u-^BJ1>dYsZ&Y5looKAghue>dM;fOGdybQ1~lRtup3CEEp2W5 zQyy%4eH4vGw}j9$FySpgZ3^Pf_vHO6v{hoV^TR-BMvxBS--g1|ATY!-1azpsvu~tC z>mRAXf$}_BTX{M%L~LDWvx}wq%rMKpYay%rZH$555N+6(Jrx@*PSlBRY5q)&KHhK! zTgXeqzZ<>@sxxV@%{dL~=)U(e`e8kRAZD2mg+i7{H1V1ZhJ{z}t`Z(XUdndT^Iokx z(H}eBxpxY%Bb#H*?u?`k9lC8krN^m`62~6Ptt_ABJqEr0A0TQz%B0q>qdr;XSj~LD zan%J3%qbqZ-EOz@dspIB@WL<8J3fWD)xY^!1f4i<;~9T?FSAwh57e+3T68v%JnnX1}5sI?`+=pLg1XC{~^=jsM5fGnDZ$~8s0QEZ}t$n+p* zW;N+tD|6j6l)S4J;FNqkqG@fvQ);`XSL6r5b23N;AiD4$k3xKXkE1&Ku}Xmjo>1U+ zeg%D}(MnGS1FqNwJ|McVgpW0EA&a`{Fe#g)x`#zp4(d&b=g z?TNR_nlvpjAzkz_UcE!I6R-N~DM>srgovp!jrC?3G2vAz{Ka@MmVo}3takba!|Raj zs%Ji*N#pH>RIQ@?aId@mz&ovy{UuC=>4aYPbKb9k$V<pbql2VX5 z42|~J+xP1=I5`deA%Ur{DM;qzjB=_0eUXvGkyjl!B-9(wbTJZ@&C0;v)C}Z0NoA!V zTFEWP#}YGP=OdQKIMXKDgn9}>!Nr)EsLOU}cn8HZLM6Stg@vuM5^cGZgt}NMH|ZE3 zR`X(xAL;?iq*p*W+kYQ=$VrOWtAgY8JZBXtuk3W6QxJx~CjguGrvE8IJ-QT0E?piC zTOs$hr%7HZ7LhIzxSAKhRH9k8rvEW--Ubzn6xgCD>4p}n?u#AXpz1+9Z02!C4a9k1 zMi^Gh*dwF@?$jS?Gv>|Ik@MxKM>4ShCpckvW&imKU-E{rtUQLqThZ6fm)Rag!F%Wa*ajyuu@*#k@p=* z*HJ6(h77%5WVI@G_2iL}4@%MuzM;O>C}dgGZwylgJqizm69I#{o|5YIQiatr)`wye$n+o0^@gb&b;`M$vKE9os7d-W16WIJ7m z!X(5l%D{@)EP1a_O6tmaoaNqtf1ux*x3BJQ1Q?3!7xzc|yjY2Kfj&TOe$N9Cnq`(_nwH++g%~M5X+hSmpi-@SH6{r553+Egfr7sk zu^r1%G$Jpo<_cDCGYI|R1ZZ=#GhJ&o2V+-7pvpuVTGFhhSkQ_dh#tW}FcTYM#&CC! zA!krSOEo)`fRwQG%#f601BQJhFSl65OyS7tx$iFhkeiH=rgyldLvqjGn_Sp`hjVrf zyQqU?^?VZ(F#>~xBQ0rS3Xv{Q)Qdq@UQ#`B5T2V&_-??ySY{Qfr<;ZCq^~j?AIPyK zN0vVf77;=2+7f&LBb?|kz#{23(3T*8<(dONXge+FVI?hi+0Y*hr@M+Tr^)>Tk{VX% zSDrmRE@V@wr?wgYKZUGr;5)3WF`C32H!f=H1!wl;KO>6xM2q9=oFht^;*|$2a|KUE z)e1nE`XqTwD!OrO6t?S#3&fHNHXiZ1#iuzrB0|{L)ZUz}b5z+b?=C5IX>)qOq+0Mk z&y~hei!5mxWlT#dentf3h}?QAc8B|f8`R+;5h6H|p4_<2Ew@nb#^6P;TNlz?n}V!& zq6R!sYvML1`1OXB&@FJV*b#(V7lSHleD*NmyVUTl4R3g0jEXrZ@aUG+gpOE2jP-i@ zuv#6=c38%{)jIeQ!YoCzadMAc*b&MwTuhRx!|&HUii=Csw4Kz?2XE<B~`v*x1SY5Y0Y4@xw)EV7{4MlgCQ zOf{1<*cN08j)BTmM@C6?AzC7&K_(`a&~h_?uG)*9dJh#5<|chMS>u2w7+CD+QtGvl znA6;VP8*&6%O!Vbn>A`%k@=dbZ+bNWzDZRuAost zxy_Ss6t|yVi>9-LLrwel$QF1KG_BxGzM|L^ECA~wv8<9E6!dnB@wgYrql2{!L-CAA zS+&+35D_hfgFY1GcY6a!DL&iRy9Qqph;sdDV^vysh^#p=^zX9OxW6`PveAgVck@Fa zRGq|@w+xBSnMrdX&f#1RGVn;IqkL?z`4fZrBU02tfS2-wfp-xsl6NU~< zkYCWO!IDtFXFzoovdc!w3z=~!(=-LfC*|XRr7JV%b;;KR%j!5}6=L)PYDg=vo}XJ0 z`d5_myyXqIr^*1%Njo8P?U?J|54-oM%i|G0}DgxJf`#ncvne2hD`632Ze;-OhnCImgkjwCk31x?-oKjtE9WWjug11F)3ql1`G z1GmV#1WBvIviNg2T$X!L>s-X}NXGo#Cj&y`gJ&2JBaf_zQP{&d(YrC6R59dQ?Qz&g zBCjI{It@oNqR~m>K!dD;?RhaUC}rNBS2$-y{AqVP3Nk}^b@u`A3p?}oe)HC{mZ}6* zRl1=zf@PhF@Q53H8jluN|oDX3N%_PT#X`B$yDyAaVT|Lu)^9_i} zOTG}7HLsdRAF6JcC8~{j5SHoU*{oao0cXpSH8A@lQb*E)(b=SKRE+DN1IIp0$e>0W z@;2$7t2$+}oSr}UccPa84j4ryD;~&eR`~ES)*bi<0!mGKFYXa+u}GKm$c!M@FhBqA zv2f&ahXa=`gJOmhq0>ICM=8fgV;sj}SH#hR1fT=7*S4N4#2`lU^DSK(4Hx!2Z|G%{ zxY`CQ{r%ouCf@GL#R{{iUKP!SH6Fu7Jn5AavFf`9#nyrONnS%wh&c0f@DEF-iujFC zxNf^qbW3INjGz-X zqBS}0F!Ik0OT$0MbHIh$%ErSJiacTQMA`fg8dGhvSyWR5tYu9cdgd!F;`bD=5J7US zc%2rXmlB%2MYyl-CmGMeGmVeN{b+?PCyK42O2s?aaiCSci};GQN^-$8A4AxgoH|75 zlss(f$e}Sf+GdgkT9TrVCaD;Nx(2h459-XmcaoJf-H*z zXvPs8WuVls5yH&4sUbHUms#LL0PBD$`5Z{H9#Jxr7#;&aWhk3AAR0qftOF=p8uA-Z zr_FS|$HR23M`6j6IF=Ex6n!na4wgh}@R%&1P&gppz5q&NBuEMk3nnPV>`<}f`0VT+VoiWr0}>~pBq*nVBrs`+UT`LO$N?@etRr+# zc1tpRv}2U!g*9d0>%C_aFMg+S_f`h1GZ6;PpD`upo-8?qVJdwXwsD!(^nycbA{iZ)!$N{CKtckHq%-I>peTgv`9PAczbn z%v{S!i?(^O`|>!Ger0~9T=iS5tU z>kJ1ryCIuTW=IpdclvbDw-hT`HCZ^>DcNKa%3m7|f*!D&b7$~iA)n`MusQZwo(Zis zD^VM1r^`%n7ZaRuz-_FF@3C4|X17nspb0hzMzPZ2#-Ca>iKwcszn9sJ!p_;Njs;k; zm6|c)|6qHwR#jNvc-9MNeC*C`bPRY^Po;A^c+?(E{gOn-G3312@UuPBJoBmNGGHyf z^oOz5Y z%LS+DJ)9`uRrVv{O2gFC#Vvd2p`)qJ$;8}KsM(e=hm$ZytK{Zron@*`Qu@TL!9G{ zy{`STBaYL$gYQAoQPk;&{Akv;PT}6GanG}!(Bnhv|DG~E4^*~>B`NM5dDFY*zV4wUmm@HWfBIkg zzY*UE!aS;9+d?Wraze^NGQo9=RDy`^G?LVkM3iMvD7Zrh8D4A% zY*K9ZOv}t4i0E6|-FAPXx4oA_l{6g=kvRD|#oxmE(tUFKeW39{IYB`~1qZaFoKcfe zHqwHnz*0LiwPS)~0UAK6aH=tS$<*gK6rq`bmoMJOtHz2ldWCkqSJg>fnCeGmT|r&R zPSIeMQBh*GV`*gpcEx(NSlyEtTpfG$Z0&VT>|f-C$YrY~vt`#M`jy<3kAn1K`x*fY zBwIy`hM&mO@5pY5Hl6 zX-{b)Y2NDbHKsMd+MXJx+Nm0z8j70dn#kX(HdZ#MHvX6VxYD>XxRkhZt3;>p1GL>S*Y=>nLpE=~URI;slM~P z&7^Wp&zt2p2``|D+@&f>!@^T!99WQUW;@Bpa$MjxAOWmJiM+ z91vg;R8B;e5RL>AK_`lN0CWr$6^bGvPcWL`ING(ionOdD6=3w=LG;8D#=hqfWiKH* z;!@>TWnCs)=3Hj{zW_%-xW5zQ0(;ntEDzT4owL?O(bn zJt%!P{a;2`20oKI^L3_LCMdHuvp(}6i#ban3!Zh7O`Ofk7R;8*Hp=$MhGeH@4`fee zuVkMeq8K2jq$Z;1;;_MHB$Z9lu9o^K(hLn9v$vdj@6fya2WiLTOY;-*j|zwjPzC$~ z!2-7eNI_kpbfHsWTwzP$M$z*k@uH?;{$lB3ono8ffZ~SYt>TLkSP7$qzr?Sksg$+U ztMm^v9oh&Zftg|NVX`oJ*eYxfb_Tx>7s2`A&Tt=iD7*&V3dg|l@HzN8oB+Q-zz{qH z7s3M(fQUl0A$k$xh$X}>;uMi^N1JHZG5;x76#4uY+o;e5+EcTB}K`1FIdXJE}LTw`#O&a%+}qMQh_~ zr|Zb;QtL|UF6x=}0`@Yd^mK8bwDjp>$Aws2EfMsu4AV`ZLgCKy4ss zpmbnq;5WJpS^;f@jz;HVm@s-6J4`Sp86DA-E7i9SL9%5MdS+{6#6`Q9uzj z=`vlVJQYcnzKj=+7mt^Y!^RQg<>Qs(|0WhsGEJIKW=~d3c215?UQCfwyi;mZ=2NLt z=~K|D<|)k7{M6zUVd@Y|gh;R$tQVGn<-r25idbdrM_dRl43~<_z`=0MxK`W{ZWcF( zyTH}p>TnVcGHKhuj^;q>6X1_%(>~0 zvZWYvvSP-Lo9Sug)vjgrO(@+;8@8@&p!7wu!1yez=d~Q!wU>z5!<+jX`JDh zY?3FblTT76AsI#bgd__R5s_dr(xVSrr31RA04-9MmZ?uiP?&PmrWw^}LI?ADFL5t@ z?{GhBzj7bB|8;+He{cVW00drw0zsePMTjND5#o_cgIyrWwUeoIZx)9q5J_YOzV#_& z>HotI`+fhE%+w3v@9p+d$c7I`9UGMe>5Xv6mE zcCEz3d!`}lu|OUH)ZL-4N<^f=p)M4-HXu#JK$;ikL)g(pJ5YcNkU~H8TL{xpQJ&c|I0<=*2)zpa(vKuGqjIgggNTTcX?#g^gR6wI*Ha+1^Zv?@Sif$nTymp??C%I(I$L})7f@J5t>oC z5f|Uiw~<5uX0uxy!{0}|e9R0Se-oC1Az{nquYEE?cC(rves|)Oitavbdt_5uqgOVo z?a=OX6qujtfkD!uf+jUg?_?|pM@svvPt5?dk3fsqd^Pa~PamifPYfHQ*)yX5 z)z8eSero|lN5=G?>_>*}{R{7_gE?*Kgptc7)sAzLWq;|W zS~`2%<=VWL&Drim>?Wy#su^w&)e%$X{5*zopWY7i^D3bMp`fuT^6ys+%C60}DgU%W z%mNoX#i{awv5FQ8MlSgEf||fu$*(bz&}`tK6n;b;UwMw2B@7VxKr7_Ck^|2$fdbJN z`O`kVGf5ztq!O8JocY6RhA)PXfLU%5WOP3s!#Wicu6BbNMgi1_T7aE^l|_sULNdvt zzZW5dLaUBA+3Gok?8TCO_WFF9xSQO8+Au zkIdNUjfxr?W4nmZJmX|b`Tjer({xQ$a8uYKf2M)8IY9&wH=~7(N)i#ZiW7tCiI!4u z7o%#IX*HgYrXYPtViyL;&?tJ9zZ^8{b)a!_qd`_b>U28_Okc@_^0>9p1I03i-Fj1$ z_5-Q7@S{;rPZ>vt*)qO63ZFv}z#8;q5T>hNjxc&bm`?I`qN5)u0wrWq-^eQ`I`kq5 z%^-dc{T0)f7MMP)oSzSyh`6YPw$2WSMqbz>N(mH^%~|`wT`F->0j6Sg_E>gzlBjXC z`6NrSm*Y&orYa_t{29Ho|7TSP=rKcG)Z#7Kq+<%`o|ckidO}4t9>#x}8Tgil5bb(y z?=*&Kkij9^S?lSuaq>O0G;dCY*`Tb(C7O{Yt1)4p2Hz5nFBwM?W~{xq_0K=oUT*x) z8C(}PKe^&OJe3{YUZy>Z3fITgv)G_nV0sm^g&59rVovDC7AL@`KYeeT+!fwa-*{*Pn1$TZyNZL}3mRDXk|v*T(7Q>KRVRkx{b zRGvC9GV8$^Z?tvLDNO!;YV(8pk3BZfRvcH)@C`-%`Um6v>++6TkC&O}w0$tb-wfHd z@PkpPkap$|5a{wtL&TnyfPaPw@Bg`MoC*lOJlw_2PALBs<0mU2%Nup#{Dyu%a<+#G z0I<1-pTq&Ktcs&&5k;HVnhz+TdziY#|Y!w+7>`8SxV1mQ)H`-Ol|9<0MtNU-`$J}fHTofCgsJro_ zRYFt@x>ow>d8&6iFlUTB43B5-ay&@Ir0Wfn{i4$&aiDk}B$(T^JN)u1_|=K!ryaT- z7Kch!_+vvk!(Rh(S1(SX)6$tlrE&_~xg%ia!{_8#tfRoYJn>|$@wZ1ATvhHNuD#>B zpiF?%_~Dq9-_Oo@hdIk;2N&NWw|-;r`{Xjma-`&La2x0q@fMlgB{wR zk*kjpHqilv^IGB1PI}O2K+RepD942F?~Cc%D_VAJq|ZIJyqGC_)vGUemM!Dz!gVYM zZD6)#jAZp9Y`ONWUd<{=kAUHyQpw-SCjWF+<%L0y@ecVEV3Nw*(xmhc$Nb+XsdO4( z?(CsAfkVi{D1`_`FNLi9EFgB%QKBICB`<*+vDIQ8Z*v;|siopnP_RQ@GSfxBv2YF{ zfkUbX5s9u1z}*mn^A4=92$0!zCkT^xU>U_xEKioQX<^tD|aZR zh2(Ekfj&X4i$oVYB%bAt>rIqSo-dTZTu>d6Kc%`Yg8;S? z^|3JroN=d!G_n8b{w8ivQ+zx2))@9LQ%In_ZQ--7SRd5wV<(SRJ8&GWrE)hkYXNX# zlMD$aM{X_V5VN8}_-hRB#&Emb6 z^OPWr3Bu`T%`XX_5qHfU zvcBD?A4vc5uxdtnzbsdC?$nVZr@5;q*qImQtrppYj?$dU>yf`I>6x*qH=HAT??I5K z2De+F7y>m4t|7%S6NsM*c%%!r0du2QJsh&Fnmip{hyqM4dP$XOF7)Jf9)tWpU0;rL zNC(nIn5BHL$U!ZKXTSB>Wx4qAVD?n9E8{$R2=1yv(noH^4|*t*^>&J;8ijnkJdKeE zbiBIGqH`94B?sw92b*y_TRz8)g$ zf2B4Bp5Q@yeIa&J4*^(AAP0GHgIxpYG-$1Uy<9A?$!1E?V@6k4dxAuS*{5;!tp=@G z54=XjFpLDJ`;iZV)Iyw0kV(rxdU22^df;)y9UH`2Ri}nDNfTsbf_(N_6%jiX6vSL$ z8Wc${MCCqwKG72({&+jk2N5R~=MOR2qr&92CuH_qSVg=t-&blyp3$MDP`L)J9HngT zOUm8QVQt=`kr$H-p{EK}m>8P4*GJj!I-&^umKyZ@9-~iWr)yt2S!)Or=?wuf%~{V} zyo8vy;mP58eORPZ|39uR+Mva(J|{alD4^c)C>&b^|1?VWAYUKMy#~2HfEdVmVbhMA zk*-n91j}$f^nrosjpziz8EpWU$I7{UBfJKERfwtdVwGA zW{|H${R8muJQkKR#8?W^aU{K|_%ch)pcwyXDTnXy9Jn-}BAP3>OS zb3Ydt5X0#tevTlonT*gzkR7y^U@s$&9dx2`T!iv|I;)BRkgQ(jhw2m18Uvz>xcKnn|l0{N_om<-%qg;dSzw;`oQVr3$ z6|T{~`t&wBurvhAoH@x(M_lOF5CKFpIJ=ZlRwfO^uC>4JcdOjt@POv%rV={`F3`7&1z z+s?gM!-i=O%6xqPRNe4B1?*JmpPqYH@;~pVp?2uBV*B04|7b6?B*{8+`Lgmt0AlH_C6siUE+}D_V zmV}jP+}NXpxbehh6UPG{%30o|$=+Xh=ba7!+Gf@=xkX8U!Let+GKRU4-1zhCp*B4FD2$6wza=?BEF%XU`l>t>C8BL`BP z_|f?VmjC%(_na%z**18l&JKfFlX=cI_mRF($_Gr+l=qRM-3Ul;BHM~kQQmZzxl5vb z=i3yQ0A*Jgv)7jFse>f;mh>?bnpk7u#%Tt^dY6DK(w%?AZ)VjX%<%4?qIi=>bv8V! z^p+aZ%yt==@c;R<%ZJQITHSzJR^b+MJ-7jMhxxCoAUCv5z74d2I-ObXu1#6hM>33LFE?hWnhA%? zC5s97{^~Ln-94Smc{KvwQF0tax}8}v@6Vs z*|IfqOR;V)SylTvlUNw@V~PA-HF{RI@>psvVN(O*(a!4&b8xIA)CAms`aLsOmV64L!M;%NGTy-w;PRHJ@$`Lta z$Z}radEf5G#>TynWY<2HUWu z>^=oBKZN-9_tY~DTYvwDsvXzQ7y;cP1!nAlpG9bjbxaB&Tj`0H7csb*nRjGm?54`J%$d$PcG<8Fj;`DSMcL~t8CToO@7nr7P6GvxdS$2i7FwQZP?7i% zb1a*b+{NeX7HU~%U*^jj$W}sndRsMbGHJ2W>{}4*hOL&!>RayDkFpLeaj%qvWv3ka zwesWMV~fs$qG1?J{kX9>cfP`!Nb_~BB#w^}t4}%SqZ@MAv4IX%SaGMhRiOjLjA>43 z(WE@ zT$bE-P%ZW=O>|z`{;lc>E$*Vu0VeFeLjKrB=L>t8AHxRp53VAdMVIFY^b!@K2bF@> z4frAI=7L(S5-Hl<->ac0V;&_?&W19vKho6fKmo&SgD-1-2?Pg+0qS!y4)V=NBS?qV z{jO~YYWl$ctGQIQc`MID=TXzd^~8y2Um2oMJ(3(Rgd23Liw;VRGft$Th}?Ivi5?x~3D$07{PCxyU0<{#v`2)PJRa!B<<3Rf`E;(ncF zqvy>c`FDr3pxSfEY&=3w)s1F(3f7hsG`A?Q2y>$VXK!Mvkda8`az;0mIgNA|q~`1< zB}~XQ+?@Z`OP4FM^rdfrtkh%_0wI`K&RV z!@VQ-hcU|^4?T8Mp-kpFoSSS9@&J|4;=>pnrPuOKylh&@1WiG~Dpt@eCa?%|LnPbl zneM}LL%qx_uTu6pv9%WM_gjaOK;|e^NOBR(;b9~JP$A4;nYe9t$Z8^jac2U8o9k62 z6BP(gi%2mD+c{y6>`-xQCHw?9ypWsucR8Z|6qtytI=j{;LRhRMgWwlf{`Yf>5}?^w@IVt- zwR83XeZkHsXcZ>>d!Gd+SG-2=PkWF{#9P?-L*kadZ3ZPK_xA``R`A_S2>#l^_ zjUW1Tv_f7Xr5nb$n$LL-wuz;92-MV6w)8m}hyODFJamInk5Oe+A0r zok0hOlxQ80^SAU+EXkA%WlA}dWQyuEs%RS^B=A)B1gXO1Xw3c%mdkPwdY+W4;-Q?l zl#^5=De&X|K`JVZFaAVc$TKA91c!oC`&$!fIdv~GbN}eY}LtDs0N67P3{cP$a zn^IJx-3uuU?RyXL@ zmo~^2C~rf=bWS7W2?-ku+vkAKXgv|+GnkY;d^^Yj-tq`qNG9JS>XOBFr3!@_`>(V2 zC=&G4qr3C)eE*mFf!fvP=?!39k8@hk)&WjY!xG?OjaE`rh!>U?Q-{jvg-L*ibERAL_*3C1eI7na})aV6Dw%_^jhBbLwI4+@|!%Pt8|R^ zgH6tT?>GEV)3A8Au+51wM-l8gvFq9^ZQ0AC2WQQ9QNjWCB%yG^Y+p{~WY&{UYyeoB z)&&PKY6!$|O=R})-;P!->%vP7#sTvg=8*z&Grfd=I3yXdLufyOysn9Sl;G^B*}#bh ztvm4^Rz*{aGN40I5)TA|w$ zM4@AgC;|QS73aYEfxvF#)|_9$5onZ?|H(7f^&RPnoG0IwP*ez5)U?MP4Lmni#OHXIT4iT0J z7->Y_rfXygpk|C!pzeZ`R*!9{469qiuj1WIK9>XR<|GWf}9tN30ZOI zf$dx8>6A2#EKZ%z9T}bt+LTu7(SF`%Yqb^6u8Y_WYmN4u>U{3_=@M>5Z>v^B%-BRX zId!k+h}^|^K`agH8&8P}t9>VH8y2nEKI(T|s%2uVg$fg{Ch6#1%UI66fz>Ql?d5Rj zlvUTLg}zHda?8((1bO1X7y1`~K@UB|e8?tsQnlRS zb3ra$T`EuRSUPF3NZcx*s7F8>eGo4=SuYl81&ue&ud=h>iwuCIA0c`3Na_xHlToF( z;Q-B&x`oUq9>#cpn#tZYzf{p9f_25^J~wS}EYzV3 z#8O$DfEH!PmU{f<>RA^SG>dsqv%{><>gFHD%nhVyOX6vfBu%0gWE)GS`#oV?Vcrpv zb)m(*frd^k$myTea^N8qcFT0mY7hji7D3Q#5Cn(m5d=J!!myKMI$NNt?aeY9Hr&de z8&u%ea%3pnJSaVDF@8D-tOv#rxOeMUYqqdqbm65Q}M=MG_C!1%Kq?w(u|5iXX(Mc_8dVUc4yAxejKs3uR%-N*7fT!|W-uM$GkKlg<}xk5<%6CbpQm?9N1$$>XRv09(P zWZJI321k&JtR3{3-Y1VUSi9biBQuYc{-!+Ds-uoO4%}1r=}uVnxoaypeqO-a%&{m! zSt7(#pKPsQVNru-}s8v>C2U#X4~puYSz3!V+=kXl;_T6 z0{J%hqHg%~EMp&=(YezB%%R6vN*RvTn^$bmc?{}~7cILyu@PpOGVta<)!ZGeF+ zvS@@gs7jxT!IsggTU;cBu%P}n%MDp@gG0HLZJ7vKG(oeH;O`uj&dGo#znWYOplEf# z8!%D5GnR59{}iIK`8U<{a;$G&Ng^EFcBM?v7%d_;$^)B$t$UD4;I^-oRhdpLXz_Yy zra##`^Rt9iE}=M>|J|R0YMWMSS`zgyvmGHn| zToVWgyfxLK;pWP2PGI|EI3=w> zAqMd?e2mx+6wWmP=V8^qc@XfUIIGu2$UfvJ>I6y6z&OO~1tO1wc=Sqi%7z;9fO^OA zlOAUB5gO`}e}+je6**{>u)Np`z*UYq&AAYGR&H767&Pm%*c-vji%e#puqWW?_riE! z^7<*d?=jo}X+G?jrH3d_M$yVI@AuxhGFIxd;ydABb-}c8cF!0}Eza*~^WoZ3W-dZ{ zgNQQqDiAfHr@_yA8MKE>Hw`ms%8419=?13&o@bY-mF;sVgga0DBbI{teny+LrbWnW zBEUVI;~Y()!i4LW+^uI<>h(MX9?LDi7pYWI7-je-|{E6hZs_qkEfO)d< zc*U763HD^}E=k5X9`Y9ZHQLYuSli52X5a2=a=1^)X}rDj1Qx&AXo%YF?cw`FD$U?X z1Ir{q9Z2)yO+++I=!K~@y@POCZO6HT-*0(ypf1ir>fe{6BOi8rzERWnBOP=7 zmq)w~x=oi0HIynz+U9|ER+{0Q&g*}Bm13=R>a#ypDk<}+z zu&&s!46=yTHoekVO6v%ZY8xkhBR0BHllApng}GWL;3NzqSm4zlOt-n|$s2kWPOnB< z^KTSuBVdh9K8k@H>lQ#$1F)_GG_C>4ZTh!_Dbl^&5jjaHI!E5pd*mHGPtIvUZ3<4( z=0PE)YA|ofnI&Z(8+lp2k$JDG<1~E{NF%+ z8e3(s>X5im-Cxs_EhqaMUleNAr9Gh4yA81`kG9%w8{Q4%R+;svTZ(R|Pp@#MZAmQGCEb%BP1qt=&dT^mOO& zo#eV%z{j+_aNjp!rhPi!nABl3JkTP*6f#;<$gaPFXZK4LRvO~%GC85e@_k(>ndi?9 zjpzC8{^V1ko?P9z^-dL8OIpycHg2d@!ok}rzqL?{&JcAXKv3MuA&3{2xGCt#M8NiO z8-I$P_(+oUx7<*jCb6LF)|u-ieXnZ8&xwOu#StTz*HhJAp`t7mH^roFKP|<|@)Uk4 z4_zR*&7LN{k8g&OY6e;2U{+JT?iays21G)QQ<*|U>+Dh0fnPgAh`{|}n}Z$OE0vj`-Gq`#L`p}L5uqBh9%F$Dx7+F~zb zUcH;EANBLnq^i9?8D@?x$-8Y7T$B{cZ>^{R~W5dxo)0Kc`ri z6YtV|@Y!M*zxLNWJ~0u(dw=S`2{=Z2=ThJO1nlBOUJDtKIVOmS(v%69U9eZ;F}@M)K$O3;J$1Pf{N6*&n^6mpUi&EMoc+svaW;&XF*FT_BM#G(S*C_#nq|^LBJC zqV<42*B0m&fC8Wnumyai5!x7l@o=bs1oo4LWbs|FK<9VM<U~UAAX}EAdf@8EGSxg<#|$F){8@p(KAxWFP!PA=R8BrE<*Os)wnx z2yhj0Kl%qYxCNox3Av?)5)#N#^$;2=){(u$?v3C^WT1?{-vqqX=uWV8r5a?|{v;3i zj4%;QP}n4QB)`v}X7cA3$c#`}b+cZ>*oaT!^U$p)oL<9fXx?uq&{I1^oj+g*HD{CF zPfF2M5){z!DK_=T1_Y1|)?C%mr^f`%@-8R=&0b{D-&CFCjoP}DH=Uyi;B*b_3BZO*i1OX$RutKl%g&?Qr!a1sEi zP%2wi8oP`WE~gI~9&&@7LMseg)^!M2`=2nwZ{j1OE?H_*DN(3#V3;8z$qscl$Z~Vk zt+`tfI>iff7t>8v#r%4dk+XljxGFvb;;oz(8`B^R~1%BIB1L zil;AVG3-|nGLHUx2v?}SF$caudoq2=ATXqt5`8LA0{AU+N7()_Y8kXht#==Q^dZ%c z!GH3v<){{&L0)88BA%B!_pCaksH~5`wcAJEv*c$2nmp$eqZ5Dq)lUuS@CCvRY@{z_ z)U~i{kua%aS!iwji$CBfsa$WaJGUeU*T>|IIa9x2<*UY0TVEVgYlLW#p*47s{;pKC=q_{-OroD`WC+?tBJ~Ol; z-|?+VkS%}00^doGh+@(0Mg=B~*4^-h8TUo!|73No+c?1KewX5CH@h$IJ!^%5LvmBh zt+`u}ro2wCvn{B6`s+c4&KX0^d$OL8vH^beyOfV}8WoOGkPSl^y-eOu{iB7CVSs$n z1CJ-?30+ofS1M76aS$M2E4okY(~NvGJ0|qluB>|n1Y~w?u>_460<3~&*{p9;5i{>m zhR&NeiMv3WE<-S$3fq8|*$!S;D1y7DCuvnEu@Q)@Y*E|3x=%CT>M~*G;d$XBlXsvM z^T0A!**2d~Xa@f1gseI(zX1-{==gsYY}?-4ZbgY3I{6aBu2^tc^sX$#kz|s;ugg?v z)m)@s^5_6;#@pW3sH!uwr|UBE(Du^6;uZ#=;M3EEBeTXiGJYS6jVl~K?ZDz*)ZH8z zRex_S-Lb)^4JzXWTk9K#;F-OX@zOdNyW<;ue_KITdH1VGG>ypGR>ea0IT|bBx{Td9)=#*P6+FR zy&(tkhm}zrpmnZWEbV1!4A2V5gtgikq|(h(FPAkFL@*G;=@Fbi&gdB&n&@wGz+T>q zpI3W|Px@kkCP6t+s(0y=HR1r!sFD6B`8xUAk$MgWg#wjc37^Jvd~Ta%&YQ?@F4yHx z_>Xg*V|~8BF`I-8=sIYiA#ejzNpxplW^eq%b-fZvr1ERf?<7w;EQr1{awFO}A8fY0 z`HbI(ajvdWGiBe1tQn*St;D8aUv7Gq^C|L4mC*Vjs06Xv9`Jg!UmDv$t)8SXa!i!; z!;lYVtqpFq2cs&;1K!Z$Y5VP;xd4L_ZPTa=i_;76j-4bk$lnIG?st0aaQmL_Pqx#g z%2X35+c<0OS%=wcd~^khst;~x)l3&sHjHNtAU;e~#_01+cYx?Seo8Km8~yl2ipERq z#NKP605Q;OQ5GpYh<$m()Oljy)3nrlxa_#kTG_(ZM3)8fVb4Xy+xS1nR@r!-fgV?_|0SBDT zcP2hEn=^bdwfW`!jz~kn&9SvJruEe4#mx@(b?CDI%xoeJ;}AbJN32U@fVc|^|H(Sp zb$T|iK$aJESk!uEe@cZ~=PW?>>cI=+ zL1SjU`*n}!z1VzRTCmI-x$frYjuQ zq1OGD-mDUWN{kqdOgW~g9bX?iwaR(L==?>PC1=wK_TY?)) z;`D%qh{o1N9Ve+#8cx`rIkEko?mY{Mb|~wkbY(X?{z65B_EpSgVpm5dhFTxSc;XKV z(ws21VwOWABb?U6U-~P0u1_DD%4e&Bj-pX)bdSMItO+p|l3czh1Kfd>4&9RgSyco; z+3NNwP1YSDNPk_=IqUE4ISl>X8k*;85DN(py|#!9lY(t&IH}3j1hkw!ytu>& zW`5;K{3~C4kIpWf7qtR-P3A#c4?jX+CL#cBP>neKZufYyt&*#HKvLHSF&q&tm0Bhq zyBK(-4&i5kUX+MD&{6~9RU5SLw7mV#)&=+gT;jg(_-*uCXUoLXhFs`@Vz?(BCqAq0 zghl>9z!th9iw~T>6D%y8QvzOxqWG&E(?HSN02*+!%voC-48`X!%5gX^8T+JeRMAsPsu>{fy7Spi|N983V@Uy$l+Po$!{`{>0I!RJpX3U0;2*L3U@kWXG81M~i|E`-;kFOc_k z3o%&DUOEgkCjH2c*-A_aj;D3|uL2ixlVKI|PeflBK7UzSrebvJF621}tUB`g12LaK zn_&Y%OozZD*&#Y&E0Yv)OuC8nO|YmjFJ(G^*mg;*RB^RNrV&?b)T;!WgwMYjJ+cO6 znnzvM;?WT#cedpMx%+dD?c8?WfF}9hw>jRH-M{ONuu{d^j7($fQ?KG}BJOd^iS7RP zoOExQ9C=$uqielHZ3Ei$v zJR~3S458R@_s1ou8xZ##q^WSEU6311PJH(iaQLF&mm#yb9K+aM1l><=%^M+Jnxfje zDBdNf*h|tTWZzr=e6Myz0_5c&QLffeJ}uL#tE_Bla%Bs4!asb0_qmj4TF~y?6VMq! zCEKjsIzv+Xec_JM`+p|5AbLgB|C?WEfqd&u_z%IGW4YC}&=oa3Z+U8wz-f!4;r{K- z{xIWw(ukthimkLcu~xd0*}*BiU2|SjJ{fA{lscDvQPzshiTxBYmuLp34}x6@jA3%X zeXqtdrp=7wH9;Qj)QqjgY6wFiN&_3xN|pixdzgATY&)fP+%Q3g_8P*$7R3d@T`qt+ zojWUMtlGu|iykpH#Z#or_4z5B9}0?_J?n1pK?FEsRoec>0PYIJ%n_(}0LfK+HTa4o z&rWMzJsMQr$(6GL)>LzIx_k;#4SW1wcFO6JF1B5=Cm-Y;QDzLYrSp@cW42p{rRU>D|Khq^fxQ)GgI?o%ikF%3=h7|2{=DkOTE!b1 z6C(JkqoT_fo%1_2BsZwLwSv=Y#w*A{$wyTNUf8ANf*Yf3a6OIa;GjoRMh_JRY)d3X z-#J3|@9QOPak+{i8{4)nh^&P#iRhV}NiLB8}<4bhKag z0(y7MEl%9eP2`eLfg(N}ke8KfZJ9`D`=P2tTp%W|3#+5w66bh_lA-{zhgK+t#i47Dd_8i-G?D~|W|EyBI-cC}hK~VQGb`06S@J~(Ram9Dk zYZ!^?=vH$63dfm;&=u2C)wgL#jESQ;xgQ-s}w9N5# zH%>9c`4$u9pqAPLa^}iNNP(_R0++NUq6t+$$DdSlEp?`#lL7>lHSkLi0PcG%Pf#{7 zQOki_(MS@6(I-~dC)rSTvP0(xQkkZCSsI=wnq4{rUGAC~ z3Su{t8?;bXy}2ASRdVh#)8AQ{C?G&&+)KM(N6OK>&C-*=K2UIut6}Zc)*sIE;r1gKgQdJoei&K;METi zPcd%!&_UxDFJq8JI_yf~_mXR^DmodotYZb#iPxGm9dGQHB||x9IW9kmHS^D&sV{r! zZnkSNq4N=Uq`i`VE=?u2D{Xe+7ues}4(aOJ>e~-Kj{6DKTh(>4Izgfl{nB`###6o) zS0^%__w9DEk30jWcXq-}qGK_kn8+?=hisc|Pi#=K(f-kDycIcB+@frkZL-sef4D#H z2h>ogf_tAIGpp~1H7Tta`%I?>nYQS_T#D=!^(Ziy#uD2UUS@ZE_X?BqO-18A+1c}f zB@)SG<#UXzj@ivLF_6KFrXOC0#2_Ay*xHESV-1HB_u03~B&I#9@ao<2L?ha2anHJ! zFMyUv0dqc*@(58*Tx~_1I%$sS@+5SI=I33@yi_c39&cHO6PSYc1fQd~Y#ClXE`~hH z+YYpULMU8}xR6_JD>Vc0Hwk(6C{ZOeb1VWVBfBd1{@(-zBH?4}tQBunTo+!$C-62g z!{Mf2m*A5wO-a8vw7Je$N5zv4O4#K7O;;l@{rh53f~)^@PTLrV43(ZHX}S~zAx(yN z>-dB!CCEUAApvxB5iz!G2?bpUO>n7dRVnyX@M`M&{Yvm>MVi=vhU}FoL#He`>9+XS zg`28O1NQ(7}7>sS=Z<|*Y!kD5hagSAX9eBv#DEz1A; z<)L$Dis?CXFUjrVU~=LEE*lN;9?i+diU?Q$FK$jgVIAY3ql>+yDKrkZJ5#+7EKYxB zdkjU&E&V#^GPW-VQc&?7)fN@4J36hDxm+rmu&%A_axLNOM{Fg`oH^wBtq`2Q6bsXk z^2<%<`mbLjrW|*MCeVsGfQr7}ID60fmQQGE@Ku)d;43@PvFXB%s05Jw|`Q`RU&LjjEPCTs^|%c(=K zSHVaXWMN*f2dylOy{IR4659UtoBFK*Y%HX=kXB;6 zqYbk8ld{V^`zP`CpPB(l%BOKCZu38uQBtEt7d$O?$l&!;A5%}KbedN9V)NgW0~D~0 z2j!&BIm3BA9 zbWD31afvg%dfCaZy!q)hZ6QtwHtBnv&&4XRK2Do$VMxcNCOXpYrG8FQ4)hE~`1#E!WJ)1RjLcX&VCh816D3VVIn<0naeLghBzCNOA6s{(OT|oZZ!Hj2_Ly zp#%|>MWNgOCImS?a+iUD+OU=uZ33;iU0>6FvR*ps+b|RE)XL1O z*|WOyGS3%m!k5Hi@Jn)3`en9)dEd@7Z)IVv%0hFN4HjT- zqjEXKblcLbkTVbN;who_Ku2(skuEWC<-W1lIMYZ4|=JAarVA2hS_w99;=lolSR(Em+gVx?0QceNvnBZylO*!tmIM| z+92fxN-9;%80+{UX!K%zsgg<-(_L^RR?_(E{yL(&_OO0Q?R7#vMFTOE=@mH25$%7i2AkD3b4iq=PmxjI_acl)Do@evc~o zwY!TS2%a{C?h}NRW5m4}B(39)yX|i5&nt%;g_u8=9+ja)8yJORqr0u9!EDyfv_DYV?LZ&DBqbLS~FdmGgAqWx3qe+{u4}htx<#0 zou`#mG7jTe%qY9GLZ)e}dDOz9Q+iBC6ZNK=vlRjKwTo zy~gNib*iB7HFytGD~g7OnsrXu50Rk3S0l%6OZKvUw%0Lno`eE+5+XqeW%ldlkSgbg zUZkKc(o+3wkD1k*b%ewQXkb>vXMM)tPMBYs+3s^4hjbcU7`4 zD|@pvK)hCj!NP@4+Q$;XeUSLe6UBPn5#b*|r5sYtNlXu!`b8i&&}{Xz zJMZGa_C6yM$WzF}_12msN+H0#LYd>IUIbm?PrTH^Y(Ser=dAbMb;qvF@S2w zK21y!N#k^}SK5}pgMeGAr4*^wMYwQqhSC~okJ|@%ThYo8EgESRtoi1iDoxi@<7U25 zg5(pWqsGly@@AXK=@^gpDasvFNVrvm7L!PEHg#+MavBu-+C0?(AK8H?-2dKIYFe5n z_WnIS(g9asE(i|7;XeE%j~Hzw-2z2CUFMW@URvzwB-3m3bKkGpC6D*S4i#wWD|i!`!CQ1N4D)SwSWuj9(#(F!c7zxI%v)5Z1Q5qJDIJf{5^tWby9U(t zhOXBWNePA;8TF%Bs~#OT8vnN?{ZZ#M3P|gUE{Zm=p~wrc+08rhck7XDUUNoyIw){S z2)S3D=$OJud5xMWHKox&GdLN33^msroE5E1tJ8yG_^mwtSpCVJa z7Bk9laC0>PJ9=&4T*OguaTklQ9YFs4d9cNh>+fk=&~g(Q66<=LgFXKWMC_USf2a^u zx4Pom(*G^bsA)F>5Rl)|cpwK*z`TAt7>E`LdkfjQdVo}fd`sN+ftMNAXz$1`=tAGI>APv+ZI%+arr3PBG6x zt;E#`UF9>8D5WFfIA#to8VsG*8#bRy=;!w<{mhYxAxgt)hSL!ze10ryX$LjZJ|^lv zA?xOaOzePx4Dm$LL+`%P4nZ>n?WQM?cqqxO^~Cv>4>>DRkmp?&mVWpr(@eCXp3WYV zlY;#cDav1QPwU-@SI}$O+`=LFsJ#g_sC@tgTNqNP zDBuW)iMbDK6xa?On>@8x&B5Fmu7Sb}`#_Eozph?(_K+XHCG&4$r_vTD80U7dpoAPJUJXY2#M|63?4V44>bZHdMyIIg)nCCV0B2^hhaB z_S@i;{{p%rIP2-a=W>s$DrnPD;K98J^`I6p5sE<~+9GtFGv+d4PX?K72$EEq>8Zv7 zf@q;FE*iqq6oly^3PZqN>J57&qr9J~A1cf;Bzq_w-$XcN6U6T13j#@((KjQv5r7>= zSupQ{`TGVEjJmH+uni=aP}iyBMNk6U1TQq9X#|jjC9jdn!Dm2igh=qRDiWrx`w|g| zIPytJ@sTNP1VyYnJKf?bocf$Zq{ZOPMICQE7tz6?vxC_XWf~>CC=5t~qB+rrI1^m; z@6AF&;=m(td>(_`&OqXh4h3z%Uf1FV3sGe1fVgoKqHp3ohVO3;U;AR50-E%-`0ro8PjVJ7t?5{mp-)mfio#?b2k(=%uNJ7c*8= zt+2>=`}z^%3E^cvV530vpA5?}lQUZ{7UW;uW9iprtQg;^-_k|TIf+0eEa-X-z-7umXL%)NZX_d zEek(^>MJv6k^OzdyE)at{{CKZrO&#UK+WMxUPt;iggr5p9)4+l3T$VuxedD8^_5Ee zE{|fW@le5Sel)1wJa1RL!XpnrKb%}T2$-ck-e0SJIfGx$?sZj3&jVt_on&t^qY509Q!l@eRS=>G}9`d*pd|C6^Ye0p?u z{<2TQOT^J6-&Hdt{meP*Zb4-NcM`@Z6#4FbKmE~%70)`vrt2$)?EQc9S`A}ue9~bs++;^?Oxzv_UlIg<@_f9FISRb@SPZ%s(fs)P zA%S46l)~S6(BXT(&&2A+GK7e!bKaQt)%+$KtX6Mql2^OJ+EK z=F3pJD#52^L+gA^ia%KT)Z?bW?)LEzevv*97{>@V4kg`nHAvQpb8?JF>ouMk$%wR< zeM6R?1~^gpGYjWmbi%D8a44!voQ92A6^)B%zn>jW^);$udEweX&&n%rJ$UDlg_Mxv z!zXSBW06FAMW4u}fAk9!Df_}GCb~`ClN>5ILP$s4+6mzL#a2ZwA}RJnO_Y=(;e+>B z7=n)8>-?b0XH`x1Y}NlHus_ zs;`LmdjkoTs%A7xFfD%|L_7Rqw;`myK`X!PdEtUClgKV((Pi|yHg)zt%vgExrPErQ zVS!96WKZJ+V`m+hN5r8VNLoM_0sf3t`NHRZGqHW6!=xgGrrEw!m-Oy8l#^*ahZ#RM zuB!^Pp4giH7qLZU?KA9=s-k6D!SR_U^~QZqx~h$U4m9u@^}>)M+%jYZTQ%b}s{(6UR2awevVk)`a`LJWr8 zIqg&1F+h}NeyeA+eL!ZOsCwiruJWyh86U8by}0%X;SaT5ssqFMTtd=%-SZ_nhk-^G zi<+0%kg)_F@P&l<=m6r%*UCzhA=S-VIrH}`YUIXuGz%|dzDQFBf%>^RJ|l^ zz_TCH=#Gqnd~t9sh*5JCMpJ<_vcdMeQFr}a(F@2Ao{+q0{HE3X2=W z==1ly+QV%6r6IG_KOu+Bo-BW^cPCm-hO2s@wsJK%C9A*HmUZERgHCjXAgQyGYe`!E z#;0%gReQxc!(hAK;RLED_Tm&fPNv0|Z$>(`K@t2bubl#B?zX$HkoD1}C+tU=YwC`@ z@_5ToTEA;MQly$$vgxi z&!#IBDL^{ih0&EU2xA)@u?Tb3c`v1nQ~dMwu#+iKMjzd(Jldr*mivDm{y~AHKvW(t zI2!%S65z0HaKE|yxVz~x`AfJ<jPNR>NzF`jB z+Y6wthFc-@!a$IAq7$7UgV^9FFA}#51$d)hNWTWHq9>D(MDnc0-LB7?`^^h*S^CQp zS#KU|;iaS%tRU1_HjxaV1wcM!)uw&yrwP9o?K7VD2Jam5LvCx-_&vs~Ba7_GP&5r5RDfTJi*g z?{Wj8Ot*+7sy4%M-)ie#D^sC!o@2JdZRrvvW1Hkw*L>4*BU74lijxzwcC1dQI;&KQ z6Bu_9H|EJjhL8genT!05!>Opuv81_D0sf%R8}7RG5+8W$bFnBM5{G;oUe z+8Adu_*x2J;u)4WT+-kIRmXyj`<%$1J2lV}*VYl^Dw?kDDot2JU%QUyLHXdzNHkOQ z>?|bH6?DUne{_z&`3?Z@Uf%io@jUm9$6by5!Y{hgi!_|C4#rM&9J7)A(nw zZ`BQ3>Gg@pJ5v>m?RK^-J>@R-Neg^5k4JH#D?r}sg|il7H50H@kwWVYU~d^&MtSJ96+1lu=BNj zB5~ig%JaW1X6c8yiG@S0um2iUuG83nK3RXqC8R-fBr&2n+q!fEO`j;jOZnh~*(Z^B z7Nd}es}V=TP0lrm=4*&6?kC2MSp4V_b<_Xrvfi-2+J(=%pX)Nsvy>z&k;KVpgDL3( zdJQ`=huMqtEe|AiaDtm9Jx;+-Epb-IZ=D~DJiITjUfY!W`3oe(PA84<+h*?ZFJ2;N z6YRuh*$pqc(N1)nEEYJ; z%tlEanz36qdQ7(tjzn_HDLIh;S^8|vxqIrphxKmHK4TdWr!Yh8dppuLgLuBI0Fc|Idb>FxPzh7Y7hKEV;g z+2;oQn(l&6aFVpc?!0bn=uZ2?EUWfVwjDxAjr=@RvUh^Yrr3-9tc$c^(v;j`@qw`R zt_zdhx-=~g=V0(>{OC4gqZIzS07L5QLinBeExfMcLOY^G-v;FZC>QnUFu5l#8f?8n z6#L4s4|A|`T$THA3ouPUUwFFJG#~Pi(XOGSdVT>aS^5&O;x__X8&LyByQ|=!4q{~p zQ4tMk-AL%rk>-Iv2kT-UBw+M?O>}D+w$a{^2<0YcmBh;Zao^6YOG#S#;4^BQCA6el z2x_iw(~}H%g(%I9nRlfU+1ipBqEtIKN=ExOuKM_fi$gshJg&ykl#c9+#Dg*81-3wC zN*c2X{XB`qP|WM6m>Rl8o7?bsFoZ}yA%P_0sB!lz zRp`|$7Om^@JHEC{Gl=?6i?@%&Bxk>^(^3vNOkXj&d=pwQ2h7eo|L_H$(6lVYtbvRc zckHEeZ9}UN-fbq?#GnMS93ZTOYsx>DdReqLY1&5*|N4|{;Qd-X;_{%=)vDKz!GsIxX1HAhk4aj z1!Za7Nl?Lea5|wMeW;=FC_)snBToKEXatS6F7|ke#c5R`EJM+$gy+!t>Zetu*I5~dcj~9nt6~<+-^Atb-+XTH+DB5jTKFpjZU1${*`*`cW5OkVI=2wc zLD9ja^J=c_LZtv}TpE!ceYm0VF!@4h-d!n3_M=4B{Iwb*ZH zAKP^u+I{|pj&2VK90GfQy*QT<^KkLQKp={)USwy}A~zT~X6>3IK9)NbrCm5M$D5oO z!UL*bDom?Q!taUB3KoxXoL_)(HcZ(=VT{kv;aVLnL3u<2y9WZc$Lu)?T?y$>jxQq) zo94OOQ8v3?2(6Mho)_Clt*5DYpOR!YdJRv}15>Gdrqc`7pq_BSN!UK3Y;GF9Ts*JG z_)Yop=dhr5u3-Gsm{pucorjG9{Q2N{fW1XFA<1a6y!-1#B~Mguo$x^ZGHqPE(2&8F z!s6uRm@n9fsdtBdh?3a4hsq13OGnkYk=^-*9noK%2ix(E|rKypK6e^ZPjSzm%^G5eSREv3uc(7hc zuW6#B+QN;RSMfBhpGS-tYsZ{sk@|gE`HU-`-Zy3OL*`nXEg`)Z!pZGCVi<)Nd~8=Y zx|hC|sBm$I7I{+UwIvt$Y5txBWj5=It!ipA624SdF`9&8!gHk9DArAJ;e=;JjKnES z4B>w1?hR(^IV2=HAA#d<;)6oeNOftlvsoXiqa>M+USq0Y2{yuxZ<({=%Bq(hk68WM z#jWnqfzWs`dIG9MhH%*F8fDP0tQFn{8hl=1Qc8-S4_E z(Vf}&@hYRvu>hGFY%c04L@C| zhTCAuc(}KkQ@fBVpdb8(d{;cu&~SjnrhdxPc%|_b{>|xzu<7R;KaZHLrN=`0+mnLV z3zeGs85)FHUFq3+;MqcjSM|^bsQUq!m_<>MxcgPI3N<@7`a0h1w!Cld*~Fpv97O?t zAWh8%mD+Dm7pt+ff|lp-F>6LU>JyB1>E34Ld|OtD6R+p}*kZ-b<-)jK?f!J>4imQV zF_Q~l*Qgya_(L+Xgpl**JH#sVC!z~K1^;i4MruTkp7}9x^FO?eMK$r9^dw7|Pm5ko zZy_`k{^Mau#z9L%pjyAbNhYw2qjtItg~ygXuBL)MUenGyO(0#|2-GL+|D|B-#IK$G z;|^?%J>OxPJr85E42K_smhRIEe!U{Q`_c7YY<8@&3}M;q1NRGsHSr6O#4-h$t+tYW z<$hGLkyQj9b%YarXUEPSjYzTcj;=)u*`x7Zvud}XH%srZ2b_y)*+_fvBeoU$a62d0 zbC;V($&-DF)>?czyQX0gbNZCd>oW*lTcfy6P!LoJg)|3HW9Rg7Y7?tQoY+U6nD47; zo~k&if#l#*buO}v5g2Dw@m^x|?TJ;8Ppx(h1xW7=V;!_HGrY={E;#N1=u>*J>7(l( zjVRF8(9Noh*)IB3PL)&obiY4 zBD5IERhu*+Dx9eo)*J}WhZatu>XFb~d{DDlZ}pd2u$N>jxgSsCSh(0_%n>gBQrE+m zUH9@TkrZ+oQ;@`kQt7x{hAUd`y(s8^3@ryUYX0ziKu-A;avthqf!~fUj>5unAmjrdbRKbF53toA@+&vMV+wD$g4gwMpaD@>e$v@d@>%7`asN{~27&}P_I z#!wx5uER9{SMYTc@{2qFq`<{B&N{} z2dvrssRd#Z69u#CmxF%lt2LsE3$z(FDfa=o08odX5+-|X*FdY1K(=z&r#ny)k1v%H zz5c`X-=AzTaC;?|9R|WMQ8`0t%-&-q{U#qRCAfA0hMYxtTd4V zHE*Pc654F^7&lD>)<8@~E0oQ-t$KzBKD_PbTP5XAI(AS!2UcmM$_dz=bn#*DPJzJW z%tTl}wqup;8tRP=YXATz^#EU6&Vg;TojXcLSc@TgUXs$-a0OBKyRUPeSEtwx8P?HA z*||U9O$b2*VH!y?eCFennmpYCaKEBO-|MR>UN`tpi&sy=y}WzyH0fan_oaQ4ccInu z!SXX7JX@tog;%EG;tL>!g8}>Xw6n4i5i#?*O%KZUZz2eVb>g?T44gEL<-Tl<3^oDY9tC2!p{JRy_1q3YQIbyNjqtT*_D0Wg=-?k zR?O*8e0UxkLMxXSX7efcaH7D8;LzwoF6lOlZ3-!pZ>lIz1syt`1m&l)Z>`(bngX`v zL6NH%c9|j%`x6*Lm9&9ZecpNOj_>8s-SiyN6|m^olCg6R>`SB(98MuXjDWv2M!i!~jizRXX^fP+t;(PbrAMI7jX@#S_ zhWPVa+}o!K#}26X!%AbEu5H@~Z~I_>-=8OK_BdSd(6(lb7(+1WwaRFq6}ZzTp?zQE z?Aa+OH9JxfYP0~;*iZ_R-EhQUxn$PE;eipAY8tSJ3{fN}13*c3R8Jt1r$879f&2R+8zmVcr> zjqfjJCR;$9ED6iRRNxY>&fNl}Ii^XniiYUkcyCSDI2Y2s$-vF&t~K;0A( zl2l4BqZQSJHbZOiaPM_Yv35$HV!#i&u6Cftzj)5lbC@565jLo464(a$k|2bw#Huju zAs?n{OcMk+6mm$^#K#;-Oz7iwYGqdlwg*R@StDmCOn#_PRJd3?81cKmWeJy<7z^kA zxg3lj$|^IE8kz?+7Xy=Nl7*C7)Ur2RdjYjMZ{SU%5W!*S8J{n;y}%x8Z{|cgMCJO& zJ~HEZ9e2qRh4yIBmjhqwJw4>jUa8IOuFXu=zQ(VM>TRrMP+UMAH8n+5Og?D<9^3WI zBfg4fsS1UPIi+?TfA?giH%`dKBBAY3_a(QNFGVZoy}G(S(7b&@s9Km6k$lWY%uLzS zjFE?8HAT!=L>}f_U3e9+(_>;wR4=J)Tmy>ED7eUMHFJ>ZsX}#x1D~v{PGKJmGpKrW zhrPOXDaOLte}>{h)`yRyDr~=V)d3eK_>(r%HE-JvS4z8O(MSsP(JQFS_e&O(Epi9d zYdE!jmtzu%%lQjbf7XPN+tR(<>2`G$NfN&+cWNmF~P{qa-K}jzKFfumm=J8%ME4`h#EU z^s>9wVP~;zF}!cTK&=^{pA&w?OyIEE7TZiMmS_zdzRe@h!-#Q?#3I%Hyg>J4byOc- zGbv1#p;)=vF%E_|>U<0c<#sa~cq>m)+A1iz$`^!tVddV=dnDho=7D&d!ram^k$8z? z;U`iWY1!aqKYai+ph>jmM%2G^StoQ`yfg}4cCMg4%>=J)^^M;L&1!ff=q+Rg(+RM2 z01Y=`Lt9vIZWa;3jS8jAPrn*5g%sVjO=qD}H=c86qQ@O`^~GsRMyRw>#;VC)= z&8OUHH7?)Xm2F0*RJ#6RqB&<@bhFPxWDb+ZS&gGX9=I1;c#5KPy+cc;GkNNEZqFok z%M>)YpK^DzHezyS=Eua~u(#p)U&gcWr5E-d>oxDKwQXxSS2`?--dl#FBJNM_Wy<9W|rUATn$dD)M!TP++7DxcRZ)xyg zP%-Wu^m2ap)QzGwbu=~P*Ump55uJ%iIH-tD-kR+P-a%*-HdK~h9z{)r~Ljg4_l85(yueLY=zN1+o{B{5{au{gl*gxqyQ@cwcSh&dOnRfjNYGG zz@yihm&`C?tTYQkdP*Xeg~kj zV<%Q{Q$#}@GwM!$I$k zHDJ_Kslo);In}VimRH`;kT->FWSgIST8)&1$EA|7-them32nem0`wS>Zmd$)B#IG2 zJ8XAAWk3T7&_Dy_1!7b_hSk#p{o2a1My( zDVeYt2|jOYKpwo*?QCDpsr4m!r7|3&Jf~*ot51)aw+|zY2ssX^!~7*o7{3@1(or{1 zG6}-@Ye&MS;yb|&brMQse={kljAraJ*eZl3j2)GbgQyC@11BkiuxlTy2^-O6gfh%U z92nn47fx@+PUU&`h^fm@xGml{cQaZx8=y{UYB5@g$gr042i|YjaT9?Cnv7TZ46(+q zJWS;PCxK(Na=uR6KNitYcNu~@PZRuO82a7dz>MTx=}!4bcmxS4av3YyOe=edHHIdP z$V!aXBHzGuInwLMSK+Kvoei0b3H=FmUsd9g!5#EKf(KfU=Uq%2u1q9G!z>{4ihi;6 z5vRU(a{53A&ozBfL##Aa_C%GIbrBy`Dfuv=IBzo9S2U_>jfmTEn?)CtvNffRAp@yH zT9>5R)rC_jg9!-HrfDexq0B34I-8UfIDZDwNOKWhloc7=8z`&9mAa~bw((XuU~ul^6dy}z%T#R!vtnj!5i<@Jy7UBHS{&? zDiM)-no+lKIq^8^Qj89{G!$@YQU-MEl(TYDA1R=>7OX4IDU~i*J}Dz#MfR#SM!wi# zjFq6Kpl?u18gDuP<=;&4MWzU;uc%A$k8(U&2}P6p%_j{rF%%HEYh4&Z@M$ho8zhl| zrny&7CpC;1IyIH-#qhLG@1(@x^{D}F?(mvvz&G$zuRR&GJc*pOva0f5vR5_@!UUeo z6c{5Sno37B5>a$2>qC1&F2#W<(jPhTUDM4+vgZ@=V{6{Zz{AKD&!`25@5*VHzMM`d&YMMn_iR&Fn-SOH47-!Bk|nTaCb-Ty z2koi%>+u3Y9i3-B&(aY+V{XucVT1pn$QyEkgM>Q0nrAhwLjn@=s+vxu1WK5Ho;ZmZ z^a~Wz>$8gK;Pq-D1qzr5aa1wHQZ2ILd{+Vu*ufR7OwiQa3sbW5`n>?|^dWFNT9{ob zk=3$0P!?JcQGd3BMg*mI5QxJ5C>c}K*rMeWKeq0Q^hGM3<9QeCBY{6t5k%l8y`LQu zxDi`Aa_H1$(Ivmn-!yAF>{uiLzc>{=SCFuocV{(~&7W-%ixG0({igJiFaFq!brQYG zE7oG&cr(?K+p+zk-!(rMgiQ-#P7a^H{Jc;YyzW*e_8Ag{AkCLh%sos7ePe4X?Ds3& zf3>EzqP=Nm)U0Y!Z1wU;ZTBBbj$};ZE$ZcOrriQ>b7%z-2{mGBpGil=I}cZ7J@8f2 zAI%XS@6@$sJS2W9ILV{spnKD&KJvahu79ZJaAdy1rIJ!4RjsCza?sq9@8=z?+S^Ur z${U^=)oI#t)rnew*@Q|=)-X7^yU@{ZBU$O44Oz?m} ziPbQ(xRrO;{`8#JPEEa|ZnhGt$%~tsK*`G*Dr)uNN9?IY)yeEa^+?Wm&rFn6cGN+S z*vh93KHt^{XmQZ6VU7Q8YTzJanj7VaF};`alMhsPEQ&aL{{fLmt1TnRd&ymDixj89 zsNrTrM=Vz>Qzz zB7>hN5RZv&>+`Oiz#3?^8{l^azGvX~zdo^`jN4OecMnV{l_rx^K4n}&$n$LS598vE z#**wMW7w|9iIFtTjm93dITyRob8>{dkN@x6mWrQ@C}QlA zz(b#}#632RAD}z)J&qq!L2Y1t?%VIeZWKfF^(8Y9-RO}Od@o3d{2sHsjbq;ubnMIx z5;^%gl|`1eT4Y>jRty2uIuM}Gi#I8h- z$A)lj6GX+q^kUf(e`hIb(* z%Zs(rQ{7WXeOqY>9k14qTBGCnv2wLSez@lFu`NS-1xyehz&Twj!i(G z0QB@x7;F=ofB}_~5J|>wjDUKVpI}=&saKa$v%>ZGKCHuOTh}Q~6*vI{J0<25FtSi2 zKHEeM^3yux6$W#ELo$ktcAO;4OOyy?_OTUpA+Z)Z8U?F#j3nU!YlHtOQCg;SjHEF_ z4pOL3b|t*XDGmrzmbT&W{SL$@$jCy)zDrUn%XIcuf|1`SxpEx7y(4E{^`u^b{U>0% zU}o3x@Y#ifyQubPf=QgjaXQK2N1w=%b93tJb8|wW+=XM@<}N&|7D$7arsejvn;P{3t^G64t6HYN(lK~ftF!6>KPYRDyP6{%zlaN zD%CjPFQE=MbxD}uf20vCYx_wshA9;E81a3~r=Z<6M6tH71S7zL|2mj_f+PRpYshQX zrHLYC>IsHvfX@d7MlXzcpnwLr-{S;e4uM9plG41K79k}#1oAtC%QB*SfdfzkN*phQ zw2@E}2P1l{0-zB*k0@mHvT^>bER|C`Rb<9{G7)UBLgK?rDs0-ZM(wyJ))=PV@n^Je z2`;?RlNgB$>{dX6`d+JPv~4&H^_eTUo9i1g_y#SEu|F)W++3F4MViFF@5)yn@g8dM zNK4ImA93mKUlEfQ(1+}&x0mJ-vZL%NibcM`&5o0eK)z9QJC#)(I9O`3Fw9JEfh;yIHc|xpX78 z^_!GDG{3&6fS5UGem}?=#nUoe=B(@%Q4!(lc0F!~{-s=4asn|%Tdf;OBg;AN#s6l* z6@hH^y=$0BN*d)wSd#HRunCpIp(onj-lP4K6ckjfBlbEK7z6-A0Vnr<4|-_IUQB1r zsjuKfHlH6963LwYq7ZAQ-pYC=WJ3*dlspOfHqg}>CJfcMS-q8E;0+2UTg5iLwl&## zZri@0X~BV=N_HiatLe>h;mX(wbcg@ zM;`?L;(hp~IA~R7>{Dd?0roJVWGn-A^H`8#=yLRW5E&P4)mI2u2M&Do{Z1RV+C)OC zcWRWJyAn{9r|F%idVLI&Y8m~dSf%k2PeAPYq0<_LTk9uBBm~H-0k0ToS*HDkgJ-*f zaRCi7O2@2^W$!-o1r7OKj|SJOO~Xw~FMwgG6w`YZ8voTb$C7ztcbOUe z&mbLV=iOrlNzZ$lUk{t5r~^a0Ms9vd=Hc0w2en6;v^1aP zSX7WC4A~S#Bw-ZMV`k<^tVu}mf+r_X<&-={D}CGcU_n_8Xo;T&L-?$|_K@G(mk2i{ z_R!cGBCGsS6Y39x=#kmVK>%R+90z&pT=nebHhxo?r2L<@SVN25_T@c~FTPZ6)>WXB z*WMarwBrZm%+I#8+w#AB`7Ez>5WUzoHl&6W68>iHMg!}=WV;H{_%nsJ5WgZP{ z40IZLLP3${qGwvFOwW$^FpCP~mT_yUjdN>*O=>pYGVX_^D2el)(r!fNAM-4RdeiI~ zV{#=KaVrxo7A*CP_we4jOuog_e;koo6_J&PZ}d1)O>%GX{bOFkiz#x;FfOU*7eIHz zV%^fH_q2-f1z{0{HxCD8fyC&Pg%0?tZV(V>zk<-UF{9U$Pg&bK&WZ{0j0?8BT?pF> zJ1nB>_J?cX#6R)TTQV_EO9ix{7UZXT!e%&s!`3%dI%iJ7CFfipdb-(kZ5!P$fkWKJ z3n<2a9(UIg!4{(;3;djR61fH>51`yUo5qkP>T5FNkRj7_t9e2Bc{QVzJkF8e?=4}A zXXQe>OM(Qh>7au^{q{dezSEAQs%MW3ofEr$WTbH4(j3QL?=vLmr zgyA!aqS2z_NThI9a=)3gPpZe}NnPoF6g3AVBCjyJaVo_LSo}jhO43cyebDj!58}IL z>^^U(%7KIg;UbNezNx^p+Bt>pvh!dTAhggNP-cTl@&^E7IPBUHQbvvog=yg8gJdwaL6g-%UYh6;&=BXQCmLk^-*o?P{1LLV{tN*>!u+ zO0H0{FW9nYc77Scyel*vl)rhbC`BnIF`8PI6e0NB;w)Q-FoPw~8bG27jn`j;SycRQ z<}b$$QtyXWMgN4t`a%Gg)-w6uvT>Y)HS5|^Z!!{%D73{-CI80Tz#$gY{`)uqZ?&rk zaJi<}$p|GJc&xG{1%n2Y^ezWXi|{?fV=mL`xgR;1r6Q2{xi-lp zo2WZQXv;2VpfoFygR}CJhkbd8&82=13HVt%og};O5>Tr_@A8Mz$}xZO^DJSaSbhK2 zmk{7hVcq9H&~iyfu3aKi_40jOboO!>Hn1}0b4AxTjR8T=sM`-OFTr)tu`KyLMnm{h zbQ)?_3*)0cfP+tuR-AV`#9T(FEO(|xx_f6xRn?SoY`$omdOqu^e%gVF{9j{ z81i~q;4!+EwcgjI>oX1}24v3CTh85=C#+|Ei^7TxA9gT1vK#?{x6%tW$~MkW(i>5R z7J7_Ogl&Q8H{5tvWoAPYtfonk`3FOKH05y=}er~rhgc2%}}NKx|P z#~A1AuQYU3=y-&4)q3(3Y#UdzlK3tqBpu5POxG(;L(SMYLvakE3@!BVim<;hTY6We zX(D!$D%XBmE~xPaV~Em-nHaT^EO88)I=*Q?6LA}6L0v~_D=m`a*<>3P3{8@nEfPrP zG>Ox$0;xnX5~ul^G?>SFGu9-)b5cY-qRq4(nq^8;ukf+FO`>hb@-~UKr8xzl(U#C- z3_F$??5@_}QeH`H|cB1}fZ$#YSUqrfeRZS76YWJK|L~h%|QG7Uv=i9Gd9m4r)1MoQP?J zf$3(Knpozj`<%!)GG07@Xm;gndw`uZI?|UgAz#!W9r$`zL@U}&*iPrw&Tl978le~| zEzd+}vIBljDH1v|pFf#r#9#&u&jYpWdN6jUiL+U0Z{BRYBwRf7?LX*8Ia)XnlW5%z zMj471m_rR=?jR9zGU33x1M@s27wJM1^H9dr7%6APoV+#W$$>+IUgSZ^b6GDFzvHns@4yxLbYF|f4GVfyxfK5wVhi_OPV65n5fq^tpOk2jP1qC#4ik+vK_9BQJ zK0duT3HN&C&K<3N;|NM|t5_r@cy%K&Cq=K7{=*%#XhWXV`q}!lq@gWVP^fT3XgDWf z`K^*F^S$4x+zY+v@mABtoyKlC9N;=j06HI=b^mTX-;EK|CdTLr zT9Bke8~!9=K4(`?U~$T+mEig|=Pf*vK z^X)#yaT8H$esFlB{{)yZElJWgv9F`ll4&STGQmG`5Yt%NU0i_Pu&Y)k;+Sn6K$I@aFg)T`4 zS$L&9&-abnl#Xm9EYd<7gj7LX)u9=^$(k(HJFONn%u86-PMIj@%~KM-_)}X&r}?7I zl)3nhDi&f6r?Q8Dgw+rj$;F@7(1T+b(T))b=)#tM#V!%|Usfym$HxTG-JXbbsd65XeO z6xr3nSnUd>!dnimxSmU5BhWsi;A*RAhHlU$l-p=cA?aQRgVSQUDZJs(nzVRf+f9PF zcV|Y5@>6xeOG@O!<`T*uBq|@1gVw=WN&e6>v6kXq9zllc_6+~;Zyo5qp zgRy=f9WA1g1BziU7u`j(eP$?kV?m|SJoA1PUxQmq0$vW$)C+GgI=x^(_vP`=qJLktL*3-6G z*&~83i{eYm-gwsiB8{866tNLIQv4E`;nv_NxiJd(>h=O2pOB;+)a2|?aIvcTW}NU5 z>oitMs3gh9ArJ=PO2bEU>}PVSdbx(r2NAAJ|g#$Ds+x_V5#1xJI@5 zYos}a*sUHYpbDaY{LkEK&*>({#0tKsNQc8G*L)V=O%$5>#x3qjGhC5AxP_20ku4Ce zQJp{X3(3sFu0R|X18>~XG3LB-4zzf0*hD^$f;T@>W3DzO9^*k8x9Zd`#=(hW6qLzD zLj9WxZh~F5gd@cpWxU^mgW&&V8#{@veffm^Sp_e{cWg3WL!p6HsZg}DeI-KKOzx#= zT4ZwbfE% zfODi1ukWYm=Z8-*L zmcll~>-fO~L0gCzl0WmYKeCSX(G9ME)l5c(`&1SvFSOc55%B4Kcg`iC$V1U-p~xx#Zl)f0vHF`6yzxcZb`0o*H{xH(Ebt^=T3v9s6%)nOH8ZpeS@cx!vg|cGg4!r06<~eX4*hTU2Un z#Td;VZiFJbl+42?wH0$1l^thJ1gNaTLm^+dBiS6D3?fnNR_jeYoO~(wm}9Q%uq9jj z=ME>J$W>tRal5qy2J72<$IwPG*rHo^EWi_xCl}Ip-)Pnu+k)ts8A8kx8+S65c4Xsu z)hY)Z1C3G-;#*)fILIMNh#W;4E(SZLkC~2zi#-RFN{Gybh6eyxmqJql^h(>8AwnZG zIvQ1;geHSE$0hckJRTnmzu*fNf=#z-AwU^X+;qd z!YP(+yo+8`vbBf2;jd=`X&mNaPC829n%^U{a|Xg#`zdvcLR4@^2&33}7$w5euZM!f z*tNOmHqMWeTeft!AOn}#!jQ1cS`2v_IRzpBwzFg_fGvXp1Y&TR^;Cwl_PMnlg^TaA zb^*sd%kJfq&?a_QV57^7{g)wnE*rfRM{}X6hcP{Mui&QRg)m%|Wx`zNeubdEX7WB8 z8(HgFAEz+ z0QV2SXioPo#A`jGLIDLgQLm!8n*}`tx4;_E5ro56;B}ea<`xD~wL(?Q;%6J#`*Vfc z1+u$2pC^l`;D(P;)x}h*-2@rEbQa6rNRPAy>(Io*VC)mILvX%)C?GQD#l&5Ic$@vL z!IX!|c<{2~u7bEIANTBEt5YZ&XSiR@|HA+s*C>zx`tV@6C@(Du21qn_Y+c~Gza`j~ z_*!;)mq2DIXAU`cR z;oMWbX>oU0j21Ulo0ujWKCVr;5-!V|RE8F&4B7kWTQ?2p|1CWUV0Ok~TUz*6IC3rA z(6H=>i#J!Cj2uwnZJGY$C`Oab%d)e#Rjfqx)5@{hNQD8;G8|KAJ?L#Ser{U$Q2;wY z#J`n~^)hBSGC3KjfQMWPWGMq-1itHQ_9LpFumezGYE+z+w|SdA@!R;YqihLqVm#*O zUxNZ0RpxL8C?akk^5^9Poz-Zp{!Q6j{Mq^DqyI*zeN2Y&H>6;TIQr?jbcc76(FGbW zMP|^IQ62NJ>QDGZTE*(Is^ZM_H;0OF_XM{4R%HOXS#R#<6q_+|`?Wn*SIrir{|kJ5 zF$GSXVW)7vB38*MY68ogEr%#ap=WcfpJ#Q+)n;R1aje7*QuJSWhJq?*Vj%}QdKSn} zX>RdE4(!W=bcFSBAQ?H;4?W7rFuzsQ!XQ(4$*HYrU5K+d2Pd?6mWwGtiT;#>(DtJ~ z7l!(SikKUqx%n?NfsW^p?m2F6mtp*O!N9h2;OKzVfcZ*<#i7IB2N9F;!Eqgd;`iYw zdx9PcM;UPZ;bLz-=Fa91;1C<3_|YM@fcs({>!$e9I<|yb)OP$JtE%V}KN}0E zebF{?YOHFe~?XXbk!KDkT~*vaGZtA=M3`%itRym{=0_;->5FqvAXFTw>z`hwH znoumWm7=5Rx&g#Cj+_)V>~~MdgL8H!viRZsD^4fIImD7Bu!|+B3Qrys42EsYi@9>V zs{y)d$071|{^e<`?eLJ!FNVw^?`2FUoF%ZVR^*WCc5%T64zXD?PSIUF`JktCiJ69|kWSc+`)2ft0qVPqBtEwjch0 zlNUYK7QX#BS1>g7d+84cnJECLqgiLFC#53ar3*&kX(@2x(3nxc*w&3^Oc@`BvQWTT z?etH;PRhK~7=)2b8YyVvpj|luDoFiO$lGEYea-1P!M8K?csYj874+dRa8IS87U2?W zYDMkYM@Rm)VEt2Sp#}S_icxt`1kn*UL@_fQqAJXnqi#S!B`Ca@Q~+ThLIa4#;fTX> zas_#g4PoRqyH1D){4d%qeqJ~1{z%2sDD0so8+GV;a?!3H@Eg)eY{B(a#0CF3Kt+$w zgwfn3G*)c73BkB9^1J|uf=AMnbbwxa*WvO&1DB)+-i6uyek-2(=lZAk!fO#IHExt~JQvvjV|_T9$7>Ri1U zX@#Enz^ZOx{EU{EIk^#VE=+=A6eX}4*FE8Z?J+<2bfc;gGcBMjDc~QDBebwZ)#{0e zEy4aes?V&#q0by!y4cY#b|Oc_NEVk{U27mcJn&s5IB~%vsfhuwr5^p^xrdGYhNaWS zr0^<2=z>AvmZUn2-f4CRH?XmsK(oa*6ttKFRKkI}t$IHo+&%6f3ysku{~}ECIS2Z% zH0n+qH{^b{!aN?dZR^cW$w#Wo zX56{xLQ~uM9J8XoK!VseDvbJFJAF%C4#M@Jjzj%Vgo_~_B@Dy*&_y-4lyuT z`%?3N+}^1Ek)Qp9g^f7JtrYMR-ilwL@B|;i_<^zIle(yptX0=7tAHLw!8r2eG=QR% z1nZSxLLFLT4a;%BKOF-btoYoNwMSs`^1gj3k=8|^mav|?uSB%ZeIm_OEk6`bQ`}`k zc8$MU_y8`I$`_1g-=ya{@gbSHz#5CRE+^2O;>ZnxeuT{&0ReJ_vZT<|wN;J4Wx%p; zEiVb;MB1BQUd#%;CC7Dt@b$z(E3Y&w2%`(6$x#xX27(P_K++UoL55Z z!+31=A-oM%>SK2DWiCpNDRnT4610k)RuKdg4YxzyOw7KQkj-9CZ$vB5R+*kASO62L zgak++li0nTPRKq8VFkj&Sr|$XnE7O2rJR+vHyf@9#8*OE zi8j@CMrQLo5E-T`sf|}a${?uhx9&~mW2yFddJ+ywE}Uk;r0%kkn<_r)aeuT6%?O*m zXe{#;m0d?~ly&gOBA-76wU8H+n_X%JkN1)iu~%qgS)mCGX{?jLdL2V@W?J?ybRy0ApAs;RrWu2s8Y` zeA6)|Oc(uY%W?D<2#DGzSHaZ2u*!X;+Agj(Bkfd( zNCxdb9=n(WN4Vs$;Jb>a`b*8$u7XTR#{ZC2GxniR2C=6)*u|##jh?KuD(XZ*6fI!P zHVu^LVd3>tee}`K;%Q~FKHq}Eq}cp&Q$;BfnlT+T=^}(=LzZm;w{4UUi<|?4i=0zt z7M7o#P~_ERWsM6=o?7iHTC=5$N#z!k0tqb;vl@ng)iGoTUb0#X`{NSzKLsH)yG?Z1 zfsZ{|u59H3=BQi{AUE~?Q-R?tY_9`*SbNkCyE=lgImm+sASloZ=jbm>tXZWFWd$OA zy1C$?xHEeFv@yzKXzo!cGW@H(=d`x=UuKRbg@F8xhXOX5qUTJ?19P+nT zAWL1{!Gajr0?M>!bsQhu@iRx=Um`Y{bNG!F+ue<>Mpt48Kbq&`z1%(oKP0kv?$@FZ zcQfKH4m7lbI9IRT<`3)gdR!#CEAuIdaT}kHB<8H3_J)W7$>)V+VAb=LY2{C~B_fvl z4B0uwlj=)J6v#6qt6R_ZNK;(os7B%vCDPYjJd;;y5o8w^_3;fti8OY%SZ(j zvj8nXksK zoy;5u{YtP|RS4B@L8LHTv#(c+kkJW5qmKWl%HjuFt&Env%C_#bxi!#FJM}w_6@zm1 z8o(fUJ5qD*9x^kVRr`5NtXEh)X7AmChcBGTCbFcNk^k%tzvi2=zgsq4GZYohTKK}^ z3zJhxVNl|8U%;8KL~%gF7og~#-o7-iz0tQn3b&0@O)yz?}u5?l7is$R=JM%?iZhqu4`zs$$`N9n6f$!U(a zE|JrpDNnuQuZ@YXC1ErVM;Ddgulm(vA1(cFtd=W@5pk<+j+yX#uRX19<_3JV=>9YJ z=tsub#HNOCiA=z|0Pq3~7~N_aekgFHd`>0{6Ti!3Qd&Si@aErBO2oq6dIgGP?G+f+ zFpRItXG-_7;y4fP; zNQKAz81l$tQl-}H*ZeJtxiCqZCJxo*TYMndhT5eHj3OqpvN=#-E<@2CRAt%lEG?}Ve;13OwM%&U1^g7fy?Lp3^!9Gd-P6lr z2(7e)Zezau`KG4s%8Qz@ojZ>i)lDq`v!k^V-KCcRCM~O`-ihX-Asa8UwGRb&RG@$8 zlCsn;bxL`L<0tU~?es$YXTwo=bx!+m0-ltcPO_4x<}m5&NX4vF5I+W$c!e0f694(h zKBV2}KhohYm)L`8+Jikry_jfuyBS2I){b*-#Yq;vxTy@f8BAk^k!eASb1jocNOdR@ z^8!~%#zbkACs#sFpK0^3+JQ>I^1m%Y(Ou;A4-CD z5}Vir9l%QR2lNiGt<;2H2j{{IxYo*^XRVV6M_xn6^;N$~_*{_L&@eY^^5lHMY1fP; z6_yCL9y?K|`JUL{Q?L7O;mJolt(eJworsve1jLWslJbPT$2lRy-rghroCRWzxG{V2 zwR#8LLX!QVZb0PzV*28^JGvf#^i_X*KKJEs-7t_7`tqmVap#5u2RuS+jpitYQ#g1CVS{?%9PI@A4 z_+0S7IV@c=hK@KWx=^M~IuKm&AUs!(t`YUe8o`AJ{}lFwg-6<$6C4=~t_u(D6$gmf z>b5c27+wDjlB1hrZl&E*qNUY=QUh|m4mVE8z7xy4V&!EW(ekNDy(Uh1O1+j|$r|7x zs3bv@!|St=D7?I2_AxKrN`gMWGLyWTlHv7|zaI-GK_JBGHvC$0{j#>N9uI5lN_4cp z#{>V$Gk9|Y>Bf5qYzVfJfo1cPFuP-IfA)3LWC6oYl9G^JTc_-jK^FAs&fdhlB89;E zE1~bCvRJIFtfQlRYEsXMQ=e3eYY;j2^{$F8M3S491^T_*aIj8$ufuo0a~4?5D=Nc{ zEIH9*ub#?Vsu$eu{(krJU+m-+)jvH-FW4cEP%_j0=eOtbNGT#)I&W}!#rc*JUhEhR z41PcSy7$)cky~%uJ8dnA@|MbgPZY}=s(rXvcgSAl3Z8iLPjAt;!*{u=ob|TEZ>Pk{ z<^BJLzrUr+-t9^n`OnPNKQ`y?8L5)}7I{Ur53d4TT+5LXeA-ONBKVp;+NjmoIvo>R zPA%s!;aAc&8>(2Kicvyiau#UwLCgc80CX0HGKijcJ;c2w&LtWX+Ae!nrKTIkDNF2sH#p~zW>KsH|^|BF}t;sLy@~)%= z>9vBKi{6^KIb?R|cNe+)H-zxh z^1(MGnQi>bGjyM$E&zSghW_1Uao{XAP5^S8nef%TbqR_@Y$*-IpbOPH4%rt*x00?j z%*8E;#z#G-` zogIT!l)BMM;7q6*t^eupP%7CSdiXkxld5d4>*>BdX13MeZhoAw!n|?>BrgC24)yab z3N2xyk)wT85o(fO4hQE2f_98=Z|Iw?TqH->)Vd|bnt?FL>VMMz|9Q-`uV@f z>0#hn;QXKh~bC_ zIu0MlL3=$bimaq13I;&H=l#Wd2D-nkh2 zG>=~46WI=@vsVa2>R11qUVAl51m4xsJh<(vYFSrmzhab4B%Zpp`IfI7+~LB!$M$7Y z4R>ypGoPB4b>;S9#4Tk7S&B_M^`iyXWDUfYh9{(xo)d3dn z(-{ikY~9SJ3wc!or_)=P{?!LmLVN*VEKUrWOispV9Cl41T3_Df=tvDl>Fgalso(2L zLd-gB!(FxGeGVUT_R6K{=~<#~c&TGk3m?WF4I}7K>ZorygiW+akh5c%6Z;LU)64){ z$t>u?1JNWw!O$|Z;Fk!PMFGr`u!3K~%rQil5+jCov4wQy27b=6L(~GL@no5LQYmiB za;|Tbx1oX)%+swA_mgb~_zIG1kdAgn!eBEGiWQn*TZaa|p-2pAiim=MR7QdtUZ zF9J0)s``0a8Zn!cdAG1q^`ZZ~E0&sga^Zt@3Q>(jG4}(j9K8KOZf<3evb40MeYVy-r>RI}u6MI%OExM$Z znXX|U=T3crfJ=TEUMza_k-d4_yrlZ}Bk{UAtSDLtce)}>kk9^L6;EYgbGj;=!_n~OD zQ^Y58ig?H_mE|{Jel_nxPH#Oe+9i)4a@Zs;n3;hXgIi>38~8&~A)=wcvX)X7m#C$S zyI@o!@{qAuh!KN(TNJmH@9c8_9Rk$0QWWt4v%`^*!JE!OXh!31xA_uw7eA}T z2$lL@Ts7~~>AQgUj)=`(to~xK1NqFflwSz3^g$N)S5nRanZG{#ON}ol;i8Q0i`%%v zQoY}szWTtUq5f4OsbI=zbh^Yy>CK@ZvRPsXq9sF^-?rr9_Z@xd$Tr${lv-$rrxHOL zz#nZVxV!t+7B>iat!G>F%s|A`YMKA}<-C$SDkn)7*cBA`RoshnIVGQ+yXf@p1E#g= zc&5=7&{UDf_|wcI-9|WdgZxmX>W>(C$kDOdJ}=*A7cTm3`uvv)vLD);SCaSALyx?^ zXl@DM)TQncjwsPM`>$4gv?)T`4NLyj%7rEEZ1XRsOtv4%0#FdN8+;%52zqQBDAwIm zrV?V2{}D3z*hK#8Mls70-356s7J;AlpcsQw-)kM7X~|8br5=N!W-bP9k^aCB9vTo= z|F+=`4Er}iKmCW{gG;xrbcX#~vxo4kubg53cJwQS-+#Sp@HXrrjvpw}Ie6>&Ur`IW zJOZ7jfFZ2_FfE%(AK9oOpmn7Ntv-?GHWv&LapHWzJ5F}vg2Oz=B9d9PwOBU%-S`_q87uiT?M95{U-%D{?c8wY?P9VclbAD>Ttt}ZH zWU^z~y=IN5mRc#PMJowP(zJZ|)uT`UY!872lk-ueFG=J6L>M>D(v5yzmKd2dpkE>_ zWCq~UQDL^8qTY+a_5<#nrO;#a(AWX$Jr#JKnu!^95SC5MM7cF46&D>F60^LUpmuzjmXgafCu6f~874QG{$%rs| z={sOwHI~VLEx^RnX@+?fE8``y@t5!s9%U?Ue&ur?{m3%zAvVa}$If;S4x8^(=Ilf9 zaWP;uJef<260KFZm?>;LU#h+%)B=&m!W#wdh~@3Sv%psr(LrmoT5e4y^*be>siTNN z16;xxVB<3S?YHeo_BPX3L7A({(|@oDnFnl1Q6t=5=8buJtYi;KM7KZ<0xrw+F@9jgOV9;1PU=z zEI}CP3uhV>h7>@hdJ3=CK=9uGGV-GRVE5>~`61Azpxv*Hs@PMkMLngAgcGugRQ4CL z@*O0wLKC z((S3YUnUa_>6FJKnP_}nvObhYpK)}m6mFal>H9B^$H&2l`eP{CG`KkGyd%h+w2X}1 zoipNiG`<(QSsr*4N)0jU5p#l2oqmWXMT!ZMoQJE-6ht_@Ue)3x#a#-51ugRIGSCTK z2`;AK1{WM1>K4X4K$Ji!HAE)7CZE2-RlpgC6L^dY299^;w5XOX)220Bx z1NWF=z{D+DjnoMhQ>_e~tB2MP5OjfP`4Sf8!m@)MyfzPJ&|UYS>!kf>}Et}3cN)FxBI zg=1z5$;xJsD%(5L9UUamjeqJ#dtmqpI2uTn8nqKd0rxHYOLF}QiGVv@9mABdeC8?E zZkYUBdx+v}kjLa^D*39J?0hM(oq(=|qgJW~-zJ(39Z~q}!TmF?h8!bJes9nX<{)AF zmS5mA?Tqqo>V(8vi*))~SxYn?IOynlJ5(4r`shBi8-X&kipuIT+%V%UM+^|-PJ19; z%Q-^Bes3d0ORo%`{x=Y=2B58FV$?Rg=nt!gMWG96yrFb#x|jBP!-RA;_e<^3b}Qi; zIw?#(FfL4uEx}s00vHNho|<$|d1nl50t}LHC|Wm%kgT96tvl`*;#oU{BLL3VUj+EK z-j0mRDE<=4tV59hg;x=rzi#5~+$CoUu+D_2FuMAET=sk4;2c1^XhDl3Tt}HDh+nh+ zl(dNmglP@l{HLWul1l`z3aS&jE|ka*f8Ap(RU1z`|7XayPbpCU+Mn`+>-Ro#%X_qD z_hNuGUF~;zNn8VqvHcm zIZE%A9p|;8x_I$z(jqA0#UEKikn+>b$K)~p>%ATbHvS&Z zfQ&{d5`hIQ@NR)24SnYl?$TZh4KC0ol~GA0Qb-{!0WNW9ys&Ir;w7+v8x{h$JSm(y zkDC=AN*Np*9RMlzKn@LS_Q`dhjX!S``Rl&ZVA=MUS6?B=`zgmGtc6%q7la$_`w9mM zU`e|4FR#940KNO&Gh(N;pTvbC+|`p1v5AfTOT>9nq_`ByMaT1~wHC3)hMzaur%&nv z#M1a(o&US;m73Py&!u5Qgrg@RVv`X4mxzm`NC_zvXz5YQU*s@djOA|(a*}>31*K6P zJm_vo=ALdqn>O=XH>I!gQ~Z>{>6Hfu_5(H)?aV9pZncz`ilEJfQ0l1&Ra)*kIEPN z#48DgydMbN)~`uKAc z5BiTd(0_IUkK(~L@lcz1q>V!mz(-hW_v4-44Q$(_D~7fNS56uTZHHc=p_p_NU@e`? z*Gu9Ev%0rLe)5)OXJlnr39iu20PBXLKLy)x;sTOLK|)!yZ>#%gXY>hp{D~*yn@_~E zNWW9hcu$_9ppg-Mp}Xw~;`+?v$IQa(k6oEqcc@<`fA>vE%cwUtp~}D+M=4t#Yt^4_ zj<&A}uSCP!u&rzcAW)Nw+?{~P^J1YS(j=QNgdW*+$0%=o9$qJr=8wuDX@ZwONIp%n z{w_w{S^c43@CSdlb+f7JLS2`RMEXEti@*Ua5`f!Y^Z_AQk3uq1Ap?TyInU7|0Q$zu zbD|-xmKJsYAN4}8sSEG-c>cH2U3lS(8_--ZT?*}Zi8GZ{Z~F~X$ol$U<+2i19)JQC zhG2HQn8|J)#s+?~7EL+C!8U>QRD_#jaP*!pRhd6<;&Nvw%>+09{Xb$w!LML?!Yfb8 zi}n+Tnl4$S;mATvsL0Q^dWB|Nl?zfBn12Fk?dh{$FP7 zf5<=o_nm1I{GXqKT3~~1SF*M2By*cdyllJ}*-;$Zv39&Z zqH(*pye`l}FWm)R&#dECcFop&?Kel8&HQpkW_Q-+s%cDjuBOEoo*2iRuW5ZTr|4!s z3WDsZaP@krMKQ|xQF?Wa4KDDAzbMk?4^Q=FXvd;KAN}6?-5mehety3U{~+zXld7wv z{!RUVwYNG(oxwZGo?=_o+-?YkKfpVH1V!HCgR1j4W8nBDpY=3UJke(;jC9qNOnq4b%_CkhE3h{4TjE~PoO&5K6(#{QR4lLeAU-|@Izku zve$jP$y~CMe17sb_M3h7=YQU}lY8X<#;5QN{0!^kEZl;}F&uAUBtF59DyFXD5JZhF zRM5f{I|dMGQDFd$giXX12nCZdCMVLDd-9$F;fu4DuW z(prrsL|H-`D{vV8`j&o>osPPTbtON+o|gh%H-~4Gf}!!BOLYBL?hphkPV5S!)KK~T z{vB_`FLP-he&NPQlHsK`?(nu*bs}Gsf`lTaY!7F(S1=~;tu(@OD_I z_MS8gKz#Tnh(9JkvQHF9wNd%QR&HQnv$anILl_0wNM>Hp(DIzOoBgPWwm>*Z%Rwxc z7<9iPsT{6iT~{j=JvB5)ba07W3`3fTmQ)F1%;$hhL^kyt=9UlbBzjw~baL|wao~;l zPSy0iqg38f7C|s(TQp*)#?7$(^XNH|-EfF^uKn(D>>do+U1x;{4?L_I#q+x*@H(S8 z>+HWedWi2C_A*00Fw@@6OaV_u*vo?h2q$Sd$O@W`AB~J`{`T6xdk6M#lQEYME=s?S zC#!}Y!QQkR<_B{5uqNLJe=Glbery9&2nKEWfldQs+7>gXy~PF3B}vax3%x>&+poO`H`e(`eS18fB%TZ zpcL->AfBZGol#&F-ci5qRy}3jxmO!V?SEvp(=I7jci9)Xl-)Z|4%;oue8`(_ec~MJ`d#WC|tA?n_QK29VsmSqyfj% zpnB)MXeYWm!Gw-3YLm9<*V*bs;CZXVTzZ~ zzC~WGs6VZouj%ewji(bG6*AYTL6)Zn=DBS);^fB_!XXZKdg^41On73Bsv5V`(O#2i z2R2q|9l2rcGuw3*7jQ7~$pU{>HGQayYIbNn!KB(x52Un6<q=Q*$jj>iZL!IGd4A?TAX?yc(^2Ce zzREu5?Lf#cU?8BY#8*<4fBFg-$iGWIcLMh(EUMdo1WeHr`n)?xK5>Y>oRC}CBY%Bf z7kT_+U;PttoP6&vFP|kIe!rJ|;;_D>va^zOt&~%jh((>YVLvIKJGcg|R4yT( zI|-Qfr=Z&3+;gnw>=y?pKH=lTR_M>z$oCGcM1g#BIIq}%yLqEYhpBw#uyw6HIemei+(Q@;JGqf$_vm93YIHLD7mPFG46CNQ} z>Nw`y*^Zv>p+=BF-Z1}D`pQc(Q+H*xlSF5TvxBJ)Wx$D7P&%TtkT1vK-aB!G|H``t<81OICka| zStu8scii`z!p@g+;RKvH>$Qa|>%vv;rtU*XNWRd;Pk-!AymUyALfwXe&3DRB#sfEKpq@5CF8RReMnxfZ6oe)} zYnIJ5jexK;FM%BgO>zVK2J!y>@fHUh=2nthzTw#E=sPcVP;@iqN0P_J=T5ZPX<8t0-no+HFe6$B9D-mc>#bm!vv!jOtVw4=6x>>M zBkV*}kS)9%Uy(61d|3$C0v*<8cXKb<8E1=Z?+tm*ScZIB+KHR(Oz)m-A%{Z?{;hc0HE3+-$isTt&WP`m2&tyRhi$;VKA4qkG9V0^j~=pI)mm^2+*kH6Ajjb;qA_K2GV^=U$FIxjUm?A3*!>bw2|i+ z=uaXiLyx_!iPyJ1eRy+u)y-yAw6+?h9ie4EZPu}wOVS&XoapuahshMwWa2$(VQR(o zM;9s?txQLbT;J+D^_9lmCTTzQausRrH6oOp2$VGuNY{yWR@tC}oBip3c+>rFC=J(A zH&&IEJt%#sl18DK*>{h;>iaD(8cm};c=kt^{c<&I@N`chnKDuVnje7ZcT~0s0Na6N z&ATo0Ch{OdZ|lou(u9TrXOJ-EayKqCf`3keaxW2drS%5M5bC`4{r=>vY=Y^Fi_Xmw%>KmX$M~&M z((c6y>%$eV!|u#hFeK$MxK^}Q_W+YEw_1jBA9Q=>iW8PMCJ zDQQFx4x6rLWl|i-k`&do@A(8borfUgEywC2q}46#a?NcO5)Lw>xXf}q6o&qgsJR<9 zRV4S@G4v;ANpd+TQ%jUgw@7FGC&aSbR}R1U(R2Ub&N6U5B_vCU0WN=D7KXB>O6;oRttb`)xTx|jEl6dV`UU88oN zvKqmakVk;~TlWrU4?h#~#aJdxXGQB-Q74hbq zia2#n&WY!}l(^!fc1nXRzIzRKUJk^S^AcUbGFH!K<&_ykx}m_hpEQcegIH^lOHL?A z?k#%F+gX!f*|pVdOQsQ=Yuv;W^(O+UcBbf=2`Ddjn(t zfQ_bxtGE`yU7;mgwMPl{*)s&%F3RUPXuImVM;gPjQ?`1+SLpRB#RV=~`7s@f&kVH@ zPdorPoVIs9xabP$q~F4*YDnevuld?&VWIdCb!$kF%Ab@|gppig2Y6RN$>r{cGk; zh|F{p67mff`UCo6p>+*mRb1m)j#6%0_V{Z2347iXgF|REjG$D7!%%A_ts||Gx+#Yy zB7|-ewjjd*_>~aX>B?J!D`Za>6W|W$py}PhvhglXlL#fw2UpB`W=Gao9Qn~H+Ku3m z8JFE&g1HSpLGF(nV8<+6`=-ABpYnkQf$Xe}@FbwPtdWC%yn*XIFv47UarM-1&H9y} z$8p_9rL3;qxZ8&U&|Zw(u=Xkjd#*wnJqY7S2J}CiKq2GlG1CY9=R;tQPqb0HL_1i; z%tCIy0Q)a}+Sry*YtY&6dMk86r z24HVL$}F(jXtqb06WA3KSJs0s^x*K#P$Z~z#r1u@aNDV6RK#IJAC6V)56FJYcQ5v% z>o(KH?ewj3=rD0IDNtt!&Ei9D4f{G#((i|g^ zl9WKvLMnoiz@Af%_fQ}ac8#?H3h!7eLn-Va4rL^HTcrJbQ3UoyNH1EzZvQM}m6R;c zbUPj1fX&wDA3=aV$)=yV6&Ftk0;Ev5j61j9;Vc|RqAs4D#GbKPqy?0OV7KlIskyO+ zy}zh;3s`@odcg%LlyN$_e(CQ%!i6@8Yu1VhWDh&<+SrRp3aOV&CjTr~*ANz0ka{_r z3$vIQvVDQIfbfsHe%r#)CRlPG=d`mJ5(5Qw`g+^8*&d4mU@1zP1I%T0ss^cLM~+8P z4tYMc;L%>Bw%>8Pa;RrJSbNxJE`+mflaqer>2KZh-erIDQIny`&>?yH6-Ar*s#(X$ zf3i(Tz}{!^hh9)eS2O&sxyC0pkw(<=%#!KjHVhvR_+$BaG^rUoZiS&@t6$2Q%`6U23X;#r&$$r>a2%wBxt8Fs9`I_ zI_}!1-oa{PMW2$)qzy0(ZMK;rcbq9TRi!LVnB<`mNstlI0kVltZb|E#UPSt<*+h~C zieIGua4ofxB!ZFJ8vbNol_$)mpcAgHVeCp_diO6byoLEOVzoY>aKHa_^DCS<)JX_j z_3hmVYN**Cf~N}BXfT<~L?#QPYGwVrMZz0Z+o;Z-)JVQzy;y|&0>AdA`d1b|O=%Ur z?U4<1LV;p|Vsq5JaYcs_me{5?&SXr|ooJ;{IHKVJg)h#M;%_y(?b0vWB4*s}WR{4? zthpfB)aUP&JJ-_Q>*I`hz+tpp9d(8;<$)?uQ>AW&rjZ+%YZ3e>mM!8_w6rI z#@t_bcNZy49OWcWnv@gJzJ`iT{>RT8QmfkQ9ZOKoM1S-U5eV1W=?hK3wnAwIDc2rwTjm z;%bsp_DYhlUBv7O-tfU_xXC_y&hJSfQeP-Xf%Vhv2Y~N&M>swkSBvoszW@6$fzeC6 zQ(Y`q^xu=`uH8APWaHd8Qp=TOFn$3L=BSWnFW9w;pfJd@bya&h-Yz~k2{#P7E7Gb$ zWOH>1d^w@y0)>F)rUD&TFTqrhM>+AsE&N&_4I)T~{KLr=A~>X{JvymS;s%Fuw$xVN zK&-LYM5F*&aiVitwp)3wGCjTmm26`)$t==! zD-QYO0w3!q@c{M-3*1PM1Wizw7p(TJ9}eMto7m^@yxhzKi%=L@iFN`F5q-c>_rA-> z%G2v`alf5FX!!$XM=dzDk%sT$Nn4kcASXo3Wrj7 z?9!{$yZcToZ)lMYoXND-1@7%+xzKj(jLUx4*U}^trNVHpm)InD;)J$myW%V^`V9faSyh!C)ZQ)ky<_ z=VQ>7g{{e+s!DDv^Z6!L=3zWFZoWECJ>*(;be>)H&yT6XZ~9(R_l%gEVUlCLS4Rv$ zI^K#br=_d%%+`)uhsmHcuwB1kyYCZoP_Adg6iXyXj0nhvO$D#*&WOv&mZdhmEbmLu z6>ycO&A9piv3}gv4Dz3T;1iQz%XfY*A#PjbCQe_yc-yEJ)_CicE6ca&+HJ5QQ4=hLOt_smo@vjr?Vl`jm8iHEEveMPjPj-^w=BUqjGZgu zmI9a=?nPCSwrOiXS&4%cSu^51;z);vS{)6pfVrx}b`-+z1;th7PU(4m3lY^b+va)A zS3U5^rQX-7{oZI)p)^?};wkeIBK1ZdqbQU8H0}0SECb#NMDvsQd6iopa|$S3%i`Oz<-;5aGHNTkyS7dAh7? zo5Ee=gxlF@NrfG0`BUn49Uu{y%rKxxkEA3^(p?1T{{6~yt;$shX+~><2(ofm&RgKJ zE4D~4)i_G52xhNTaJc?FvtjZ?XVt06r33euQjd&;?w7wOLwH>RA!dQl=ZFk<*Q5lD zFq%L(A^Yt4v!Or?Kj~wl_RlmW6ianQ2rH3_x1N%Lu{rqpLT6}LGqfrSz&g^EwqpoX z`JwBBQIjSa_&-5%mtYVbx(53%8WjoMFFgko88}i**!5KkJ>*(CTb~YB_?kP%ko0yZ zVDtYB?3mtE9FGYX$5<{FK+jCn8_}i#myLse<}rKMxLJpRQ=6b`C2W#~duNYG5vNzU z@==$qL0tiU#Y-k{#^>Y^|LI=ggb}z}7oESd2WH8BiLOPtLNQg9 zQbOvx-?rW-OAxV4pwE!mL7R59YdD(~jLojcKwb(eM!Hr_P&f$Md6Ox9k46COdW{YZ z^2!6uAo|qnB!&PUg(NMw!l~e^I<554+F};<1LvGK9&FYfw^$cpm(n<{It?AMrYFJZ z@U&5!!(IA}kZpz@JZ%%K!1F@9#mMTXchl+eanlSD;n*Cu(33h8JgK37yR#(ZZ-T)pavbXTtUZ zKUiICI$w3grK9(Kf%r)1Q*mEN*7wrw4{{#uzsOuXZXm5#gyLwrEKxj9RcV@Pm0^e? z?aR7X4a;{7!MM7KEmM2WA(vG*ba!kI125C{y4;lt2N>ZPFM)?7?9fFXrsyM-e3WvI zk^97Jddj+vL1usbMFIam0KoRQn*hX(exq29xBi1bPuW112)S<{(;EqdWf5gm;jMi+ zp-)QA~_;z#q>a10Nc!`m0Dd%;1WMm;l}cdmkFbEOJE=k65{@yjOib1ROrhMXzJNuJAg7$3<7!nQz6QA@b z{!9eRsOgx5u!?3sj{iO43H$4MG27h}tTo=^YoYv}h~epc7F+>t#0;k)S(t~Kg&?~H;N2aKl)7Bv#*=0yZ&!H{B zQ_JcS?{y}@&l`%IRs?#gKLHF_q&o;W{ z^oT>$jGr+24>;mRUwdhC@UbrH`R3bm@C$Z$Yhdtq9T48Cr3^S(y2%B8UEt6JJXc77 z|0VF;-tmyP{;hfT=S$E(>cWkIcyxd;%BBO+Okk}2tP^K3<889p8C~9Adzx9I2e>BG#MQ85OjIF2GSa-)*>+3 z8kA<7DAA*EKuM81xhyJd^V&ndnvpP=)kAd@M#m-IpYTtDYR!o_2r!zpX87*tLK*AK zjl*Br_sFgrklnv}j74BXM74b8tmG2j)aIBE;8JTsLeraN-{P+sL%a!0z;~ZhUAqs@ zzN)X*XodpYZ~C1=n|_8!lqLtz9B@_l$~tX;lU)Wl7Hm(fe>2Su?(u|Ie4vYO{F6Zu z`oaOxYK|E{sR#3GMd}QN_{^F(uc^pSM>_FY02~?NT2zOauol)tzoMEv^?HcWsClme zxIvPsC`QsK>KB7?x3E(sFp%@y<0AWzv6n-Ha|uZlKKoRDX_NNTjrT;hKv}@3j>n%^qZ>)8F}c zp8<540q+9nC~$%CH;>`S#3G$CO58_UoV90Tj9V#7bKFG^Kk@!D5l$HIRQ;+gdR)Nf z?r=xv>bfxcwx8Nri^MeI4(K05C@bh#yU60Rk-7C9)gW{5EukeLOjDJPfY%>Q&$2~qo)4<4SKzVT|6 zM;Oyi!7&Gbo{>}JWuj9G*7pdfMaYi1OT_z-EXvv!-0ii~sw&PM4$;TH&K4%$f2@`Z zM;wKs8D^t)>d{p&$Y}(AX5G(CdqT#1THw;X8iv&l5xvC7w_XCFcN4n|1}!%<>{hnm z^%EQWM7Ef#6|J9pp4>xx2oL+6T)LS2X=XdeYYX75XU`pKh?bjP$BR+OG)&6X(%^n+ zrVR&-cVf~*`9}D*pF-${>?t(3qOYuDvy)dEvod}D@0ecOXpltF8#Cv+oVf#tR;x~R z*!;V|p$T}0kO2Qn;JLlyA#eTL0dG>QL_y6!>iY>1$))(LW{)L~Jg7>)me~csn)5){ zPPT770|$?Qh?s(bh9|<0H zw9&_y_n2di4MY+l2|o&&a=EE+Ewt5kJMBg2u+z>CF^t1M^i#j|TmN(TdI%j}f56CY z)5%h(dZEQr4LC|%+iOD*;1L1yQR0WaWph0V6WmV~{hmvqR|+yUT>$Wrle(Re>LgA9 z(1b^-j53uYCXxd95-FsS;XOL^7>KeClvs?SNuyCx8${yJNszkm5jUD>sm+e)po`x3 zrQPU6WlzU!bozp$#k^=KEG~`{L{%$SspddGW6VwWr~QDL6*`CDHD-Q-tNUz%41?8;sXjH`RY1&*jU>I<8a zfB=b67%c+%@|sdiO^Pc>xpq*H*Su=57_1a@>NSEK@+hdN4wMGgu~Ca1a;_WJ93F8- zR!W=#&s^uNc}v%@&}GkJJfJOR@j+5kcI;^q{84j#*NM)*T8Q@r zaQ7-E_WJgT`BKr)GYOV&seiI4L=MwRZ&~-pI{rkHPNy8sv-h^YZL}-OP)dbVOgZX9 z{b;~T%}QL`O#6{iahqnH1?{1fSjQJ7r(zJsam`hwT8&zD>NRN8^!dxzZ{L61jLb$A z22(@KTD92KpH^0RMU}2xyK(Ezy$6rZxV)MLD>m#naKfCz5h{)5b|~dIT}UUJe7N^P zSE5$J$?9dfDYyv~1P7P1|Z$Kt&6-tTx+1M&_2Z!zuxb&0*aNR$X7Re@#@XH4`c9jzCl& zA`AobEr)%yKKNWW|~dTXyU@aOA{k^OmjKw(poJiG|4Z#+1Ki zw7fECKPPd0$uX;*`WvcR;~7K$*H01)tmU%DNrC<0Z=6N!z0mwxI32<#jhf(?CK} z5j0wh)!|8e%>hc4tw5QsdK;MGMO3TVI8)5Bz|yQPp$(k=vE3er9M72wy6Boa9(wMr z&-qbh0}O#A7e$x0HFmsC%+lp5QjzX;c3*?p)Ei}jX=hHEy03wXM##5mf7?~u? zjHS*iVbxQALse@$V@kjN=1F3PdF)nl*z&lZb8h<_=Xb+HuTQ8n>u&*pA&}&v=-#ib zx`0Uf(4<%H=0Gv=aC6zhVI_N37s*l! z%reC|&1y5MxYV;5tgr4W6vbM$l(5K@%*4o$4&_L!)-)nW32{P}D+Fv{@eiN9^*rxO z@Jo-~bHioloQ%Ib_VGHv!_75Yf{6i~Kk1*(Ab|{WD4fbbxE3*JXZYaGIG>X98Fl`Y zCd|WhFrKfQzPjO8Ko!1AjL3D8LYLMJ7UYw+tc9P>lOvCl^)V%4Q&{;dHzJA0Ar|^L%y8vF$(cDKY+S zBEAP9RP%Huo6C0!#ZtLat<@V%i!x}MQ+CQ9*<(jMH*iKa{R}hCH1jMAUdR)Nc&>Ok z_@Pr4KI+fGdH^JC@Tr}Y27H<>T`e_XC|7=my!h?%ZS55dH=6l zDgny)Kr5s{kxpp|M|f<0^^^>j`RI34Cu*a$*4qBn8m&%y?X=TDJBDhZdq5Bcov^R` zQw_ATy80O*LzxB`&Tx$fyyE<{7w%Bv`|2X?1g_#t(z@d#HQVp7CL$P#v;SHzL6=dJz6b)^H_%l8 zRH3{WcY|`$oIm#rnEOK(s!Hc~Uft9OJX}A$a8fCO9)w)rq zUX9wE_5{OWa+w5^$K*2wOrc?tig>vwssOvz#Gobx^YM0HEZ7NuS*w>A!yTcmGI;t+9@^)^+~-+4@+I_2MBba#*5~ zl{@1J*lg%(*UDF@SgCTAs?}=DU&EK~{4??+>gMp=D-Ygyd<~=Vl(agl#6U8g%@tr2 zCu!DpD*t+13Zh^q*9LTK2|?ii?OA@7#19 zrHNG|%amJ);GauyK9Y<8{tU%kF1I)&gNIU%2SY?5%{gPF4DLK&CV)MtgkMqf#z2n>PD5knsxPTcmrvl0jqp5+s!hdq( zN5u@w5W>a-|1>Ci<)o;uNJTasp2k}IZ~*64Pk(R1g)mu>08d1-ekrg- zl)UmVU#1?R#dkcY00QHGDDsc{ zD?pU_H@<6{7?b>0PU5|y1S#)WK1g5!%d^Y}poLQZI#Tu}IGz0M^?T5w;;F~c)Q9rW zy7$Sl$w!s*GOC(egy3SY)RD*I>M;7@4$sQBMWV*e?2B={NSe{}oL z&sG#Sq_WzVtpK~u5D-mj-2Cv_+nzeIW}lDJsu}eb;3HlgX0>x(X;pZfC_7b_MFU!A zFd*sw3~-;E8kc^^jLk98m?e-Gkw0R62F+E(@B0t9B%`IKlG@Xi0b?luo2Zxin)ebI zUT@@F9UhFqcGh>Sg+W6|ukx;}OA-@BjALrRc=RcuT-flpDJtJcPhsM?|I|7I!m}D& zlwr5Gu}<*PuugNs7YSiR!^WSu) zyy|b>#N`RP+}ny5`8Aq4B6CCVK>)EL$K*l5`=^`a!OqMB6w(GWgZ~`V3neppRNS-t zZ*Kt0Wh{Zj5f2mxF8YTAi=`!UQUR?6LFZkYJ0bg*Etjxbt)9!aS8;c57gC;z8TvG7 z=br5TBBT+||7z`1xqa7NT1C^yZ3fXaUHThnOzi1E(X<4ts|)$oM!%Q zgfpHSa;AK*K17Q%+u;@B%A&3{LC?BJx2^9)*iS~t*{yUgp@26e|2LJlHKUuN45)?Y zly?|5<(e@24f6{Y%9AxK4rN!dR~kDTECFwXGfs%Fu|4vr9OFM}Z=^L4Jn#MNC`9NLxaBjuMS$~nn~mn;+xZ}X>0a5-vU$NPs8qVpjycXN-w%3@$+MA&RfV0kO&d(Um;EC|(x4*tg z6p($Ed}3lXY#g)v5Tl}23Uf3qErc*I zjus4mn{xHsZ>8~BDD4@sj;O4E;;*sLyO4g1uznLf2agSqe zF-e}qruuq`k8W=wJu6+^IOmULZ*z#v*<_?+f4PAdOZO=v#J}G-2}$>|N;Iue4c?Qf z&#k4)B<5+_Zg3|7O=y{zso!@&zInN4=a@V+ye7bRJ3Jk=G%kE%H@B`1!wOj*xyu91 z1iKe@%75~ISQ^rzh)bv{Q6(Y!yoEWyC)ujZDcjztwZ^zZH(eXy(TL|=nyY`n_OEfE z1LYoVYG9uem_yZ`?+mC>ku}q|5BW~{!Vqzf*X%B?2ALIx2f}vM$FmLcW9I10@LTIH zx%*cWTfMI{M-85Vax_T(sGtvbM+ebT0!FdiiZ;)g^l^CVH|2QKKu3LjT;@xz2d`*` z*gxRr}HdltjL-+p*}f(fegOg28$i-~;9I~;PS$@1UK_n64{zx=I} z)(`#X`^CGv?bBivX(mK|0+-|{!wZzROB^+p{$uTgLh6UH-dwhBoZ9RC)9=`E+SvDX zWq2&tiJ8^p*_)!!x*p$~fDb^`S@h`m52?nU?Ok9fbF8E3&2X)^?5KRa3oepsE%A02 zFF)^oV-paX;MFSSE$~sYsKRwMB(o)CP2=9u_sZ%Aq@Zsh3$M6H6nH54_1jDG%MWj( zn2p_wTGl!e9!A^s-`{n6uC3pgD+bO9b}#I+fb|Lm)k@KNYz5`7i6h{}?JO(3#`qdH zW;4T9w|L5fOMIX!aa;Qks?AgXSv2DrMS9k~^xaq;f-rD|fG;eunQs zGg%usE}ocGw@tesr-9|WBd!zbeAjJ%>|eds#9kMU8t8-OG)Qh^TYc|;9pd!2YJaB} z`;w7dzv;WK*qcm6-v9&sCQY0s=T}OhYAqF^zfG37!A)Dg#MWisnod3_s8$cq8dX)H zFPP_2G4gsYI?fmv@o((+?RdId^)wXV*WcrkAq^fy&_BxrQ?(CX)cat zH&`BAb0C>Z@L~D+_zkTugImjyKC`8b4c}~aOz1}il z^(3f8LCJ`eg1kbmTrG)uWyA4*BGc_p2;aGgz_`ta%Y1neCBZ$ME~;^g5xTcSL9+-0 z(^&da<-Vo}K6v;XFh#mz7Gzi)3pbK9#bbm?xqF%gakwU0Ll^KcV{i4#Ml%AMT zwOkiJAt}b2T!>~hZTD%BY|2ti7el<7)K-`8BTcye#!G&j{I}_@fh>s zpN%$5=jskLv@d_219KHgt$#U-z@UJd-eRV_Sau*aj|flJvY?>@6qvf3<~Jiz`!wY2f~d6RBE0NCrCN|N?995dsy=OYR3Dc-Eg}{*jAhFz5a}V@~AnN4ccboUG8OMygx)y0)sE)vulVlOL@@%_{ zU&BNn^tY8KHX;ePg?4Ux{kgd5_kR80owpO{v*ceHHo~=Uf%sr&hnQB#OCp(?GnlS7 z{Wl|J9{t4p_6F@1J%>SLtJ3Z}{%O^8*Q})U*psKqhQ12oaO&Y2_B9>ex=GKmD&Bm* z-G;AKsayJE)a|Ow#$1W6(K*^oR#n{Qn09P=O9~eo8;>*DC%P9^QJgR3DOeWkX@(^a zW{bZdUtSO9TE^DqTEN!KqQIL@WeLR*bV03j>iH8z-`frsTDnPGM7C#boV8=h{34%S zy`GbfFT0>o>X%y}f89vE%co@a>X00h5&w&B>!vK*aI5h@(iRvtouM$y45p&CrnY~J zzTd)9d$@2=K#pTW$X++?QCdb6E0O)1az2KXM!!Gq4V7XYe6&a19jIvKton6kIy|@OM=NEo$^_95*eHMO`PUvS)Au4)E^_A{C02;A zV8?-s{rOCo@zkRPxpNbeY#IZ-|W?PQ-DPukB zsv5ElfIlt={xXemSCW8UQGItR%-rgVtXqgf|GSP97brV5+=9W+3#$421me3RVLph zox-~=1KE17>4@_?o*w0HEB#?R`5%0T;iN{*IQJd>JF2t*&`e|$&|k^CS5h_BA`kDK zsjJx;M*9D1;wz(@t)|F>Xyqgu{A;^q(bBce9)HrO4{XC){M`)(EWdE5cB9w~DHo#3 zC=>Semd=YL1Vy>oA8HV1*is%EUu26R3S}9$JR#F(Z9&t zX=pw;o4$pK74TYVE6WsN7!QtB;kS5Ws9ao&VJYH$N90(@ddgvNP`J2FZTN8Q9<@2~ zUe$W=ZygTO{lifH^ZMjhlZQDmW)8D4AxG_6S`Hw+Br(`eBZaH!3(x@!{|ll;vDbx= zE-}{MN8V!MJtjC{!bgGsQsBN7IPV4Ccfq?VZ|A4LBwJ(b?YtI5z1$9_H?#xHy;=>9 zUWY=~yEu@7>j&V&cWl>mqGVHYrk%n=c=Vr|Q+u}O`~2=_{0To9r}Ctq(L9(nj-9M0 z?umKgPu__tpEmm^3s$1PotiX`ik4>aLYP?X)EPTNPtxgo2%>Qu0H+i>U!)HJ{VKK> zpq@Z#K{T}O>+|)DJSm8h)hWekj>FvM7^Emf0dg3ZZ$4!Q{a;*M_TqC?Rbve`wXEj$ z2CuA&Gr^9sJt@=K8aq7secEO_4qQ5UT1QStSy9R3W`N;{)%4v@zU9w5&$^%h4I@t( z2Z@NR`#yKNoH4ggPsP}{Mj;Ivy6pW2eT^GHEeiiU`0?p-4UL<4`V6@OeXb~PRkui? zdms?qzZnuCLoZ!u(F)o~?JU0CGSxcCAkvPAz>94JglV9k{qWr9qXv~&YMH@m3e!s4 z?RV5q#bB%tr(eWUD-4}DdD_f*3)fj|-9bZ!4j;AI=>5tWf!*vKk1n#46LY$|-;n{Tn@R@?N%W>$bOpM{HeM7xDb_tnAFV6AOfU~v;GSjl>}A2sgY z^yq3@^&90ijrAk?2|ZT7sNbWWQWDBcrKTdOQEHl6q_#P%RatJ9U&b=V>Vun(`fZ|v zqGJ?Cgi{IE&;kQo;sKx5*^rE&HP)VNtGy2UpK^6{4@`NqenrQp_v{h#I2K2!^Vwo>6Ben#jlUy>{cf&UH^QDJM>V zNKyw`l^@y6-g2dZVTcNu+?zUj-U&~@O+Y&{u=AgK>RZO+myhX~*J7+TP%!8jj z^1A5$nJwS8pW-=NYMauzQPSymOxG_T|}k$o~80 z()QB#>N>ueZ+GCl`j37mEz0Cs(9bo^V7x3T*-kd)vT~fgrxD$!u3S)#$*0vaPlp=( zRqDdsjAv-d%{cL#K4-`ojSeL^<@xM_qLntGaF=;tR$=rq<>%5NrD52dW#t<0`K#HH zB8wCSem*ZUUL;PMBCCRd!lk^+<#s4SJj6dJQ=Dp+$NmKCb42z`q+FfD`AF|tpFrDsTn0eH!%jEv5> z9OE)KAxq=4Ff}_HM5w;#E6JeJ4JpH@vJETK zq>4CD7F1s*I?rDjXSO|Ox`KhiSmulORXL_q+)T@Dda!BNY2T%* zyV+iJuLtSKk-fGbzG^M4Jv4plR^z`#M3u(WN^ImYtmmq)g61q%=3hXnDC9e>OMgDD zPp_G=9Y0)hq*ATbb;Av2Q*`5Zeo~Hx%kA;{{7ZpgXnAFIEljRQqC_m7U+A2qI)t<)J3a~#qs12A+xGjWjq#cx9v^|V{7G~+=n;6p+ z^k^SL3e0~nlH79%+FYczqO=#SqZpmV+ElYGwb)UcUA5a&hkbP-sLQGPUFoPV zI_9fT{AL|fr!CmfdgjcVJ$L>v8ys@x^!Ut9lhCpL{*=a{S)W>ywoTUfxk+tiVD+f{ zrkic1Q$mSH|DPJBLJzmuV`{&s6QpFG`3=SYejshhr1k`BIB4!JSWS-SLDVxhnPT@n>-a-mvu+DU`;gFd! zV^$&kQ-Y-#vsPf?&7sSC{jTCFum26Wsw=-fmwIWJ0t-M26ZHbGg&wG0ck#IABUxr&e={sgTu6g4l+z<%1*|@N||IbS!S7? zlto_c<&)o3lC}VLWE5nFM&p8nT*a@+S+c6e%X2ue>Ml5Bk#xk~YEN8353eK5W z$+-}#*e|h~^ElS9sbVc>d8}h6#d^-F*uZ%j8`-ZPHmR1HZnMqC+Va^dKG|lQ*BHA! zu(M+a=VI*SY=~X#uh`A`7<ANCqiSYZtH>gU-g7wM)AyvC3CJsi9rBecdSeP4ZJ zImX$VFeP+gMGl<1fmdYO9N0F0k=4ByKw7+)>)k8Nja6r3&EIYP(oIyCJc?&22YR0) z-*`a@;^kFR=GF7&RoZ>)DkJmm`S7aDenb`G6P=6CSFM>Z&yQCf=jZ&Kq5I3#NapwR z_tld9hgQUYIvCM(K4M-S{i@BOcq_I zQq4>sBXV_7*(@K!TvR{V;AH2LIbzI|lN#oVu~Tkpo;=hsZ%ml-QP=!2X(~W{3w}(@ z=S4jW$Mh+ZCPu}ysR)fN8ndTjw6J*0pGwfik}-EGMXOVq4wkvkf^S(|uw1N|%G1pX zv1+QwKr6+{sWRQI5__krjJ8_ro2oO$8gX!{$yjT}{;4+OtP@A4x=glS9GmJh#RhS5 zYRGgO#qp^zQ*9FGr>4xaS)7}iGuIYzd1}dGTgCOMHOp-iH>b9&v|Zeq+Ox_IaeL~> zYCFZ9sWWTr68EOAtg~CZo4T{l9{0un+Y^WEbzc?yd;59&;Dmjzw;xW~KYmUFIC%y# z=L{mTW1`-pi4py1O19>ssnPS%qS!JmX0RLM>9mQh9?2wpbUq4C7x4FD44*Dh$;+{N zxLSsnvqF>3z>v8Ka=}Q z7lA2?N>JqD%~z00(r_pfRDboixDU^;G( zoLtk3?c1$u`s0xsKn5AcG13&?rkO78m?hCR`=omS(u!VVF;|=`iPPVedXLK*3~)@N z46O>4=(eUwa9>M3gtclV(OgNKa?$KXgfwsID~_@Yr%pa7A?BA zWXaEKS>cZrD=w^B^~;(y`!;M)wP};6EnB2*+a_nnPN+T4KBO>UY;G~*gX&;2|5C^R z%q|iHSrk=-bc_uXVpNihdv5^@APOQw%tnN8@Lyx}61z7zy~Tx#FmBvL@!%znA3sU& z2muf!>OFw>K2V@Qv6b;%tqUq_+4{&ohS7i|X#@t=CRC_8(V{hr5u;VCSb^fisTVI% zkR(YUQl$7SRjN>F(v(XFV+Em_w;DCTYSju+r%{n6O)4})3xk1?YtWc9-+Ti#ZXCjd zNib8Ul)=Hv^WAp^=FO|LXi=4A%c`wfRb$g;)J`&@BzxivH33+HVV$JRmz|3IXV0Gc z1yqWNA3qxW`6Ct}fTlEQNTf@rB|`>MnKEh1k%LUGTsrdPA(tfu*`f)}q96Jtjv{VWpmsv#7CJPsvsE*jWses+ZVRuP9&a*k2q}E>7$#E-Do_ z4ipbR7B3DKA5}{j$4i7JC5jUzM$;0!R}A|q1%E1) zm`cOnO6OQ*;9q6(TV>&YWnagcoXHuL$(`JRZi&PB3x%PAk*eSrE(D)c8Ahs{)K!7e zs^rtE!dO-FS=AhxHMLVaG*dTqGqLqZTMd}3M$%OirmC6r)q?42B}27grrOC^9hj|7 zGF2DW3Q6JW#(MQoq0BGJL>eX**(L~I>)EFU{_rpR@p1;uOElw`x6K2*WtXq#-aLssJDOch-J9bW2EDA zdfffiquqi9o!s2eZ-pV3UDo4@EBY*2gmT|~y&ia=-$M@#_{$R*Pd$b7uYYy-e@@ax zXNc)O#~ER1HAqP6kWtj2qN+zjgF{ExkHK3JCMGBr7C1JJ5?ov`d;$}Mgc?anWp{uH zn&V8h%mZpca%gGgF@`A>!NLMBSg`LxghF+sX)ec^ZRs>(#F!N;){I7tPP@r6A+$t$ z>Lr(ze)lTN#L*oCsdqNUP#T4C<5WzWW@4|sob9uZsTup3Ip6>b?|Yx64}8GToH-6Y z_6aMW`J9cz4s&$GJUho63#aECrci;5tg>mAx`U2x3m@MuA)%d?S_Xwbe^rts0ZEo3 zM5-Jdl(f>8cw)&7aFqfB^$5009992UiLYuN)Ck84{8R zR8+3Kd5gxxRDz2u3lC2wA3iep@l!}o4&DWPVq7NMm9dKg)In{gR|&4J;Dmv!rZm3u)h?o_=rhwSnaL6={>v$w_#P^XHqO zqMBo3Hp9YVMVK&4tgMz5Dm1M`37j%zu*#Lgt5y?}4;MKUCZtHwt5m7)e(m2r%=7n- z5fvq~fByR58YFj3< zH{titEd%y8{2j+2a%-~y#%tYww(%2dSpG-OmkG_`>VTo|{t_C@MCCkU#ygO2jmkQ= zzHmNmY9)pngnzTt5SeQ7%_rcbld7$L^2Mojd;9%a6v|X!sM3=KDhX-!~4y{i+pB6_^enmvo z;<}^XS%1VU2-u>b!re0y_y^^1Hl#nWon-fm!|^dSln@)LP}JkWP11};0*})+9OD3& zB*-fLTn2~EC_JTh8fG0g)JZj^_~rY{BxjdpOiS-bng+5C%YLUgBZ||=NHm5~Y>fi& z!Kpi+eQ(NV>1LXDM^FaBzM1w9_>*~ z!BO3SS~#(=YYW^e3ppX+rKWz9ElVGOoAjn<%F&X@3dK1&Ln8QOsN$pm%fN!)`}8uSDdt;LbhP~gcZ?4%>@!IR0v{(Na;4X&wE}nUx`vMEn14h5oiKL#okn1 zfa|uP(|m$B8j`B0)aRTQ!1m{h8F1KTQ=7DPQf{g)R~8*3gc6ql#FV#sadff>Q5LDk z4mRPe_S%yA9OA=A{L+n$!Y&+55k9-A2*$RLErE1r%<;HXQzS$+Q@>>O;V1t}TF4_k zDM*gZFH^VIP|BM^uq_mb{W9@nDvQ5S3QViS0Tf*Kz#=QuQro0Si=~w2bs0!W4@8rN ziQcaa#n`LE`jgf%bcXQ+ceRI-gN_1MP046N+y#S@}?NCQag+U*wF4aMX6V}^<7yoELCHJ zo9h~>PRb2VoOln>A3aMd0_XV7r*QKHCRwRw(d)F|xf=Uigu+5`lJ1J)mK%!{hKY%4 zka&_G!01A#GOXvAd7ui#5VTo>OsStJIn`4X8N4;MuDQoD?`b4)%cfH&my=s63A!rD zx}=&@b1Bq}kO&vSidAD*1r!I?iWO`4kDpmC%1bp0u3we}kzRyH7(j55;sU3@B41$Z)Ns#(&aguZ7M^syy zUhq(4wHG;bbKr|O3ckpZ;`}m<4U31R(x`K*Kjel+>J{g>;1-|L{9R7>1@y*Uwhpv) z6d;XpOE6<_UZk*or=+%hh{YVeVLg9Vf9-C;{+qSTbQvO7FJAg6r{-|w_&LCX%Fk*W z$~V7CDQ}f1#k~lH_b7^CeN4w({zUo9MG|o99fZt(t#dwxwyM1Z8TuPRCvN92kzO1Q6j%2xIiN z8OE_miQ^@r_+|spzxG))7{UT{@WVa~Sb}dd4HoJn2}A2R4UQxJfzW|$%_bXgVWa?_ zQ9T$wax+DUs9b%9fynbNG=P{_7A-C4pv-%kahl7RK<0bRBJUS=6nfziL!c`ZHmHgP z2MlF6F2tAR2#75w@xWL<n2QTSLRvA1wW9H6 zP_L(XJg`^O8@~mjs^mpk5=66T_v!HI?yNBI&dIL@q{1wmc&JhQn7Qk0(6kT z9ppIUaFpXjAIj{Scy;;2I7t>-gahM4OUJ>LQ6sDFR7kaEgrw8A_i=8E-eLiTO;~}1 z^>7EO;weB^xkKRuxi$YU5ta4-|7kfc=6CU*)8jFHIh8nZj_SB`TKTF#G3VF4TsFBn zSPVXn(`L76uVBqsw^B(^9QmwmE~yO1gPdDAxDy*%hD7;L=A$pX&odTGi9?}ZXe1(R z)y>1gYT=TbIcOoLTdF+z3W?K1Rz6nTxsV4VvzQWp&guGd;?P4~G>HOH>G9cQ0OjTy zlsx<4I~8{y1N((j*>)q%bBRVoWEHWzbYa ztc>8P14-Bx5_O+Zey6Qyo=fpjT&x{!1v^&8vMe%I5=dh^uD|%L4SbgEB+{)o#Z?XZ z$|7Ro>7^o)yeXJsQCm)N!k<4RB+zE+VP3E@adOHQ7u%(ezziJeJCf79nt6n7N;bpD zY8Y_0se|V-yAr?e`a08RDDP4Zk0IT7x)<{h9jU}KIpO1;9Gpij!kmM%7}S0k~`9d#E3_)I)1xG47_URcpFQI8;4A;&JUR@ zq!rt#P|eE24RtZ!hf7|L)<(*!Sf?T+qYWko;Cc>{{Hzow!dWhnFi@&x`dW+XW3qy` zPm`6Pq%?_d3@ej~TH|l%$Q88}HtjkgK!`X9at{F+`6 zl1FCukt@v~M4D^uK7JGIb5L>IKIpKMHhv}|$XU`8pGqK!p9t=^=jfF`zDlENmQ&e- zIgI(EiKoha>?h8?1#C}^Na=vFX|dYrQ{QPYJcelLxX|KRc1I#E7=k)22!K*K3ye@s zDs)mX3=@W-c0>TjBmuLLaX@EJS9OMxv5J^N=OqPUs;7wp3&d-MsWP9$OUDgQR=gOH zXMMoLKOps0NN!`1dqSx-KFNw3c$S>6B1UOe9MI&7IVnn6p;4~o^PQ`lw%D?Q+~jbr z9P9;d+uKv!&rce&ShErSQb!q?3o+&8+(b$}0y`q+;a3=ky?{Qe8Y`zsEs}K|jxB zPwrLDPImjLqodS|U&3irRcsMd1(0J9ojF5+So-y*#}MO4JAna};?93HFlRfMI#xgi zEOZMkmU-1Pth!^7j?hkHi>Ky*I~1eZv1(;RhN%c`0GYD7un(N61{sluv3w?8cuWI@ zgobDn=5O?TglXN0tms)B940YYv}Pb?DoLrnwO0-)D?Y|fi|iYDXF=)Ax%>>oH8Au? zZYE4aDX<@hdJXG-TGJAxH=*3D$Bq+3t(b};(dNl#3QKTwdp3L{Na{0>C5qCx5}9sK z!hHx6SmActPZ!sun9ME5Xsnh&-fbSr<^u zr6rP6*^^Ls1yRxA^$0`kGMA^N(5js4e};jTZaIa|+}h^MMlr~Eewr$8Qn+hGh7OAm zuJlw{&}B242}>*%r(uNANE~A>IdKRLheo}rxZu9ylU;Wh&QMoQ(IgiS4ir|EnHjRB z7|~S{4Wlr1toykBBxkTem9Pf?KfzM+8`kH~stf|HfVh%^;gOyUAYH6gY;W$X`^8pKYYT2!R7#qsk}(t}}2f zJQoDB9ADS+hD74Xjsl4Gx}E<5mR4>06QLqgt&Mc8Zd`(p-MV00m8wj{ZcUR!1YviI zO9|dr+g-v1sb~*GI_Y04edV37qc6aQg;fHFma2&y-ljp zeYTeWYV93o8j}%GsedYMQl|Uz*Vpbr54&UMmor|>(o2aLD3wsi$2^qu!A&qPenquu zhVsLP)+RQHTnHl1q&k)E@H7k_mfW&-_>+LyHDjn+gj~))C#WG2lqN*!mt3b!1x(Sc ziFZ)@_VPUuId^FhQb_mmBcLYpq(nsg2!Y7;r2bwna{Hn5`6U_*yogyoagORxF^{2) z%nQ9}Gc!_tM8q7cGt2?Zkf^9kCVqu1hBjX0`B^;<=o6XLuz{H4V+Zm&@^Egm#`dm; z#hd0#Z$tXhrNXDV&gvnMWQS~`y7=k0kJa8zDXTP!H%r@_=wP69hsamC#!0k{eHaCYtEY;e=Yc+&@z3)Ey8s}6VVOnjdf-J z^uUIx0+D8nt6}ID#_vB?Uf#3c=ZFC%h};;-EFp}N5MAokaa1tZyOkHuWt2CikBIJm z!{Bc~g~rjxZ77_;H}5Gr)u^ILv%a;swwU47#B0$0^h5d*T>-oZ<6mIhLzF9?x;AgS zJ@^9I<&N0hFh=aNx~q#2CI0}+Tb z7)+xM<&13Wz_CGavk033kpvV31Q_6eqCu_m1Oz}v$f6=^13S*;L}XwV*|}VZU74sD zni#ROhG?6@>b5I)HCaYz*1!$_&i?#o|Nflr@&W<s5{3sEh}sX{1*A2JY$5NgmC zMZ>@j{YRoJh|v&7h{Yl>GJh`dPuUOmMZ(%>rW&i$8C$;66Xrp!?2sSM>|En+)4iAI zW_Sq7C&sUU-W3Vcp78;sLA#f4!{8HyE3+86GFEpl)tIX9hoj*7HYkkJJ){?MOf_Fm z^#K4OE>SoRNA`PW{`?m&{uYtm^mf1DI6u1&W@3(>filj*t*`OYWSXo96gw*Z#`=O63|py>nMSgx{|IIbw)`CL;_7g;5|4n+pN$ z?hgoqHBcZW$GLMA;kr+U3BFBm`SSn%JvqN#*cUe4>R-j>(7TOoS8&ntsWFcjOGqUn z0HK1*C!h!J5e+Dx4){&L-ss;g=K)KZ^|3hJX}qFEvZs>Iy90D%sxJOvW^ox18QS{^f^G{`sRSWP%1{YLcj`7Ko?>E*3TR z;}rNb}Iw)Jm zGKN3l+oDJw`49i7W z(A^kghB$3xZXH7h#0g|zXr5npful13bUwE(BGX7!2I&Ny z)r~^Gj_qm%aNfH0-f&RTB}@-W!1q#m^p0xv{M^ltpfw~xBxa4g9%LiP>vg6YQ0^o| zglrQGlQpqqzSB~83UQ#wI;sr>Pl@ZkM8M0DEg{V_(43h_@H+|Sqrv1FxTN7s7=&v8 z8eo3WQ_uDJ7rhS3mZI_ysGZ9jHk$|lQ@?A!KJBq*As}$Rt{!QOLu~fm@%kCfwt?Uz z_lcE79H1oJ*fj(RcDH^1^(;9TN z#Ei6q{^dd3kh*`wtyWf6W<~z{v|TsPNAr(2sk?`ihEOv}7=UBafP9>=i>Kz5+xy5; zRJyKpbp|=AC5W+O!FVH-@msP+%OkDJcc0t!S33l6vy5Gw(>p2eDxdS~xTrop4-Peb zPWAFlyrt}a5lZ#S5HRf-zozDh7$;A&Y$<}qe!f9n0zmR@;y%zmk;S4ok@q39#Dj$QlYIy?1Mm(PgY-ASteW};Ekl5qwsc!PoPqS zyzndq4W1e%BP%ywo60Iz5K$4DcvRJjl7cv0rnOTlq*6Hm3^kU3$qNHPDTc79_qg^U zlHiFf`WHXE@L!=yCwR-WUFuj2cGuZMR&;zWr|psz^E&n`9%xv6Udu|(z(FG8L?mEBXmLo;ST^0!c7aI2!lYs;a45WhP=vd3!y%Gx+8Bu{NF*#uy(O}{w z>6AOvq!k?ltG@>y(W+=@?awBO$!2uwH;JTax$R0RtLk{Im4(rbqoZvno`qp%YRpb+GgMW1tw)DTP-`|;-74f|W=ll1YbPO^Z@5}5 zrnsm?Nlnw2A?eZ+l&GuxUV#oANvYNDRFur@1cw?|slOmoQiX;hMIDfdgmPd!tynJR z$w6Rb5kaFF{U}ftk1OX(3o%#$Y>~h+gVp|b-`pa+KlE>D^g5dd3lW{ z*>0pKtE{jyG@7wUTo57z(WvIb5{rUT5vdg$T{bSK$m#~8q?Pn&VFf{;KN-@(ODaV` zRdh~NR9%-fV2GlXi!3fN>YpMB9#}kCb!BmxhOz<^>ku|Vuu_XT{1??r!D%8S4Nj#ZuT-KS0u`RhHAZoxqAxGN{9+~Mho2-<1w{jY6=dh-47oxdJkmTxIDxZ$jgUcC`>rX6s64sp-`vhY^XmUtV zuv{?o$HhaC5NT@B2oe??Es~p(xsB+S#3Vq(TSP>YNKA!fa7IsJx#iAV4~H~zUcHv6 zHpkLDGlXSYV3sN%wk&|$z_1)c5XbW_A>%j=OUiq8F5wwAKal0o&l}bOKno4fgoJ`6 zNdyaHVsT**0$^cDofn3}kytn&5Qv1;ffzcWED))cMENMvZjRJz7-vWtkxVES4e;&6 zBo&R5JXJS}hf%Gqn@;zA%v`imX4kkaUA%rqfu_>wcW8;p4dHwY38iWnCTnlpE>hR@ z9L$oYWStmcrfoDT!cEGSibSLlNM^~rm?oax>fXg(_}r<1<$KrDBJb${?G8W1i;AvNpfID|)J zt4vv%WUy&2fMJ?kQ(|xNE&!q+0KoMiu&tOlG}Wr!RQqaK*>X5K`Ny_q#ci8XsnTOt z9QSoJ>}jqLz-EKz^qgAf`tyYAH;G#3KUVI#`@K8Yp9vx+5hC3zI1XHoiA*9GMdiyS zz=KqlGOODtlSCqKRU%Dh@;_$?t)^mo!L?}FUy)Ko8O?URk%nw>ft}S=p|wnzGDsPg zM3D?tq4ob!g0=C|bViwih^^Enb#tW{c}eI+DoZVHKqF0!c7xPNqr9%3xPG^K^cayIcP-ufmv zD({StY+499Qk2#LlLsW$_gXTB0V}QBv%cwXD2~BoI)xK5GeN;OEGFBstSw~%FaJFG z9<;udZ(8dP%Tm%e0Wi0>irKE4$%sc;x?^XwIU@j5sC_W*Q&Uf)W6V*BhftX*_)T)w zX@>N_I`jY4G1W4VF*zCMrj*4#Jq-)9LyT?elD!wf9}W!UrXIMHvpKLsGW=oRGhMdx zOu=b|dQPk%QTwvNd=8asZG8H5dtPu5GfT?#(KxYWPeqe3?0p~lPQc!4n-o+F;nT~Z zHuuF5rOXl~Nn0bo$j4ni6HDR6N+}t@H&H4d52g;ALCiA42=lZ#&F5iX9Z!~EA~bw6 zeGgeA_m{Z5wE1dKFeJ1rC8*lqA>Fy57yDVCFv8Zr;lDB6Ozaqms2Tokv?=0_6IoPk zHMp>0bWWT7XX?}%=;xrOtELG3YgJe^qk0&kp6DA>e4%cd@`giVA~d=5xADfl=UNdA zebf{E{p&S=*b5}y3H7zED%ng8gfCsT^X+}~bA`&T76BZtvwAQ#yJ}?Z?Q7|kk?wB0 z64Tblq=!oUZ0z#px>yE-!Du)dl#&w!NK95fTT4Dm=_+s$A0|b~K4m!TAmx)oFi&U> z1UHfa)TZ(dRC25og2!M)#5_i7d~)6dLzXx^Hk@Wn&yS4qb^e5lW=9h~5NyBZEU3U; z4!f<9LV5d%9M0|Qsax^8P^C+0sjmvf*O+{zrebQx#+p&&GiZ|_ zM;%6s_CM|HV2EZHZPT50|2DH0lad=Kpt`sj9^OzY zg3U0Z@l_xC>qalF-(L$xrK_#UhbVmw{%)Zi(jc*=aD%6jn4rW+Im6e4tzlDJyxDZj zV4z0-yK4nI5HprcnT37bf^N0DY8}POK_vkprU+{SnTl{FrOcuw#|S`(Dai1M1CwSN z6L709!ra@(2m*!}fQV{-=z|=G_e&?yjY3ru{zqN z_M*Mx5yP~cilXx^_3#1wj)nb~vX;+b(&tJM+gpoeG@G;fWHUAI&COrXy+Qi{e&j-b z9WKq&4*Z7g8!^_xDOflyiZxr-<)vZ#+QGT)>ZU7(6x#-UWM%{Wc8l?_j+N>@vph$n zgZC^pK|rSSDGTLH6;=2~jEfcg(wpf4<6ujv)a2Ht6<%I2;?^RltvoG#04b`RBFfAN zdGW5Be7yixu$GS2^Wch_qEJAT7&ZVo5rXX3SpCnC(kUH;RN0Q_?#t`iO&nF^FZCyNekhf}t=*TZqc`dX|+dj|PCT zN(U(E29-dqmT()uu*TL%?F$bJSR_MXl$J1+&CMJL!B7aZEktE=J(p4-1k!XHNy*Zf zUmD2oo|52HNU$0wqC*I-M8|+GXDI#g`ZkKF25#@?fx8N8Tj}wFZ%$a`3ubKWDmJW5 z<-k!vKBL@E)Jk%EA&;WP)aGFH09jp8Zj}ZnX#*G}M1TMQ zC@=s8Ado_FL!pMGMV05@Mqm|*1qtfLlIac_nTb>=Qi^E(Nl4k2kGDmiQ{2VXcD;fZ zDB?;}3_~MeONFQ0d zl-=A9nK$3*)80$>7de_KP~h{IpHAreP?nnx<(e>#Bw+uQP^*ac1GB&$mH}EwBG^LKW5HnM0ZgCP3jZvKY${_XKfmRrGYfUKu~6#3@K;DD z0Hxr1KANCXFkRU8(-s;-Kd1H3DzVah=gmAe&10_1^jT*-p+Gna)eNS}lE*^#RcJFb zFM2%&6v*qqwrH%fuqd2+Pj}|Ee)oFdEkPLl;#O05JrrCAL~;Q}TaF+A(PifnhHjj3 zGziU$ZV;J8Th0IgF{s2M(^yElgGO4?oj3kK2wUT8tm3Sm$C~2aAO)_U3SxA1^w7E_ z0ssIUK`vmxED8d^0pK8nDQMV`A%b}IQsc+0@u}Ir7k~*H7!Z38U@DwsU$G6~|8fKH z|8OJp0TS2}l+p_SL`nT2d=3`zM8 z&y31=t_{4S;QFOM7$+Uu(&3^#O_$1d)>z=Ip))7uhtU>elt;T4ey;&RsT8wzVF+?Z z2Uk!iR2EhC#G=&=E89O(ugAH zAEV$*0uW{fMFCYuq_m6?T(%|Ar zGIQgT6G}{kbd^SxpNS7c%HZ$o*62?6r`kZ0uFh<53IF~|o8H$&-QNMaU1Hms4 zZAcvU4VwC5V|&c!M^wr3wT+ynXnC-+WH>Ag4-zYv3_<{jbg(G~03c&%_Lhk$a7F5@ zOlE8UAI4WhEBp6kc3b72Cm{XMKCti1ZiBo(4j((OInNyLlK%L6)ShTxOWSXBuX^v9 z{`(&MLt>ZziNEWsxVpSMUN#P8Xq7?YFf_}3b$gzuRd-svQ!}a*_v`h{?a{yUrf%I% zxwWVw`#mUS%~#GnOZ_YF>n#TmG(+i~SI^rlcO3iffU5V!aZbX@oXA{;VlD1KC^WTy z8-f#N-etkFbKsZrVK>w{zU8?7H{8ejGx@(kxsZ9|;{?VG(6X6$Ou%GzN2Hd?$xduI z(URIO6^1%3yivtMR*E`WcI0T$^!j~j^@7D_!M@tK?qX9eGW1-h!^(Bu%;>xqlk6N1 z^Q7u(+-4l3MpmUoNdL~*lu2rBX2K*nLuZ~&7DGcbgnfj65s~l~xk|RWf1eIdV>8p) z?037X4W+|tFk1!rb*eSsLN9IR;n^zE9Wxi~grZGgVsK8VirqVdYdopX!dlJI{ZpI3 zCF74y1VK>B{d}F>%6a?LhABGfzI--{bLtWkWFMHN+mRqBfjSgj!CYJfc(oll^Fcd6 zw$D%wtaeg`&V*NN_;>fzWuX}tKJx@P<)aSd@>kw3Li#QJXh4^*n~)g{#W>oj!y&W= zQP7cD45-zCMcY-?LywuT7*Lax$48qCWCr(PXr=RO98E@Ufgie%<=V2otYTpMAW6@@ z%dRgjRg~RZ_nOf`?sC84y!PIi8Tk`ID3gjr2*-UipG{I>65X22$KU z0U6@+DLk)r_cs#XcvU-_64-kPt0_&ZHlMkpHQl87Dm2ZIoYyQAuJ;RG=vo=mE_Nr` zubng71qUcOHCv-gyx2N?&-4tH>gtpzT2UC(nMUOZ=I8!U?ZBL&#bJ{tsAPxvS3Fb_GX23ct`~-y zjztv|ASa8E>2mLq2nI(cTz1Lytd{1!15s_Gmuq6=B$EaOy=wPcUZ&IpO6kgil{|u> z1eRWC=mqiobz@h4^dY}NbK+{U!HLDRn;*lL7wqfb$g7bZ*Q}Q+O78wpZKnU22-lt1 z9d#PfthJ$+O$IjlHMmM&{Ze|ODN2o67Xj@<=}SupmJ7GAm8g~ zP3~?L^M?p1J3BW84$X{S$>XD`Ugn$EssSXb-l~e~gJoE$_SulReu0BwnBC)_n`!pt z$DWq*clQPDagFrsmkQxIsGY_Pv0RvEwF=^|2^7YBrprRhZV_kux}N%tAyCn(z|qii zwL}1eXuE=dZ^m>VqLA!Wg=;pM+_6l_CV~VDe9fkK&?6q~Sa5bsmsY_qA({=CF37T1qD? ztWmf2rr&tAw2ZAHV&{%FS@9{%=zMY!t)suD_$f>3#A@^HW7&~>Ga7iTffdZVw1lj% zvhY}i23 zjZ5?U36s!~O%(s}F-?hHsMlSVwuWTGgTvO>pfwiwtYG7V!Ty-nDqovM+Df#mwHeF1 z|NA%01M;^U7VEbG5ejLdMQbVHSKBAo8mv}ca2^>OL$vY{ib2ji(pz&n=(^#jdn7Tm zf_l;P>-tah$sk(11-B2>0%F@i#?#7m(ZCp1~NCJHE{N& zV63+x-zegy4~9uX_nk_e1Npx`aqLKncMLSvdY51tPG6Xq60_l-AY1x&j9J8q*wHt+ih~hVSPLq%<<0~H2a}D!srX=Q zw$ev1GnmypoDDf;WI`M8uSGVAA*jRN2MlAO!Us=CuVT$?i8pIy3m4)z%Mj`KnGk1tf;_8V zsRTbgCrpG@2z(q4Oo53EDa>|3#GDB+=z%fYQ#q?Qu;Q)nG2Lqjzbeaq(mYJSiLY8; z;f_M!s3cU8vII@&tKdBeV+a%`D1fmSlyr_ynD+>*2cZN`_<$lM#vxz2nB->R4$rJQ zE4zs{xw_XD6NX$Dcs*yI=6_g=YWEwWytWF>S5w;;Ji9FIt_S^c6p1jsC-7Vaid1aq za{SnY6GyLBXlh{wUCf!bHTZZN1)sSwetPZ?bJmQAJ*{9HcO*ar8fm_=#mYd+jh{dKf@S$e#WIVf${N4_=GXj zdaN4Jp!`q`(ZSRHZj9Udqx;JG{*E7t!pP3~EPft37S`=hIrF?c$C@sUhiPbWqx1gAeH z7qJk_kPgHo8_aT*O@et(iQkz6xHakj9Y7g>k~i6r_->J1h8FyjJBdsI1Xp< z`^h0#(X{NoV{Q~si-zw(HUD%BXKS;DTguK(4YUzSdYgc8$|@%NI+RAQuwsSfKSHcp z_=(dszi`?=#}^Mk&mrRaeMSb_YHhBzU(hlSunks|*_DFyK71w3ZNvXt@;mG=CE|6v z+{0+SERRV=w=02XQiDZEW}*IGbJL#(dD@mdBxXi2-JGn-`$klLkgNIyrT@NJE@7(~ zr9!;oSs~hLeqn999nLG zneU$nSKiLeEDbhp2FwlRI|h8MFf<|NF^VBDZOAQZs+Fh)G22l%t!q}b+(%C??_Fs( z4aZ;|#a^ZAHbQ3-o6jwM#c9+}x|9&f6(tCzXb*`NA z>{<^ox64re9WdyX3_X1N$ntvDt`oo8i~qI>404-&Kv9AO9X1ra zshC1160Te#Jr?zdCnHKeepX@ZCVg`Dimp#0Wz@m?E*uC%@f zFUgowm6d3345WyPTHMWbkO|U$k2lwXgiNrGHR_dsIpWk46uobdlkoMCV~qyK2CgnA zGy(E&mVwWWZt=0@7=ZdLR6#fcL%A6=T~ZpJ{@3EuZGnbnsnB9|OPl+R=O1nM0_ zJ>4II@F2?8i7AyT-5!6*%9f2bmLMp{%qZO)J8l(KKbJW7?#r=UnXWgv__q-tXMHB$ zL0S3dq}B?{(`WM#Ha9x0s)?rH7}_nZSSdeX4jO|g+|!wct5dSWD`?CV!)HqFE=R(L zTVOWK@#PW3ZC-+L+TJ|d?iPH%yyTjjez6@aJ@kfNupmwpHZMu}>rg!ELYTzY%!{c2 zDxyN`Wj0+=4QOTA%gHwdF^;#2WoB`c)^1gQ)OnRYM2LnhWQD@Yk+!4r5(Bm@7l5Cm z=@rm-rC$SnACI`k3Oe51xs6>p1d9TQ1E@X`(+ZkOffN;npBnc~-sffS1epQR*$*VL z$L7Zl(1%>Ue(h#b4Hq)7mhG4p6h6?c27MpHOIT)j8k+4dcXU{V+3~;0qwmv<&~^!| zhW6c_@J^$fjq+v<*P=LY_%0&l0eM8l8V_oFdB1`8a}piaf3v9Xd})<5!S~yQ5%piO zy63c+6ot|Cv<*6Q)Lpqe-@mpK_01>r?l#TJR0384N1Q|>nZlQBFOVNq^)5DFHiCI0 zZv>OqJYLm+Lm=L`vT8bSsuXRS*RzCZ`iS|y*XPOtA&!BtKU1tfW{j5(<5RZx zlg6n~@RkR8oE4TQY$-(~L_~>xb0J$c{D|{3p;!EEWk7VzB6>Sf>Bu^bfDNWhT@no_ z{RKrQ=PIPjL2mcy;D|)G0YboZd^S;xzNNs$b|s&yTaazJkwy3WfvNv2Lh~A2U5^hdo$}|31#h6 zx6R`#RROjl1C84F(777UoSW=rb25^uRTo<;trcT9<;ESiV0hQW+t0cGh&ZaELbjP- zAoHqnMl=&^lW>KL6+e#$zGJh+6BW&*4W-oD2Itub2OweSU;SRrBALGXHJa)ekB z88(vQ{m%!lj>7qvj24@KX0S? zb16d;Dl27HF(Ufmhn?F=fBG`NNP2iz*kU+*_K;Ng18m^bZj2!kCDflhlu-_GD(ss- zqvF3x{D738ZWQ2m9Mc&PxUaUFse;5rt;G48vwyd5rPbVPyOTfHWkgt3vQtJMU)vhZ zZc6s1E}>)ej5vh+4a;NAqD`ri9)qb9%-FlO+`|duc)Ie|RnX%Z=j)W|+d_^>tc>8D zLXjiy-oDe>z0g)h)BBVO~;o5d*;9-Ht#b-29x)Q z5C1pRx&DN3w|kb0$zbHq1##`nfWRnj^Y8gu>b69`;{+haEZLVu4pPGckGYFu+hrB= zbwTQAHHfe2(IVPqm4O}hreUKEGS{qmS@R}IIZ#d#d(8PxRLSdGqPN4qMul-X`$tgg zIa4Fd_jmTKSnmXh9PR4tN#ebmNfBGT)j2U~p`PS7{$YwY2 zPUX`oS$5lixXye>T+qwLxy$IVirqv~}qTa~_jO-wcX>2NQ8dnb_TOwYI ziH97*0MQi;7Wu!9&s%rocHaSB?xHYTke}@tD9ve6_&k;|YIlco-H7QqMNRm=@T@$# z*C}+vUJf#tntcJ+y?UgcZR@Q5a_V)g$?8LAa|jNA0L zEPr}2UV8s2iC>cV)+=nV+WY=_QN%cYRB`WULKtBY`T9mRDN%}jJw{aICHEDHrv{}& z#ijCZ?yn>k&AK$ogt!QI>>85Do{|CYSiE0A85H))TTTTXAFJtVAlly1i*{1G@cD!p zFl=0TbF+`O+B60BV#jvYIM~_P55Z*RLZkW2XjowIM*hGV3j6m>1GV)Xw9Ec>dSP8G z2ES2qt*HjsU8X;EgtyDZH1_#TN>a1=@61XZHfGK^*EhT~&bR}ScbCpXZUDNd5b_&% z%*TCji`fxo8soYJWr!*FTq9fu6i7iO>=_ijpJo@O?h@-GHj;-1AC z7_%TB9^l;4)uO0)mr^sgZLU8Sz!PTJpxa}AjJZAZyL&3Y9L@%}i(=8?LosG5L=2h} zq#fhc$A0%$7;L;gtiU}aza|l_O$hCiB3jA*Bx@Xa2w@V|^MvH64Q;XCjQ17vykp}` zI4OEgngH+i1ywm6Y4MN@M*p>H0~@H8C$$-S$%9^7L(gKz^di}lA~Xfx7}OL(YIGGq zYB~bOdx_XMUY|=T%N)&|5)%4kUMLlLBv?gaIs!?>4Y>rB7a`I?-UiVO4}Ty_l6-AV zUN0ICzrPk$ZiVy3^tBf0Y3IT2TY+2!a23Gy3#cbHUD+g^0=2aAd#SLg6~JUpG0#V| z0XYP*>Bmzzcs}ED0VTy~?hH#VrLIgEE|-{Mbsvg-d&dz}*3(d)hBRNfZC?~Urv`il zoWSU+l%&jTaddAJhV4T!Ed@FM87PTx8}{s< zya*qdTG87$;kVy4Qb#8o*|R;&6%;xJqp_pecbBru(E;STX!h>cP&IABNbC-?zL}){ zGCLI;PN#!@Sh;mP+JtUqsv)sl<==HYkfe|z{t8RndLeC~L6zdgu)A2Wj~l(T8#WEz zyw$s=Ed9)VnIl0wWRISl+litjMiO9Lr~K#6dfNe^QG&15YYLQlc8VNzXe2C{$dRMm zYf>HK>SF|6%>HEzmZ8_sHUN--y9h2EHYml6rUl-O%thTgO@vI=M(odHizHm zaya?qN#gJE`(7*CH}%wmLTfXXPPQ}up;e2I7eu#9f35&jh@6sJ$1LqQW|ps6Q$-JU z(v@i$mo-V=&8nJQf>{*hyk&6AGg#3%E#q-aUkn+2BG-8#8@(@*nPWiH=lM;Q>Dsn9gC z0v`~Cka;Jf*#ut$J}S>0gTmr{9>?_qev?^zqZ6PZP}+}p>w){k&X4??;CA+rCo|8{ z66WW230yIqJfNLS+XTrw?DAVKEV;CBT6-1WJpDXG`1ka@HG5%1^siI`a<6GTRsN-~ zxxoj#XnLa}ga-fGp$nKW>;megm?Q|H4HK}WhFko)!d4%v@Vtn->N5AE;T4-x@qZ*P%Y^j zmh@R_g%a^DYyM*wv6*ek>F0#Od&{ojJ|dj8FXd#&$3V(SDK|+}T`DTJHEB_~m3mXp zJTAe>kGK^r>x3VsN;Zfh`!S=24xZ}R!xSc)c4rnmFm(@+0vx}S(e$IUEsD(D`)vU3 zu^1$)zQkvQsN_zqbsM|Eq-%WI`eFCHf9pSYsad%spAyRTxZIy=3hftJ_NUTb?Mlbx zoL>P?e!w4`rewMNQzc3pzy6@7O$6BKkweqSjqq_V?ma`Y-n+k%C9YVN79_hr=snZW`B)I$#ixJraLBoj3f!)05yXb0L9_sb5qBM{JRh;={aQkBo zuNxhL;YRIn1Fv29Qs{T*@QSb4001*^cK zKOtLwilEhDB{}<}e_-MgiINh=#X83yM&gvBXeNL*(CUVGU%>sgo~Iw#u0d4FeCdzh zA>170-KtE#)1o4psz}QQ9TPXbPaeN?f5!DoF7AfkPv&0#NBzT!Z;&7^X=BflK#jW! zj-8&^W)IOf0h#}U>_i{5hHX!@sLa%egbIU%*)fY5*oLBGk`b%NT`BK~gkO8;8^jx> z5q$0Y{bqlj{`{bJZj4{h8t9d<8t}RMnPebJ+bQB(C!PA_Q%lIJl02@R|6V+Ice}e{ z?dOt`gAqLcjH2Z)lsYP`nnFU%a?jl_v6}A{lofoc9`7*BqG^Z1!D3S32^=Bpt&qV# z%>yebSt2#V_(rQ6z^X)~@e+68pHx1v7FMOv@d68u^ZH4C^{Qb$4NJ0|eM@dQ0TzRo zxqlXrT|R~|;Odbk$VqjyGP;64y{(?0+N~8T)V=gi9u=q@@tS+?(k&&kY>e5S-t9tn z$zCN(*|OlQ+^Y$VwoCMw9qqFB$T3u&WR{a?mW^5=a)Vd}|GCU1o827pdmypS=j}>@ zTlD;c#RoD14gynmV<7uB9L7cEcodmLky|b+DVXQ6k;S~ksV6bzK^22geTVP4)>_mg ztG$*fJIYS~d#y71lshmvMDLj(jS+648T6O$Ker5yA8@lO%kda+*_0z+bM>Jfrghzi z@0GtnK5U3c(X)_m47x=ZGF%u38zggC_b#?KBI*`y(58vEU!tJ2RzvDc0>GTy7?z6|BbmmG*ITog@ zV;^U>A>WHeiN1nm^$KYK8ySqMh!*$0ZW(g?KO$?Bq;l(o?qNb*ep@aV?_+cpaa8=dJgNe-c3}a1GMR8p+baA93f$3`> z9Err^>m3Q^%*8|}Z5Y`oWB#reEPPp-OETr72@yjgR8{y6-d5ZYYUkN&{;bTwsL!8i zO8&SX+~p8oe0UO$9w^WEm(*2I~)D$6GV z%Rq(?&FXMii5P1JVMgut=%FBjKS0dK_Dzb=eXDZ9lFF8ovn89N{%XJTag3^21DZG_ zJrA}y8agBW8!ZRZ3pGm_%ajf)CGz7jTot;`#KFhs3hmhBUcQP}Q_fmXXfhWd1Cm*q>%+3q4frmUgGK7{Y@}t?Rv^V$7#(~3XL;H%EE+Z=MgkIYa z@i>hAcWB?~t`NLB-rzkI(v%tmtRL=bTPTPO$P> zF#lROT5GpAYD*j3b}`m?K!!e1E{Ucf#G;YDvUS#r-@JBi93G$bnPQY@++)5-RihPp zv&`wxC^F>97glkW&_S9M1=Wh8wLE&ip`V!0l(Gxj-Bga($% z7MAbs_|le0DCgP&ZtYU7MBcNiLAMP%ihi$x7NZT1V-Y7xTsru-cw@T)!Yg6bkfp_LVa9eW^jQcq2v} zQJ;oJz^LJws$th24FCR9XycYuXGaD8v)Vi{Rn1P~U26EB8p_m=f4t9lD>1_UI-zm+ z&3cj@d8;E(CvMJjuN@Qmzpar{dzY{JF4wCeJ-c_X@cKSi^Ppg!FG6L{w?N!eF_A>@?g_uxSj(AaMno*_$EC)wDPSfg6=haQ6nhvux7Oo|hRkV!Yn3_4W(A zpJJL3)wPoXcIf%DwE7U1C0mSl$m@xk{Ch7&IXM51&naW zMpF3!_CDoyP>5L81sP~gC>NFi3}qSSB_!(__dW4^XGX%J;Q2x$S+$S?*^;RU$7UhE;Vn(p5mmkm(Jcs3w)h7ck1 zYt%R!t^{TKCp}2p+q5WXgQr&E2A$q@s}$&!nq!j70I#w(h#LX%g_REL;nIpZ!be3$&_BFDIx|p33c7N!q$?(UU7s=Pt*8*T_YaP?>~?i~oHvKu_Im{H6aah~?zYa~oBqN0K$RnBDz=ZP$sA%3R|Gdq_lvi_vPd8Vf@R;9W+$ z8Oy(K>C3m?ULVozjY$$Lsx-~?)=}z6YC_^|DLj3q-ZGD)ypMQzz<*fl_5XS3i~7C7 z#OxzH6fVR1^6)D4n*I%ZQtD@D)~Z^>YWd@qa6i&@kI#AQ8i4(S(tZ+mAwaNvO6N{w z`mnt#_mC=VOiE44x_+^3kYs)?s^m7jtgT(7G41yeI|VwuunOJN;VsQFX=}ukZiIEq zN?jLCGa$sSH;$X>&DgNc#Xlt{t$hMplI5pQ z^-PVks#nMN`|?ix%X(Jl>0ncPwN}gfax;DH_sacU*?-Ny%O9lz^&D&$R%DBiOI)KK8(0JWH%LavPtQqm%yA&}MFZVEv~-vD^5&a2PI<#nJb$#)Q<9 z^6j?S8{D)<5x)$|V%(N)?$ZIYXD+vU50Jv?n|>d}sb8v$PD=vVmrdIK+_#^;c+a z1N?O!>iXnQSgh8W{|72S)xX}^2Y2H}+=?@~hdAX=n##lZvvybh6JE#`-UiMe&cDSI z{2Kyp(?U+TyLhd;;$ExxY_TJrE5URBA5{LTf>dDTWre746}6JD zoWeJ&o4x+Mx~Mv=s?tr8Cfz1I3C;&=KolTA0#m>NVt@b%a0ak|2ND1P0t48<1wQD4 zJ{W=+q#%>`l_N4ItFk3uBiH4Z5h@AFF-2EyRfZy0tSJeONj{54lRll_u<<85_F^=Ns&ZLuYAgAP1-3?F*D#_jNu5&wX z(RFvN?&IE3bBE^Cxv9C=PZx&W4ZJ}%sD^2SbN<@-t9f$Xm_K=5oWE>5+<2I=YrN37 zvT)?WISXCWz9!hT&cvBcn``E+88+W%ZktEu+_IBpC(C?G!jiIFXDM3BmRGG$S!L^_ z)nVIa_f0GIsC{HV@7Tg|>bTZ1bWqOYoQiYoEI7})wsC#9&UD@9zQkQ|1NUp5T|Gy6 zfafI7s&`K>;l0ea$(Qw=;al^c;fMT;U-P^Ep8u4e4a)!*xE(kjK!E~HL!UucqbpGX zwb5(PD!PKEK{^P6M34$rgM3g5s=+jv51tW}f@gwJXs?hP+8VM$7l-Phhr&CD>98AK z6|RIY4&NWyGr~ub$j8{V7{o{{z$URNEQP%mt&e7-7h+q)7RT1aMzIlY!8`aVxQI9K z$B7+?DiISMf*?MMKNNqFJcaxvaoK1q=i$0CFJ7H;vwQHQ5GF>R;-A1u_<=M6=`P)lP-}I=~4M7@&$QAxmK~2 z>(&2KcPgUZtxafxc7GB|&XabsC{Lw!N$pOZm||1a^rzDg(+_1X&(Ik*^Hz3`td;F# z>8zUlD0gS>hCGyS%)egn7nc>MN(V~sl%FhrU-_{5w(9PQ%;gtn74+x5uv#4N7M`$L zteMtqYj1u+(FAu_ewXbz=iAOnMX{nmTf41$VN`LTxWC}7^_7y3JhcmJ6B`&~oZaOe z7rDk0-SP{4==abfJiH*{V(j9duJp@G`D&JwwZtW@{(AX5jX01<5kta4*oXn))pxH$ zbx{AI@j&ClM%ff-u560UGnz}yN$Zdn(i*g+)|K|2ZL)n?`y{yy*_&KT0&+~!j9igx@=zvaB(KRsIZ`SLSK^ezl_Qm700sykf(mGZ zNni&U5P=MOfB;R<1~jliRzMY|CaW!#P#INGRn=9WgWE%2ScML3!88=13D1LV$iTTK z(IjoHmeXAALan5Ucn~KjKDSfjS?usdmd?yzQ#Nbn zl<71n^NQ(PxTRP=mT5VbXDzgVHErdrv(}nb*aSPX5!zWbgt+{WXX{WvD4)p!4{6oLvKXZ%gwCHob?WZ<}U_S^3sh|>!D~Ips zPnFl637lXAB^i*3uu;-aBy0+~l3z!)HY!xD*%K=^-}6oXd$Rn-yK3`m?rAG-d!M_+ z*q;F$a(E&FBm|7XqK6e8G*Cw~S?U}xM1^h6xKX1?CcQ$1h>|E(md5gnQC@w`wbt{X z94Lp}!!IWx4#kskG)~5~co-Y;`agsTO5RMiC3r$4>4Z$EA3gvxNFhss%ba*(YhsBV)x3N4(@Jy1L(4}g2q@hU% zYnlFuuO1>`x>yE`pZCNA2$N+ZV`E5Yq_*gQwAQ($j<UeOX5GDKG1Z%~l{2=q6!be!A)k+?6%UyoClr1y_R(AiEub|-bL-Pg zyl_7u`%gvERu(W51s%^shX62@ki7t@P>Z9W(Uty;_Yda0dl;ihyj$=MhQ@JP z=4ZfKp(Y`6`>sxWJQ!7u;N0{9CxAI$OHSEh!~n2%*N`O1>>tB!)5d=C9+f{r(DmWcz#;Yd%5EsUq~y6hn$l^x0cgt-c^ z@;!Qe4m{$nqGTY4eJNT>Y3~3c*l?bAg@Ga5OICU55eUkMuOC7rDE-Iz-?yIBr!jqagPpPFkC4%j#(=B6*0165!Pt5 zcn_4d{(|WUQi_(l2|Xcd_tpgGqHOxqFWhCg2HY+x{}i`s{D`(yjTN%09A?$nE#&eKt4dYW1zp}sF=%XbW7 z9#L}Y{*B|vUcbtv=LLKVJb2*q0vs$_Pmpkw=}kvi z>YzQcTEsH;{^w~6DNk?}51mjA)^eE!K-xpN%^%-)cG=eZ6q^%GNo0!ye7?y_)Mmo7 z<(5b5#z(VPehyYx7#Ca9A~M<-6E9A0^(hUl$*z6>hYbf&QCK z$nVLc@gnvJQeF}JF_v|ksuah)vg+6}`iQjH^1C!dDjDU?rw7#Vt1sQq$7o+UQA`op z*C6<$!ws)nxFIuaIasf|+#tdAyMCY$se28kM{o)1{dT59h-n2PgP36vxt=xx^?ul+ z2)ix;l_@D74K${N*dOBik&UIGL)>WC@+w}N{D<;WDbKA!je{gxUqX6BwiiPZM<&yY)5wk zLF4GYc1gzC3Ywd`=dQ5r4>%UBRZY zKQPGV6qYHe-X)mG=%8WpQ)JaCy1lP=PRb~bBH{l`!qn_04v+XK5{Txmcs)WFXjlE_ zEM|gh)z1f;KThh)V(NIJV@$t2oY64UYzZN&tCYoC`TbtlQ>&N6_aqtmTMMQuq0!{m9`Yx0E2|3g5OOoL3a~Z1N4iV+OKa z)VDYZ2D6aIZnO(jWt-~kQy6;*JZO0Ad0eoZHtigS>GPc+rcQ2r;qQI6=@*96%WMtD zwkUjvSfZd%B6GmXhnzKvOu_j)7{!|+?xkJ*T_w~9)4<(`xhU~nL7p57-P|NeRg@La z>P1x6m(j~C2QV|5fqtpcdj$_5Xv>PyhKZM1wrd54I%+@sIh!CPhk^=nYIa4^ZA0VM(#fX`W9#yjBNJN$|Mf|C_+$R zujzGBEr)P}I$qV}A?mkaVTi~R@kZUmsqHT!^3chO;yT9NcQe8ve>LlGJ`_LCD$)(D z5$Juf=LoL9!^hBz%qzbS`dNmihulkFM$B}rpJf!rEKLy;1wZ_IKYmeG4o9SBojk&TM z+td?B=G)0|5PAeHhK#kF4p=IB59m7h9UR+iDjzLg7mlLMpx1*1yrML$t+A&cdj@0s zk;~)EOGy}Sum0Ig2R}r7KuNwtro(4s)sWCAF@@m>EssDG^KI(IRW-VyHpF^Ykb;E< zfqv7mKO%B>^uyN=_vd*v7H%t|ya6$-e49`!9upUS6_OcM_r)VR&cA=3?oS-*5&f*? z*op{8!)EFx?%VJey{FpUD2P~Gcf2CEe8UunQ2>#`I@Az&wR)-%eH+0%<$P}C4GqY` z8h{WOhulPvIq7eoB=e-Xo%7)4^vzo7Fw4~a0xh89;)$;wz%X4b4dY*V;sM@M(Cdk= zd;$7{?n2Hksry)pf=d)(zB}8*JA_odx0FltTJFQ57rBz2@NP@!pvZBA5*{x9`xbG;ro4j4+OifZs%$HH;Oxza zojPT7-@XJWvYOFz31PP9a_FfU0CmBP))eONgxHdSYPBC0Y{4F|{ z=B>CG;+bfGDCCN;7KuTAgh}t0C0gdl++R2jT8&KMdcB0t_z6DnF1-P`b|Si$amZ;Q zz320b_?^Mwf5Qp%uc04t5~m~itR3h(oZly5!=SSVC^`AGNqsf#B24(n5XP6sAEOUM zqb>=E5}Gtx zb(RoPrw{>oi(X|*d@>NSwwW?Xj8}r)(fW?Z2BSjY8+dMVlmFer&&T%%S|5u!@Ckgo zrqjEa7;BsmKiUd(lh|8t>v&9D6Rifl;RM^|X2gqShyBxMf2>m)F5>AOYL!gqD}ef& zUVgW*hSRhBu!B^wu73X}hu9>y|MSvCqxn%ogt?nQD%)|pG&5~x7cKEpeqf3M$FywO z1d6PqmuaMGN89*X`}C<`+12ZtYmA(?^3$E~LOeeOZ0a+N%Eow&qc~`#z~7h@1Pcdn zhxoSxdVCI6Iz*G|t%B4Z{vuOva6=_}sF>3w96a59`VslU_@KeIgvxI4%_@`zpP6v8 zjoFD(yTN2>iok7M{7>MSXj#Kr%5YMKh<{LGD3LjX>+{V%C2TVxhO-q%Go3wM)Bx@} zYr6#vN0m?>qMC=qo42&`aLA`^Z=NQz;H7%D?fdrkSzYm3OHM%(oZ)mnk`6xJ{XPnP!C4%?1Yh(rF-}*<_hmZYwqtM(7g7VfsveT{L-6 z2YSc0jiI`ZYu4{;J1sdc8x*Qsp&{4ClPuk9W4DEdhg2MNlfm=+)mqlI>T|(4a-PrZ zct|8G?nWxytmXBsDgT+7(n;#N+OT$r_z&$DiJk4?x%?aRnanluMA97nwAU*s+AVZ)fywOQTm)FR@4FAgYwdanyF$w~Dw$ zTBs$IzP{rQG;1+N1K5g+s6*n8Wp(il=SBrci(M3@1POCcHK`@^MrG`X3y1tCes0t; zg$)sVdOFeuy4Nm8@l?A0GNzQuQu&{4%n~%>QG)^mm1PMGF4+7$B>~zU5Q1OeK)V>E zMo0oQ1OL~(;DFz!NKed!Xn+Srzlntl?EcN1p)B?F=SCzQ@6CK!i&y&W+XkiSoRHV8&v1S{fY1~4qWzLOj<+~vdcLVlk1R6#ulP%lVeRrkN~OgL*O$-W6pQ0|&Mo<+ z;Y7o}S$gj}aP*pDW?>R-2T)X{B>*&oyo?B_r+QFOtU=?+MQTf}`bX<>DgH~KeD+wC z(MV(CG<_%s9KXhzWVq!ru?60FMMU`ISgehQ^7vdW+md?Fg?7{05aGGIH2wAPXzrrm z7#V9hr#@bt5_FQX&tPio?w9rQiz%z4zuPVmUM{JY5xR2c>*b*Ld?xmP?t94GuJF`^Hk{-=bZ%fS)M8dkA4V~t| z>*E6i6=d7rqd=9j9>g(#|F@9cBr6MfzxQq%oS{C=O)3*$bm3d9(Md z74W^~*omFWQoIzLy7mtVDu(|WE*BPL8|u`P*nRu(<>C~BF+wFtoJ&SMQ-P*&0ND8UIucnK^;&f;FV z_bnk}o$%n4r}nNBUl|rp->$aHG_=y;JdNyyF`3Qrc3d`@8@0&?SlS@9=FZ8A?`pj^ zpCbQgqRA(i6xWPHrbzR=r>JCA=2}4aGbn8h4_MeNZbzKj*6qntgP6&$t zAOQ#f32;O+k~kD7&FP%pG%^?FTz_vXgO{rrYB*L^V|gfpyOht3IQ)#DEx8P96JPC# znXzR&jj^re16uDzARKuk%tgpYi{>G%CTavYbYF`XK+;+Q#6ue_C2OI?E9Aj;e`e~B zz^5#T&UWUals)Y@$^YioRg<^7ak=(nsMqJH*QbWlx2cW-wP=o7IIu9EZB7M5xI-IM zC+_IH(<^e+%q8I19%_c8blIHy{9}I8^|&Gfbu<5EbMr*^urvN|%KzYJz*#Mt%3X=x z2Yz8#QlVftb3tXj6A8l z$$KwJ_{4F2xai9swX*%Q-(l>3*j5nOb_A9KDeXl-kD|mr4JfH{Bbz1~=x69bo(?4W zL=3g*4mjFV6;ghqAaf`HK9>C20W7CKzTa#n?N7=I0W>$5d8jv4xDvaUC~{)!?rHMP zTY}scB10Ak(EC8z$`XE@ipcA)@0-t_!)VKUH83f;@sDZy3YidnPC-U2D@x8%agm8; zOSB}s14D6WW8R|0-6i$lmqR8*tq9w7NdNj6TKb@x#_sg1JC>X=LUzZC3_dNS0>lA* z`{vA^Vx7o??-A%FM0skQLwpKjamS9IdIMw5i~Jx_@skKJn;8?AaJ_sryrmJ4qs49m zIdN6%#7@gUQ*Ok>4Be`P`-&EuTtSU~kG2l5|H9r-zQH=Qasv#{OEFOm#dMMpCr*`g zklkcda4bZ*ILgGP9F!~QDg(EkQ3#x#?)PbVi$3fwsP&wbNkybHNZMiJZQJb!_{oF% z0gJV)ypq@QEVJPKqnh%duPVCS0VaJ zk^r8#3scu38Syuj!K`vtq>lRDK|)^+WF?hhYKD64_*P!vG9>a({|e>)l<02&K8;od zYzb@Hju#}SzI>v)WR*&)0vxuET}V_XFLIe=)VIa#4V8yhM2>b9nkw-O(h66rp7H50F2%5{sv7m@K zL^HKQb)2i1Q=qmwLSN*R2~w=PrY{Tra4w!p@68CNmWO!RE)l>&3DNu##V$UtV7WE5 zsMA77^|VmyhKCDVU;{$oy5UyHBkc~HB3@y>zrl8=Vj%k&0%fs_SD|x`5TTHgt2M=o z3+wZKu!KCny&B+!+VG3o&_i`kS8Y8)wm(Qv%s7OZ;ukI?G?}dQ4o#+Cf3oq0i6T7~ zm%<1m?tsVR4%oy79*+$?92|p8gtJVnrboujnB-bOulxd( zs+ja3c=h^8-$7$Lr4Zh%e*HTft(t2?4JmuEx%kdX10x-4B21@j51K4JB^II$)9tiS z3D4R#{2tieZ7}IMf$fe8aS4ek!0-k8+{79;Rk&MnK$&9KP7ngJ4=`(roe%I3$;DQ!%a;XD$NpbUtXJ+goIF$n|7!wEbt z(&(;4mdo$Rp-RqbB@fiEZ|1HnBf!4&3)m5EtPa=$A`;t=i5V!}`#`q@+2g>wklI*x z_LVM>wpSU5UhK02#U=zj*yQCRY$s{ZpE1w> z(gm;?WYqcv1j+4M?^PfmMLiwd)a=3QG6qsO2A(OuP=a;C7_}*E-$ZF;oEoAu~LJ z{q1#xfAZ@Bpu(%Os?sx&vu^@X5tkw=%p>Ao-v!o%3}V@A;*iWmY+W(Qx~h_$r2@-h zQOBjuAsMn%ZS{-hu8e<;q4+wJ^jgLt^Hn`j^H8;5*nny$Ze?_*jS+uh>VLML=w%FU zXuvi&v$^UKmlUa;Wq6rJRnP+MxB==!S;SZt)9c?^D8_an_g9&3T=|b6fq7FS2^Hs6 z)#dgmvG}OZ(AP-zRN-g&pdd+T!NoCt3$=17gIfytrT0E|=Bi0c&1Gt&C!BroO3XZa z63Z;(GXp@aC!ynVpg)_@Twfoi!zed!m3@H;_MA#)7>pJS$vn_OtHqm)JFuRO4iMCe zMARw)9TfW&P*r<(G!GFG^mnz=W|PF@kX{c(BQbUy)b7YCLqGl60eC(~AJ|G*w4OEY zwqcb%(x@+}Y9%HR%63-5k5hR5sxB<)&rJ(ce75A(t>gQA@`|FhzH@;ZIK*Ky7s)TJ zz}V@Vy~b&j>jUzYslU;j&@fSimU9W!EFt)FB+xFJ_g?buXS4S&snuIK-s`E**POUz zoAuopIxy-qBiazxT zxZ2)9R3X-7uB_?TG0MZm;+@uI(vJ&_a^>Yq$FlDZ&`^9U4}2WzsqOYQ#{3M%WVmMK z!mn3cv}GJy%*$SZ|BCfptjCKokBj@(RTkFMU^(Z&3O<)_<6DTo;kiI>S*BpgQ>RdS z5P>j?ly62lS)$fN28aUjW0YnN$qb%Z)q+yhoXASueP+~w#d*hgEOln;gsaH=&{VO7 zkvoU|*i2kk%W$<1(P+p)8SS{JaF~h`-Rj`aVhbncdthn+UOo~AM%E~MPa(N_h7aL> zIv26IRR8r-ts_lfmm6!!QW4}`V%hMY{FI1zP`48$Tj##K)i1+Y+riBI0;Aj$ixF2! zuJqi}-cFCKsxjJ%!lL6eD!>h;(te zSpcj&AS)dxl?F7~`tCGA!Mc6AD;zQ!UO^c)LOC3TBizH0CW8anx`AS%`w547r#<2l zjuCXzK$j?yMgP~h3U0tPbhU?@tGi!x56vGjpSl*EltRLw1*g^kW1WH*KZ0*z9cX@wdlK0NZk=c9a^q6vLIDmS14}_80iC zKJE`CRitCdc3_NC1@Qe4aX@H0Zo|k2j7Q%A!k2HiT}|Qv#RaD_E~H%=TJ*&f(6x5~ z|I{Ae*VH|YGv>rpvA1=*i7X@dyygeIrz{i{?vdh*NUa+Y3jq||%4)65z<}8LLrA4b?&!ftN6ENJH$j#b{-pf58FftMunv>1B+t-AqJtEMSRowdur- zVfq{TfE@~GVi7gIA0e13!+JBW04)}+bR<_JBkYbzZ;rQX+mnZL8GHdQMHM=VwA(+V zFG^Pckld{Js~PIn$r`8y#$9}zaiHl@phV}h)Jw}HLb(jtfvBL13Z?zthBL2!9It23 zxK^zLHsNKzY2)ue%>9Td-ch|MR2TJt?xq>UlM>tN>{nRPplbPdeGj1VVK;dr7?IRe zj3rh!L{^ywFQaC(4W%k9V2LQ_s4L|$T@lQC|nLp7^KeHLdK^PFHK#vAp}R$xm*qS)%}SXriQWhVbtfX#q+>gcdvU5CI27z%gOc zBPsofMq+fdKbw)v>%-=I$h7`CKk^42PG-XiC^8Z`y)1e>Ng%S@0J=`WpR(~nu2Z%o z_A=&}HC8NTNg*HS(91pXHhoQA0Z(e?S*Pe^##dwyBn28;TqCLMr1t3a06}e?0|d=Z z6n%*cz4v6IMxW?&pacNAZp_oC-xA`Mzs>;sl-8r4B4uh)1)}AX*$^@4o}R*;TB{tA zu?IeLwak>i!{@+{ty-p^|H$x_j#19Ul<(8LNq!l_FxWM)Ec|@03*e;>lMX{}6P~t+ za74Lit7~|-P!=$0n%?~BU*p>-iJYDM(90j~f1$!tZW9pRBM?+j&LGeruOH~jHE!ZK zcHVH=X~oIxnbS^(GDDaA&r9m~G&y9=+ZSc#ezWl3MT@5lNNkdx^s;10XF%TuQRA^> zpf)tuK_%XTk{1iSCv9ajb1wZ^0D*Y60xhJY4I`p)Sc~o;iy!&jd@*N+Q7)#}5nFK~ z{HYHYlOK-CcCT@(q)C(L%CC9N!NbdRKXvqvp^e;D6DHJ3Z%szL``$2p`>9zOrj^6! z3vV5aHFk9nP5({9?@KK#kmdl{z38LdKg+!RHmKECn|dt>XI`tgT&L(vMk5wK#TKp518nSe)(3$j;sRv<9|ryhr#t z8)~Xc%cidWSq=aBP`_SvJy!81rKi?+$p|$FEMj9_ddm**sdJ zTJYmPzzd>Dzj2y?n?X&xL{E&sY3rMJwAnxbzHW{WCEk%dH0e0#fMPditUxT=Va2lFk2^y7pI4LK_t5FB5K8+14gqgqtmsp2yI{rIo#$x~Y&M5xe?XYX?FHG(yjT zbH#L**@#jXf<#Lt(KmK1X>UAX$BiS9YZvv7Y(wj0U`fHlP2EP))jlsrc|>^KgF6vX zDIlY?tH=CKi+=;_Zag%J?q@gUEG!$jkAAb@8B*JLIQ6u#3kB91o?%5c%(y>nvh zj(mJMxfBjstti3?PVzJR-W6#GK#!Fr^R;u+gXw0ds2x6<=7*e6MkAV09qtS6+|!eh z8QSb)5EqATPg`*}E#i!0q}NpoFF0=mzxjtyyS2}_@1JBq0MuT1z=MJPoXnhy2Z`g8 zyF+^_kRnL|uN*yhp5tsyYu{hd)>7b~cXLahkz#a)TFAp-MHL_huroC)O*?JMgRK(i z!OW+P9={c}pb(kW!e^@1G1QGor)&5L@;GdfTPEu&i_1hXdG?{kA$OO#u<>A zF;iU*r^JtZv=bz?Zg7DotH#dEcSNapR*$y1gN>Ipya}Hy*tNbB$qh+U1bLX(Mf*3f zF9aU7)O+#PwLaS6&$gRrKL&e!=k8d9A{U454ZZWywB45QQ(gVF!b)xZCCP7TNh}xk znlpH{xFqT&$F5!|**aoT&rGArK2V#x%{7hUi=?DQdB;}t((#@PmyDP%Bh!g$-$D&| zzYq>4foixobkFO96pXjJ=cQ?fE#)VW(}j;3mTV|!Mn;)CuYM6zsOjr}OXUCuGX4tD zncT5D2JkB(Gk>ks3v5y~>|xi}^pca`dH0V$m0F{F3*xV3Ge!m6@uXqPqGAoRLW@TI zA44;vaIrhouR+r_HrGTcyrV@rd$#bzb_SoFxZFzf&3h#&j>0X5j~(HZ?0g@^a{&+mFM`#oRK*;7Zn| zxZF*0<3xj-MmhxS2}bV~QE>o%jph9~*NNU9>lJmeX?cJw&Ypvr3{|@~nG-trhZj2vpY1OY57q*883YzdWy_$GFAY(N`%NOQawWaW$UB$2 z<&^D_h6E>A2l3-TdF*jb!o^RpFS~pwJVjs_s~!fCk_{H?Cv!$MHR-hK1NBemExUS# z6{5hDK`6QG-DYx7n-UyDQ!gh&kPz^G6!ufg9}a+bR=-(V7#kPX(k&8|fupXP=OcjA zZww^1Tncm@VBmZuQ!Gc17cLtth5oMULKxzlN)|E=D&Drp31|%3$*VyvGFFVVH^y{GP{2l9I@s za;EFAGXJ<1s>MRmuOF}GZm=|&hcjIa!;6{h+};!Pwiv_9;37{)4`7?kI}$d^DUM|| z+sIOiZnZGM1y!f&ZTS-Z3KrgAdCbn>owFCU4ba7(N_GZ_fauTL6zj~ zcimWZ{0eR%VH`Ic561T&I)U)CT(jpas5M!yIEAs(t0UZ41}WY5Wwmc!yHV(XX^Fq3 zo5aFIgWk@f6Eaj;+!rP|gB#{t{9LX{q>9%|oj^wH`Rz+Mn(!)T`{AbW%5z<{%|8=)IWUip@5veQ6cFc%f7K zZMuqSa9m0f5B~l)a5fV2YH(HllI3nQ3)ZdI^bg;GR>{HYjGHSD838`}0$hN{-Q(;P z8sg9^?l|bEF0rSRCWz7^L>@)9`Bg_#q9J#u?x`9vUNvunv)BozhQQW1vm`dI%z|KT zAG_Tnxj$}uiqYlt>&II;i`e%0NXRXF{d(=E*g6M{ez_js>RVA$Yl!9lw|9&c!vTSl)iW^RZ#*YOEkaM@R5I87T$ zxQQAP%AaZqqMnqb#`KM43CrFX>dqK))CV`YY5anQLajkL&+Igpmp3*T+%D&agO?~1 zyI^e$Jc6!gx^#znv-T%;_=L@!=Xlt*vvBp6|82g#2+Ri z7d1#4w$pmDH;y~Q4-hkE3cNIQ+oZccKL%MC%$R#ji61~h4^2aZU&MQd`rT+6peM%D zAcJd|yMl?>7;l!m^^n=S#{~s?v4{9roW^~2{|KmgrcOVx_&O*SCxX~q*%WczWFisy zL*=I(I_#_EVM-^G`$fwi55o19b<+%x1<5Z2C8bg_Alk=SnHhAoF7ytQBkn_myj{l; zEY+!@;c{H|n!Uxc0j`ZSHf=||FuVzH_^yEga|(XfZtb*bA%s28aD?DtMZ|?iJW0#K z!!MGKe3hQeme~5G8pT~Df~EdKy2h=KAF8*zv13C| z=J-#1+1gLDp@BF^KHX@qQV;6+F`iI*U3#A8Oa8M@L)*!eOqxWO4Ejn4VVV}3gqf;V z!eOZFS!#@B`V`Gc))d7TS84W_LQ$OSA)eN7txaRY@Qw;?4MSUzszv78dE<8xR?IvN~dY&K-m!tt%uOHx?D@gQo00 z>~p+GT%4US5L;}kL6hu!vF_a$3o5rBMffHtY_Owmy7K+Xi&mcuhV*VfN53(+g_V$T z=FSyDivWh$f1l+3ee89gKZYE-De3n{>!WZ<`RE1kK;D~ob$1&HV2K7V*#dT_MMQH6 z0anonl%?(}b6DP`*l5Fve)?ji6t#+JRzbmDH;JGu+Z{w}od*Mu?X$uRWh)P_LDRu! zEP4?T<^kySz?NQI5(ibz#X;PIXw5)i?@@4fg^mbL)9@g&ofev@E|2L@)NBxultL?T zV~p1#t!!y?Q*k4k1Fxwk=b!-hZ7E;oV(y3<3G8(}oR`VuAyYrXv9f6`S$D3n_8Z%& zggSpNfn(NL=A-%Qnpb#nU;C`^bkydx_M$vJDM8PD=)h;|tcjhRQb3!(Z|yhDf(Ph3 za_1}!hrqYQp3iY#E>}Cc%3k^MgoN{*``cK1!B@KdgFOwW(Q}kDRL%Bs_?2*)XZ#1P ztbM@#Z#QdD^81my{aima|KR}XRsfI(m)JfPDERGt#g#lsa@N9hPAOelA$hIGAm3Fz zd-{I*;8}*fG*4x7Ay1n6pLVsvPr2=t9s=9S0aP%F;K4esyDkn)qPEY1E1k$+%S?}PIzIz*Uaa&g4-MK zs#aA?GW6t_{Xm{k`xUM&_+G@v1FsO z<;UAnUQ}B7r16hSR!bOg(zR8Ii$k^t8UpZ#IqP3vk4R+4cry5IhrA9g1J8tqW~i_q z(ueFpUACU=&I*hLPA>twz&(YSm7Eeuy!5G%w5YCaCdY)POSr5x@z)A3$(2ZoPQ#1i zdIbaSkUiq({HT(ldV1tR1u|?!?G4iXvo%mq%%#~N;`9xir;I+F*p-01|K5#QPJo5X zQ*@l^xI zNf!+E9Y6Iqv|0w1=HK%KtkBDOICiY^VtN=A_Ph@F&A8epH1tB>^L`!X7SabmL7J8~ zz|Ak>@|4_^mP%Aj(To)TFWxCL8p@dl;ZlU${oC)r*=r$h0?vtBy3}QDS*hOJ+OrR> zk%Ns%rzYLMy0$XNrGGwJUpYG;nNO;IiEjTm@GFY)$l+Vk@$I47F!YU%+|aNOYqF)i z{Ak)}^pUgl!FCZYYWI7J}5IX7-A) zsc6v{&$$Xh8;_i2>-*lmMmU(dBSQ<*HLvblLuGNn<96E$!x)`bC}sKPOuy(TgtMm* zIwSjL0y1g#{J1BCAAFs#2Pq*glVt_N0;3$OirV#pt zMKgL9Sz~4>g<^-k)wXMc0RGtFg)a}gQ#5hC-6|#pc@Th2?-!-=LUNkPuL7J{?QH=R z7k&_`BG_LONZ1+^aywrDf2d2OdsDat;_UaNf+xopN%5_Zd$Babf#M*iNh^CyX7h1?=h-s%Nlic`O4*24*x*3J=;Xu+>&!gzFwACbR+8~#d<>hx ztn1W(ScI*#S8o>NB+^_OzRa5t*I!qd5h*oy_KGz)FGcOxlJL0dO^D|RQxYjjcoIGe zCZ?K#I;JPsj~oJ@vl*|j^H{_CQ|XP2Gc>-yOytxhjN!?Eg%E*9u;WgB_$~36IHgOl zaMVQDlATA<0e_=58AH7TB@}} zJ9TK2zS=W*!dweQ6)UwC)mjlQ5UL5)avrMXB*lu9xf*Uk9bV8iaQV4wHgN0F&kA+L zmnlRlj!3YIGrE>Z6|(s(Sg7_}yhYqn^~K zT6fxW)1nl%lY-(U&C@aMx}_mbM{y|~wqD~HqJm;-2bxmaL2-yYEY3?c>561`zFe28 zbPc5jN5JQu-_lE zVY~qgEL6X$_Nd_=jzlT-;&Ik8&@=!Ca_$A_g-Y#)gzr9BfKa>8?uHqH$WXlCp#QN# zY}egtP{t(VQXBT+I#lbp+Q!v35pKiPSjjqW7>FhoDcp-1X#lan0x;AI`T4T_E!z~H zhb|_F&Awc^@cDZ{07pQ$ze4n>gwI7QrBLLcx%HNPZt_BHw!$t;b%oXDu-a^>&DKO6 z=6%*VKv28cFC+qDugDw(3hyg^XT)oP0?`h=y?<;6W#T@eqzbbWA(^UmoF*-~-dnAX zm1m4gdLO9kiwu#Y;l0|G8I-k=^-;o4Pj5yX#-wN18+cH!(=_wg1aY?E;9LD*f}jW5 zv>`(85up-(jUguCp|w-yJ)H|C&9OLB+$&V3=Mt=X#N5iwpTwI_Pk9Ygw~(YNSSuZ_4tReI+@hDYRq z9C2J>r)na_4ei|bPe7=2l_^B=ip~0HyufWzOff?=wmyjqTfo}Jqez$LL5+iW_Bw(| z&RmGo+JZ3fqV2TATcZgmq1JS^TNDz28$CsIdTZu(cnZj z$Ym`v|CNUB;`s2fO0h)boB}1c%15o3;mPwxdfHzX8zY(QKyq}pZk9*l#Y<;j=>nhzK2SkcE=k7Tba4{Kq!v8QkFq|&_aGuNId1yIArW+FVDd*Q^2on`}i7Glz4Z^d1M}Ef}@L5fG)Hr+r9%8KFmb6t}%7G6Z9J3za zw1_?Uo90B?JBdhCsL*$~(Ggiv_-gc(c@)~ft>RpKDAy!eM(*@CIiRo2p;MkT|EXQ% zZJZ*F%s=@?1K!4;CWGiTkYMQEM`tGr&BGPzkZRvNl5MFsgjQCOo5u{DY2yE;ouO`zl7G1P8+`Iy;>FB zG1N#djrn6n*P73(DA-0McSIoiYADqdtD}KV-AY)dyTnChCLEcv6b*#i34U8nMK-C3 zxFbSpsdwP3nZWK2-Ab9oUFxDN3I2yf7WT3QJz}WOJMdX1KsiryH6ImpQ*+G{&>pxt z9LQX;-B9#EkrFZTn5gV70ss9+&*7m%ad8vpzo*uY^|TlM^WXF*;ZNkT`wQ@&Q$>L> z9SyWT3$4aceZ%H_0)(#URU_is(fy8{fuouaRE)QQNQA+6y1^U-GbIkISi4n%@orB$ z%m8WI~x?%48<0^hGlAo2^8J}wa=`ci5P`7+wEEu$b>UHDG3UIGSxXEVS=yV`- zq2+32MAz`^%|=Df>e$eaOvo!wHRMSTh>;5UWOE&nJWbjQL7*U;PB^ zAaK}#vLc`u%b23!jqi6QgPaJAWp*C#@jb#2TJu#)tMyk2<*;Q7#vvKUtD6i{U>g4F zapNyf54K6@9B(m>jO9sB$ivErB3n-m*do*XpD z;5=})rMKm553L8&!)6%T3D+;`-!uf04&ml!9UWOCM98EEmiVr6X6q~%V#AFx*B5su z+yy~L;8>6u&-VWmG6yo@w;vykbk+~IUx1~X4B!mXHLw+1v36t2KtP&WAMp^XCZ~FX zJC61anPT4?ar&!5Gueu5*>GA|c;u$1 z1?201zYdfM^y|4xZANatQR}}h&$RWqJt$%ZFkZo3ILy|^xpUUI&y=r66s5yZiu&Px z4xu;Xad6{-GL=oBU`;hft%f#txaI(NSU|`V2{Bhs*w2n#Ct}aZ-~PULE&%pFy80@+ z>GR(W?9dUIYyKL}E9l-dfPn#OMJ0bnu=NqxK$Sfkk*l%gi#)fr7Y$dg(@Vt-<~4t) zF*Q=$*Q0-%3x3kUEL*qP#n3Tm#a1MGYCg;(pM;vRi{ zbLR~od*g{pAQ;reuxADpAcxS^MYqqc;|RK4eAO!HpD+35*%qRiY$pwk&M846{W3;X0jF|ZdSuY`6 zkdpP1bn^;F0#l=i!2VEMCcwR8D(O57_VB`wual=2txOWR5K9X*yOF~SK2$mUiEA#; z`#E%E?U%qVe94HE)TLBi+kfW=g1?tAM~xItt{yVUYtHN}EpW(iO}OuFxrK7u|AZG; z9<%1i4|rY=z2hc~cr0V*tc$28lIrXca9XOm^O>U`S6z7!nOs5GRU*K{xrxi)jMKsb zNM*KJ&|95hfI0hycwr{1&riZGPbJ~vx3=+d2!4PrcbF!C)20#Usf3V8&YrXx^T$Fv z?%&habNmojujO&Mgdc-wdQ?8>kbefb%tT)38d6HGN1y2#a$xFXDES&}KZ8(FaBSoJ2 zNY7W+Q-OKSK-o*hbE0{8=MJ zXJG@!5nH^L9lYvk0k43wD>|NACO+%T)X5LgoDr@_*{< z%mo}YXUbA%8q~rOhI&PX_3IN8`~eCCR7=OVhUb$+P&Dm_y+%DLsK<}r^@yO(3gl`2plg_8`)@%2~H)PZ?`$61~ zVYAn{ETueeDF#)yOYJ$)aYqeabMuK7fAV69A?;YoJQ5*%dPyl^D`AAb1LtLxKr~1N z#DsSP=*9u#3P*gW_A-r023-IAEdKA6bvtY)>C{5$mS1WA3P<763nmKo0AwBzk7(9y zpG92M)(B^Zdpk6|+`qjQjZwWTQ~qjx_wS330VWZ7QvleF z05hE|HQeZg+%boLL7#NB01yF;bM&9uIXd%XgxYFM)Nsl~wi7xkXmj-zB7yF|M$p~Q zf_C>VHQl^N4TGBdWUKQBN(GJO^m|&U?I`}7+SaaiZ_*rQi>RA+KCrJeK{oV7|J#dH zQhDjG2R?vpPENJXXEl~Amx=W-CL!25^ESiAl>7l8Gw+u34`XYizTcb=00*q4?dj9f zaSUVlyz#GVIm@4HrE0>5cRo6nW?LQt$QQTo!dZtG1G_ktsSI2qUM$@9Jz!6(q|`B? zVE|n?V8n97_v#N9CZ6~w6UbyKV9iCxgY!rUS16G%vP`rr0x%D#hqTtf55o+#Jz5;Q z!4IH>iV*gWso(=)h__ZCP_I4%pkp+El{#ZGDBmq`#U?82u#*G>NB(j-F)2~?NbhG6 zHD{{o3^>3P3~()+%!SfF=l1>a_^bbugG~5+%3t~Y=?^VKqgJ+<4jIW5;|da{{Fu|3 z(w{o?%(A@(JvFmVTAoJ}KpNh)467g1)OZVeaE$~syRhphMBnB?4@n}#pFEUCXvlyT z-ryCY=_u(&+*G|To+)zFBIc6~Tq3B@q!_s3LK6^fTyj{-SfpEZ(77%kpr?7dcqd@` zKWENf(w6U*)@|Pxe84#O)2801Cjsnz#~Cbduuo1K11dj78+8N|LUMol?6!j ziDm_vhM3z#nAEyJRRZ*FB8E$+_$?LMbt#r;H%R)?s^SAeXeq~QqlOQh0YOFPuUEBa;=kC%>#!V;ieA(2DP`snar zT^J+{8WrdhF;c6hLNiqe7evCoL zTIjQ3faXd_wu;O!OSUo=o0H|b@$5Cb%5eEs}mVhbMgao5w!iKn~yU+Tao?c-l+nH|~j|;tv<`-FqOd4So z_oagev%Rz9aL?<$NYTTD{OCy&$p^RZLYfs_Rm1nJY8~qeO(ZLS9wMTwbofVrt8$hr z>7p-}!*B5M0QE!o;`;zKf|g8u{%AR%IveYL^z7>qGBha_efT7EsDsvYxo|NvvN=Y= zkt?!gu9@V#F1EeqPbMmEGdVuiAr$oD_@JnQJd@m*`n)``$x<(e-_07s5DSVDWF17c z%N>%2w9`HnAw!dJyB)&cy2aZrYVVCFFSEU7q4WALu1Ob_>xrwtz$ZeQl= zYo4dYttr$+lGHf0Tl+_)Xts7JyWV9FIxj1*#Ew=KY2K6oqyTSa+sDkuPKj_@0!2QR zI4ELJENcmX1PT=>X9&=&Eg5go8&Sprket$DdPcxI#tP>nO{OQ|87bNq$1f9jKa91e z{)(2#!K~u?)!QfD$9lE7zo0Ow-05%a9#w(lVVceG?fO}kkCBM@^^Ys6k|vROPP}u? zbTs}MKsy1(Hq=i1*J_T%hhFktAgRxxv3REFF98OYoZU*K^zHkfes=ipi>7V`{g@aO zmFI(gqjROfylT5|3Nei&}io77ghJ>K>^XFc^rR-xvp*xLK5=gj_k?USMg}un?XEN zr>`eH3fxfad!Ck~KVINAl*bwx<`G^V-v&7PaFjFCFrmf(YtttVaok^d-v4V2ZMPj~ zyQZd}uVZ!D1+dId<&i+amsLaiqK26SVJn}O;C#~F4piZz>_4p|D5FS9TbVb$(vjO& z$Fd!xxtuG2VHA8U0?jzCGwGl=4E1xoeIfjLE?h(fn2v|-5OmQMqZOjU)XY)DSLkF!a-_K-Kktt#`3%c2Q)Z9r*=0&h*89VT+RW8U`ukaz3fZs+gM_1;!RE9W%H9xs zvu`qZCQn~ad1SaDXUzhwCmFskK*dm7Y@Xctk=bcCZV+d-P0pqxJz9S$L0PZBcZ4r$8A7rbp(V^6sV4cj-5KV^zf*)p^!UD+IIPeV`^=g;AFAJpGHkq!Na zhJNzc1gNfySKX`4m$^9_S+wwG3Buv=P$dX|shJ&jO)1Fgp;lxSk!+YCfL~ovNhA?} zhNwLK|5bg3h) zFn&IStMS}~o~Byf=4^BQ$&Cd`+#Dfcv5IE*l4CE-M!AE6j^@sLF*kUii?)9(^RTs@ zo8$EXXgA9IKY_Jg3BUJ2J2Y`as#F-Bi~qJmXz0UiT5NEs#%mdRGv%$rpKsjBU`rCy zNK{Z>_Lz&8*y`$b(ikkZXDb;s&M!wPIqM+qw6t5A>z#w)fe)`6u1;CDQ&8f^?uu@_ zr8&rqfi>-|P;B3{%zQPwCz^HP{bV}j-503;TX)lgH%*+G$Kk_2jcEWW*;E7co>aB0 zoGcaGW2f=81H*o>li@-iiHL`NcU+pjioa0m>hW7Bue5vQ8=M@XR=D91MI4WW^@Y~r zh~)zm=5hKGDwIJOAL^y&(vZ>}AtrSPj2ax{r0w|ML7d96qrs$T;B9L$wBN zUTm!|@-P;$5*)k7{M0Y#I3zsl#KS)EnM*lJW!j<3NAeLPIlr>maK!c#uPn$Xb*TJg zELOlWTa84&q;{R2lF~j_bB?{6YgZEPxV(GcVsaM}PTlNX`x zG<&2@cUChwHCbgUU!?=qViGcP=&d`!cH~bT$-T6rp)VsOjN4I|8eIlan*PN(JGq+- zYL)gy_Z{zrubXscR9*c0_nTd@pdSUdOO8@aCkq}AVz&B@I-%D@_4{L??b~+=*9n3G zLF0kXJIWl-BOn0%tu0?;+5h$2p%jwqivOzcMUnx?Vq5Mx=s(zf2;qjh7)gaFI6qw9 zhIa3S(hOkQgm8Vr#$Gh0VIThZtZJDi!p3%AT3s(1(xQ^-qj)_^ zg*>)~t9L+`6+@qEz?BG23AJYl7KVd`vcH(CMi5X= z6?6~K={-rRZWyie<1J2PuhyQdq7!KQ7)^^WG7g5?0xW4n4>XF9;thlB%LVXfY9&Wn z<8TOfPQ~7`ivLM4M&+us%~Gk^vs`;))ev7=NgD!^Rc&HPh4^70fig9~no<}iD0O(< zYG{)!Df_f~)@ac^O;pNi#@#y<;%gveuo)3hav0r@QnF}EV3aA=RNvlk3^A0RH+hz5 zwGuo8s)&?`0lx?`KnI~m0Hf2~>55s5#ei-t0dXm1>ZGx`$>W^gHR+mxd!#^~pHM;| zg)>V#M{h$L6ku8Y!!12V($%l_;({auvAsUwo!*|7iJeFrq-o|gVzYjR=>~`(ZLGAH zr_CZHCf=G~fP!5`ozF7xga5cMKh|=p`J)pz6P_Op*YMUPPAjq1q){*+!^;{=-fJ1R z&nQP0vh-#%qEgdsu^MiYKX|QscIYFo*iOqJ{=Uviz(%Y9T?#*}AFuDfT9z4kQ3Id7 zCDrPTgELJhbh?J8-L}t!Xg&vrXdAxb5(2UB4z3{cnt!hT-(;Clrb6?TaPd6+Wf8Z* zm!s1*;UzGq#c?Z*C+bN_N=yTOmpz39ap%Ik&GAG-!yGsy0qUQIcHoiG^Ij019^v5P z(Cu~iB$X$wzn*zQ>aZu20Q|g$(Jq_!!27YkWrgyIrFmUc4hK*Hi$HKkWvti^imANeh_w;)oUT zB;?tddqbKDuXw82D+5SoFp-f((cycHJLE|Ye&Mr!zW5Etj86vK96WZ&eWkcF0l5_!@}Nk8V$eDG!O@i%HQIB--u-0xHx%SYtqk$>yeEY{STsYDjjS zid|Ke14Urkvr$md@?+w*$xw$6y?$R8FDzl(@*~jYX@}?M0g7Km&6Nlvz-L2k79Ze< ztCu9s3)xw*mxtbN-Rs-Y5+Zs=6)&qWmNnhsoY=YebOv7=fmtzBgCBIO(};{4McubY zhM`e-H>8vyGh3~f+F3M%0n(g0h)d8_;aT zb3^N1ZK>P`Nx%OrJq(XPDfrB3hs_7Lu%-YFPx3@DiYl zYMco4Bm~zDtdYoa>afN9dh_Wk%utnJHVzeP)beJb+11$ z^SmlGD|__y-Lh~}?v48@fg)@j7@nH0-u=K2d%Hu}*jQAI+yh@f+!;FxZQlvwnj!DZ zx37WWj$72#DRHkTBT8M>AXiQMy7qx+8p&Dzqmsjx44&SGQCSyJ$BxPPb7&l4r)70_ zC7!W5c>nC~8hBaInS;bt^*=i*oD)qw2}nJ0%bdEALrj8lgu>HyOm5m&HT6Urb$Z$W zSEs{sq+xNp_Q-kT_R;s6t|e(Ie#fSbQM(hd z(}=;MAs8CDL6WYPEd-R*?qf}0*wg|n$LoXQ*y((w6x(hoRGW%TbjHbKHl^1M`LFL2 zx5~~|YM{)2%6F!`>p`!vhb$~#3)fD}(JUJ7Gj{SHXk{r_n)|*lz&PqZ`3Z{R&XAy>eIlr6A^4;8 z>p?~)<rKF2Lv zR~fUSNW=)7O7MTBmw$>5&BJ{{(fq-_qvQWTt4hHN>wRCq3rSalnIPgi1WO05_KA3k zS5%j`bkR_s;-`qJm=^c(_9KULe^W~H@tMH&N;#i zqYN8_I!&^UJA-49DRA~q0$m!qD@Fq7kbsAVge)M!6}%;vfHiav5Ff-$L@4aUl|B*9 zP7J*%FKK^V>c;qw)md_>PYKivQGcFYBB8GVS-~?$_?m9b)2mQ zBy-h*NiRDt)}#h^qGfWhwq2*IVsjzkMF*}!p{XBp>Z?Xd)Ph<~r3FbVeipZHrsGA} zHkW&564exv8%zVV@-JfL77MS3r0H@$Go%Eus$wZd4okN9isnEFdW6Cbrx?vYfEvnB zlbF=twPvn|x*#lp?necxV#_2mibuaDiE^#qjvd<&{9u3L_apS-p-Ri%C=1sN5hR0n zJqs-wT#U{zDsk8t{9hm)dj#Z;2~EF5=R-BWa~lAm;MF$t-Y?)621=`?zc*YdCa5_IPTopYj0q&ga zHV}?~STe9Y@9GnlFP?+65=-Ek+_JE^k}YmwvKd>?BsIE#Al1Vns>h4olC$XFG;)Cs zNm&zxA*s?H9$Xwb7EwwTQlrahr-|UGb~2UKkF8Uf@_{yUmEukgpZ`J0dCXzk=Vu%$ zcxI#~tMU1(vtL{=2&)IhJODr>*_je>%o!zr=4XOx;n8gnc=%^D@>!6cpG?N>`MF6O4U+;y|DVk zbC-W7XohnM+6kMVtOTeX6I!$F<9uIg>o$B=wADFLQepM9&4s1#hxT1P##@a-Pku3| zQP4570Brtdh*d~+YX}KiwNv-5HA8ZH=n$cZRFT(d(M8KY4$E{Vk9Rx&DH4S>O8mRw z;pR;sHd~3bjZO9im$^xbj=c{{48E=EG2hdtaP5HE4?%ghsw=?1 zH6H*0j4?$~H%6{N`M9}$ioN4xzrz02j>2K`IkK169p^#T@SFI21~-hPFd!v2+mSta z7OF(drp3f{1@F!sqc&W9FUvoV=5KoZqLj>jm7zVLbM?>jCQT^LvS2}vAKr}(Gg!0H zPYutk8E0Ocqw;EHCb)IxOD(lIS;K@Te_h&RvP?zO@p&vk91kP$#&oJJFaND&lbQNa z`0Ni#;kHL?pCbSCPsQW65}BErYUaVZ$Dh0qG~)sOtN2ag=hP~b=9%`7_#;G?VBvAT zMM5CN8p>+_itAT|baHvN%ta|X20#eow5HvrCQ+yAkhlH=r3dDno&%&=PBAaepC)pP6c9L;r>SA86j4svFA zh1dw;>CdSTp2B{E{YDJG39xD9(d@U%(u5WHZm$JdGuX`$^qK@c-iH-2mmJ|M!t_a9 z3r4Eut@8vPGpOLc+R#Jy;}+DCnH&HW;Xh%P-ZZYAL;f|xq1Mt_-r#0(k!r%`6u**} zB=nYU!nf}5wlJ)fUbla%BzLf)m18%M#@YOIe0qI=kj0*uTLz0K!TMGDkOGdkp1SB3-L^KhQadpdfG9yTbrwQ zhuK)c)iH-WUnASmr=RkEGHSVaq;aS|6t$snYK&N@>>AR`tlG6M4}Y)svgke&xR4SN z@q0a5j92&$b=QUFs%oHRvHj9BRU}qTBa~g$jtU?gZo4sGGX5O5 zCv&H;hZ=#v1(%J>A0NUIRMA*|_wMAtD6dHc3q4Ba^lQ{{5#`ls;4~q>Nrd$%Wlvqh z{rgipz8>)NmicalQ}$?gooDz=-L1*WS+Qq%<>u-%5=5Y23{4s+gb9rCge0K0AZ<$; zw2Z+-JwcC1K@W#9w-iIk~5}b!hgvfFpo+6M?1%tRC z|3ielUmr~H65(g)>@I^y8b3!UQLr!|s4Xz|!a-Z~eY+6;>}8o0Feg#mM_xLF9N-d| zxP=5Z3zSL=*s2QbkLNEFInSO#!u$^@7gd=Z26-hIdCB4ZaAMSdi3Ok+pg#~FVc$pV zAe*$QkFE&@1YsT*cwR!pM`+aStDT)?%jmqZqh^3TqUlYpi9CqcLj$5^G5Vog-?HQ01U$w33`o$tKiBU0Q)ll zFc}u)H1^fSch*dfq%M_J4fdf}dtbb+iX4!8XovZ$K9QE=btn6Hoh0nmfQ8+s?bOO5 zSw?xeiv&IQ^xW0*LJH0p3bwA^(nK5O;tP?=s{N3?)KCz4<3)CT?oS0moWs7ToqSNb zonn>qpoO4cRejUh3iPWtZ#8eLl5L=Vda?mT(|u>M`!aj^?LRLkA|M1}UvZNA3+wLr zPyCn}pQnVBrBQdsM`Z0aS%LzO$0}EU3aUVhK6QW7wx@=XF>;nE+f> z(BI#gooe43HS2yz5Du0%6; zqyw?JI3_uL5)pj#aSZ4Q(c)rG$`m(3-!7DHEHCNFfi4TBTO3VXdkC?0;R6A!BJ4kO)j56YCK^7`1d`Q`-A#0JtUjszqo6l zkzJLpmpItiBjPctDUJo)C=lk^bBQ}kkB7m@ddqK8S!0i&D;BI>L zfHtG>-?jfz48YE_R^@4kH!H7!effD`ImEYoY)qRtslkL6Eg!ZQ)*WU)h#JTBofccg|tb=yb@*SF2#(G36Vtyzl15?C#VQs@vgu* zCF1GI-peu1>7f3&54Ds-0)U0-Q>@e*MnC7Mv6Gw%HGS6yq@-7+CKi?9kvJY;XNe?T9rGzCAS zk7f(baV(pjCQ5x!xf@V@jS03YvSb3RTCNF}z!83vH#+T!=}i#$;i<89B}CsYar%nc zd|K;bwTLa=tJ(46id058J$vVXm6k)j^{HXGJgBM_QDrT2SjZ%H3>INgnox=kt*>2| z9q@M?Q2BLH?f4^XCc59cqxs|iPaBKDBVunWs`!jmM3j^XJakDzbC)o<$U|1#eMN-& za{tq3vQ@UPFtb4Hwi=_qu0EXqMBRPTz_7t;g~Ym6wdG$#L^Tdl0V4$y%?_E9(8lM? z^JS38P^>A^w13f#e89A)q(Ds>knv62-kDY)#C0%!^DajMmGvnWPUVb6o~BF zh+-mV>M_Knu2!nEFfYrSfpy~!z`<2ej^y6BEUv^R)1Uf z-DgS!h#FE_nR&No_S&^tfy)A(N^sdA-;146mAL(KM0m0ewAFQqrO5)I8`>?6S+(gR ztaw5l%PF9My888}KMox!C`JvA{KQ%3Jap>aCy#6D`unS=UeteD?o#deoBEVS3rU;| zGRU$%=|X6XX7qRcTMhIWP0Hv0Rd`Fjeqn|WMk~CC6d1R;za7Nbf<~pG0#1zxX`;>z z3{1Hg*jL1R7yd?I;Q@LGN6A}j{tbJJyyVd$mApW-Fp}dR+i?hYY?65^zCB5;;P8h= z+Ud#mZi$_jW4M?|2p_7x@_f+pD&dXdhb3j;_`L}NK2Xe(RjnNAGPfa)@#+FQF2oO~ z^f6ZmnP#SADf)UEWD2miTH$n~O|BjY^v6-gU*P(#rn>#qu1K75299)1(wnS+Z*CYE zJ30a3^HCt#d{6vgMqq?xY#CGpO)$2y;3g%j3eYIx!*g5TZ%C^{o__(7+H8ARK+g-q zl1DWfa45uv6Sf>+E&lp`b7?>AKhs6;eRIi67}VlZL|`Om<^r}|!X*iZ>Hl0cS<4ir zazF0^lO3Tnui*?WX8NX=i;}?pQWK(D>2D6&ARQWD=GyI^^LvLD@BQGf3<+7K%ChEQ7cTo zv|1MA#wH9?6hs1ad4P+Al=3h=B$ttSklM*7V<-Q<^cT%F18U1gqFWRCJ2PCM>r$od$>*!vlaysO!!|p@;iMN;+q3=4Wf9iNnS0ECnLIaKf48m~D)2Bb& z{v}R}N8pcD^zmLk`%d2Oen+>iIr}mk=kNCsrug-M(J>DTyu{~C&#IN_b=G>4bYqjH z)7h21rfAfCj=Q}3@7st}paJu=P;Xm({Gh|RfFvM7I-IW+)$|X z8y$4=8gMO2i>q)}+@#fHWmaidr*r2w6@O}VCZ9@YN{vsVl}@lc_UihWkyLBtI{e%! zLgcg}%eYH7nAoFf4^%B$u1D2dZj`noEbuOP%lVcb#je$;94>W<<-|t^wS;&%sKTK< zk18rk+gd&AmaMWQyl(X2Y<~5mF)rFL-GQ!TK~Y=SW+m+9HHnBA7aD(1qps2>0Xt$M zb~qel8;VqkCp8MBZ9V~r0-kNO9t#d>r~eIa&qLMd+=kHL#91S9U^F~*&bUx_J~}IS zNa;7AN&SI6cMNsm?M;2^@*XhS(|H_<9!pA>3)3tCFcIl#@3F2A+(*eD=b!@G= zi~}!ziy7Q_Q1kSJ}LYBs7Ipz94iHy7toG323*RXq0k0yqXHbhYHSwXcEqN zp5n$*$;GY)C;5FLlVNhyHca5B2d#n00~bw~|3~U$tAZawOGDI(1wTe<1|VW2+odZ;Cv#$T1$Z(8Vnoxivn{tJCeOu@Wj-MRms9 zW&a2*#!gQG34J>nA9yr`Ym#~EqI52PVA4(E#w}YA_*5p>!|Dgg(4G4%^WA(N{9D0j zpWQ|~ZBL;9aBYk#a-l9N;`_4y%7}+%Rs0$0G?ZVjsi;tw4FhjC^X7RyTy9OiH_fE$ z;PSRZW$@Ah{!PGvE3m@|d^E``M2q^tW)!h$%=t>T6K3hyDBC??Hjz`9rA{?6M}8Y{ zie_NKetW_xK+?qR3A4b$EamWDg{xjI!hrvD-LeEtJ7&Lvv{+21FiU&FEC@Nq-PExc zWa@)c%{qP%$H;U|%z_+dLAs8zQJwbn$Oj)QOi%T2Xu}&kNqIKIr%IpJt1{ZQI>fcS(yv1Sj+Bn!mwod>VVYr zHhZMuEhfdToTrO>IU{PpstF;*-W8QoJrI=bS++D8a2Z{Ku#kJ`U3_9mfPPyyMv$C- zs2dA}Fcf5l;T9aeUXpeG`#Ea51=SUdnN0t<-8UWG6M-0p3W%Bl5ZXA##lTM zqEe4WsgPPLksz5n>+TANIUmKHhIv;u>{iw6j*U*!8n$PmD2dsOyhpENI19=xATSK~u!w5}re~<$VUol!(pA-(E$dV^ zALF8p4XJFV3#XCSRy|a3asSw7G!zdPhqJ_4ORewhTlg!*((c&7nITw22mh>P^YYtyKRf84dN{SsA^~_j`*hk|uvihtdx+y-+iCKn z$1w`Ou*L3{rxu2O`KBeD&QcYpEE2H!@OltLVmEl3i`thxwxlHy3=aa`!LY)o&g*h( z@jl;ridQtyfaWHp_29zg^Y~0A4_~@yU7$fkkrW;jZty`iEz&S@KtY;c-G{bMX(~sn z(Of+sGz>vV#4Yn~%$lFouAKH|VH@&mHa7L@FGj>0DRDO1OJ7fiV%FV2+TO_oL+$kOvNC&1_jY=V5$sI97}R1UMXSZ;S|OUl^IB*PgE=%xNDKry@XItf z8pPLf(1-88tic)1wcPoT%*6}kv0-*xGcrh8(!m94MBIYkR8q7iO#6iJ2t)Dp2(4_l zec8-vO<^=Sbb86cv@c+323N}U>wF0ZTpBrcNkh^MlA%TWD9|?E;zu!q%;LJ08>^g^?(86WHSijrvHN&I(+^z-iixTKBU{)NCo6v?@O^Dkd42s*ee7!_I8bmxlv=qlEDc}YH z>G%J7q>mEg-UICQ%Rm!PuM}V5Vs*d(zTWbZV8uOd&x6sn>BadY7q{i(mqo~yjILNk zjQ9<{eZT(75kRq#VJrp?41i+?<`#~_gW-eSYC>4a_^RKgK7ZNa!I7>0h{r{(7z&Tm zInI5Q_nh*)CZyB^TxF~4kC*D!+Sh+h41K-CSRS;a3(LVDw`4R4bLXd(YjY1E>6WJs z*k%$GD@9=1el;ln#s$XSdxtfo$m#oytO`<>tnuY#*n@S;y2~t3hRiY<-RmH&+j*mq z9x3xgT&lp)mn=pCoX>;80|NUv$d+H%DpqMrz7u6l?@L2jLvf*qE9j#8x8$09qTe@# z0K-u+o%nF?l^ZGpmG107ax}(38>F9O?}DiU!1l4C5B5B+Ti zQ#;UZ9oU^bHG2w%A(`emPCux%WHmY7c(50Vi`u%GD`#^Xt=0-L2)?@6cz?n_)1k*6 z9{Y6~y1`2Yfg+qYFjdlQqdUH;&c2561w)Y!fq+5-RXMwANJ$(mQgc=7zIXa}lsj_- zMHN>_Qb#M+L5qEEXq}^keHG(RMn&pj~r`-51vqOV-a>GIz9|8@W0=6zyrfot2DJY3k}Ho!jf z{@Z-t`}1pI-CdsEoqkiG0d*BUbch{VZ2eT(rS9&+qMDk*1*Ibwl;$E5F!HC~cZ;(4 zsGB_%sd<2>dMlpv&}qr90i%o+kJok`8o~zi*tt#SegP1w&cTHJHcb533$R`qvjlZX zTkVtdoxFdY&n09SC&rK4#>U(5b(NYP(qi;A~Uudwc8Y>+d`@_v2{!J+q zHZEvJQ-=aUe_)cPbh@aN1b_7wxocsH=L|8ygoQxh-%L22$H>DO@e`*<>y4GI#v=yA z=HYsYQx;*A3f;ap5~ju)w=P>plL6V~Gk0_G)R%|BG)>2#r;6}?tc0nWm?AJ$5w$`T zo{Hg`f#UawE~xXXv-M&%%JBj$z15Wh0 zBa7nur{98BNSoj{=oe|3uWEt~0sh?HA^5^V@mDjts1* z#9--okN@O_Tm1VCJ%xKScTkQuOP@v_L2;)g~!X2z4la2tN*N8{>deQS2U+EUOm*2PlC^{qo zY}p?!%qL+w8`v2d49&iZ9u7Lj3!4Yt8#L?QrwDLLf6pzziFyPukn@Uuzi6{Wz>KHk z-rfAZ$f4|9)-QfN>vQ;F5uXg8y9Xj8u;4Ir+(cRu_KiFxnf&7%S@AG!-5pe26Vo$ub&S8SjJzV-; z`LlLHx^JbR*{F-4{*x*Xb1}9Oh#T*J;L%6n&voU91T z=t|`UgewMbp_9kmE+L1^4dZ~=Wx`KR{?UmL-jI=Bo zwU0yi?$|5=(4xSh4~0+y#A8TbLV>Q4&`&~N67K(_qlH0yHDRK4U z-Euj+=m}{k+A#L4CWTV`a)3ag8gpcU`JL)nONULZ2#BW#39mxRQs)Fa!70DfR_9ES zk(}oNVlxo|f1p3%t1&O`kOV$20G0gpan+Kt8S(~>iHT$zADhl1+tDWaAny8*tubwk zCgGs2sRh36@;knXj)1!Ixs*u)zR(e>K%PhEp%tsL$dTG)ur8OQtF6iUe&><^$q!Be zD2bxPtakdv_A|i5pBFaKsscjDX)n+ZxZ(IqZtFa=Jy6b$Eu1u!xGlqOccq8^W*11V zt#h@?q5F`@1kAYT)We)l%k`5@XTPYk*;dkT%(};rxT$rk9Wg5uJ?lu}Y8*Hj?S;ln z->GXu;(CPtHpTt4%#0ayyxDa7mR6fHM)PZ^14Z@cj&-$yNO{hWnl~H9#C;a|2w8Y- z{^o@A;3F;nd9LF3k9y0v(5XLqtf^u|q_7o*^4ERUd}k>sh9f;8MR_|6-AL9*Da$E= zMJ)?Z`8UBslj*IN0@)qd8JPyJyf*{jwXH(jxDRQXd31-tluLMT@-O*GNC8vIZ^S;u zd**QCYu*Tsk*t&Z0u50;6v*^{ZN>16zO?1mrqT4;UslfTr%HyUjoG|4`R8mU4fL|T zq*u0Mf!IlNoWyrYJ21D=TmEAytl)m(D6-Z-Tq|N*jr`0ht_LqQYGBl5CFw&on-AM0 zpS*ez;}Z;^wP4)Jb{tP8BxWOB3P;%2p9)K9{j-t2-mT&sZ6TSSU63q^?Ap#}ZBv+i zZig31I_tXm)<`o=axfu3ml5CG=yXY~Cg-Laj-i5UCjo2UD*9%>t^LbXNB5YA*kkE~ z-$=0VJYbg(w$xJdj}vppneBdUZH8VxyWdo>OFcBeoSnX9^r?~|NkfJ{@^n@oqG2z* z$KMt^j@2b;FSi5dSz5$cCI}jyJq=TBld6B@f`YXe==U++;PRERWf0f3oQ zPmspF!b&6uLkGg@N<&^UI<4acM{{-`*QGMxUgPkT+!@j@x8Hem_E97ea?E<&FZZaC z$ER8dxX?>Ox=!}c=Ynbw8xkT^ei7EK!rB4o^vGb`L?e?U;Pkd#M-;>!*ywOetM6N%nN%qvMAhoUL>9ztgffxF; z!W^#|yc46!ezX^ELg}dp9?ij;@u2;ffO@D1WZ=)c&*_%<^KHp@IC7Q5H+?X2s?0?k z`O+h<9@Hf49F#k5+w4#`#X9 z;A+A_$)>BB2|S_Cx_Ekb^ck6#&}UkjeJZZf3UX(`!iYZZB;TTy(@HAkeEzh<=rt`X z!a=#1n?uGNVPP!@CAr^-v|Ot*P)V1`O4V(i9j%@tUD3v=bSGazEYW$|zi5{H?Dk>J z#!bk?KpCAdGLsXAiD|<8FXT^RGf8Zb{H4SjAMTn!^;BwZ;SQ;U+Fa?OW4U+Z=9rd% z%+Xc)8{&d$<#%azOD-ne?xn7ck;g|0~b!n+TwTEkf-D5l9GQetVb zvt+t>Z!gTmIJ-@Zdpe1Y^#v}3MaG$WHWK@7-rYd|^6mj|V#dW{>Y45*O_yi*3eN~7 zc`sr~pV$tN+;|e0{gk*@Ww9886FAOR)1Hx>2SSK?yhCqA`b?3b!mJ13n|dB1y=q|^ zEL-&1pr6KhN%x_M4wcw3SQn;L4-z@GjNokwZMMbBZ;`i7!{SIoLK${ei}e?hn0)?8 z3HXJYTP*Q^7+Ak{OLYys7@FZ8WD6#SP%)XAQE!r+KZBM zmFhM`dSXLD&!)#yd%1#=HS{qO8SBs1R$OiMh_-D%IOduAUNf-D*&mOS5CVSP<&acqZf7k!jn3ij)h{FLcI<0 z%G#{Ei(O2hQIPyNv3oEtiMk|eh0dYL0>Knz~+GNwgIg4vlKZo%ad()OcmG1Kl zin0B|@cV~*fbQxdjW*c`ueeI*I7N9?r_x~y^)YJDok^Oe z%_)Ve3J0U=OTr9yd0XhjhaptY2n#_0<53ag$0$)GAw0;#Cv6%@n(-_gE-6%}YJF)R zKaO%k2qHlam0puoo3qDqc)(KL(A(_s#JWKn6-r|VLCx=e3_f{R3;bJ+)kz~82KP~l ze2`*x=}jPA9F!4{jPg&;%f3a(pwSLg#~BwX^M##S4Ub4C=`62A4T9^C5XBH z0pg%!unRQ7Y*UJd!tI(utM`w?LvgBZ{qy)f=0y$AP21?L`gZ;OdhA&ex8 zGon05yd>i4P{jm7*r@>;(dUsekOanpyhb)aCcp`P`aC<6jFBcQW3zBDG)Qv7nf1>H zhqx;kX;;cv{QoODb|FDyzpqVPQ=0K>g^?gh@cO~t>YJU)_ouJ}z;4CAH@EP@99Vqt zS6T#RrjSYqtAz4h*??KIfV9mT6g5^h$pL~!hia-bDm2&NU_@+&H$nuBvg2xNe}D1Z zGo7U|f*u9xRW%&V=&ObZ)uc}gr1lEmewyN$SL9F^AX5I7*sD@NU@ex` zim*EVR9K$h(KV-b+qOdGs?j-1Y%Rli#rl!yx~!GT^7b+{hkKIXXQ;5 zPtZd5ZeKgtahCktr`o60r3B>(+l8n?c5(YE%_{X73@CXKh>Op}3-H^b$?UV@`0Trt zAbmw~Zz&Xqk^w?z%=q?FW!Ll{5e{VPEQ#Bk}iu#y1(J^(M{tLM1?uT_fCk#7At+?r7LbpLlk zJ{xu8+J*m>Pf+@oiTeS^5v#y&<$QwD$kn z*IB8AgFkjqjR>-m$@m#(^VB3f#SOeHsSrBEK_=O;~m=x~!;nk3M zpJSyc(`VS3uWSb;az>p0WYr3x3k$v1M?_msF@Y~5TP6pdffJ58;aRx4SOg*Si z$*nQOY^)8%r9m+P?sh#KyG8oKkGZq^HID;)#^Nwy6WqkfuO4{Ld~Z;vl3siLT|(SU8CPuC>~-@jKP;aceSrw$;f;d(pxz^8BwaYZ z^#yKzCB%Y?Ga$Q1IK1mD=q}RM3Z{7F=r+Uo%FglaNFQSH1@x#?!Jn!lO8Fi^6x&0> zQqpI{4N)8g4^k6`!&{Vsf?XbfGIi!O>hU2r6B|^=n4Lf67(u5Gd5lKAR4RS2&4Lh0 zW4LLE1<^u<#~k4j{UkR|ktrS(dYR~kEyh?(#Mr~4B4(0^W=rMi@hGN*p2#RqRsI7< z!y;5PZZcqD*JhehB*Yx@UUbV;zH)V|U52LVw1<_bXt&shLvwH_+Fl23;UvTOL4 zPqo@hr+!j+e|(#7OFL*)n!+PEJC&$foAe>4%xm~rI}VPgm*JL| zDfIHsGtojza*TR8EP|`OC=h{P7iOhuMnA2d%&3!;bRqdwoe9Wweo1wN1l=Iitv=#i zk`NSJZ^1<73!6cL2>$isB!mluUdGhDWqeFT7%47kcgspF-707f`!`jqU!6xNK=5r- zgwI6fY87VR`s{H5Lj2#afJ4@6F&|-M<5Ev{n+6wfupnWF7yim2m$OM#h8>j>EuVXH z)=MNgX#Pc7O;%{)kn*ynK>O|0lvU>aq zowcf!TJ+H17ijnwNou1G^G(=h{NlNI2bm5YVM*a9_7qg3+QY)ohs;Pz0F^y+QgfSM zJs31(=_DHbBJe`eMqMgva;rnf9kcbE)it?%D7C$+wn|_Rk`<`10?&YKHL+jaU!yCm z`$_qUgwam@9z0ckniqXwnXV$1<1TukS2<2*Hb_Ai}y+4;Em1;SM>&_H!1q z7_mNkbS9UE(U3iFG$^TX0x|cle<#IbZn~+b*R2d0?+;C+}w3mo6)Yxu=Prp zCwz(W6v_l5xseES^<;a$->^ro`)zao{3YZ2q|e@-`ydm3y^!w!G1oS$=t!BrS9pT` zlYb+2_KDt}YsWq~V)RZh zOMqw{==TGk6!_A@*$X%J#C$UbtBd{{Ob2!5gWspgnFZTuJ*nTcWH1*FpT3n)nP1I` zXy!qS4C(*&T^A2CAnva_pS4X&%xJ) z_WO@!RIlF6*Tos6KMfUDgcc_m%+u{9N6QS)+J1DBUuG~lcINP9^}x2w1Nr7t7}%nO+eWb3CBFxLeZ#gG zXNO^Rv~&in8}!h_4mjwbV~(<(^@tmEtV1>Et#oJMo%aF4kLZCH;6)D%6QOxt9hhf% zVSuiOaT&nhj7<&qurz-Yupv_GYtqsgx3zHtG?bp}*PK>;lf3;=|9?vu+TZeCVy3!M zYtK1tV>9sGt_u`EA6?glqiAC}7;(1LW1Eq`8=HsQiNF6x<6$2P`2YO_J>v@?{LR?V zM$d4jFzl{C+-O`FR=e4$N7eC^jg%UV=3L)?~z&Yok^*O^+R2=OI!{;v;rxO)b ziHbmD+b-n&)_;Kzh$~Fc@`6fJII2*PrK=@8S}=5DJ@AD*ehxa8{a0!-RY)H_Y(_!; zwU%;g2AzKb#8%j~&OPN~`ltRjvwJTnPY=)2TW+=8$`CGx!INeCX+Z?6pXial>n1Sa zjq4>x5kEZ>O@xJ#{-xLY?M?LgOMZ;gKlEJxMy$#&&die#`-)*b1o!Jr2P>K?=;;+2 z%SLKNlczgEbHSOJF}Ed;;(`c{*|iz@W|Q+U-{YSg&~QSII=0BV%#mx)a2Yb_?TJXO z0H;Q6U;L}a&(3Vx2{MCc+x>7?GOXT-$c6J8fTNVi`lk(e4p;m&oNi^WrZu*}E@;nI zc6^hYu3Wg#y5RSr3-RgI2Wi^=|J|@cEY@H3h%~8$s11pr^1B>tTZWo)033?oE(tX-fQFSX#m}#Qa(gNS;<0N|qmrtJu@! z+)tCb_WAQtXcJ*VG@-6V<7>(TO6u$N-e;;2f#m%<4H%nr#d&T7dV4ZjE5Piw9mi^5 zzwwmldw_s3s_g$>!5=NI+&XZh;KW2&u|U1Yz5nX>uFij+w@y6sr*Ruz)ovm`(Q}X? z@h{Q!34KN(5aUevZDE ze5wmx4_(+4)%PCv-s|7GlK(t!n{d{TV>iC4o%0MFkNg5gTVSLAMg$4uFL0xHLV_{% zvU|M$WoWjHpm&Lq-Nc1ey5=${?6Z0ajTuK=z_#cjbc-&&TRbuDySNa#yg>NOx&Hdj zv72+?lb>7&E8@v(&efit($cQ3(s^S>%qd!>(lkuqQin$P8K6ZK#;gOBtV{wo9z#Ge|P%>zljB&c6`0?ug^VA zOhX38-nC}Pp39L+)^FV^cey{hsIHk>_sx$7{pFr|Hk)r1a$pu&$-x6MbX~K%&A-s| zf9XgAJK7;MGnpGBD{m|#@Wxvnvfqg@8iP0h(s>_E!;I} zgD?acD%hEJA*&Jp#obvhsssN>F2bi`0wA8agj)#*RSWoO5N_6};)MO2FXW&)BV*i( zqPjX#JBq1E!%9>{^`R=kZdFz314F}%7OwZLE>5>tR_7NO?Q68;3dO1lJ>zV7^s3S8 z6_%u{T9zz!Z_Oxrr^leD^8k63x<;yJK{%k%5Y5Z>d6OBSMi^8sq$AmlbPtlHE7al$ zL0HaNVueabvLyUC+q}4sr&m)o^{A0CUilg|bS)wrj%ng`-yhpITN8uZL!JNFW{L1x zFkS9EBPL!On>-CEN!OL@OG6#f+&JXiJ>Q{A7ZBi#+irw9cS{`9<3LZ)Gjr&WzSOB! zfS+fC)w+yOH5KhwG|?I@=#6Z{Mk!ukG! zhJReTeDUhVQ8y1>8r3lWruk@SVesJjE9b79J9KVg$Woj*T5yWomm{M^n%|CehyNF} zWiSy-A8+Erv5J82XlN_*t@)Swb&>vUNCyVXnXs@;Fp4?R5^7BNgGUo73sxpCKAg;l z&35SZ$Bs{(0HS7>F`7Bvw5q}%@O-WAhtpdB$uFTxs8PM`ym&9E}Q&CPtqk>ouitYmREr*btf>J=s3a&2?@E}1@e$&kZ zfHw4*EG1iEH|x=>1|1JfeU%`ar54nlJ5N%YcA(Sc@&_G`?%)too`k~tPeAB=5(fKu zAx;$(Uv20Pn?(xy*v8KpjyinWyZ&S5=fByA?1>P%RTYFzPc)4z)4E+RBB@|Fo_q&t zkyv~oo1$??#G7kJqATUhUE3tX{j77CF#Hw}hqD~i&mmJL{%xV`S1w8-K25_k4`8>{ zJ`!pL;)8|qCl-YfAEj)D3vf(2)#zhrx}LUGC22jW$RzzPwA_>C_$^@7MQ6`P(oE#t4(-*AK`6l|_W%DQyV!1nxWcul_~6vUB{rGqWOx_Z0a0yc-S z#W*r+1VnG}YRjnMUEWbzF_=7jIV{5H{LX*Rm+ShnfL=StM;W#&(b-61dYn!VvLo!% zhws9-7-Fmvq7uG~E>aWTau+>7+@g&Fe!vmS37deBG~3B(SjhSO2gosG^P95D4%E3& zQkPqmfUj#seC<4rW?Dl66&T?3#y98mS2p zypB*?wLrsu|4C46`pDg$qzkUgr)L&F;VydEZ}v?UuU-DVYphDs3DGi}b@vZ17ff6L zh=3#;fm-+5W{EOfN=x9mF)stYRVC_b=M)Ds=9z&7~6JZgfJVqtt1d_yT zLPDv+9z&|>?lVZvzY76(NRrAx_6>36wPZ`vP9(%zI)#zVRIdMKm5R3Y-j6C2kS1qx zIzw{BRZe`LxV-<3;9Ki!2hq0(@WGfHKCB<@0ROh=3I&iROf>yJ#fCrOxG~%I)sK$6 z9dFRM{l>aqYmI3J51?VD?}KyF14EwIy0?SW_38I+9JJcFfC4F56%J8_fxeVq{<=u^ zErq9P+IW8&fnl4Q9R3qv4R^@9+@9V*Qe;oEb?@mS1=RY-d5;U|ejLu*==HU5NsjJO z(44+)CY|@Ur{B9QN-{CE()oS}^r`c%i9EQ;9Wzv-Ad_&sLNcm;8$upgOiTmOHl zq^>o$4Em8qsLl#mK!WmjI2Xbh%DdKpWL?UDsyLISTez-JbS%AoxiBrl{AUKprM^%` zrvMp65yyy>!_L!4j96BZ4%fPLWMep5kuMhPxu0vxolUtA06nFPT(dZ*H=H^Nkt>!_ zH9w^bzF!Fiqhlwj2vNNrcWp*LFJH z*o=1;MF~WQ+tgYNTEY!;zUV%$xBr$CR%o!#JGpv`Z*`KAwI_T}8a4N$r0;Wjaf5Ul zn_L2a3X#O|u%Xdn#s1r2Pww(C(YGIo>D^?;-;U1g+DXMtSQi=17+=p#MV72To4jWb zBm~kqpnJRWG{{|)>grqz9)!;A8VIC%Fsi#@=-oQC2YRfuLtxp|xgQ?0ek!IP_Yg|J z{3e5YU5m6Hf}Pp}=qer*MWC^%cNe)h*`TP1(-w)vhT^;>@-2QI?XG0ZaBenP7c`Mf zBMT?8tYo$|zRD80mRW@lzz{a?Otu0)4E_P>`hC&4TiV7tC!O#9${+s)>;GmHPaz5* z!k?3ubyl1CD@e-lZzzT_$;bK+Xfsp5d+o* zXj}trfLbca8jS&F3^`l65?v2YX=*Magy6v8MK^zv873aa zS(+ZZ&Y~H2Mnv_YL@mrT+_{s--T<~pguyxmNv7yTxSo1yB#8LT4ti@4p^vMRouwCA zMkK{#Z(s(4q35#9jZQ+HK8xQ79F9ttb=z+*-y%`n+MJ;XFS=-;kK2#Kk3>qJ5sQWu zg8-nu5?~PE!wL+IJDOQDT*8?CH3A-wJ^SGI_>#u4UT@moUk*bqx$U>}EBtO{UlHll z?XF{yLeh~w#YhBJ06ad*aEONr#A2Y`XoP?{$4tc}AyCXTX1ADd-8Ga}mIY}14I`)@ z^Et)+|2)=jzrCC{hNI}WDr(VL^!+i6?VC5GmAQ=NL8=~!VW;;B{e3A4vxS_1$CQ*5 zdhW^LG9!}_%Q9LlqvY8yx*EQ`*HPSzs&o@?OeiL@m2~~@XCnUF^;Uh z%_p%Dn{=ffmk=X##MXoK^f9q#Y5vSv#6!t4-OvP%XFM8oBRz*_J~}as)H%3I6v@%2 zI_S-y(~QYEaDF|>F_tswoM^9+Fi5ZvJ1muz+tigf&2s>IlPbtN?ny?E=NBs`Ep=}M z4FEwbaai!k9Xc;dA&>Lo|4p1lJlVV+8o50`{(*td&ZH)u%&7Wi3plf>OS9atnZRjM zr_<=~9D)T#*_WZcG1DfunLYK>3EGRX?Xl?H_907W#D2%PDliT!pW5g3Z0m>Y1hXd0 zV4H62uM^nPd)VHDBAG>aD^)ek4>^RA#?P3KdUUTvdqtzq5)Mc)kZ-$6nX-Ah#=~oK zYZuv94R8or=-jQ6VtbZPv&HWUn7(@wVN+DhW^-Y(HSU9=oCKS8a9Nd&OK-tVxNrz; z8|01Jn^U%8(I*xRl}%lA#4l`X;r7(kH$jN$gAnHeR2hlv)OPWtmo?i)slK*2lG1}R zE;E_7o-7VY^l3=Vzw{7oECP%z-X=P-?jHLPpVVS2-b8L*r23#-HsN7Za~~{KQl*To zn133e3&-MJKhc9)+(m*xSTlY@J@m5%o<~6%w7HcT_GDOZk%+aEd4nun3 z>RM4<9ZTW?a3`q~Kgg#@2V)xdChm%j4C9pQa%o^`*EmdAoxjbad;Zv=&*+QpsDjQ% zQ&`&l&9xMlA4rVtMLYEJp^D0PV>F5jHdNXNRTtSNaH<%Azu|ZMdq|%QYm=do(Ss=`_? ztx6THQmPaQmSBk}wRmZr9C2K{5vOR;S4hOSprASZ>+ZsDkG_nGTF$@elbNc0dGsfp zBBAx?036mJQJ{g!5`$!<|isy0dwn$ubmRR=nxFEco0Jc?z-Fsz+PrVPMx zrDV6UH04U3m~{Sw4n0z!ryLTsFLN zOt`F8JmBO(NURD=s(HeQg9JKl&V2>w^zVq=3OWO6S`Kt8Z%1A7t5^3Wmw##@`BCu| zJZ>?@k;p13e5-pu3;QmYyrLa#?|m4|sFg9F)euDOVpGOTuF=w?A>{!98}@1!X?HJ8 zV6}dc>5|(U9*t-^^C1p&0VTG-)uij@TPp8)3i?RDOuP&4L6Jaw_yiL5?uTUVA9h~d z+Ip~UKtw3d5%wq?!h=zGs-qPsB?_dll2ZhbTqWfQKlpRCLzly)90b>M3_RcY?%()|?>`+~hRQ=;WGKJ&pKX=7eLh7FLTNauxE1&%&dnMZ`Xrb(1 zZs#xNbl75V`|G3u0hV)>QdxPWu5-m1%w_90_r2_I;=gqlW@|qB=t4o*7cPa@OUXy+ zFCffxA3^>bYuaqe%XQb@TJPwWZC<==Tk`*R+~Vf?2nsxv<0n{ou@WV#F3ta#)H)vf zDm2;%M_l(WUu2{wBiWFmA&@9p3W&%wXyY)zhMOoH8aXOl!9K&`7Qu-+PQ>7)ng0DJ zuMG?l*Q5ErQ@1CGfM`c6Sh&to_HSfopI5jBgd_?GZr1W z)}CB;7Fp?{553CO&p7iYk38YDD_!T>C!T)ZMK|5;fguO~EFuj_iylE@^k@(*xy$);!Z96EB! z(%;q|*tjj)$wxlR1Ma^^%)IC6FZ{BF7TG+T^C2g>!OP?V;$#?Ks7R?~g?ZL_!0X*g z4kao@Y00AL7AsY4r=z+XtJp%j!iXka$@8_*!Ql8$$McSVI3gTv9bI8>I0TM>li@6w zY0NXOGHy2RGnN@o+peI)DS|Xj`%ERpOQf#oH4NGh{?xA_aEJontmbgmag62(gmkXh z%2~?MZEfM|EbaJisB|x;NH9uHeeSwVNp;o_*REp#=VmS;N{pX})+`=HL^kHr=Z?xm z&T-37`Z%*SXCo4lbU5X92YHt54D}<1Ten4C;ShwN<07?(D_$gOp!C$YKeVX{q&Vj2 z!I|>&S%Bn0`*^qAvqzsG0stwgg#t$QwVjSEWQ88AfRE+eF;=Z%8*MP6 z{jk+TP!@p`&Foe+j%TY}MM&tn?^82@PyqZfh+1!?6G6T;P2^x2+0h;TrX{(mj|mjx z%Vq~9u8Z@FtJVGI{&9_&DF|$1@^zAC{Z{1NmrdcHm{9`0e3=Y>P_XPWTXQNr&T~`k z92X9A-u7@0Vzza2*cFZd52*yiciD(KD_qMMuJ6kS8$Xu^n$(vAet(_@ySb85YN*si zhTK0A;GCtppHCZb3S_HJ$htYzDtXymNwi5>W=Ro6KnQyW7$ZAc3?~&uDVfk_`BQD^ z?}xet1mTi~c^go=Xffs0po}`nI0G%9vE5ON=ULyww2=TT(%D}u*6f=^Ubs}fInGTH!BxGL=dLq zTzV*Ro3&vZN7~jYZnvZT(S*t~ zR+qIjsO7~*bTOnamFhJ=`swI5&L7R!Ety7%i%FEOClb0>N?pjgY$T5mlPMS#LOA*VFAY?W=uP3OQ+Im65m`5 zz3g4ho&%r~ZhZ##qE>-qOCl?2*uNH&IFsLBHIKernfY3%_tNBC>}MNSE^k3f-VVd- zkq4_rv#BE5c8iAzTh;kFK^x^4k?%k;-s1C-A4Tij=Rxrqp5M09da5y_`>72crQ43h zTsE;+*e0%Q7jM&--iS~l=WVP{jPxy}qN{sHM=G`62rF7QiWBH%CP-lf4!iRWcturK zksW7LKvw3?T?s3M*KtDo4{twe(Kt+4=9>sJ@3HXDGWRAYeSOoS{z5pQgyT#|wkHpC zBV6}=&klFsK3|OI;KPYK-pJJ?=;IC2S9~Ln&AD0OxzKeXkT8cLbt;1!VO-S_!d_^} z?%$G;kWwrL)*QN27sq!) zd~h#j#A$*>Yn0ARRkcw%|D1Xnn_ar;EGL$_gqC*B-Brc<#}@kx*|}?jxz|9vQ8-I1 zE^3pvU|Fx4TL6#4J(tF*oS3w!+F5jBoP?p)t8S@2b|@%0J+M_3Uxz9!sj{omq8YP9 z3EE!pf@bm+o?2Q-bP{71B%umAl!i^JtPUgC-kHBj1;(U;!F(U-^J4(QZ5;=i9R=lU zn{Da{$C#(CNvdm;>c`2G*CcD}-RAMXHZF4MbH65unCj1TTz0yyWC8m}9co5%mAl#M1?bAbr1n*XBG!5O zgHU#<(F7f9J~N!=ZQo3LJ4(`_^$AG~>}nj5dv#M@J?aUJE!A}6l!=VqP^jg2#boZZ zn79TW|#0u@8^Zus&Bn{_&9w(_S3&5m@jP>o&IBvwloe zMv8C-#@9h*Kko0|8eWH zcYXhPsCR|O+}_Y=gwJsv>KP&T!euXL+V}E|>C^>7)G;OO%uIi;@och>dcl_vpV{YG z+EVfGf@K9>>Nj<8I&+JDZFs2eYS`lwHsRnT?Zg-EqVx!~bz70v-H!Sk&QNqHzat3+ z3eee)yk>v5QF`}n<|W;?Jh*lf^IX%=pQ`6Zz;<{QzkRB5GhTR-J$Gr;c0e~%c>$Gc zk#_qeO-j6_U7!bv=tG8dlWu*4AtNNc^o`?xhAwB`X+K_=Vw7xfXQ^wYaQ{H@vAZq? z$s{GAqCcOKwY>FUgVfL+oZyt-^LJA=xvWa6-^F=9+I8iL(KZp&W@d-jp%InfD-1Zb(X;)J)EF0ALL-@PsU|VQE&PA!0te61n@>+yukSMp zie_LOwzT0jic6)>2EFE6*i?u*{h&|#>YTIeA?J=#^B7*(q20ANDV2u-XAnCBSRXW( z^$osEzt#F~Dge}HyX4-=;&nta7LWviOI zY3?9})j6Zk?lZT=??<*Y}w4;}U9(_wrb8C-8^^5zshveA);yw^#V zZtwPI3`TTt9@u@c%yeuYZoVz<`?Y2%`&Wiz!Kjza`_cg}c5OZB89wbpNOx%boQY`r zjMZTd6~b8oHX(%5+nYl5q(8sz@5lZo%SAm z=`lB-KVRdyN!PU9$fgFi%cr-!Bi!BGxSM!rAn`olJf|~(1JfG_ErQUh=B_KsY^a-- zO1Vdwd#*Z_(~l-o;z*@3CF|^o^N@+6S0R{Q{!tD(TD2fYE(KeclpRqVDc2m=Q8Z#e zgCqc9bQ;nKk9_vRYuN>kB}J@gy=h2j!g-<1EGofxsb$~m3h}VH3}8*Cn>d~W>GkA) zXMMJR9|yneTP#&haTo74mpU~bH8ta=Jo>6*82X^;FF{QWB=&<(;Jb_wS7DL^iSSA^ zKai3~&&T@_MCSS?9F16t3np}B6Y1hM4*uMd>YX@?h=b0&AGN2wUstCBKOdcF-F!{l z{Iivl-WjpW&OFX7&ovX%kYM1&5)iyb25%HSZ4LiXlbUKa!u#jvHpwYPRD3Ypy=yvffG_lzey(Duz$jKOs|8GbF4jOl8mom zCR3WIRy&#hTC-Rk?_w*RFvdMR4bI7<;?0X7Twp)p=Busy7OvYcqxdR29pNPqlIfwz zgA;rQj~qr*wP5zip_z009fp_EQ~IjTNI13b>b(Zyxw76y40LXXpxwx5{jJz=4QJV- ztpR@|>hrZlyAi>wMd7)BV$1jhV5roJjgBY#1F}n?rTb`rhjA?9e{OEYu~tjQP141A zn{k@BNu?X#Bfm{*iD0_U_wKv##0qb#GBW4F;Ttw4;STG*qiIE{cH#bvEAlno`xYru z1@H#{;=9p%<{{ACiEGaqo0ya=Ohkx0-bbZSHguOy#)H0XL{e0u8VeM@=7vd-;#iV2sc)j5u#>?M(IhSOW!v&7A5riG>rA8HR7;CBheg8U1L zpF>4-Rss22I+&Ct0~{lvcyVbJGc^#4q9Wyc_?(SFp979b^k32V!*K6Z#GJH<68nyQ zviyqZleO?c={cn(ATcciduJecbNW^V^0=}+XvZZ8InHpeWDeSzy8!b@V`GZR#(i$1 zV)79r(L`F`I=FGgt(ddmg?w6?pzGQ{RX2hG+Qbi&K8s#=9oC$yNBpE6b{??g!oUAG zS=1}b`uz*RBjiO$v7^BLb7+jegurIH&xDQYxs?Cn>s8(U#)QF1WA}7T%H- z?WU$2)RZtENYHpvT@CpCspZ3Zs5FJeBjyK}rAUGW?SENiDS@f{!IqshgO} zlIje7by>PT`)0LI+A~!ym_c9;DM>Lc*&1!&Avf?fUoIG;03_>viT|ggYHDjT&pn8H zy)-z!)*kN!XQq6gyV|#HT5f(mtxQp<(yp;xyzpDa0dzPNy0zY&imj45@=hJDMYO8~3YS~Rsm4b|GCuc6&6h_H2 zr1lYZiT0dO@pl^NF6Ija;g#=YiR)Sco?ietcoUB?k>^_N< z!OjXr(t2sus00&CJ?xgBxC{n$gRYyrF{a4y)ldg&^Tewg36zttnh8*B*5kL9R{;)l z=?0xl?(cHgxq#i?6BtDh#qL`b%=KiY)w+E^r*p7!`G{)*fzzZ6PZFhVr2X>@V!AxCK5AT)@yoQ#c=wVW-O@<8f_K1F?;38VpI(M-;Zg+03 zhtpLrNZtq1_EglyAnt(KE@hovsuFkX8Z3#$Dg$;(6h!DL-xnY%t$1TSI=%xc*^4Ph z5x1ujd6iO@JTc+CcVNwRM=~9HD)7S0rrwe>vwGL#GWkY!j z!*jCqURcP=XXm)_@$eSNPs-KH220jrylJ%(LMq0`iI7A8sJ`!5doj~b}*l~)^iM5T^6APLy? zE47;V-b32X3}}a6tn;bpR~}>?Ke8JqjYtB;%6}CVtf_!q=tF-D477#$9y=RfenL8} z5eO{=M>~ayI+T}SDyq~~HiT*jsR(X_x(GQ4`3M~l24Wab%q7+ln~B}T5#mW9ylyF_ zl+Eb1?g=7d8xj^E(zQkCr zA(s#d+8UAew73eBH#m!+n{W%a0Uo1yhLJC5-D_fh@{ba}l+v=A38v6910(a`Rg!Y0 z3oe^huCVe&R;W_dS)H>mmR^I)ZdjcrH7t@XX ztI32~OsmU`dd#lh^)l{MaIcbw1)f&-s*X?X`MHDgYr~p@6P2qxCGwTVU#1{A!gUs< zt9acdsaDiw7rntWZmaWadrqkswC0)?-iSi+2QfdGVL&nmQvPDzn#J}G1S6+I>Dr^~_ zc-sfhB~xM~Z^V}oI$m$mIK|6v5n1}b|7Z7^W)aRE_;RM#Hc_iI26i%F#Tb1VJK|7^ z9~2mU8hh^H@dv#f-L5{^5!~(}cDxX+J{=so`IRKeQ*F83--8g4a3~nK^sas}|MH!_ z{YmQoRSqWirJ~h}WK)l|zm#cJB zD()+_x+yEFnIvW}d}Q#i#m_t(_-~h&t=#m{z}s7Ix7#txLFq2NRl354+;Mc@=A~rd z7VJg64w{bMB`xZkikpO+>ET4YAnFpgz%m)IUQelZ24 zRyW@wCOr?Vm`s=JTGKEFCAS~5+aQ=mvIYUkDmK-Kr+~NuHpVDx23(uR3ScA|=0?l} z=|*tlpowj~+S4?=g)tzRdW2~u)j-oQl*)+`$v^ymXR%$ik(H@yd~Wz5+G!DMEhVBa zba^|8=hcLh?0$^(C2eXwqrYbZOSILBGyvv-x~3pnWc(hR<_)dha0@WOvjFP8T6dpE zr!wEfiw|b!>GxO#y6SD9VMc3i;&nRRl)d_27F%GMH8$B{pCc~0VZH8o;*}3>SlO5U z>Tk~aDn11x<@N~qxd($IrZ<`L3689c%@%s(#iUH>{s!DUq!m#*sf?!`-Qq>Y0je?1 z8{jO-*tr??ZuOI2tLjX2<@-OW)c~6r?)#?$`z_=RGv9}t8p7V=LW$Q}rU7LJuoe&m z6a~sC=vdKPu?RCx{6tdu@>0AMnfDH4m){tsWsKw&+4JV#Zaw$Xr4cKg!+iu)Tnq2R ze>Q&m!#kJR{7DIg{9nOT(lcABWwp8RDx#BgKU!72YsmM=;^sTYRCS6pQ-(Pt@^&9F zDSnm#LtHVsR?TK&e{nr`ZE+?t>JDRHrdl*IFT_;bR5cc)kW3Te38Px%UgMV|FVuIG z$E11{87Hh{8CH$R)Bp#Gbiqz%D<<=j5F_I$Yo*AEUR6*P)ZS{MW@U@#+fuQ7L*@dyUxxFWEL&rdraR+dwn#$<wv89U-o zdOj#H`ZV_3!{ZNnJGymEh!i|lyCkXti83wBJ2!|v=s+n{UMUfZUb&$ZC~Hvsdw}Hs zA?rkU2@)bym~asyMTv_eBCBODVOq z(#t5b4rPT9#vwulE=jouO$P-Bgo{T&kC4cR_b>m!9Gf41KXowa&+#Zpgt+9%DOTBJw>w?~w`uXVrH0_- zY0*O^$4o5-9sv;vnQIEaNJxt-z9#OAvd{Z+heV>3`I~=u%al@PGmHuLKwrzqOw7zI z%*t#`#)Bi+;EMt;5>C8{poWA)l@1aMCsZt`(t4Zic2rAU_0-=p6)F`}uhU)!4Pg|C zTAtEm>L^KgK)>YT_ow zcZ_R>OQ);rh<`Tabs&T8*Ra-jgY5k+f(99W&a;g^MVL%J-xy`u`Ny*vFA$&WTn>NA z8EQ7nwJGd0Qu6I!_4BC{Q;_ zf8@3>PVtgdR!ypW>-pZJois>Qnx$2G93{$r zdN%)~^;i*i4AX|E5VCgYTPs?;D%`R)&_WxX^)^`16%kfJ1dgVlp>M#LIcxTuxl7_m zWyM+qL-C8_$%KiKB1?e{Hmhgj6%xlwDr#El(c{v2>-L>1p?DbzGJAMBAOCC{D^<3_ zj%=^Holh7^kW$hzFlfSp4F@hfs2Vw*K%j3ufgw<55@(IIid5L5k%M1Ef+(%5?Jt~3 zi#8p)3iRvsuEOO;pG({I$QRl82zCM<3RzrPRM zrx$l)*nkZ<1TO)Q6OD=Q#_{Bf9Oat*HhM0%f9=@g<{dg;x4R1;7zMhpbWRrp9}$w| zsnU*N=XJr@fJ5*S0Ga46=!*BoCrL7VQ<(BD>_ThQ4&yJZ(M)$y*P?a1j$N+%oqH6L zF3wS5z=n$eDCtM>b=~`V7Pl!k;ujWIa!QagiNSYk^ zN>!-8_hd zi}k`gU!rFgNr;<{M!|A3$#Yply{Qkq`33?&>FSF_zP<^)1BY9 zXw%`k-2DJBsxWmyKLj5UlH{q6sqtwyx{4&1bZn(J>v=l*Y8%`pzr2}8a> z7V?3O5IJh}1e1h-K}0!6PRKRFN&IST*e+8Jaw=q&_-y}L%B)7v;8rzacQ)@beo4)F z!rzpkG%M^;?wHs!`)3Ne`3EM#}snU)&O=*)W7vYM4FXDN$Wn3NefZXF9hOW0IXV7(ipO4i#hSa?ea6W^|J zpD4YS3zEzB#UPu%^r(e}9NMPVddx0M)p4AwWl0os}lFXeu=C;u_<}$)WlPs~$ zAy?eZSY4Ko(H>Gy(iNpn&L(Mj8q)swa&Rxe6hZ&8|6_gdf};k-8t3`D_JVDm`@htAsn z!k^vyxLrX}Nm&I32S5}Wfn37T!%>A%n1oqagjLuK8!;*mF=qT|mW*H6x$JOTShe=a zLh;l7rsdlS|M7nRfonNDfk+}#s5Cl*$zpT3Jib6E5=*33TVpN1fS}M7x1Xi@Yf*7Y zX`{08#!Z^H-n7}l``+-nl2V{+^~1ei{oY1JrEHU6f(s#}&mK~l{@dl-+4T4pD#!FmaeqLTtyo<=B$8quC|-&l)JT>5 zv@#{Z;b-h)*Bndl_&LYi-?@Mk^cIeekfv9%4trJ|+cO<#GM z0cBF?Db2Oxg}}J6t|A@~q_uX|Sk{M-vjM%oTcb9~_?j=@V2Ieg*=~b`tW@T3X{=s` z5MDvj6$(*q7U*clIM%T*@WL0n)WL@ye(B3z?&xDLfBY4Fs4QLRR5Lp!Dg?Na6ZGT=Dl)X-8?Ofd#15hF0^4cO?j%uUG1TvpA$Imp%L&|`cssj zaw(>O%JX{oBkgl)0LfmBOsK+_>EubvPUK7tNfTc68f2f-8YKc%Dx>m9;@_Ra3C!yj zO;EnK6D)%YK1V@W#g%>sMun<*++V+b@>sE^YF*8Sx=jt+np)a+bad_NX>i`hm}COr zf$d@tC%>)^j=iQ4jbA5>#=jGvEddxf9BYEA6A%({B7zp0SQa$l#E6q1NeT!U1QZOM z927JREF5_Xyu={8fgZ(!T;*zWJ5H>!XrPRTIW#O8(-AX~4NCMraycX$&1BCS`JP%j zWEjE)zmDjqJU0mr8)&Gh42Y^*!C4DVOa`#YV{?GorU~UIG5ot`Mrq)JGbXgK|B5Op zNZ=YL8TH|&9UpG^1YzJ0*zr%$ilUO<^|Js?O(bclvT!64mblLYT;GLlTE(G86e@`r z@SpMgfhJ5ve7-TC*iDlJo-O__b=&(uzk)so60CiS=qxkMYQ)EQ8C}o6ehaMG9SOUA zrS+OkSN5@uJ)!Y)P2(N*@}g}b(N0ot*pS$#K?&!L#Fq-L&5e^J9Vw(z2ol6damDms zqrPh87QcLx;{W+wA-G&RTTrxVjhH zdnalYyVELWc;3bLyPYsnPTt_{O|q)i+MVslepoXuDK0VN?&bgaBXu6`C9;p3A9U~e z8xvC7l`2}RtgSpF6&a+T)fNM*Tz1E;w2oVSEisar$W4vS^l#g22NP&BI_R)jc~!Z! z(ng^X@v!3|07aTE8VH|0Ic2c7^Bi@QQV#h&VX(P|{DLqf8cUFtQ&HE_L1Gz{x^2U~ z0`ZC2CjVq1su^3pW>#*~IrBy(m97&Vo0uF3rf1t;#MzA3bcz^;BB!LLiv=KEkSHA|n7q6re{u z5Ka~XD$s!gJm4xK4B$a|uMEh8@=19J>kVKg+)xU9^cX)!@TxYBf{6kn5b?!kc60QC zlW+q{pH%Hp9U{BJyR$l89D9)dZ3#~e%6d}WsI4zhdP$&X@4Ka3S;k7#$V)ZO8?_?S zth`y+iJbQ&oY%!7D%h{LQbwDZrdcv0GcXCzd%UL-MbJ?C{<b6hBAr6I)$p%p_m4 zmA^Rq?_PCdz5D-zZ}|HR`)M#fb3e0y5BciA>bFm?g$Z7N0B>&Ju#QL7NAh?a<)yL6 zL^q?-aO+X778;R;R5g|%3ZcDT{c@JjTa7qBPgYYpFP-nZnNFxjtT3hCj_Lp>#NK%A zU+oVuFG9`T^IFd?ZnRbMwAc8D(V3-L24+kevLBeMewV&OufyNO%VO=&qcrGcK+u00 ztwp~baNZ;t3{9Fp{*CbBI+IqfS-YiH;(}5bA&5VFrrgb2(!f9cp*yn;5{5^HvPb-s z76$_V3q)?7W?#2mxpi(#=sOS_-n-p**XtAJrW9WA}4bXcG9CibwA&p8tPlrA&qOuw;K zvB--Z&Ma`eHGRUPdDzsU5nblWM)DB zomVzajL#yCRpCwYAH)w!JKC{^yWWJj#QuMeJ>R!3PM zYg@AIDR!jUnQBX-BZZC@Iacg=i8Ix0ZNB;v8cS&p(-N#HycvY^A;ON*t3GR3`V?knm3QXVMn zXO*2Ob+DH81>UYiABK9BeAlGqLQY5YN_XdaM(*lfe!p6u&8W`e2lmQXp69JGkU5Dj zk@+B|a%U2KN%*cXPaqXZ97ZzcC=>+@nlyRJHn5sRWbARUG5Xdb%)|uTBspU{DblsVCCZztx}#$(VwxghuKVgU+P47;LJ;=rVcC zJ{CW#gp|Vr#S_g7!yBs{j*mQF1$I0?LO8)%ac<0y`-5DB_D^VxF;m){v8;OgzM1f* z(1ysi=#JEk^sIbFA*+~E$*UIB7S&4{fo9pDXLy})w@Hs_ug$RSh-K7i+&SrK#q+9{ zHE$cfFZtc{x8;Ak@AjeK0qH^6A>puiL^>)TQ;w_iT11Z;7OZt!!`^hXoNZUf-SzbR z5wWP&ws!N;cv{}Jwxf59uDP#spnIryq<`#kxc=NOcene;!|U-HA~ zB^@jNsiCE=scp%!zpK)7IW<)%YMt#rwyQ*R;xHN2YE-}d>m7)xYyY=)Tta-I6Vc_F z{7a|VEsKULD&Uj)*c%)!Rh_0m*JNlhS!^9wkttLKMVh3Pv?vyss@^LfA|0W(=whw!(hW<+JblZ=go~jt(}-c zS15dbfCIiHAPoK?KscgNfCxml0Fj4xe-I^erp2O_cZ!qK<*tAtiUM4l&we82V1rn( zW{DH$ym(dhP)&7nAeREfgn(4UxPUao#DH}8!T|SYhmjiJR)k$S@G}8&;THqs!OsTB zM@$W94L=sprb4H*eHGpa+)%*J1sDdu5MVgGIKT+R^njJfUIA9Y7X++EGz+i>(Kx_b zM8g2Q=9R#&jb8@*tk11pO3662P+}iy1s0Iq@Q1rGot$ThZiAyek?4cwaOH@S)fb;N$3x zPw_1c^xbza`v=Ci_!+;`e8Bzyi|P1_U3C1z0RaDRd%gn-M1_e5Sp29s2_W`SRGoy7 z3yM0E2#Da1x~UgDmL%#=Qn)4isK1QuzHDb!tMYMBiRB>e$X9YZfu%)JhwU?Pc(I69>Hpc15ssSA#*T>P8=|YV&xnr+>y9F zN2zcu?#^+(I}!KhBvnq`OZ__ys-1}ka~8DAQDd&a=6ZCQ8>qV-tL6?7o<{q5hLV>t zYhK~$byS`=ka`={=N+ux$FBMC^X@m8KyU&O%$PY$l)L$v<@{hCRG1< zn8UPsKZOYk+O8Hm>@(moH{ncp7MB3wRon%H&vq}vHv+zR2mle-;hIcD(lKRCJOc`z zc&`w6D+ySNRE#SF+at3$3y7RoEq45u@h$f6_#Z!YnaBgwe9Ws5onj^EALuQ_pRD#w zlIqk^)TD`;X3aFTXtAJ8yG5P4EbGx@)o=Z_;S5x!6*E@PqxgfRQee!_0qs z7s9Th*q72F=|s~^U3X>}E=N%YlYgtVWMG7#Qh(_$NWHUb*`8 zDbQ~~9xSXvI72dw8Ixtggc4Jxl$tT4%$zypmMlfZ7C;J02dIb{Bpy$avs?(A%mY`h z46hIz2M86)2oe&WFky@(NPsUbGQniY0+KD8xm>x3 zK zJ&$nF1DFtXUff`ChEty0erJ#~=qU^5i%aprJ@kKnXg^WEv_k5Re(D!bC{sQGFa|Oa8S551Sw)zco%_`FfKWkfRr&UDI0+_ zF)RLZkVQByu}wgFa9U`af%Gx;A@0M9Pe_riI#WThVkI6Poo^iU)T&kE=hqMr&=M9_ z*REYtL`2&!e%1BB0~Ou6Rr_}oR_+1KROG%M(EiVG31((0i~mO^2pTJ^v;N=@ntFL2 zE>4^T8yngmkvKa$O1$1yB}kC+l9vSgO_bVNp#^B-Bm5vqN*Wn5GAM*%@&d|~4N;+D zj4Cx?83e={E?icd4AO;; zn&6E5t@)UUgFN`~Wg$Qy9|%ZCksKU2io!z3fRODNTOdT7mlw*%Cm@qIdteXl1Avb^eA!T3_V#$kfAOu40r@3K`LaY%DgHqYCHe2ERR5BV zT#En5M0fO>G%YW^h&DxP~fK zR#dBYFCU+Z8a4i3KtQ>hP?xBn5+&rC;|L0ZbKSLu3m%U?%3x*o%9wUr! zmr+K!+d>PSx5N@>EwjuS%Pn`#Dy!qv9c3{GtEQW-ZmFd%>Fj&&{`nW%%M8D461*7q z&Wq#3$x*f?GthlL5Vn-D2>KH!k3gzqeR2Fjw-7p$x4OTeAs#-1l za}Jy3_pz?n^HTxThlX~nEAT@`k(_UfS$zzwD{}4Z>naxLz{g5uf~1Ifvgf#M`*MCSk8&N=!VJGfi+hQPa3|8&tJ#J-<^G?{1LN+&3l2_ZqoQON1tBlSPKvF!;i2CKNBvBl95f4i)EPUHkiM*86 z@uCehkzUnFp6NZ1D7l4a@UKV+uWfBjU?5RqCV^*~`ReecPZVu z-JVPZc#Qzhb&;9&tOl(<#Qh_puvwAvVEAHjlQm})*~AP5z2%$bvKaMvHd1_X6R#Z8 zhl-KI%L;BbFmUK$g_>xxq})PS$Fkz|5nnI55u{wkS=zy#kE*wsp=_{}}xQBjygr*3C%`!aK87ZL*qg{=s20qVlUxsTD# z#g)dF9u3Ub=YtyHLA%%1QjXHT&w4^3fIINXq)XnGlaX4s(h)hvC407!2-(usLZvX~ zkeq|bb`uM=?DKu*%pp!}t_LG{vSr{vtqxRdFv@8mx^dW?Txo)W0jIVsMp{*_g@OeM z^oNJmS~NCl=A~bggnYL=zrW4?^y1K4b_gy1-1*Z*`3MV{5{8T!U$c72({N=;DF|M`6?+4a3T5C!r7(ykr_%L;q=w= zwfKLdON#${ju4N8;h*t7&lqvzG+dtNtnXCorj@q1X6J3Jc>xN}6$09j=+6T(``K)xyaT9FpUo$qZ$XEDQisbq1?&19Bys1?sM`PqGDlOh*Mus#zZVnmsrgR81rk4;`+CBlU^W09{C zFo2e5!Bk34U>XKhKwHE}v~FECl{Me*(BQ5X);^?@82Gb~uZ=d3wKbnJ0R;?Fp641g z8*7U-5EV|{UtG8cYQfTFof3xD6OZ+bj_$ve3|<&+oPo-{>w$gS1`Lytn{jUC?zCx- zM;x|Dek%3yhzc4%Iuh}Y#d=eD(@DRyP`lq^zrrmNg;&kGSUQVvcc^!DXm;*XQuf_b z=8a~IjI_!1@%q_k&DiT_HQv0_xhJjne`1y~5stIx6F9Mx2Jpm@e{&}IA9(L)yfWw58h-OE&NtCvsgQxEFh%_RGuBF215+joR&4kPx&Vp(w zWkq0S*^-#+(?jC&T=&Dri{otoP+WGh2*Kq!1`GQaN1eLi6oy1Wg(z^=Q*=044SFPX zW6MAvGa|9UnYngew}oR&ei2|BI}z$$4F2OB4wJr^famx)vfo7MhfQ}*NP2`%Oa^F^ zo(k8L&WQM_g9)+I1!g2p?^sY}X0jr3j%7>AylHyK07TRn#)lyq5h3oubT?PQ9_oJ2&B=x~FXj*N7#1Aw#NgWgez2`Rt_CY-o60 z=fo>iVm*rHL&?hY&?;K~H90(Tg!f1C$4VIvOmGGR(fmZm@mxKVN497s!)lzQVadOL z2Cpagnf!I1FITr0#3+-Dleo&o7b&Ek9eK6LF?aVyt7TeUFtk6ik5V$MyfRVrtlp)S#W*ii_ zbHvN*!hO&nZ>0=myuaqtRk=bf0fAS~#wU=>Cl;BS(3)H}qDE3cVvRTjyr3y8AGd<& z>Zz(LuuNJlmcq|oZ5ZY!!ythJ>T$hPmXFcdB1@T4%aTaE>SH09L$vflBo~v|WMnNR zPL*Xd1gRw7OhC6L+2EaAaO#GZ@m6F?^J<8do!oq zy|ZTBc{drpkJw@`pp%G1jgoVC?Ro1Gn}f5uGi)_MbJBOivgHMNzlxN}IAwJ*4S$l3 zN5=YRgx+Hou`A-T(+7Cc)qN8a8i%E@hG83=C!$q%Pxg64x~7h*!5;m{(|2HG&YZ4g z@@`Z&u}@|TN#h5V_5yy8Ku&{nF-9mTm0vyHj;%Q3y%xYGWt&nq!liRY8@os)QnoE{ zTIS6Tpt{5o6=OV2Iyx^mWJQuu?S$UuB$A>bltw7T+akW{ABlB}j3Ii{#zxH|>JUqins#n~ zP;T(jDxO&GMMlZX`czW(d>NIM6wL5`BPAJp%nGvgUjZUld=qYmg7*r9TNax=EE>$l_bgMG%-taSIu0vfFEbY!8 zW|)(gPz?$0oA7e6LB>2XiF%RA;0LU}K6g_v%`F?Jv6D$1PpcaU;O!-iXsX2|cNA)A}4=Q}QT{F?Np2oob4) P+l|v+z9Z!Z3+RACJQuc( literal 82304 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 b5V+hK^(i)Nb4C59r6JXeca84r3;+NCVuN@v diff --git a/pkg/arvo/app/landscape/fonts/sourcecodepro-semibold.woff2 b/pkg/arvo/app/landscape/fonts/sourcecodepro-semibold.woff2 index b2b00d64a52e97de9a166b26a92f4ed8ee3a9c83..3a24fb6ecf7a7b3d0f710a97d0d0be55386f68f7 100644 GIT binary patch literal 77380 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

} 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 literal 82624 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