raid – Determining a hard disks failure based on S.M.A.R.T when its assesment shows as passed

I’ve been taking a look at some failed hard drives and confused over SMART and how it concludes its assessments as ‘PASSED’ for drives which get identified as failed by datacenter technicians.

I’ve left an example SMART report for a failed drive which was replaced below.

My questions are:

  1. Why is the drive showing as passed with so many ATA errors
  2. The number of Offline Uncorrectables was very high
  3. Reallocated Sectors and current pending sectors had gone up

Seeing the report below, how would 1 accurately conclude a drives faulty state, was my initial assumption to check Offline Uncorrectables and reallocated sectors a sure-fire way of determining that this drive is faulty, or are their ways to fix this software wise without replacing a whole HDD?

Was there tips and tricks technicians have for scenarios to make it easier for anyone to understand a report such as this?

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x82) Offline data collection activity
                                        was completed without error.
                                        Auto Offline Data Collection: Enabled.
Self-test execution status:      (   0) The previous self-test routine completed
                                        without error or no self-test has ever
                                        been run.
Total time to complete Offline
data collection:                (  113) seconds.
Offline data collection
capabilities:                    (0x5b) SMART execute Offline immediate.
                                        Auto Offline data collection on/off support.
                                        Suspend Offline collection upon new
                                        command.
                                        Offline surface scan supported.
                                        Self-test supported.
                                        No Conveyance Self-test supported.
                                        Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                                        power-saving mode.
                                        Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                                        General Purpose Logging supported.
Short self-test routine
recommended polling time:        (   2) minutes.
Extended self-test routine
recommended polling time:        ( 288) minutes.
SCT capabilities:              (0x003d) SCT Status supported.
                                        SCT Error Recovery Control supported.
                                        SCT Feature Control supported.
                                        SCT Data Table supported.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   100   100   016    Pre-fail  Always       -       0
  2 Throughput_Performance  0x0005   137   137   054    Pre-fail  Offline      -       104
  3 Spin_Up_Time            0x0007   144   144   024    Pre-fail  Always       -       207 (Average 206)
  4 Start_Stop_Count        0x0012   100   100   000    Old_age   Always       -       40
  5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       2
  7 Seek_Error_Rate         0x000b   100   100   067    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0005   128   128   020    Pre-fail  Offline      -       18
  9 Power_On_Hours          0x0012   097   097   000    Old_age   Always       -       22634
 10 Spin_Retry_Count        0x0013   100   100   060    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       40
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       936
193 Load_Cycle_Count        0x0012   100   100   000    Old_age   Always       -       936
194 Temperature_Celsius     0x0002   187   187   000    Old_age   Always       -       32 (Min/Max 17/53)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       2
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       1
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       134
199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       0

SMART Error Log Version: 1
ATA Error Count: 17 (device log contains only the most recent five errors)
        CR = Command Register (HEX)
        FR = Features Register (HEX)
        SC = Sector Count Register (HEX)
        SN = Sector Number Register (HEX)
        CL = Cylinder Low Register (HEX)
        CH = Cylinder High Register (HEX)
        DH = Device/Head Register (HEX)
        DC = Device Command Register (HEX)
        ER = Error register (HEX)
        ST = Status register (HEX)
Powered_Up_Time is measured from power on, and printed as
DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes,
SS=sec, and sss=millisec. It "wraps" after 49.710 days.

Error 17 occurred at disk power-on lifetime: 21280 hours (886 days + 16 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 41 00 00 00 00 00  Error: UNC at LBA = 0x00000000 = 0

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  60 00 18 00 83 ec 40 08   9d+19:20:00.448  READ FPDMA QUEUED
  60 00 10 00 82 ec 40 08   9d+19:19:57.618  READ FPDMA QUEUED
  60 00 08 00 81 ec 40 08   9d+19:19:57.617  READ FPDMA QUEUED
  60 00 00 00 80 ec 40 08   9d+19:19:57.617  READ FPDMA QUEUED
  60 00 f0 00 7f ec 40 08   9d+19:19:57.616  READ FPDMA QUEUED

Error 16 occurred at disk power-on lifetime: 18424 hours (767 days + 16 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 43 00 00 00 00 00  Error: UNC at LBA = 0x00000000 = 0

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  60 00 38 00 f0 ed 40 08  16d+00:38:38.932  READ FPDMA QUEUED
  60 00 30 00 ef ed 40 08  16d+00:38:36.185  READ FPDMA QUEUED
  60 00 28 00 ee ed 40 08  16d+00:38:36.184  READ FPDMA QUEUED
  60 00 20 00 ed ed 40 08  16d+00:38:36.184  READ FPDMA QUEUED
  60 00 18 00 ec ed 40 08  16d+00:38:36.183  READ FPDMA QUEUED

Error 15 occurred at disk power-on lifetime: 18424 hours (767 days + 16 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 43 00 00 00 00 00  Error: UNC at LBA = 0x00000000 = 0

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  60 00 98 00 70 ed 40 08  16d+00:38:35.858  READ FPDMA QUEUED
  60 00 90 00 6f ed 40 08  16d+00:38:33.101  READ FPDMA QUEUED
  60 00 88 00 6e ed 40 08  16d+00:38:33.101  READ FPDMA QUEUED
  60 00 80 00 6d ed 40 08  16d+00:38:33.100  READ FPDMA QUEUED
  60 00 78 00 6c ed 40 08  16d+00:38:33.100  READ FPDMA QUEUED

Error 14 occurred at disk power-on lifetime: 18424 hours (767 days + 16 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 43 00 00 00 00 00  Error: UNC at LBA = 0x00000000 = 0

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  60 00 20 00 63 ed 40 08  16d+00:38:31.149  READ FPDMA QUEUED
  60 00 18 00 62 ed 40 08  16d+00:38:28.310  READ FPDMA QUEUED
  60 00 10 00 61 ed 40 08  16d+00:38:28.309  READ FPDMA QUEUED
  60 00 08 00 60 ed 40 08  16d+00:38:28.308  READ FPDMA QUEUED
  60 00 00 00 5f ed 40 08  16d+00:38:28.308  READ FPDMA QUEUED

Error 13 occurred at disk power-on lifetime: 18258 hours (760 days + 18 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 43 00 00 00 00 00  Error: UNC at LBA = 0x00000000 = 0

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  60 08 18 90 82 ed 40 08   9d+02:34:40.061  READ FPDMA QUEUED
  60 08 10 88 82 ed 40 08   9d+02:34:37.305  READ FPDMA QUEUED
  61 08 08 88 82 ed 40 08   9d+02:34:37.305  WRITE FPDMA QUEUED
  ef 10 02 00 00 00 a0 08   9d+02:34:37.296  SET FEATURES (Enable SATA feature)
  27 00 00 00 00 00 e0 08   9d+02:34:37.295  READ NATIVE MAX ADDRESS EXT (OBS-ACS-3)

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%     22610         -
# 2  Short offline       Completed without error       00%     16798         -
# 3  Short offline       Completed without error       00%     16791         -
# 4  Short offline       Completed without error       00%     16790         -
# 5  Short offline       Completed without error       00%     16790         -
# 6  Short offline       Completed without error       00%     16783         -
# 7  Short offline       Completed without error       00%     16782         -
# 8  Short offline       Completed without error       00%     16737         -
# 9  Short offline       Completed without error       00%     16662         -
#10  Short offline       Completed without error       00%     16642         -
#11  Short offline       Completed without error       00%     16635         -
#12  Short offline       Completed without error       00%       241         -
#13  Short offline       Completed without error       00%       239         -
#14  Short offline       Completed without error       00%       239         -
#15  Short offline       Completed without error       00%         2         -
#16  Short offline       Completed without error       00%         1         -

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

plugin development – Callback is not called in add_settings_field() when passed as part of an array, but recognises that it’s there. It’s passed Class to Class using OOP

I am building a plugin, I created a new admin page and subpage, and inside that subpage, I want to add some Settings. That’s why I’m building them using the Settings API.
I am using Composer and Object-Oriented Programming. I have a folder called SettingsAPI, with the following namespace namespace BlocksPagesSettingsAPI;
Inside that folder, I have three files: AddSettings.php, Settings.php and SettingsLayout.php. All three of them are correctly connected. The files have the case sensitive names of the Classes. Settings.php has a Class named Settings, and so on.

SettingsAPI Folder Structure

Inside Settings.php I have a function that holds a variety of arrays, inside of those arrays are the values I want to use for the Settings API. This means I have arrays that are used for register_setting(), add_settings_section() and add_settings_field().
Inside AddSettings.php I have the three functions just mentioned. Both register_settings() and add_settings_field() work great. I have problems with add_settings_field().
Inside SettingsLayout.php I have a very simple layout for where the form should be printed, which is also shown on the Subpage. Just the inputs are missing.

Inside AddSettings.php I used a foreach() to loop over the array, if I need to. Which is used for both register_setting() and add_settings_field(), that’s because both of those arrays have arrays inside of them. I’ll show some code used for register_setting() and the foreach().

Settings.php

$configs = (
      ( // Icon
        "option_group"    =>    "iw_" . $n,
        "option_name"     =>    "iw_icon_" . $n,
        "args"            =>    $iconConfigs
      ),
      ( // Titel
        "option_group"    =>    "iw_" . $n,
        "option_name"     =>    "iw_title_" . $n,
        "args"            =>    $titleConfigs
      ),
      ( // Beschreibung
        "option_group"    =>    "iw_" . $n,
        "option_name"     =>    "iw_description_" . $n,
        "args"            =>    $descriptionConfigs
      ),
      ( // Farbauswahl
        "option_group"    =>    "iw_" . $n,
        "option_name"     =>    "iw_colour_" . $n,
        "args"            =>    $colourConfigs
      )
    );

The array above is being passed, alongside the other arrays, to the AddSettings Class and the next function that will process them.

$this->add_settings->setForm( $configs, $segments, $inputs )->register();

setForm() does the following with the arguments.

AddSettings.php

public  function  setForm(  array  $configs,  array  $segments,  array  $inputs )  {
    $this->settings =  $configs;
    $this->sections =  $segments;
    $this->fields =  $inputs;
    return  $this;
}

The variables $settings, $sections and $fields have been created at the beginning of the class as public and empty arrays.

public $settings = array();
public $sections = array();
public $fields = array();

Which then gets registered with the following function:

public  function  functionToAdd()  {
return  $this->registerForm(  $this->settings,  $this->sections,  $this->fields );
}

registerForm() hold all the Settings API functions from WP, here is register_setting().

foreach( $this->settings as $setting ) {
      register_setting( $setting("option_group"), $setting("option_name"), isset( $setting("args") ) ? $setting("args") : "" );
    }

This part works great. It also works with add_settings_section(). What doesn’t work, are the inputs. Which I will present now as well:

Settings.php

Inside this Class is the function/method setForm( $n = NULL ), that’s where all the arrays are, like the one I showed above. Right now $n has no meaning, but it’s going to be a number, so I can loop all over those arrays and settings to create more forms. Whether I keep it at NULL or I change it to 1, does not affect the result, same thing.
Here is the array for the fields.

$inputs =  (
    (
        "id"  =>  "iw_icon_"  .  $n,
        "title"  =>  "Icon Auswahl",
        "callback"  =>  function()  use($n)  {  return  $this->iconInput(  $n );  },
        "page"  =>  "info_kreis_bearbeiten",
        "section"  =>  "iw_item_"  .  $n,
        "args"  =>  (  "label_for"  =>  "iw_icon_"  .  $n )
    ),
    (
        "id"  =>  "iw_title_"  .  $n,
        "title"  =>  "Titel",
        "callback"  =>  function()  use($n)  {  return  $this->titleInput(  $n );  },
        "page"  =>  "info_kreis_bearbeiten",
        "section"  =>  "iw_item_"  .  $n,
        "args"  =>  (  "label_for"  =>  "iw_title_"  .  $n )
    ),
    (
        "id"  =>  "iw_description_"  .  $n,
        "title"  =>  "Kurz Beschreibung",
        "callback"  =>  function()  use($n)  {  return  $this->descriptionInput(  $n );  },
        "page"  =>  "info_kreis_bearbeiten",
        "section"  =>  "iw_item_"  .  $n,
        "args"  =>  (  "label_for"  =>  "iw_description_"  .  $n
    ),
    (
        "id"  =>  "iw_colour_"  .  $n,
        "title"  =>  "Farbe auswählen",
        "callback"  =>  function()  use($n)  {  return  $this->colourInput(  $n );  },
        "page"  =>  "info_kreis_bearbeiten",
        "section"  =>  "iw_item_"  .  $n,
        "args"  =>  ( "label_for"  =>  "iw_colour_"  .  $n )
    )
);

So this is an array with three arrays inside of it. This array has callbacks, and it’s the callbacks that do not work at all. No matter where I put them or how I write them, they are not being echoed. At the bottom, I will list all of the things I have tried.
Like with the settings arrays, they are allso processed like this:

$this->add_settings->setForm( $configs, $segments, $inputs )->register();

AddSettings.php

And then

public  function  setForm(  array  $configs,  array  $segments,  array  $inputs )  {
    $this->settings =  $configs;
    $this->sections =  $segments;
    $this->fields =  $inputs;
    return  $this;
}

and

public  function  functionToAdd()  {
return  $this->registerForm(  $this->settings,  $this->sections,  $this->fields );
}

Which then gets passed to registerForm() with the following function:

foreach(  $this->fields as  $field)  {
    add_settings_field( $field("id"), $field("title"), isset( $field("callback") ) ? $field("callback") : "", $field("page"), $field("section") = 'default', $field("args") = array() );
}

And then nothing. No inputs on my Subpage. Everything but the fields are being echoed.
Form on Subpage
As you can see, the callback used by the section works and shows me the title and description. But the inputs are missing. To show some context on how I called the callback for the sections, here is the one line with the callback from the section array, inside Settings.php:

"callback"  =>  function()  use($n)  {  echo  "<p>Bearbeite hier die Info Nummer "  .  $n .  "</p>";  }

And the function add_settings_section() inside AddSettings.php, no foreach() was used for this one:

add_settings_section(  $sections("id"),  $sections("title"), isset(  $sections("callback")  )  ?  $sections("callback")  :  "",  $sections("page")  );

It’s being called the same way as the fields. But the fields still do not echo anything. And before anyone says I am echoing inside the anonymous callback function instead of returning another function:

I have tried a few things. One of the first things I tried was to edit the way the callback is written. So instead of a function that returns another function, I wrote something simple.

"callback"  =>  function()  {  echo "Echo this please."; },

Didn’t work.

"callback"  =>  array( $this, "iconInput" ),

Also not working
I also tried

"callback"  =>  $this->iconInput( $n ),

Which then called the function and echoed the inputs, but not in the right position. They were at the very top of the page. And if I loop everything, all inputs will be at the top, with the sections below in the right print order. So that’s not the solution either.
What I also tried was to move the callback to AddSettings.php and call it like that.

add_settings_field(  $field("id"),  $field("title"),  function()  { return $this->iconInput();  },  $field("page"),  $field("section")  =  'default',  $field("args")  = array()  );

Didn’t work either.
When I tried to just directly write the function in there, like so

add_settings_field(  $field("id"),  $field("title"),  function()  { echo "Please echo this";  },  $field("page"),  $field("section")  =  'default',  $field("args")  = array()  );

Didn’t work either. I also always put die; at the end, just to see if it’s being called at all, and it has not been. It’s like the function doesn’t exist.
I have also tried to immediately run the function by adding () to it:

add_settings_field( $field("id"), $field("title"), isset( $field("callback") ) ? $field("callback")() : "", $field("page"), $field("section") = 'default', $field("args") = array() );

The same result as earlier. It echoed the inputs, but not in the right position.

I tried looking for an answer, but couldn’t really find one that was similar to mine. I found these questions and solution, tried them, and that also didn’t work:
How to pass arguments from add_settings_field() to the callback function?
and
Add_settings_field() parameterizing callback?

And for clarification, my SettingsLayout.php is build like this:

<form  method="post"  action="options.php"  id="iw_form_<?php  echo  $i?>">
    <?php
        settings_fields(  "iw_"  .  $i  );
        do_settings_sections(  "info_kreis_bearbeiten"  );
        submit_button(  $text  =  NULL,  $type  =  "primary",  $name  =  "submit_"  .  $i  );
    ?>
</form>

$i is the same as $n.

I have run out of options to try. At least of options, I know of. If anyone has any kind of solution, I would be HAPPY to hear them. I also explained myself as best as I could.

And because that’s a lot of code, pasted the relevant code into the online editor for you to look at even better: https://repl.it/@Braweria/Callback-Problems

Edit

Which I forgot to mention, inside my foreach() I also echoed field("id") to see if that works, and it does echo the right ID.

❕NEWS – Several major crypto sites in Russia get blocked after the crypto legislation passed | Proxies123.com

Since the crypto law that legalized cryptocurrencies in the Russia has passed, several major crypto-related sites have been blocked in the country. This in accordance to the law that forbids the citizens of Russia to use crypto as means of payment. BestChange.ru, an aggregator site that lists about 400 local crypto exchanges in Russia is one of the victims. Roskomnadzor, the Russian telecommunication regulator has also blocked other sites such as cryptowikipedia.ru and coinpost.ru. As reported by Cointelegraph, these websites were blocked because they were “offering to buy electronic currency Bitcoin and certain products using this currency.”

google sheets – Formula to output the date for next Friday once it has passed 20:00 on Friday

Alsors, try this:

=ArrayFormula(IF((WEEKDAY(TODAY())=6)*(NOW()-TODAY()>=TIMEVALUE("8:00 PM")),TODAY()+7,FILTER(SEQUENCE(7,1,TODAY()),WEEKDAY(SEQUENCE(7,1,TODAY()))=6)))

HOW IT WORKS

The formula assumes Sunday is counted as weekday 1 and, therefore, that Friday is counted as 6.

The first part of the IF checks to see if two conditions are true: That today is Friday and that the current time is greater than or equal to 8:00 PM. If those are both TRUE, then the date is set to seven days in the future (i.e., next Friday).

If this small window of time is not the case, then the second half of the IF statement takes effect. A SEQUENCE is formed of seven dates starting with today’s date. FILTER filters in only those days whose weekday is 6 (i.e., Friday). And since there will only be one Friday within any seven-day SEQUENCE of dates, it will pull whatever the “next Friday” is.

(Note: If today is Friday before 8:00 PM, then the “next Friday” in the SEQUENCE is today, so it stays showing today’s date until after 8:00 PM.)

magento 2 Uncaught TypeError: Argument 2 passed to MagentoCatalogBlockProductImageFactory::getLabel()

After adding view.xml but not getting proper list page in custome theme so any on enow how to fix it..
enter image description here

Interesting query string – referrer (google.com) being passed in query string

I have recently started seeing a query string in Google Analytics that I’m trying to figure out why it’s showing up. It looks like:

https://example.com/my_uri/?back=https://www.google.com/search?client=safari&as_qdr=all&as_occt=any&safe=active&as_q=the+users+search+query&channel=aplab&source=a-app1&hl=en

The web clients are always Safari, and the back parameter is always google.com.

It’s only showed up in the last couple of months. I’m guessing that it’s some kind of web application, but curious as to what it really is from.

What does the option passed at the end of the Systemd command mean?

I have this command:

systemctl restart rh-php71-php-fpm -l

I would like to know what the -l which is passed at the end of the command corresponds to?

error – Opening Sharepoint PDF files from Explorer – data area passed to a system call is too small

Recently set up a PC for a customer using O365 sharepoint, and she is getting errors upon trying to open or copy pdf files out of a mapped sharepoint drive in Windows Explorer. While opening the PDF she will get one of 2 messages, “access denied” or “data area passed to a system call is too small”. While trying to copy the file out from explorer to the desktop she will get one of 2 messages, “file does not exist” or “data area passed to a system call is too small”. Only certain files are affected, she is able to open other pdf files in the same folder perfectly fine. Problems occur while trying to open with both Acrobat Reader and Acrobat DC.

The file works perfectly fine when she accesses the file directly from the sharepoint website, or when she downloads the file from the sharepoint website to her desktop. She is also able to access those same files from explorer on her old PC.

One thing of note is that those files have both English and Japanese characters. We tried creating 3 duplicates of the problem file, one with no japanese characters (I’ll call it E1 for this post) and two with 2 separate parts of the japanese filename (J1 and J2), and uploading all 3 together with the original to another folder in Sharepoint. Trying to open all 4 gets the following results’

E1: opens and copies from explorer fine.

J1: opens and copies from explorer fine.

J2: opens fine but copying gets an error message

Original: fails to open or copy.

Tried to install the Japanese language pack and changing the non-unicode program region to Japan, but still fails to open.

Anyone can advise any solution? All other solutions are either not unanswered or does not involve sharepoint access, so I’m unable to find a solution online. User is running Windows 10 updated to Fall Creator’s Update. All feedback is welcome

ANNOUNCEMENT – Thank You BMFers! We PASSED 100,000 MEMBERS! | Proxies123.com

Dear BMFers, Thank you so much for all the support we just passed 100.000 registered members, thank you for joining previous contests, first $1225 contest, 2nd $1500 contest, prizes sent on Livestream, no b/s, video call via skype for full transparency. Proofs of payments from each forum…


www.beermoneyforum.com