whyrusleeping changed the topic of #ipfs to: go-ipfs 0.4.17 is out! Try out all the new features: https://dist.ipfs.io/go-ipfs/v0.4.17 | Also: #libp2p #ipfs-cluster #filecoin #ipfs-dev | IPFS, the InterPlanetary FileSystem: https://github.com/ipfs/ipfs | Logs: https://botbot.me/freenode/ipfs/ | Forums: https://discuss.ipfs.io | Code of Conduct: https://git.io/vVBS0
SamM has joined #ipfs
<fiatjaf> LaPingvino[m], why do you need to do completely away with these?
<fiatjaf> LaPingvino[m], there's a libp2p webrtc transport already. you just have to plug it.
AkhILman has quit [Quit: Leaving]
Adbray has joined #ipfs
xnbya has quit [Ping timeout: 252 seconds]
xnbya has joined #ipfs
jhulten has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
joseminao has quit [Ping timeout: 252 seconds]
lassulus_ has joined #ipfs
lassulus has quit [Ping timeout: 244 seconds]
lassulus_ is now known as lassulus
clemo has quit [Ping timeout: 252 seconds]
joseminao has joined #ipfs
tombusby has quit [Ping timeout: 256 seconds]
joseminao1 has joined #ipfs
tombusby has joined #ipfs
f4bio[m] has quit [Ping timeout: 250 seconds]
indefini[m] has quit [Ping timeout: 250 seconds]
ryco117[m] has quit [Ping timeout: 250 seconds]
ryco117[m] has joined #ipfs
f4bio[m] has joined #ipfs
indefini[m] has joined #ipfs
flip[m] has joined #ipfs
al1p[m] has quit [Ping timeout: 250 seconds]
electric[m] has quit [Ping timeout: 250 seconds]
fridim[m] has quit [Ping timeout: 250 seconds]
HydraGene[m] has quit [Ping timeout: 250 seconds]
veunen[m] has quit [Ping timeout: 250 seconds]
roger_sr71[m] has quit [Ping timeout: 250 seconds]
khernyo[m] has quit [Ping timeout: 250 seconds]
guybrush[m] has quit [Ping timeout: 250 seconds]
brainiac[m] has quit [Ping timeout: 250 seconds]
stukontruk[m]1 has quit [Ping timeout: 276 seconds]
electric[m] has joined #ipfs
fridim[m] has joined #ipfs
roger_sr71[m] has joined #ipfs
HydraGene[m] has joined #ipfs
khernyo[m] has joined #ipfs
brainiac[m] has joined #ipfs
stukontruk[m]1 has joined #ipfs
veunen[m] has joined #ipfs
al1p[m] has joined #ipfs
ntninja[m] has quit [Ping timeout: 276 seconds]
thomasave[m] has quit [Ping timeout: 276 seconds]
ntninja[m] has joined #ipfs
joseminao has quit [Ping timeout: 244 seconds]
thomasave[m] has joined #ipfs
guybrush[m] has joined #ipfs
rabbitface has joined #ipfs
thomasan_ has joined #ipfs
r3dfish has quit [Ping timeout: 252 seconds]
rabbitface has quit []
dhutra has joined #ipfs
xcm has quit [Remote host closed the connection]
thomasan_ has quit [Remote host closed the connection]
xcm has joined #ipfs
r3dfish has joined #ipfs
shizy has joined #ipfs
joseminao1 has left #ipfs [#ipfs]
<Icefoz> So how does bitswap find blocks, anyway?
<Icefoz> Do requests for blocks just gossip their way throughout the network?
<Icefoz> Or is there more to it than that?
fractex has joined #ipfs
}ls{ has quit [Ping timeout: 250 seconds]
<Icefoz> It obviously doesn't eagerly send blocks to nodes with a similar ID, like Kademila does.
leeola has quit [Quit: Connection closed for inactivity]
}ls{ has joined #ipfs
shizy has quit [Ping timeout: 252 seconds]
user_51 has quit [Ping timeout: 250 seconds]
user_51 has joined #ipfs
<Icefoz> Looking at the code it SEEMS to just be gossip-based.
<Icefoz> Oh, or does it gossip among its DHT peers? it looks like that's what BitTorrent does.
shizy has joined #ipfs
kst[m] has quit [Ping timeout: 260 seconds]
kst[m] has joined #ipfs
<Icefoz> ok, reading more about the BitTorrent DHT gives me some idea, assuming IPFS works similarly.
<deltab> Icefoz: if I understand correctly, it'll ask connected peers first, then try the DHT
<Icefoz> Makes sense.
Steverman has quit [Ping timeout: 252 seconds]
<Icefoz> So in kademila when you query the DHT you find the peers you know about with the address closest to the hash for your data and ask them, and those peers return the data or keep asking their peers if they don't have the data
<Icefoz> In BitTorrent it looks like instead of the peer returning your data it returns addresses of peers that have your data
<Icefoz> which makes sense since then you can just ask them directly.
<Icefoz> so I assume IPFS works similarly.
<deltab> likewise in IPFS, you get addresses
shizy has quit [Ping timeout: 244 seconds]
<Icefoz> Thank you! I understand much better now.
<Icefoz> I'm trying to build a system similar to bitswap, and it is reminding me how little I know. :-)
captain_morgan has quit [Quit: Ex-Chat]
captain_morgan has joined #ipfs
screensaver6 has joined #ipfs
screensaver has quit [Remote host closed the connection]
noresult_ has joined #ipfs
jamiew has quit [Ping timeout: 244 seconds]
jamiew has joined #ipfs
tangent128 has quit [Ping timeout: 244 seconds]
noresult has quit [Ping timeout: 244 seconds]
noresult_ is now known as noresult
tangent128 has joined #ipfs
metric has joined #ipfs
BeerHall has joined #ipfs
metric is now known as Guest60255
zrc has joined #ipfs
malaclyps has quit [Ping timeout: 252 seconds]
daurnimator has joined #ipfs
<daurnimator> Hi all. I just noticed orbit. (https://github.com/orbitdb/orbit) the readme said to come here for chat
malaclyps has joined #ipfs
dimitarvp has quit [Quit: Bye]
Ekho has quit [Ping timeout: 244 seconds]
tobs has quit [Ping timeout: 244 seconds]
tobs has joined #ipfs
Ekho has joined #ipfs
lidel has quit [Ping timeout: 250 seconds]
lidel has joined #ipfs
zrc has quit [Quit: Textual IRC Client: www.textualapp.com]
ulrichard has joined #ipfs
Oatmeal has quit [Read error: Connection reset by peer]
jamesaxl has joined #ipfs
dhutra has quit [Ping timeout: 252 seconds]
dhutra has joined #ipfs
BeerHall has quit [Remote host closed the connection]
BeerHall has joined #ipfs
Oatmeal has joined #ipfs
stoopkid has quit [Quit: Connection closed for inactivity]
datartist[m] has joined #ipfs
datartist[m] has quit [Changing host]
datartist[m] has joined #ipfs
r3dfish has quit [Ping timeout: 252 seconds]
inetic has joined #ipfs
r3dfish has joined #ipfs
dhutra has quit [Ping timeout: 252 seconds]
dhutra has joined #ipfs
thefinn93 has quit [Remote host closed the connection]
rendar has joined #ipfs
fazo has joined #ipfs
clemo has joined #ipfs
tdiesler has joined #ipfs
Steverman has joined #ipfs
BeerHall has quit [Quit: BeerHall]
tdiesler has quit [Remote host closed the connection]
tdiesler has joined #ipfs
klot has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
klot has quit [Remote host closed the connection]
yuitimothy has joined #ipfs
yuitimothy has joined #ipfs
yuitimothy has quit [Changing host]
klot has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
trilobyte[m] has quit [Ping timeout: 250 seconds]
trilobyte[m] has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
klot has quit [Remote host closed the connection]
asymptotically has joined #ipfs
klot has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
thefinn93 has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
klot has quit [Read error: Connection reset by peer]
Mikaela_ has joined #ipfs
plexigras has joined #ipfs
joseph-gl has quit [Ping timeout: 260 seconds]
bomb-on has quit [Quit: SO LONG, SUCKERS!]
ylp has joined #ipfs
dadabidet has joined #ipfs
bomb-on has joined #ipfs
moris351[m] has joined #ipfs
Mikaela_ has quit [Remote host closed the connection]
ONI_Ghost has joined #ipfs
clemo has quit [Ping timeout: 252 seconds]
mauz555 has joined #ipfs
klot has joined #ipfs
dhutra has quit [Ping timeout: 245 seconds]
dhutra has joined #ipfs
user_51 has quit [Ping timeout: 252 seconds]
Caterpillar2 has joined #ipfs
Steverman has quit [Ping timeout: 244 seconds]
skzap[m] has joined #ipfs
pecastro has joined #ipfs
clemo has joined #ipfs
kanej_ has joined #ipfs
Steverman has joined #ipfs
Caterpillar2 has quit [Ping timeout: 245 seconds]
yrzr has joined #ipfs
yrzr has quit [Client Quit]
<miceiken> Icefoz, read the white paper
joseminao has joined #ipfs
asymptotically has quit [Quit: Leaving]
lnostdal has quit [Ping timeout: 268 seconds]
lnostdal has joined #ipfs
dhutra has quit [Ping timeout: 276 seconds]
dhutra has joined #ipfs
mauz555 has quit [Remote host closed the connection]
mauz555 has joined #ipfs
mauz555 has quit [Remote host closed the connection]
mauz555 has joined #ipfs
pinusc has joined #ipfs
malaclyps has quit [Read error: Connection reset by peer]
malaclyps has joined #ipfs
trqx has quit [Ping timeout: 256 seconds]
trqx has joined #ipfs
tdiesler has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
tdiesler has joined #ipfs
ulrichard has quit [Remote host closed the connection]
asymptotically has joined #ipfs
clemo has quit [Ping timeout: 272 seconds]
clemo has joined #ipfs
Caterpillar2 has joined #ipfs
}ls{ has quit [Ping timeout: 272 seconds]
vquicksilver has quit [Ping timeout: 272 seconds]
vquicksilver has joined #ipfs
<victorbjelkholm> daurnimator: probably #orbitdb is the best channel for orbit
clemo has quit [Ping timeout: 252 seconds]
vquicksilver has quit [Client Quit]
random_yanek has quit [Quit: random_yanek]
random_yanek has joined #ipfs
Fessus has quit [Ping timeout: 252 seconds]
Fessus has joined #ipfs
Steverman has quit [Ping timeout: 246 seconds]
<Icefoz> miceiken: I did.
<Icefoz> It's very light on detail.
<deni> I have taken a snapshot of a VPS and now want to deploy it in other locations. I guess that I should regenerate the keypair "self". How is this done and are there other things that I should be aware of?
<Icefoz> I read a fair chunk of the bitswap code too, which is very heavy on detail.
<Icefoz> It'd be nice to have something in between.
<voker57> deni: try ipfs key gen self / ipfs key rm self
<deni> voker57: Error: cannot remove key with name 'self'
Caterpillar2 has quit [Ping timeout: 250 seconds]
tombusby has quit [Ping timeout: 256 seconds]
Mateon1 has quit [Ping timeout: 268 seconds]
Mateon2 has joined #ipfs
voker57 has quit [Quit: voker57]
Mateon2 is now known as Mateon1
dadabidet has quit [Quit: Leaving]
tombusby has joined #ipfs
rcat has joined #ipfs
Caterpillar2 has joined #ipfs
mauz555 has quit [Read error: Connection reset by peer]
mauz555 has joined #ipfs
hph^ has quit []
trqx has quit [Remote host closed the connection]
trqx has joined #ipfs
lanlink has joined #ipfs
lanlink has quit [Remote host closed the connection]
lanlink has joined #ipfs
vquicksilver has joined #ipfs
unroute is now known as sajokapolna
Caterpillar2 has quit [Ping timeout: 245 seconds]
Mateon1 has quit [Ping timeout: 252 seconds]
astrofog has joined #ipfs
clemo has joined #ipfs
ONI_Ghost has quit [Read error: Connection reset by peer]
astrofog has quit [Remote host closed the connection]
xnbya has quit [Ping timeout: 272 seconds]
adymitruksX has joined #ipfs
adymitruksX has quit [Remote host closed the connection]
dimitarvp has joined #ipfs
xnbya has joined #ipfs
sir_lestatyMQ has joined #ipfs
sir_lestatyMQ has quit [Remote host closed the connection]
sibiriahh has joined #ipfs
sibiriahh has quit [Remote host closed the connection]
ylp has quit [Quit: Leaving.]
all_spn77dE has joined #ipfs
lanlink has quit [Remote host closed the connection]
<dirkmc> Icefoz: if you don't mind reading code this is a good place to start to understand how the DHT works:
Modding has quit [Quit: Goodbye and thanks for all the fish!]
Modding has joined #ipfs
<dirkmc> Note that there's one small correction I'd make to your description: nodes make all RPCs themselves, they do not ask other nodes to make the request for them recursively
<dirkmc> You can find more information in the Kademlia whitepaper:
all_spn77dE has quit [Remote host closed the connection]
<dirkmc> deni: the self key defines the peer id so it must be unique
tdiesler has quit [Quit: Textual IRC Client: www.textualapp.com]
BeerHall has joined #ipfs
asymptotically2 has joined #ipfs
asymptotically has quit [Remote host closed the connection]
pinusc` has joined #ipfs
<lgierth> yeah the libp2p kad-dht is iterative, not recursive
q-u-a-n2 has quit [Ping timeout: 272 seconds]
pinusc has quit [Read error: Connection reset by peer]
nshepperd1jN has joined #ipfs
asymptotically2 is now known as asymptotically
nshepperd1jN has quit [Remote host closed the connection]
<deni> dirkmc: I understand that, but is there a command to regenerate the peer id without rm .ipfs and then adding the files again?
<dirkmc> I'm not sure I understand what you're asking.. you can use ipfs init to set up an ipfs repo
<lgierth> deni: generate a new repo into a different directory: IPFS_PATH=somedir ipfs init, then copy the `config` file to .ipfs
<lgierth> (or copy just the Identity part)
sajokapolna is now known as unroute
BeerHall1 has joined #ipfs
clemo has quit [Remote host closed the connection]
BeerHall1 has quit [Client Quit]
salcedo has joined #ipfs
BeerHall has quit [Ping timeout: 244 seconds]
salcedo has quit [Remote host closed the connection]
joseminao has left #ipfs [#ipfs]
<Swedneck> is there an easy way to mirror repos to ipfs?
<Swedneck> fedora repos in this case
platznW has joined #ipfs
platznW has quit [Remote host closed the connection]
Mateon1 has joined #ipfs
inetic has quit [Quit: Leaving.]
Mikaela_ has joined #ipfs
<r0kk3rz> the repos are just a bunch of files, so sure
The_8472 has quit [Ping timeout: 252 seconds]
The_8472 has joined #ipfs
<Swedneck> i'm mostly thinking of keeping it up to date, you could just rsync it but then you need to have duplicate data
jhulten has joined #ipfs
klot has quit [Ping timeout: 252 seconds]
gde33 has joined #ipfs
<r0kk3rz> yeah you will
<r0kk3rz> not sure if filestore works nicely with stuff like rsync
<r0kk3rz> shame really
<Swedneck> would be nice if you could just `ipfs add https://mirror.example.com/28/updates`
}ls{ has joined #ipfs
Mikaela_ has left #ipfs ["Leaving"]
fractex has quit [Ping timeout: 252 seconds]
bomb-on has quit [Quit: SO LONG, SUCKERS!]
r3dfish has quit [Ping timeout: 252 seconds]
fractex has joined #ipfs
M`mat[m] has quit [Ping timeout: 250 seconds]
jookovjook[m] has quit [Ping timeout: 250 seconds]
M`mat[m] has joined #ipfs
jookovjook[m] has joined #ipfs
asymptotically has quit [Remote host closed the connection]
aerth has quit [Ping timeout: 256 seconds]
danielfranca[m] has quit [Ping timeout: 246 seconds]
joshplus[m] has quit [Ping timeout: 246 seconds]
danielfranca[m] has joined #ipfs
joshplus[m] has joined #ipfs
dethoter[m] has quit [Ping timeout: 246 seconds]
trqx has quit [Ping timeout: 256 seconds]
joocain2 has quit [Ping timeout: 256 seconds]
asymptotically has joined #ipfs
dethoter[m] has joined #ipfs
trqx has joined #ipfs
joocain2 has joined #ipfs
aerth has joined #ipfs
r3dfish has joined #ipfs
Time-Warp has joined #ipfs
Adbray has quit [Remote host closed the connection]
Kolonka[m] has joined #ipfs
Kolonka[m] has quit [Changing host]
Kolonka[m] has joined #ipfs
sander has joined #ipfs
shizy has joined #ipfs
joshplus[m] has quit [Read error: Connection reset by peer]
joshplus[m] has joined #ipfs
asymptotically has quit [Quit: Leaving]
azerty has joined #ipfs
azerty has quit [Client Quit]
bomb-on has joined #ipfs
Time-Warp has left #ipfs ["We Are Legion"]
dhutra has quit [Ping timeout: 252 seconds]
<sander> go-ipfs question, does BlockService AddBlock result in the block cid being "pinned"?
mannyEf has joined #ipfs
mannyEf has quit [K-Lined]
jhulten has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
jhulten has joined #ipfs
shizy has quit [Quit: WeeChat 2.2]
shizy has joined #ipfs
<sander> ok, following wires... it appears that flushing the pinner results in datastore puts
<sander> so going with a yes
pinusc` has quit [Read error: Connection reset by peer]
klot has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
dtz[m] has quit [Ping timeout: 276 seconds]
M000graphics[m] has quit [Ping timeout: 276 seconds]
M000graphics[m] has joined #ipfs
jayw[m] has quit [Ping timeout: 260 seconds]
jayw[m] has joined #ipfs
klot has quit [Remote host closed the connection]
dtz[m] has joined #ipfs
klot has joined #ipfs
drumfreak13[m] has quit [Ping timeout: 250 seconds]
kst[m] has quit [Ping timeout: 250 seconds]
drumfreak13[m] has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
viperxing[m] has quit [Ping timeout: 276 seconds]
viperxing[m] has joined #ipfs
klot has quit [Remote host closed the connection]
klot has joined #ipfs
kst[m] has joined #ipfs
sanderpick[m] has joined #ipfs
phi-rjan[m] has joined #ipfs
agusto[m] has joined #ipfs
xMajedz[m] has joined #ipfs
mdrights[m] has joined #ipfs
rendar has quit []
joocain2 has quit [Remote host closed the connection]
joocain2 has joined #ipfs
mauz555 has quit []
jhulten has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
sethfork has joined #ipfs
sethfork_ has joined #ipfs
sethfork has quit [Read error: Connection reset by peer]
jhulten has joined #ipfs
FierceDeityLink has joined #ipfs
Jesin has joined #ipfs
aerth has quit [Remote host closed the connection]
FierceDeityLink has quit [Remote host closed the connection]
Encrypt has joined #ipfs
aerth has joined #ipfs
fazo has quit [Quit: fazo]
plexigras has quit [Ping timeout: 244 seconds]
plexigras has joined #ipfs
sethfork_ has quit [Remote host closed the connection]
<Icefoz> dirkmc: Thank you!
<xpitr> huh huh i'll just leave this here https://ipfs.wikileaks.org/
<xpitr> neat
jhulten has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
jhulten has joined #ipfs
xnbya has quit [Ping timeout: 252 seconds]
jhulten has quit [Client Quit]
xnbya has joined #ipfs
kanej_ has quit [Quit: Connection closed for inactivity]
Wyzard has joined #ipfs
matteoex has joined #ipfs
matteoex has quit [K-Lined]
Wyzard has quit [Remote host closed the connection]
<Kolonka[m]> very nice
<Kolonka[m]> (long time coming tbh)
jhulten has joined #ipfs
<Icefoz> ...
<Icefoz> wait, wrong channel.
roygbiv has joined #ipfs
sbani has quit [Ping timeout: 252 seconds]
roygbiv has quit [Quit: ™]
dqx has joined #ipfs
Steverman has joined #ipfs
sbani has joined #ipfs
probono_ has joined #ipfs
<deltab> deni: is there a way to distinguish where the snapshot has been deployed? e.g. /etc/machine-id
<deni> Probably, but it was only two machines. So I could easily run some peer id regeneration command on both of them.
<deltab> I was thinking maybe it should be automatic if a change in location is detected
<deni> In IPFS?
<deltab> or an external tool that could be run on startup
<deni> Ok :)
shiversRM has joined #ipfs
shiversRM has quit [K-Lined]
sethfork has joined #ipfs
asymptotically has joined #ipfs
klot has quit [Read error: Connection reset by peer]
Time-Warp has joined #ipfs
sethfork_ has joined #ipfs
sethfork has quit [Read error: Connection reset by peer]
sethfork_ has quit [Remote host closed the connection]
forScience has joined #ipfs
The_8472 has quit [Ping timeout: 260 seconds]
The_8472 has joined #ipfs
dimitarvp has quit [Quit: Bye]
sethfork has joined #ipfs
<Time-Warp> when you ipfs swarm peers, all of those peers are storing the data for your hash?
forScience has quit [Remote host closed the connection]
sethfork80 has joined #ipfs
sethfork has quit []
sethfork80 is now known as sethfork
ln-bM has joined #ipfs
ln-bM has quit [K-Lined]
jhulten has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
Jesin has quit [Quit: Leaving]
mistermonster[m] has joined #ipfs
zemHN has joined #ipfs
zemHN has quit [K-Lined]
Encrypt has quit [Quit: Quit]
asymptotically has quit [Quit: Leaving]
fredthomsen has joined #ipfs
fredthomsen has quit [Client Quit]
sethfork has quit [Ping timeout: 252 seconds]
<Swedneck> for some reason /ipns/litmem.es only sporadically resolves, while /ipns/i.litmem.es resolves almost 100% of the time, any clue why?
<Swedneck> they have the exact same dnslink
ONI_Ghost has joined #ipfs
<Swedneck> only difference is that the bare domain is pointed to my server, which is doing a 302 redirect to i.litmem.es via nginx
killushine[m] has joined #ipfs
Time-Warp has left #ipfs ["We Are Legion"]
Caterpillar2 has joined #ipfs
r3dfish has quit [Ping timeout: 252 seconds]
nimaje has quit [Read error: Connection reset by peer]
SamM has quit [Quit: Ping timeout (120 seconds)]
SamM has joined #ipfs
r3dfish has joined #ipfs
brabo has quit [Ping timeout: 264 seconds]
brabo has joined #ipfs
nimaje has joined #ipfs
rjharmon has joined #ipfs
SamM has quit [Ping timeout: 244 seconds]
<Swedneck> hmm, i guess he.net's dns is just acting up
SamM has joined #ipfs
shizy has quit [Ping timeout: 252 seconds]
Caterpillar2 has quit [Ping timeout: 252 seconds]
erwanou has joined #ipfs
pecastro has quit [Ping timeout: 244 seconds]
ONI_Ghost has quit [Read error: Connection reset by peer]
ONI_Ghost has joined #ipfs
r3dfish has quit [Ping timeout: 252 seconds]
Steverman has quit [Ping timeout: 250 seconds]
Adbray has joined #ipfs
r3dfish has joined #ipfs
goiko has quit [Quit: ﴾͡๏̯͡๏﴿ O'RLY? Bye!]