Pages:
Author

Topic: Foundation Passport Official Thread - page 13. (Read 6043 times)

legendary
Activity: 1148
Merit: 3117
June 22, 2023, 01:57:57 PM
I seriously doubt it, and I haven't seen any interaction between the two.  Both outfits have handled their forum presence with professionalism and tact despite efforts by some to stir shit and pit them against each other.
There was a clash between the two some time ago. Zach (Foundation CEO and Co-founder) even made a post in his own blog about it[1]. It mostly started when Matt Odell (seen as an influencer within the crypto community I assume) posted a tweet[2] claiming that all what Foundation did was to clone NVK source code into their product. Besides Matt, even the co-founder and CEO of CoinKite (@nvk[3]) - the producers of Coldcard - was spreading that same information on their Discord channel - that not only did Foundation copied their code but that they were also closed source (you can read more about it on Zack open letter).

I don't know how the situation ended between the two, but I wouldn't be surprised if Foundation (and Zach team) ended up a bit frustrated against this "attack" by nvk and would keep communication on strictly what was needed. You can feel that on Zach closing remarks on his letter:
Quote
Our team would appreciate if you lay off the character attacks and untrue statements. Let us know if we’ve done something wrong. But in an open source world, we need to build on each other’s work in order to bring Bitcoin to the masses.

[1]https://www.zherbert.com/an-open-letter-to-nvk-and-coldcard/
[2]https://nitter.it/ODELL/status/1651220101721358336
[3]https://nitter.it/nvk
legendary
Activity: 2730
Merit: 7065
June 22, 2023, 01:06:02 PM
I own wallets from both outfits, and it's my opinion that both are among the best hardware wallets currently available.
I know that Andreas A. owns both a Coldcard and a Ledger device. In one of his recent videos where he discussed the Ledger Recover feature with Jameson Lopp, he said he will continue using both hardware devices, but for different storage needs. It would be off-topic to discuss that here, but it's just something that I remembered now.
copper member
Activity: 2338
Merit: 4543
Join the world-leading crypto sportsbook NOW!
June 22, 2023, 12:10:18 PM
did I miss some drama between the teams of Passport Foundation and ColdCard?

I seriously doubt it, and I haven't seen any interaction between the two.  Both outfits have handled their forum presence with professionalism and tact despite efforts by some to stir shit and pit them against each other.

I own wallets from both outfits, and it's my opinion that both are among the best hardware wallets currently available.
legendary
Activity: 2730
Merit: 7065
June 22, 2023, 10:48:54 AM
It would be cuper cool to verify that Passport is reproducible and post it on on coldcard website BitcoinBinary, as a way to just say hello to NVK  Cool
I know that you are throwing a punch at NVK and ColdCard (rightly so), but did I miss some drama between the teams of Passport Foundation and ColdCard? Did NVK question the verifiable or open-source nature of Passport devices? Just for the record, although I am sure you know, Coldcard not being open-source doesn't make their code not verifiable and nonreproducible. Even WalletScrutiny has marked it properly on their website.
hero member
Activity: 882
Merit: 5834
not your keys, not your coins!
June 21, 2023, 06:41:15 PM
Really digging the discussion happening here[1] @foundationdvcs. It would be great to withdraw from a P2P market straight into Passport (or other hardware wallet) if this ever gets adoption, albeit I'm not sure if Bisq developers would eventually implement this feature. @n0nce what is your take on it?

[1]https://github.com/bisq-network/bisq/discussions/6726
I personally prefer to enter addresses when needed, rather than risking getting an xpub compromised, due to the related privacy and security issues.

Also, I have to agree with comments in that discussion which point out that address reuse can still happen if you start entering xpubs in different Bitcoin applications. Even checking addresses for balances does not exclude collisions, due to the 'TOCTOU' nature of this idea combined with asynchronous Bitcoin transactions; only emphasized by a full mempool with long confirmation times.

It's also correct that mediation and support in general will only get worse if people use all sorts of different wallets. By keeping the trade from beginning to end inside Bisq, the team should have a much easier time assisting in case of problems.

I have pushed a new WalletScrutiny script that removes all reliance on Just and still produces reproducible binaries with matching hashes:

https://gitlab.com/sethforprivacy/walletScrutinyCom/-/blob/master/scripts/test/hardware/passport.sh

Please let me know if you have any questions around that, but it should give you everything you need (along with the Dockerfile it builds).
That reads really nice, indeed! Much better than before; everything in one file, nice and concise and with one less dependency. I will try it out myself and also use it to debug my own script.
Amazing to see that it was already updated on WalletScrutiny now, that's a pleasure to see.
copper member
Activity: 96
Merit: 253
June 20, 2023, 11:24:37 AM
Pretty cool news, both Passport "Founder's Edition" and "Batch 2" are now updated and properly marked as verified for the latest firmware, v2.1.2, on the Wallet Scrutiny website!

https://walletscrutiny.com/hardware/passport/
https://walletscrutiny.com/hardware/passportb2/

Note that if you ever want to reproduce the firmware yourself you can do so using our guide here:

https://github.com/Foundation-Devices/passport2/blob/main/REPRODUCIBILITY.md
copper member
Activity: 96
Merit: 253
June 19, 2023, 07:36:43 PM
Could you try the latest version of the WIP script update and verify that it gives you the correct hashes? You can find it directly in the MR here:

https://gitlab.com/sethforprivacy/walletScrutinyCom/-/blob/master/scripts/test/hardware/passport.sh
This script is cheating, though! Grin Compared to the old WalletScrutiny script, it doesn't contain the actual build commands itself, but just downloads your Justfile script and runs that instead. I'd really like to be able to reproduce it with my own script, instead.
Yes, but the Justfiles are all open-source and verifiable themselves, they just greatly simplify things and remove the need to make changes to the WalletScrutiny script if the build environment or steps change.
That's true; and I have also read / 'verified' them myself, nothing 'fishy' going on, so I'm not mistrusting the Justfiles. Just trying to do it in a different way.. Smiley

Is there a reason you aren't directly copying the Dockerfile and the `docker run` command and using them directly to build the image and then build the firmware?
That's something to try, yes. The difference is simply due to me starting with the original podman-based script.

You would also need to replicate the build steps *exactly* from the relevant Justfile.

Doing that would ensure that you're using the exact same environment. If you don't want to copy the files themselves, I would use them as a direct reference, as if there is even the smallest difference in the image you build under podman you can expect the hashes to not match.
That should already be the case, no? Steps themselves, as well as the order of execution, should be identical.

I have pushed a new WalletScrutiny script that removes all reliance on Just and still produces reproducible binaries with matching hashes:

https://gitlab.com/sethforprivacy/walletScrutinyCom/-/blob/master/scripts/test/hardware/passport.sh

Please let me know if you have any questions around that, but it should give you everything you need (along with the Dockerfile it builds).
legendary
Activity: 1148
Merit: 3117
June 17, 2023, 08:56:26 AM
Really digging the discussion happening here[1] @foundationdvcs. It would be great to withdraw from a P2P market straight into Passport (or other hardware wallet) if this ever gets adoption, albeit I'm not sure if Bisq developers would eventually implement this feature. @n0nce what is your take on it?

[1]https://github.com/bisq-network/bisq/discussions/6726
hero member
Activity: 882
Merit: 5834
not your keys, not your coins!
June 16, 2023, 11:43:27 AM
Could you try the latest version of the WIP script update and verify that it gives you the correct hashes? You can find it directly in the MR here:

https://gitlab.com/sethforprivacy/walletScrutinyCom/-/blob/master/scripts/test/hardware/passport.sh
This script is cheating, though! Grin Compared to the old WalletScrutiny script, it doesn't contain the actual build commands itself, but just downloads your Justfile script and runs that instead. I'd really like to be able to reproduce it with my own script, instead.
Yes, but the Justfiles are all open-source and verifiable themselves, they just greatly simplify things and remove the need to make changes to the WalletScrutiny script if the build environment or steps change.
That's true; and I have also read / 'verified' them myself, nothing 'fishy' going on, so I'm not mistrusting the Justfiles. Just trying to do it in a different way.. Smiley

Is there a reason you aren't directly copying the Dockerfile and the `docker run` command and using them directly to build the image and then build the firmware?
That's something to try, yes. The difference is simply due to me starting with the original podman-based script.

You would also need to replicate the build steps *exactly* from the relevant Justfile.

Doing that would ensure that you're using the exact same environment. If you don't want to copy the files themselves, I would use them as a direct reference, as if there is even the smallest difference in the image you build under podman you can expect the hashes to not match.
That should already be the case, no? Steps themselves, as well as the order of execution, should be identical.
copper member
Activity: 96
Merit: 253
June 16, 2023, 10:47:58 AM
Since the WalletScrutiny review for Passport FE is outdated and the Passport Batch 2 build wasn't verified yet, I decided to quickly try it myself and write instructions for everyone to replicate it.
Maybe this delay with reviews was happening because WalletScrutiny was busy with stupid lawsuits they are getting lately Roll Eyes

It would be cuper cool to verify that Passport is reproducible and post it on on coldcard website BitcoinBinary, as a way to just say hello to NVK  Cool
https://bitcoinbinary.org/

 Tongue

Would be fun if it would get merged, but something tells me he would close out that PR. We'll lean on less biased sites for this, in addition to providing everything users need to do it themselves as we did recently here:

https://github.com/Foundation-Devices/passport2/blob/main/REPRODUCIBILITY.md
legendary
Activity: 2212
Merit: 7064
June 16, 2023, 10:16:04 AM
Since the WalletScrutiny review for Passport FE is outdated and the Passport Batch 2 build wasn't verified yet, I decided to quickly try it myself and write instructions for everyone to replicate it.
Maybe this delay with reviews was happening because WalletScrutiny was busy with stupid lawsuits they are getting lately Roll Eyes

It would be cuper cool to verify that Passport is reproducible and post it on on coldcard website BitcoinBinary, as a way to just say hello to NVK  Cool
https://bitcoinbinary.org/
copper member
Activity: 96
Merit: 253
June 16, 2023, 10:03:09 AM
Could you try the latest version of the WIP script update and verify that it gives you the correct hashes? You can find it directly in the MR here:

https://gitlab.com/sethforprivacy/walletScrutinyCom/-/blob/master/scripts/test/hardware/passport.sh
This script is cheating, though! Grin Compared to the old WalletScrutiny script, it doesn't contain the actual build commands itself, but just downloads your Justfile script and runs that instead. I'd really like to be able to reproduce it with my own script, instead.

Yes, but the Justfiles are all open-source and verifiable themselves, they just greatly simplify things and remove the need to make changes to the WalletScrutiny script if the build environment or steps change. The use of Rust in particular poses unique challenges to reproducibility, as even doing the rust setup commands in a slightly different order will change the output binaries and thus their hashes.

Understand wanting to be able to reproduce from scratch, though! Is there a reason you aren't directly copying the Dockerfile and the `docker run` command and using them directly to build the image and then build the firmware? You would also need to replicate the build steps *exactly* from the relevant Justfile.

Doing that would ensure that you're using the exact same environment. If you don't want to copy the files themselves, I would use them as a direct reference, as if there is even the smallest difference in the image you build under podman you can expect the hashes to not match.

I do understand that Leo wants to reproduce / verify your script first.. Wink That's basically what I have been trying, too, with his podman setup. Maybe you can send him a link to my script and he can start off of that.

Will pass it on once we get things worked out for your manual script to reproduce properly Smiley
hero member
Activity: 882
Merit: 5834
not your keys, not your coins!
June 15, 2023, 03:16:53 PM
As for your specific issue, I would imagine it's that you're using a different base image (22.04 vs our 20.04), which will almost always lead to different build hashes as underlying libraries etc. will be different between versions.
Good catch, I just re-ran it with 20.04 and this is the result:

Code:
./passport2.sh 2.1.2 08959d69338eb33ab008ae6e74e111838cc60f39ef17befe401e77d1cc274520
[...]
8eb8247dd3a23d06ff30722525ecdb77453fd1af313ac8a24c3cf1a227bf7c92  firmware-passport-v2.1.2.bin
08959d69338eb33ab008ae6e74e111838cc60f39ef17befe401e77d1cc274520

Using the 'dev' flag parameters (-DDEV_BUILD, FROZEN_MANIFEST=boards/Passport/manifest_dev.py), it looks as such:
Code:
./passport2.sh 2.1.2 08959d69338eb33ab008ae6e74e111838cc60f39ef17befe401e77d1cc274520
[...]
ded27522297fefc5b1cb43bacd56dadf516f2c35bda12719909512f58ff28e57  firmware-passport-v2.1.2.bin
08959d69338eb33ab008ae6e74e111838cc60f39ef17befe401e77d1cc274520

Could you try the latest version of the WIP script update and verify that it gives you the correct hashes? You can find it directly in the MR here:

https://gitlab.com/sethforprivacy/walletScrutinyCom/-/blob/master/scripts/test/hardware/passport.sh
This script is cheating, though! Grin Compared to the old WalletScrutiny script, it doesn't contain the actual build commands itself, but just downloads your Justfile script and runs that instead. I'd really like to be able to reproduce it with my own script, instead.

I do understand that Leo wants to reproduce / verify your script first.. Wink That's basically what I have been trying, too, with his podman setup. Maybe you can send him a link to my script and he can start off of that.
copper member
Activity: 96
Merit: 253
June 15, 2023, 08:34:21 AM
Since the WalletScrutiny review for Passport FE is outdated and the Passport Batch 2 build wasn't verified yet, I decided to quickly try it myself and write instructions for everyone to replicate it.

FE: https://walletscrutiny.com/hardware/passport/ "Review might be outdated"
Batch 2: https://walletscrutiny.com/hardware/foundation.passport2/ "Review is Work in Progress"

...snip...

For the passport2 firmware, I could not yet reproduce the builds. Since I wanted to contribute to WalletScrutiny's project, I did not follow Foundation Devices' instructions, but adapted the old WalletScrutiny script to work with passport2 and may have done something wrong in the process.

The firmware compiles fine, but checksum doesn't match. I'm not entirely sure whether we are meant to select development flags or not, but the hashes did not match with either option.

Maybe someone from Foundation can give me a hint where my issue is... Wink I compared your build scripts (Justfile) and mine and they should be equivalent now.

Thanks for looking into that, awesome to see others wanting to help out and verify reproducibility themselves! We actually have a WIP MR for updating Wallet Scrutiny scripts to support both FE and B2, along with updated pages for both devices as there was a lot out of date there:

https://gitlab.com/walletscrutiny/walletScrutinyCom/-/merge_requests/454

Once that is merged the verification should be all set. Note that those use Just and Docker to ensure that they are always reproducible and have been verified by multiple team members as giving reproducible results.

As for your specific issue, I would imagine it's that you're using a different base image (22.04 vs our 20.04), which will almost always lead to different build hashes as underlying libraries etc. will be different between versions.

Could you try the latest version of the WIP script update and verify that it gives you the correct hashes? You can find it directly in the MR here:

https://gitlab.com/sethforprivacy/walletScrutinyCom/-/blob/master/scripts/test/hardware/passport.sh

Note that this new version of the script needs different arguments passed, for example you would run the following for v2.1.2:

Code:
./passport.sh 2.1.2 color 08959d69338eb33ab008ae6e74e111838cc60f39ef17befe401e77d1cc274520 9de833a38931b7e4660e8d0e3ea4a2bfe74924caa1328834e9be9c3d1750cd7e
hero member
Activity: 714
Merit: 1298
June 15, 2023, 02:28:00 AM

While I can't say too much about the new device, it will be in a bit of a different vein than the current one.

I guess it will be BIP85 complient, correct?

Of course, Bitcoin will still be at the core of it including all of the functionality we've built out in Passport Smiley



Well, thanks, in my view your response will help @Lucius on choosing the right decision when pondering about  new model -  "is it worth waiting for it to become available or buying the current version?"

Child seeds available with implementation of BIP85 in new model  would be overkill feature for me but every person should make his own decision on this matter.
hero member
Activity: 882
Merit: 5834
not your keys, not your coins!
June 14, 2023, 03:00:28 PM
Since the WalletScrutiny review for Passport FE is outdated and the Passport Batch 2 build wasn't verified yet, I decided to quickly try it myself and write instructions for everyone to replicate it.

FE: https://walletscrutiny.com/hardware/passport/ "Review might be outdated"
Batch 2: https://walletscrutiny.com/hardware/foundation.passport2/ "Review is Work in Progress"



First of all, the script by WalletScrutiny does still work for the latest v1 firmware version v1.1.0 (Founders Edition). Since the latest verified version was v1.0.8, I thought it may be worth verifying it, even though it has now been superseded by v2.x.x.

v1.1.0 verified reproducible:
Code:
#install dependency
sudo apt install podman

#download the script
wget https://gitlab.com/walletscrutiny/walletScrutinyCom/-/raw/master/scripts/test/hardware/passport.sh?inline=false -O passport.sh

#make executable
chmod +x passport.sh

#execute the script
./passport.sh 1.1.0 e32dcb154e9be8156d3106443f23453691e22b1e575633cc44d10b83082c4f24
[...]
e32dcb154e9be8156d3106443f23453691e22b1e575633cc44d10b83082c4f24  build-Passport/firmware.bin
e32dcb154e9be8156d3106443f23453691e22b1e575633cc44d10b83082c4f24



For the passport2 firmware, I could not yet reproduce the builds. Since I wanted to contribute to WalletScrutiny's project, I did not follow Foundation Devices' instructions, but adapted the old WalletScrutiny script to work with passport2 and may have done something wrong in the process.

The firmware compiles fine, but checksum doesn't match. I'm not entirely sure whether we are meant to select development flags or not, but the hashes did not match with either option.

Maybe someone from Foundation can give me a hint where my issue is... Wink I compared your build scripts (Justfile) and mine and they should be equivalent now.

Code:
#!/bin/bash


### provide this script with the version without "v" and the published buildHash

version=$1
buildHash=$2

rm -rf /tmp/passport/
rm /tmp/passport-fw-${version}.bin

cd /tmp
wget https://github.com/Foundation-Devices/passport2/releases/download/v${version}/v${version}-passport.bin
sha256sum v${version}-passport.bin
mkdir passport
cd passport

podman run --rm -it --volume=$(pwd):/work/ ubuntu:22.04 bash -c "apt update; \
    apt install --yes git python3-pip gcc-arm-none-eabi autotools-dev automake libusb-1.0-0-dev libtool curl; \
    RUSTUP_HOME='/rustup'; CARGO_HOME='/cargo'; mkdir -p /rustup /cargo; \
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.67.1; \
    PATH='/cargo/bin:${PATH}'; source '$HOME/.cargo/env'; \
    rustup component add clippy rustfmt; \
    rustup target add aarch64-unknown-none thumbv7em-none-eabihf x86_64-unknown-none; \
    cargo install cbindgen@^0.24; \
    git clone https://github.com/Foundation-Devices/passport2.git; \
    cd passport2; \
    git checkout v${version}; \
    make -C mpy-cross; \
    cd ports/stm32/; \
    make -j $(nproc) \
        LV_CFLAGS='-DLV_COLOR_DEPTH=16 -DLV_COLOR_16_SWAP -DLV_TICK_CUSTOM=1 -DSCREEN_MODE_COLOR -DHAS_FUEL_GAUGE' SCREEN_MODE=COLOR \
        BOARD=Passport \
        FROZEN_MANIFEST='boards/Passport/manifest.py'; \
    sha256sum build-Passport/firmware-COLOR.bin; echo $buildHash; \
    mv build-Passport/firmware-COLOR.bin /work/firmware-passport-v${version}.bin; \
    bash;"

tail -c +2049 ../v${version}-passport.bin | sha256sum ; \
    sha256sum firmware-passport-v${version}.bin; \
    echo $buildHash

Running this script, I get the following build hash for v2.0.7:
Code:
./passport2.sh 2.0.7 2c59a27300a20eccb27dc387be782f68b13fdb30499ab58901b9cd80484869f4
[...]
8276e80a5446b0219b448676028d7e52604c8b5db1b92fd5033ab17cf2545a45  firmware-passport-v2.0.7.bin
2c59a27300a20eccb27dc387be782f68b13fdb30499ab58901b9cd80484869f4

And for v2.1.2:
Code:
./passport2.sh 2.1.2 08959d69338eb33ab008ae6e74e111838cc60f39ef17befe401e77d1cc274520
[...]
0c27c5e0767988aff1b32d72ad02f89baf3f6b047d37a68e604ac013fa2f851f  build-Passport/firmware-COLOR.bin
08959d69338eb33ab008ae6e74e111838cc60f39ef17befe401e77d1cc274520
copper member
Activity: 96
Merit: 253
June 13, 2023, 06:56:41 AM

While I can't say too much about the new device, it will be in a bit of a different vein than the current one.

I guess it will be BIP85 complient, correct?

Of course, Bitcoin will still be at the core of it including all of the functionality we've built out in Passport Smiley


and, conjointly,  the reminder of my previous request in the case you forgot about it


Could you show here the  p-values (relevant to Passport's TRNG) for each test from NIST suite?
Alternatively, refer me  to relevant Foundation's official  source if any.


I don't have an answer on the p-values yet, not sure if we saved the results from that test but will pass them on if I can dig them up! Of course all of the source code is open source, so you can view anything of interest in the firmware or hardware:

https://github.com/Foundation-Devices/passport2
https://github.com/Foundation-Devices/passport2-hardware
hero member
Activity: 714
Merit: 1298
June 13, 2023, 01:01:24 AM

While I can't say too much about the new device, it will be in a bit of a different vein than the current one.

I guess it will be BIP85 complient, correct?

and, conjointly,  the reminder of my previous request in the case you forgot about it


Could you show here the  p-values (relevant to Passport's TRNG) for each test from NIST suite?
Alternatively, refer me  to relevant Foundation's official  source if any.
copper member
Activity: 96
Merit: 253
June 08, 2023, 03:38:20 PM
Phew, sorry we fell behind in replies here! Love seeing you all jump in and help out while we were away from Bitcoin Talk  Grin

You should hurry up if your intention is serious as "Batch 2 is limited to 2400 units."

Just to clarify here, that was the original production run of Batch 2 but we have already sold all of those, a new production run of the same device (with minor improvements) is what we were already ramping up before the Ledger fiasco drove so many people to us to sell out the original 2400 run  Smiley

This coming run is much larger than the last, FWIW.

Is there a special reason why they decided to produce only 2400 units? This does not seem logical to me from a business perspective, especially if the demand is increased, as is the case now. Although it seems to me that I read that some new device is being prepared, so that might be the reason.

As mentioned by others, it was to start slow and scale up with Batch 2 as we were still a very small team when that device was launched. We've grown and seen great community and sales growth, so we've ramped up production significantly as mentioned above!

after the disaster of a very well known hardware wallet manufacturer i am now looking for a new hw-wallet...
play now with the idea to buy me the passport batch 2. but since the price is already in a very high category, i wanted to ask politely if there are perhaps also current vouchers that reduce the price a little - because the shipping to the eu is then certainly also in the double-digit dollar range

Hey cygan, glad you're looking into Passport! When we dropped the price to $199 moving forward, we did so by a combination of economies of scale and simply selling at the best price to all customers, so we don't do discounts anymore moving forward. Note that this price makes it very competitive in the space, and cheaper than Coldcard (when you purchase the necessary accessories) as we include everything you need for Passport in the box.

$199 gets you Passport, an 8GB industrial grade microSD card, 2 microSD phone adapters, replaceable batter, and a USB-C charging cable. Nothing else needed Smiley

However, as for the new device, it seems that it will be even better than the previous two, so the question arises, is it worth waiting for it to become available or buying the current version? Is there somewhere an official counter of how many units have been sold so far, or how many are still available in total?

While I can't say too much about the new device, it will be in a bit of a different vein than the current one. If you love the current approach of Passport, the current gen will be a good fit for a long time! Our plan is to sell them alongside each other most likely as they will serve different use-cases and compliment each other well.

Not a re-write, a completely new piece of software/firmware is necessary for the next device, will be very clear why when we announce it Smiley
Interesting news... when can we expect this new devices to come out in public?

Already well under way, target is well ahead of the halving  Wink This one won't be a pre-order at all, so it will be announced when it's live and ready to purchase this time!
legendary
Activity: 1148
Merit: 3117
June 06, 2023, 05:04:55 PM
However, as for the new device, it seems that it will be even better than the previous two, so the question arises, is it worth waiting for it to become available or buying the current version? Is there somewhere an official counter of how many units have been sold so far, or how many are still available in total?
If you start to think like that, regarding waiting for the better product to come out, you'll never buy anything. Take, for instance, the Iphone. Every year we get a new one and then we already know that in the following year a new one will be released with surely better specifications (camera, battery, SoC at least) and perhaps a better version will come out in the same year (Standard line vs. Pro line).
Technology is evolving in a rapid pace and users simply have to look into their needs and see if a certain product fulfills them and their current need for them. If they are OK with what the product offers + they need the product, why wait another year to purchase it? (This is my view on the subject of course, willing to discuss it further).
Pages:
Jump to: